:root{--bg-primary: #1A1A28;--bg-secondary: #22222E;--surface: #2A2A38;--text: #E0E0E0;--text-muted: #BBBBC8;--accent: #1A73E8;--accent-hover: #1565C0;--border: #444459;--error: #EA4335;--success: #34A853;--radius: 8px;--hover: rgba(255,255,255,.06);--canvas-bg: #111118;--ruler-bg: #1a1a28;--ruler-tick: #555;--ruler-text: #888;--grid-line: rgba(255,255,255,.04);--thumb-item-bg: rgba(26, 115, 232, .25);--thumb-item-border: rgba(26, 115, 232, .4)}[data-theme=light]{--bg-primary: #F5F5F8;--bg-secondary: #FFFFFF;--surface: #EAEAF0;--text: #1A1A2E;--text-muted: #6B6B80;--accent: #1A73E8;--accent-hover: #1565C0;--border: #D0D0DC;--error: #D93025;--success: #1E8E3E;--hover: rgba(0,0,0,.04);--canvas-bg: #E0E0E6;--ruler-bg: #EAEAF0;--ruler-tick: #999;--ruler-text: #555;--grid-line: rgba(0,0,0,.06);--thumb-item-bg: rgba(26, 115, 232, .15);--thumb-item-border: rgba(26, 115, 232, .35)}[data-theme=light] .rd-context-menu{box-shadow:0 4px 16px #0000001f}[data-theme=light] .ri-table th{background:#0000000a}[data-theme=light] .ri-table td{border-bottom-color:#0000000f}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;font-family:Segoe UI,system-ui,sans-serif;font-size:14px;color:var(--text);background:var(--bg-primary)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.app-layout{display:flex;height:100vh}.sidebar{width:220px;background:var(--bg-secondary);display:flex;flex-direction:column;border-right:1px solid var(--border);flex-shrink:0;transition:width .2s ease}.sidebar-collapsed{width:52px}.sidebar-brand{display:flex;align-items:center;gap:8px;padding:16px;font-size:18px;font-weight:700;border-bottom:1px solid var(--border);overflow:hidden;white-space:nowrap}.sidebar-collapsed .sidebar-brand{justify-content:center;padding:16px 8px}.brand-logo{width:28px;height:28px;flex-shrink:0;border-radius:6px}.brand-icon{font-size:24px}.sidebar-toggle{background:none;border:none;border-bottom:1px solid var(--border);color:var(--text-muted);cursor:pointer;padding:6px;font-size:10px;transition:color .15s}.sidebar-toggle:hover{color:var(--accent)}.sidebar-nav{flex:1;display:flex;flex-direction:column;padding:8px 0;overflow-y:auto}.sidebar-nav a{display:flex;align-items:center;padding:10px 20px;color:var(--text-muted);font-size:13px;border-left:3px solid transparent;transition:all .15s;white-space:nowrap}.sidebar-collapsed .sidebar-nav a{padding:10px 0;justify-content:center;border-left:none}.sidebar-nav a:hover{color:var(--text);background:#ffffff0a;text-decoration:none}.sidebar-nav a.active{color:var(--accent);border-left-color:var(--accent);background:#1a73e814}.sidebar-collapsed .sidebar-nav a.active{border-left-color:transparent}.nav-icon{flex-shrink:0}.sidebar-footer{padding:12px 16px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:6px;flex-shrink:0;overflow:visible}.sidebar-collapsed .sidebar-footer{padding:8px 4px;align-items:center}.btn-theme-toggle{display:flex;align-items:center;gap:6px;background:none;border:1px solid var(--border);color:var(--text);cursor:pointer;font-size:13px;padding:6px 10px;border-radius:6px;transition:background .15s,border-color .15s}.btn-theme-toggle:hover{background:var(--hover);border-color:var(--accent)}.sidebar-collapsed .btn-theme-toggle{padding:6px;justify-content:center}.user-badge{background:none;border:none;color:var(--text);cursor:pointer;font-size:13px;padding:4px 8px;border-radius:6px;text-align:left;transition:background .15s}.user-badge:hover{background:var(--hover)}.role-chip{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;font-size:10px;font-weight:600;text-transform:uppercase;background:#1a73e81f;color:var(--accent)}.main-content{flex:1;overflow:auto}.page{padding:24px 32px}.page-header{display:flex;align-items:center;gap:16px;margin-bottom:24px}.page-header h1{font-size:22px;font-weight:600}.loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted)}.empty{color:var(--text-muted);font-style:italic}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.card{display:block;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;transition:border-color .15s}.card:hover{border-color:var(--accent);text-decoration:none}.card h3{font-size:15px;margin-bottom:6px}.card p{font-size:12px;color:var(--text-muted);margin-bottom:4px}.card time{font-size:11px;color:var(--text-muted)}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:var(--radius);padding:8px 18px;font-size:13px;cursor:pointer;transition:background .15s}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-link{background:none;border:none;color:var(--accent);cursor:pointer;font-size:13px}.btn-link:hover{text-decoration:underline}.btn-logout{background:none;border:1px solid var(--border);color:var(--text-muted);border-radius:4px;padding:4px 10px;font-size:11px;cursor:pointer}.btn-logout:hover{border-color:var(--error);color:var(--error)}.login-page{display:flex;align-items:center;justify-content:center;height:100vh;background:var(--bg-primary)}.login-form{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:40px 36px;width:380px;display:flex;flex-direction:column;gap:16px}.login-title{text-align:center;font-size:28px;display:flex;align-items:center;justify-content:center;gap:10px}.login-logo{width:36px;height:36px;border-radius:8px}.login-subtitle{text-align:center;color:var(--text-muted);font-size:14px}.login-error{background:#ea43351f;border:1px solid var(--error);border-radius:4px;padding:8px 12px;color:var(--error);font-size:12px}.login-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-muted)}.login-form input{background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;padding:10px 12px;color:var(--text);font-size:14px;outline:none}.login-form input:focus{border-color:var(--accent)}.pipeline-editor{display:flex;padding:0;height:100%;position:relative}.palette{width:200px;background:var(--bg-secondary);border-right:1px solid var(--border);padding:12px;overflow-y:auto;flex-shrink:0;transition:width .2s ease;position:relative}.palette-collapsed{width:40px;padding:12px 4px;overflow:hidden}.palette h3{font-size:12px;text-transform:uppercase;color:var(--text-muted);margin-bottom:8px;letter-spacing:.5px}.palette hr{border:none;border-top:1px solid var(--border);margin:12px 0}.palette-item{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 10px;color:var(--text);font-size:12px;cursor:pointer;margin-bottom:4px;transition:border-color .15s}.palette-item:hover{border-color:var(--accent)}.palette-item.active{border-color:var(--accent);background:#1a73e81f}.palette-item span{margin-right:6px}.palette-group{position:relative}.palette-chevron{margin-left:auto;font-size:10px;opacity:.6}.palette-children{padding-left:8px}.palette-child{font-size:11px;padding:5px 8px;border-left:2px solid var(--accent);border-radius:0 6px 6px 0}.flow-canvas{flex:1;display:flex;flex-direction:column;background:var(--bg-primary)}.flow-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.flow-title{font-size:14px;font-weight:600}.react-flow__background{background:var(--bg-primary)!important}.react-flow__minimap{background:var(--bg-secondary)!important;border-radius:6px}.react-flow__controls{border-radius:6px}.react-flow__controls button{background:var(--surface)!important;border-color:var(--border)!important;color:var(--text)!important}.pipeline-preview-panel{position:absolute;bottom:0;left:200px;right:0;height:300px;background:var(--bg-secondary);border-top:2px solid var(--accent);display:flex;flex-direction:column;z-index:20}.preview-collapsed{height:auto!important}.preview-collapsed .preview-body{display:none}.preview-resize-handle{position:absolute;top:-4px;left:0;right:0;height:8px;cursor:ns-resize;z-index:21}.preview-resize-handle:hover,.preview-resize-handle:active{background:var(--accent);opacity:.4}.panel-toggle{background:var(--surface);border:1px solid var(--border);color:var(--text-muted);width:24px;height:24px;border-radius:4px;cursor:pointer;font-size:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,color .15s}.panel-toggle:hover{background:var(--accent);color:#fff}.panel-toggle-palette{margin-bottom:8px}.preview-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.preview-title{font-size:13px;font-weight:600}.preview-body{flex:1;overflow:auto;padding:0}.preview-meta{padding:8px 16px;font-size:11px;color:var(--text-muted)}.preview-loading,.preview-empty{padding:24px 16px;text-align:center;color:var(--text-muted);font-size:13px}.preview-table-wrapper{overflow:auto;max-height:100%}.preview-table{width:100%;border-collapse:collapse;font-size:12px}.preview-table th{position:sticky;top:0;background:var(--surface);text-align:left;padding:6px 12px;border-bottom:1px solid var(--border);white-space:nowrap;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.preview-table th:hover{background:#1a73e81a}.preview-table th .preview-sort-arrows{margin-left:2px}.preview-table th .preview-dtype{display:block;font-size:10px;font-weight:400;color:var(--text-muted)}.preview-table td{padding:4px 12px;border-bottom:1px solid var(--border);white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis}.preview-table tbody tr:hover{background:#1a73e80f}.report-viewer{padding:16px}.page-tabs{display:flex;gap:4px;margin-bottom:16px}.tab{padding:6px 14px;background:var(--surface);border:1px solid var(--border);border-radius:6px 6px 0 0;color:var(--text-muted);font-size:12px;cursor:pointer}.tab.active{background:var(--bg-secondary);color:var(--accent);border-bottom-color:transparent}.report-canvas{position:relative;min-height:600px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.report-item-card{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px;overflow:hidden}.report-item-type{font-size:10px;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px}.report-item-text{font-size:12px;color:var(--text)}.report-item-chart-placeholder{display:flex;align-items:center;justify-content:center;height:100%;font-size:13px;color:var(--text-muted)}.report-editor-page{display:flex;flex-direction:column;height:100%;padding:0!important}.report-editor-topbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--bg-secondary);border-bottom:1px solid var(--border)}.report-editor-name{font-weight:600}.report-designer-layout{display:flex;flex:1;overflow:hidden}.rd-center{flex:1;display:flex;flex-direction:column;overflow:hidden}.rd-toolbar{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--bg-secondary);border-bottom:1px solid var(--border);flex-wrap:nowrap;overflow-x:auto;min-height:40px}.rd-toolbar-group{display:flex;align-items:center;gap:2px;flex-shrink:0}.rd-toolbar-group button{background:var(--surface);border:1px solid var(--border);color:var(--text);padding:4px 8px;border-radius:4px;cursor:pointer;font-size:14px;line-height:1;transition:border-color .15s}.rd-toolbar-group button:hover:not(:disabled){border-color:var(--accent)}.rd-toolbar-group button:disabled{opacity:.4;cursor:not-allowed}.rd-toolbar-label{font-size:11px;color:var(--text-muted);margin-right:4px}.rd-toolbar-sep{width:1px;height:20px;background:var(--border);margin:0 4px}.rd-zoom-label{font-size:11px;color:var(--text-muted);margin-left:4px;min-width:40px}.rd-toolbar-right{margin-left:auto;flex-shrink:0}.rd-context-menu{position:fixed;z-index:9999;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px #0006;padding:4px 0;min-width:180px}.rd-context-menu button{display:flex;align-items:center;gap:8px;width:100%;padding:6px 14px;background:none;border:none;color:var(--text);font-size:12px;cursor:pointer;text-align:left}.rd-context-menu button:hover{background:var(--accent);color:#fff}.rd-context-sep{height:1px;background:var(--border);margin:4px 0}.rd-context-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9998}.rd-rulers-wrap{flex:1;display:flex;flex-direction:column;overflow:hidden}.rd-ruler{background:var(--bg-primary);flex-shrink:0}.rd-ruler-horizontal{height:24px;width:100%}.rd-ruler-vertical{width:24px}.rd-ruler-row{flex:1;display:flex;overflow:hidden}.rd-canvas-scroll{flex:1;overflow:auto;background:var(--canvas-bg);padding:40px}.rd-canvas{display:inline-block}.report-page-bg{box-shadow:0 4px 24px #0006;border-radius:2px}.rd-item-wrapper{cursor:move}.rd-item-wrapper.rd-selected{outline:2px solid var(--accent);outline-offset:1px}.rd-item-wrapper.rd-locked{cursor:not-allowed}.ri-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--text-muted);font-size:12px;border:1px dashed var(--border);border-radius:4px}.ri-table{width:100%;border-collapse:collapse;font-size:11px}.ri-table th{background:#ffffff0f;padding:4px 6px;text-align:left;font-weight:600;border-bottom:1px solid var(--border);color:var(--text-muted)}.ri-table td{padding:3px 6px;border-bottom:1px solid rgba(255,255,255,.04)}.ri-slicer-select{width:100%;background:var(--bg-primary);border:1px solid var(--border);color:var(--text);padding:4px 8px;border-radius:4px;font-size:12px}.ri-slicer-checks{display:flex;flex-direction:column;gap:2px}.ri-slicer-check{font-size:12px;display:flex;align-items:center;gap:4px;color:var(--text);cursor:pointer}.ri-slicer-tiles{display:flex;flex-wrap:wrap;gap:4px}.ri-slicer-tile{padding:4px 10px;background:var(--surface);border:1px solid var(--border);border-radius:4px;font-size:11px;color:var(--text);cursor:pointer;transition:border-color .15s}.ri-slicer-tile:hover{border-color:var(--accent)}.ri-slicer-range{display:flex;align-items:center;gap:6px;font-size:12px}.ri-slicer-range input{background:var(--bg-primary);border:1px solid var(--border);color:var(--text);padding:4px 6px;border-radius:4px;font-size:11px;width:100%}.ri-slicer-list{display:flex;flex-direction:column;gap:1px}.ri-slicer-list-item{padding:3px 8px;font-size:12px;border-radius:3px;cursor:pointer;color:var(--text)}.ri-slicer-list-item:hover{background:#ffffff0f}.rd-panel{background:var(--bg-secondary);border-color:var(--border);overflow-y:auto;flex-shrink:0}.rd-panel.rd-panel-collapsed{width:40px;overflow:hidden}.rd-page-nav{border-right:1px solid var(--border)}.rd-property-panel,.rd-property-panel.rd-panel-collapsed{width:100%}.rd-right-sidebar{display:flex;flex-direction:column;flex-shrink:0;border-left:1px solid var(--border);background:var(--bg-secondary);overflow-y:auto;overflow-x:hidden}.rd-panel-resize-handle{width:5px;flex-shrink:0;cursor:col-resize;background:transparent;transition:background .15s;z-index:10}.rd-panel-resize-handle:hover,.rd-panel-resize-handle:active{background:var(--accent)}.rd-layers-panel{border-bottom:1px solid var(--border);max-height:240px;overflow-y:auto;flex-shrink:0}.rd-layers-list{padding:4px}.rd-layer-item{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;cursor:pointer;font-size:12px;color:var(--text);transition:background .1s}.rd-layer-item:hover{background:var(--hover)}.rd-layer-selected{background:#1a73e826}.rd-layer-hidden{opacity:.45}.rd-layer-vis{background:none;border:none;cursor:pointer;font-size:13px;padding:0;line-height:1}.rd-layer-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rd-layer-lock{font-size:11px;opacity:.6}.rd-panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--border)}.rd-panel-collapsed .rd-panel-header{justify-content:center;padding:10px 4px}.rd-panel-title{font-size:12px;text-transform:uppercase;color:var(--text-muted);letter-spacing:.5px;margin:0}.rd-panel-empty{padding:16px;color:var(--text-muted);font-size:12px}.rd-page-list{padding:8px;display:flex;flex-direction:column;gap:6px}.rd-page-thumb{position:relative;border:2px solid var(--border);border-radius:6px;cursor:pointer;overflow:hidden;transition:border-color .15s}.rd-page-thumb.active,.rd-page-thumb:hover{border-color:var(--accent)}.rd-thumb-preview{position:relative;width:100%;aspect-ratio:16 / 9;overflow:hidden}.rd-thumb-item{position:absolute;background:var(--thumb-item-bg);border:1px solid var(--thumb-item-border);border-radius:1px}.rd-thumb-name{padding:4px 8px;font-size:11px;color:var(--text);background:var(--surface)}.rd-page-remove{position:absolute;top:2px;right:2px;background:#0009;border:none;color:var(--text-muted);font-size:10px;cursor:pointer;border-radius:50%;width:18px;height:18px;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s}.rd-page-thumb:hover .rd-page-remove{opacity:1}.rd-props-scroll{padding:0 12px 12px}.rd-section{margin-top:12px;padding-top:10px;border-top:1px solid var(--border)}.rd-section:first-child{border-top:none;margin-top:0}.rd-section-title{font-size:11px;text-transform:uppercase;color:var(--text-muted);margin-bottom:8px;letter-spacing:.3px}.rd-row{display:flex;align-items:center;gap:8px;margin-bottom:6px}.rd-label{font-size:11px;color:#999;min-width:60px}.rd-value{flex:1}.rd-input{background:var(--bg-primary);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:4px;font-size:12px;width:100%;outline:none}.rd-input:focus{border-color:var(--accent)}.rd-input-num{width:70px}.rd-input-sm{padding:3px 6px;font-size:11px}.rd-select{background:var(--bg-primary);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:4px;font-size:12px;width:100%;outline:none}.rd-select:focus{border-color:var(--accent)}.rd-select-sm{padding:3px 6px;font-size:11px}.rd-textarea{background:var(--bg-primary);border:1px solid var(--border);color:var(--text);padding:6px 8px;border-radius:4px;font-size:12px;width:100%;resize:vertical;outline:none;font-family:inherit}.rd-textarea:focus{border-color:var(--accent)}.rd-range{width:100%}.rd-multi-select{display:flex;flex-direction:column;gap:2px}.rd-check-label{font-size:11px;display:flex;align-items:center;gap:4px;color:var(--text)}.rd-hint{font-size:11px;color:var(--text-muted);font-style:italic}.rd-required{color:var(--error)}.rd-btn-icon{background:none;border:none;color:var(--text-muted);font-size:16px;cursor:pointer;padding:2px 6px;border-radius:4px}.rd-btn-icon:hover{color:var(--text);background:#ffffff0f}.rd-kv-list{display:flex;flex-direction:column;gap:4px}.rd-kv-row{display:flex;align-items:center;gap:4px}.rd-kv-row span{color:var(--text-muted);font-size:11px}.wizard-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.wizard-dialog{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.wizard-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.wizard-header h2{font-size:16px;font-weight:600}.wizard-steps{display:flex;gap:4px;padding:12px 20px;border-bottom:1px solid var(--border);background:#0000001a}.wizard-step{font-size:11px;color:var(--text-muted);padding:4px 12px;border-radius:12px}.wizard-step.active{color:var(--accent);background:#1a73e81f}.wizard-body{padding:16px 20px;overflow-y:auto;flex:1}.wizard-footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:12px 20px;border-top:1px solid var(--border)}.wizard-search,.wizard-category{margin-bottom:16px}.wizard-category h4{font-size:12px;color:var(--text-muted);text-transform:uppercase;margin-bottom:8px}.wizard-connector-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px}.wizard-connector-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:12px;cursor:pointer;transition:border-color .15s}.wizard-connector-card:hover{border-color:var(--accent)}.wizard-connector-icon{font-size:24px}.wizard-form{display:flex;flex-direction:column;gap:10px}.wizard-test-result{padding:8px 12px;border-radius:6px;font-size:12px;margin-top:8px}.wizard-test-result.success{background:#34a8531f;border:1px solid var(--success);color:var(--success)}.wizard-test-result.error{background:#ea43351f;border:1px solid var(--error);color:var(--error)}.wizard-actions{display:flex;align-items:center;justify-content:space-between;margin-top:16px}.wizard-confirm{text-align:center;padding:20px 0}.wizard-confirm-icon{font-size:48px;margin-bottom:12px}.wizard-confirm h3{font-size:18px;margin-bottom:4px}.wizard-success{color:var(--success);margin-top:8px}.wizard-table-select{text-align:left;margin-top:16px;width:100%}.wizard-table-list{max-height:200px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.wizard-table-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;border:none;border-bottom:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer;font-size:13px;text-align:left;transition:background .12s}.wizard-table-item:last-child{border-bottom:none}.wizard-table-item:hover{background:var(--hover)}.wizard-table-item.selected{background:var(--primary);color:#fff}.wizard-table-name{font-weight:500}.wizard-table-cols{font-size:11px;opacity:.7}.wizard-table-preview{margin-top:10px;padding:10px;background:var(--surface);border:1px solid var(--border);border-radius:6px}.wizard-column-tags{display:flex;flex-wrap:wrap;gap:4px}.wizard-column-tag{display:inline-block;padding:2px 8px;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-size:12px;color:var(--text-secondary)}.wizard-file-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 16px;background:none;border:none;border-bottom:1px solid var(--border);color:var(--text);font-size:13px;text-align:left;cursor:pointer;transition:background .15s}.wizard-file-item:hover{background:var(--hover)}.wizard-file-selectable:hover{background:var(--primary);color:#fff}.template-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.template-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);cursor:pointer;transition:border-color .15s;text-align:center}.template-card:hover{border-color:var(--accent)}.template-icon{font-size:32px}.template-label{font-size:14px;font-weight:600}.template-desc{font-size:11px;color:var(--text-muted)}.bookmark-panel{margin-top:12px}.bookmark-header{display:flex;align-items:center;justify-content:space-between;padding:6px 0;cursor:pointer;font-size:12px;color:var(--text)}.bookmark-list{padding:4px 0}.bookmark-item{display:flex;align-items:center;justify-content:space-between;padding:4px 0}.bookmark-name{background:none;border:none;color:var(--accent);cursor:pointer;font-size:12px;text-align:left}.bookmark-name:hover{text-decoration:underline}.card-clickable{cursor:pointer}.card-clickable:hover{border-color:var(--accent)}.export-format-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:16px}.export-format-card{background:var(--surface);border:2px solid var(--border);border-radius:8px;padding:14px 12px;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:4px;transition:border-color .15s}.export-format-card:hover{border-color:var(--accent)}.export-format-card.active{border-color:var(--accent);background:#1a73e814}.export-format-icon{font-size:22px}.export-format-label{font-size:14px;font-weight:600;color:var(--text)}.export-format-desc{font-size:11px;color:var(--text-muted)}.export-error{margin-top:12px;padding:8px 12px;background:#ff3c3c1f;border:1px solid #f44;border-radius:6px;color:#f88;font-size:13px}.profile-page{max-width:680px;margin:0 auto;padding:32px 24px}.profile-page h2{margin-bottom:24px;color:var(--text)}.profile-section{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px;margin-bottom:20px}.profile-section h3{font-size:15px;color:var(--text);margin-bottom:14px;display:flex;align-items:baseline;gap:8px}.profile-hint{font-size:11px;color:var(--text-muted);font-weight:400}.profile-hint-details{font-size:12px;color:var(--text-muted);margin-bottom:12px}.profile-field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.profile-field label{font-size:12px;color:var(--text-muted);font-weight:500}.profile-field input{max-width:420px}.profile-attrs{display:flex;flex-direction:column;gap:8px}.profile-attr-row{display:flex;align-items:center;gap:6px}.profile-attr-row .rd-input{flex:1;max-width:200px}.profile-attr-eq{color:var(--text-muted);font-weight:600}.profile-actions{display:flex;align-items:center;gap:12px}.profile-message{font-size:13px;color:var(--accent)}.share-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9000}.share-dialog{background:var(--surface);border:1px solid var(--border);border-radius:12px;width:460px;max-height:80vh;overflow-y:auto;padding:20px}.share-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.share-header h3{margin:0;font-size:16px;color:var(--text)}.share-form{display:flex;gap:8px;margin-bottom:12px}.share-form .rd-input{flex:1}.share-form select.rd-input{flex:0 0 90px}.share-error{color:#f66;font-size:12px;margin-bottom:8px}.share-empty{color:var(--text-muted);font-size:13px;text-align:center;padding:16px 0}.share-list{display:flex;flex-direction:column;gap:4px}.share-row{display:flex;align-items:center;padding:6px 8px;border-radius:6px;background:var(--bg)}.share-user{flex:1;font-size:13px;color:var(--text)}.share-level{font-size:11px;color:var(--text-muted);text-transform:uppercase;margin-right:8px}.share-revoke{color:#f66;font-size:12px}.ws-detail .page-header{display:flex;justify-content:space-between;align-items:center}.ws-detail .page-header>div{display:flex;flex-direction:column;gap:4px}.ws-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:16px}.ws-tab{background:none;border:none;border-bottom:2px solid transparent;padding:10px 16px;font-size:14px;color:var(--text-muted);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .15s}.ws-tab:hover{color:var(--text)}.ws-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.ws-tab-badge{background:var(--border);border-radius:10px;padding:1px 7px;font-size:11px;font-weight:600;color:var(--text-muted)}.ws-content-header{display:flex;justify-content:flex-end;margin-bottom:12px}.ws-resource-list{display:flex;flex-direction:column;gap:6px}.ws-resource-card{display:flex;align-items:center;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 14px;transition:border-color .15s}.ws-resource-card:hover{border-color:var(--accent)}.ws-resource-info{display:flex;align-items:center;gap:10px;cursor:pointer;flex:1;min-width:0}.ws-resource-icon{font-size:18px;flex-shrink:0}.ws-resource-name{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ws-resource-meta{font-size:11px;color:var(--text-muted)}.ws-resource-actions{display:flex;gap:4px;flex-shrink:0}.ws-resource-actions button{background:none;border:none;font-size:14px;cursor:pointer;padding:4px 6px;border-radius:4px;opacity:.6;transition:opacity .15s}.ws-resource-actions button:hover{opacity:1}.ws-resource-actions .action-danger:hover{background:#ff3c3c1f}.card-header-row{display:flex;justify-content:space-between;align-items:center}.card-action-btn{background:none;border:none;font-size:14px;cursor:pointer;padding:2px 6px;border-radius:4px;opacity:.5;transition:opacity .15s}.card-action-btn:hover{opacity:1}.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border);padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s}.btn-secondary:hover{border-color:var(--accent);color:var(--accent)}.palette-pipeline-row{display:flex;gap:2px;align-items:stretch}.palette-item-grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.palette-delete-btn{background:none;border:none;font-size:12px;cursor:pointer;padding:4px 6px;border-radius:4px;opacity:.4;transition:opacity .15s}.palette-delete-btn:hover{opacity:1;background:#ff3c3c26}.flow-toolbar-actions{display:flex;gap:8px;align-items:center}.security-page{max-width:800px;margin:0 auto}.security-section{margin-bottom:28px}.security-section h2{font-size:16px;color:var(--text);margin-bottom:12px}.security-section h3{font-size:14px;color:var(--text);margin-bottom:8px}.security-hint{font-size:12px;color:var(--text-muted);margin-bottom:12px}.security-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:10px}.security-field{display:flex;align-items:center;gap:12px;padding:6px 0}.security-label{font-size:12px;color:var(--text-muted);font-weight:500;min-width:110px}.security-badge{background:#1a73e81f;color:var(--accent);padding:2px 10px;border-radius:10px;font-size:12px;font-weight:600}.security-attrs{display:flex;flex-wrap:wrap;gap:6px}.security-attr-chip{background:var(--bg);border:1px solid var(--border);padding:2px 8px;border-radius:6px;font-size:12px;color:var(--text)}.security-table{width:100%;border-collapse:collapse;font-size:13px}.security-table th{text-align:left;padding:6px 8px;font-weight:600;color:var(--text-muted);border-bottom:1px solid var(--border)}.security-table td{padding:6px 8px;color:var(--text)}.security-source-grid{display:flex;flex-direction:column;gap:6px}.security-source-card{display:flex;align-items:center;gap:12px}.security-source-icon{font-size:20px}.security-source-name{font-size:14px;font-weight:600;color:var(--text)}.security-source-desc{font-size:12px;color:var(--text-muted)}.security-tabs{display:flex;gap:4px;margin-bottom:20px;border-bottom:1px solid var(--border);padding-bottom:0}.security-tab{padding:8px 16px;border:none;background:none;cursor:pointer;font-size:13px;font-weight:500;color:var(--text-muted);border-bottom:2px solid transparent;transition:all .15s}.security-tab:hover{color:var(--text)}.security-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.security-stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.security-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center}.security-stat-number{font-size:28px;font-weight:700;color:var(--accent)}.security-stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.security-form{display:flex;gap:8px;align-items:flex-end;margin-bottom:16px;flex-wrap:wrap}.security-form-grid{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}.security-form-field{display:flex;flex-direction:column;gap:4px;min-width:140px}.security-form-field label{font-size:11px;font-weight:600;color:var(--text-muted)}.security-form-field-wide{min-width:300px;flex:1}.security-card-header{display:flex;justify-content:space-between;align-items:center}.security-desc{font-size:12px;color:var(--text-muted);margin:4px 0 8px}.security-members{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}.security-member-chip{display:inline-flex;align-items:center;gap:4px;background:#1a73e814;border:1px solid rgba(26,115,232,.2);padding:2px 10px;border-radius:12px;font-size:12px;color:var(--accent)}.chip-remove{background:none;border:none;cursor:pointer;font-size:14px;color:var(--text-muted);padding:0 2px;line-height:1}.chip-remove:hover{color:#e53935}.security-add-member{display:flex;gap:6px;margin-top:8px}.security-badge-hide{background:#e539351f;color:#e53935}.security-badge-mask{background:#ff98001f;color:#f57c00}.security-badge-hash{background:#9c27b01f;color:#9c27b0}.security-badge-nullify{background:#9e9e9e1f;color:#757575}.security-badge-view{background:#4caf501f;color:#388e3c}.security-badge-edit{background:#ff98001f;color:#f57c00}.security-badge-admin{background:#e539351f;color:#e53935}.btn-danger-sm{background:#e539351a;color:#e53935;border:1px solid rgba(229,57,53,.2);padding:3px 10px;border-radius:6px;font-size:12px;cursor:pointer}.btn-danger-sm:hover{background:#e5393533}.btn-sm{padding:4px 12px;font-size:12px}.rd-input-sm{padding:4px 8px;font-size:12px}.rd-select{padding:6px 10px;border-radius:8px;font-size:13px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.toast-container{position:fixed;top:16px;right:16px;z-index:10000;display:flex;flex-direction:column;gap:8px;pointer-events:none;max-width:420px}.toast{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:0 8px 24px #0006;color:var(--text);font-size:13px;pointer-events:auto;animation:toast-in .25s ease-out}@keyframes toast-in{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}.toast-success{border-left:3px solid var(--success)}.toast-error{border-left:3px solid var(--error)}.toast-warning{border-left:3px solid #FFA726}.toast-info{border-left:3px solid var(--accent)}.toast-icon{font-size:16px;flex-shrink:0}.toast-message{flex:1;line-height:1.4}.toast-close{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:18px;padding:0 2px;line-height:1}.toast-close:hover{color:var(--text)}.error-boundary{display:flex;align-items:center;justify-content:center;height:100%;min-height:300px;padding:40px}.error-boundary-card{text-align:center;padding:40px;background:var(--surface);border:1px solid var(--error);border-radius:var(--radius);max-width:480px}.error-boundary-icon{font-size:48px;margin-bottom:16px}.error-boundary-card h2{font-size:18px;margin-bottom:8px;color:var(--text)}.error-boundary-message{color:var(--text-muted);font-size:13px;margin-bottom:20px;word-break:break-word}.error-boundary-actions{display:flex;gap:12px;justify-content:center}.btn{padding:8px 20px;border-radius:var(--radius);cursor:pointer;font-size:13px;border:none}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-secondary)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9000;animation:fade-in .15s ease-out}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:360px;max-width:520px;box-shadow:0 12px 40px #00000080}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-header h3{font-size:15px;font-weight:600}.modal-close{background:none;border:none;color:var(--text-muted);font-size:20px;cursor:pointer;padding:0 4px;line-height:1}.modal-close:hover{color:var(--text)}.modal-body{padding:20px}.modal-body p{color:var(--text-muted);font-size:14px;line-height:1.5}.modal-input{width:100%;padding:10px 12px;border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-primary);color:var(--text);font-size:14px;outline:none}.modal-input:focus{border-color:var(--accent)}.modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:12px 20px;border-top:1px solid var(--border)}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,var(--border) 25%,rgba(255,255,255,.06) 50%,var(--border) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;display:block}.skeleton-card{min-height:90px;padding:16px;display:flex;flex-direction:column;gap:6px}.field-error{color:var(--error);font-size:11px;margin-top:2px;min-height:14px}.input-error{border-color:var(--error)!important}.dashboard-header{margin-bottom:24px}.dashboard-header h1{font-size:1.6rem;margin:0 0 4px}.dashboard-header .subtitle{color:var(--text-muted);font-size:.95rem;margin:0}.onboarding-banner{background:linear-gradient(135deg,var(--primary),#6c63ff);color:#fff;padding:24px;border-radius:var(--radius);margin-bottom:24px}.onboarding-banner h2{margin:0 0 8px;font-size:1.2rem}.onboarding-banner p{margin:0 0 16px;opacity:.9}.onboarding-banner .btn-primary{background:#fff;color:var(--primary);font-weight:600}.dashboard-actions{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:28px}.section-title{font-size:1.1rem;margin:0 0 12px;font-weight:600}.dashboard-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;margin-top:28px}.stat-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:20px}.stat-value{font-size:1.8rem;font-weight:700;color:var(--primary)}.stat-label{font-size:.85rem;color:var(--text-muted)}.onboarding-page{max-width:700px;margin:0 auto;padding:40px 24px}.onboarding-steps{display:flex;gap:8px;margin:24px 0}.onboarding-step-dot{width:12px;height:12px;border-radius:50%;background:var(--border);transition:background .2s}.onboarding-step-dot.active{background:var(--primary)}.onboarding-step-dot.done{background:var(--success, #22c55e)}.onboarding-card{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);padding:32px;min-height:200px}.onboarding-card h2{margin:0 0 12px;font-size:1.2rem}.onboarding-card p{color:var(--text-muted);line-height:1.6;margin:0 0 20px}.onboarding-nav{display:flex;justify-content:space-between;margin-top:20px}.feedback-fab{position:fixed;bottom:24px;right:24px;z-index:1000;width:50px;height:50px;border-radius:50%;background:var(--primary);color:#fff;border:none;font-size:22px;cursor:pointer;box-shadow:0 4px 12px #00000040;display:flex;align-items:center;justify-content:center;transition:transform .2s}.feedback-fab:hover{transform:scale(1.1)}.feedback-panel{position:fixed;bottom:88px;right:24px;z-index:1001;width:340px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:0 8px 24px #0000002e}.feedback-panel h3{margin:0 0 12px;font-size:1rem}.feedback-panel textarea{width:100%;min-height:80px;resize:vertical;margin-bottom:8px;font-family:inherit;padding:8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);color:var(--text)}.feedback-rating{display:flex;gap:4px;margin-bottom:12px}.feedback-rating button{background:none;border:none;font-size:22px;cursor:pointer;opacity:.4;transition:opacity .15s}.feedback-rating button.active{opacity:1}.feedback-panel .btn-actions{display:flex;justify-content:flex-end;gap:8px}.pricing-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:24px;margin-top:24px}.pricing-card{background:var(--surface);border:2px solid var(--border);border-radius:12px;padding:28px 24px;text-align:center;transition:border-color .2s,box-shadow .2s}.pricing-card.current{border-color:var(--primary);box-shadow:0 0 0 3px #6366f126}.pricing-card h3{font-size:1.15rem;margin:0 0 8px}.pricing-card .price{font-size:2rem;font-weight:700;color:var(--primary);margin:8px 0}.pricing-card .price span{font-size:.85rem;font-weight:400;color:var(--text-muted)}.pricing-card ul{list-style:none;padding:0;margin:16px 0;text-align:left}.pricing-card li{padding:4px 0;font-size:.9rem}.pricing-card li:before{content:"✓ ";color:var(--success, #22c55e);font-weight:600}.landing-page{background:var(--bg);color:var(--text);min-height:100vh}.landing-hero{padding:0 24px;max-width:1100px;margin:0 auto}.landing-nav{display:flex;align-items:center;gap:10px;padding:18px 0}.landing-brand{font-weight:700;font-size:1.2rem;margin-right:auto}.landing-nav-links{display:flex;align-items:center;gap:20px}.landing-nav-links a{color:var(--text-muted);text-decoration:none;font-size:.9rem}.landing-nav-links a:hover{color:var(--text)}.hero-content{text-align:center;padding:60px 0 80px}.hero-content h1{font-size:2.8rem;line-height:1.15;margin:0 0 20px}.gradient-text{background:linear-gradient(135deg,#6c63ff,#38bdf8);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.hero-subtitle{color:var(--text-muted);font-size:1.1rem;max-width:600px;margin:0 auto 32px;line-height:1.6}.hero-actions{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}.btn-lg{padding:12px 28px;font-size:1rem}.landing-features{padding:60px 24px;max-width:1100px;margin:0 auto;text-align:center}.landing-features h2{font-size:1.6rem;margin-bottom:8px}.features-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:24px;margin-top:40px;text-align:left}.feature-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:24px}.feature-icon{font-size:1.8rem;display:block;margin-bottom:12px}.feature-card h3{margin:0 0 8px;font-size:1.05rem}.feature-card p{color:var(--text-muted);font-size:.9rem;line-height:1.5;margin:0}.landing-pricing{padding:60px 24px;max-width:1100px;margin:0 auto;text-align:center}.landing-pricing h2{font-size:1.6rem;margin-bottom:8px}.pricing-subtitle{color:var(--text-muted);margin-bottom:32px}.pricing-card.highlight{border-color:var(--primary);position:relative}.pricing-card .badge{position:absolute;top:-12px;left:50%;transform:translate(-50%);background:var(--primary);color:#fff;font-size:.75rem;font-weight:600;padding:3px 14px;border-radius:20px}.landing-footer{text-align:center;padding:40px 24px;color:var(--text-muted);font-size:.85rem;border-top:1px solid var(--border);margin-top:40px}.beta-signup-page{max-width:480px;margin:80px auto;padding:0 24px;text-align:center}.beta-signup-page h1{font-size:1.6rem;margin-bottom:8px}.beta-signup-page .subtitle{color:var(--text-muted);margin-bottom:28px}.beta-form{display:flex;flex-direction:column;gap:12px;text-align:left}.beta-form input{width:100%}@media(max-width:1024px){.sidebar{position:fixed;z-index:100;top:0;left:0;height:100vh;transform:translate(0);transition:transform .2s ease,width .2s ease}.sidebar-collapsed{transform:translate(-100%);width:0!important;overflow:hidden}.main-content{margin-left:0!important}.sidebar-mobile-toggle{display:block;position:fixed;top:12px;left:12px;z-index:99;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:6px 10px;font-size:18px;cursor:pointer;color:var(--text)}}@media(min-width:1025px){.sidebar-mobile-toggle{display:none}}@media(max-width:600px){.card-grid{grid-template-columns:1fr}.page-header{flex-direction:column;align-items:flex-start;gap:8px}.login-form{width:95vw;padding:24px 20px}}
