:root{--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--font-size-sm:12px;--font-size-base:14px;--font-size-md:16px;--font-size-lg:20px;--font-size-xl:24px;--font-size-2xl:32px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-normal:1.5;--line-height-relaxed:1.75;--color-white:#fff;--color-gray-50:#fafafa;--color-gray-100:#f5f5f5;--color-gray-200:#e5e5e5;--color-gray-300:#d4d4d4;--color-gray-400:#a3a3a3;--color-gray-500:#737373;--color-gray-600:#525252;--color-gray-700:#404040;--color-gray-800:#262626;--color-gray-900:#171717;--color-black:#000;--color-primary-50:#eff6ff;--color-primary-100:#dbeafe;--color-primary-200:#bfdbfe;--color-primary-300:#93c5fd;--color-primary-400:#60a5fa;--color-primary-500:#3b82f6;--color-primary-600:#2563eb;--color-primary-700:#1d4ed8;--color-primary-800:#1e40af;--color-primary-900:#1e3a8a;--color-success:#10b981;--color-warning:#f59e0b;--color-error:#ef4444;--color-info:#3b82f6;--border-width:1px;--border-radius-sm:4px;--border-radius-md:6px;--border-radius-lg:8px;--border-radius-xl:12px;--border-color:var(--color-gray-200);--border-color-focus:var(--color-primary-500);--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a;--sidebar-width:280px;--header-height:64px;--max-content-width:1440px;--transition-fast:.15s ease;--transition-base:.2s ease;--transition-slow:.3s ease}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-gray-900);background-color:var(--color-gray-50);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}.algorithm-card{width:100%;padding:var(--space-4);margin-bottom:var(--space-2);background-color:var(--color-white);text-align:left;cursor:pointer;transition:all var(--transition-base);border:2px solid #0000;border-radius:0}.algorithm-card:hover{border-color:var(--color-gray-300);background-color:var(--color-gray-50)}.algorithm-card.selected{border-color:var(--color-black);background-color:var(--color-gray-50)}.algorithm-card-header{margin-bottom:var(--space-2);justify-content:space-between;align-items:flex-start;display:flex}.algorithm-card h3{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-gray-900)}.difficulty-badge{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);padding:2px var(--space-2);text-transform:uppercase;letter-spacing:.5px;border:var(--border-width)solid;flex-shrink:0}.difficulty-beginner{color:#16a34a;background-color:#f0fdf4;border-color:#86efac}.difficulty-intermediate{color:#ea580c;background-color:#fff7ed;border-color:#fdba74}.difficulty-advanced{color:#dc2626;background-color:#fef2f2;border-color:#fca5a5}.algorithm-card.selected .difficulty-badge{border-color:var(--color-black)}.algorithm-description{font-size:var(--font-size-sm);color:var(--color-gray-600);line-height:var(--line-height-relaxed);margin-bottom:var(--space-2)}.algorithm-tags{gap:var(--space-1);margin-top:var(--space-2);flex-wrap:wrap;display:flex}.algorithm-tag{font-size:var(--font-size-xs);color:var(--color-gray-600);background-color:var(--color-gray-100);padding:2px var(--space-2);border:var(--border-width)solid var(--color-gray-200);text-transform:lowercase}.algorithm-sidebar{width:var(--sidebar-width);background-color:var(--color-white);border-right:var(--border-width)solid var(--border-color);flex-direction:column;height:100%;display:flex;overflow:hidden}.sidebar-header{padding:var(--space-8)var(--space-6);border-bottom:none}.sidebar-header h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);color:var(--color-black);text-transform:uppercase;letter-spacing:.5px;margin:0 0 var(--space-2)0}.algorithm-count{font-size:var(--font-size-sm);color:var(--color-gray-500);text-transform:none;letter-spacing:normal;font-weight:var(--font-weight-regular)}.sidebar-content{padding:var(--space-4);flex:1;overflow-y:auto}.sidebar-loading,.sidebar-error,.sidebar-empty{padding:var(--space-6);text-align:center;color:var(--color-gray-500);font-size:var(--font-size-sm)}.sidebar-error{color:var(--color-error)}.algorithm-group{margin-bottom:var(--space-2)}.group-header{align-items:center;gap:var(--space-3);width:100%;padding:var(--space-3)var(--space-4);background-color:var(--color-gray-50);border:none;border-bottom:var(--border-width)solid var(--border-color);cursor:pointer;text-align:left;transition:background-color .15s;display:flex}.group-header:hover{background-color:var(--color-gray-100)}.group-icon{font-size:var(--font-size-xs);color:var(--color-gray-600);flex-shrink:0;width:12px;display:inline-block}.group-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-black);text-transform:uppercase;letter-spacing:.5px;flex:1}.group-count{font-size:var(--font-size-xs);color:var(--color-gray-500);background-color:var(--color-white);padding:2px var(--space-2);border:var(--border-width)solid var(--border-color);text-align:center;min-width:24px}.group-content{background-color:var(--color-white)}.algorithm-subgroup{margin-bottom:var(--space-1)}.subgroup-header{align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2)var(--space-4)var(--space-2)var(--space-6);background-color:var(--color-white);border:none;border-bottom:var(--border-width)solid var(--color-gray-100);cursor:pointer;text-align:left;transition:background-color .15s;display:flex}.subgroup-header:hover{background-color:var(--color-gray-50)}.subgroup-icon{font-size:var(--font-size-xs);color:var(--color-gray-500);flex-shrink:0;width:10px;display:inline-block}.subgroup-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-regular);color:var(--color-gray-700);flex:1}.subgroup-count{font-size:var(--font-size-xs);color:var(--color-gray-400);text-align:center;min-width:20px}.subgroup-content{padding-left:var(--space-8)}.dataset-upload{padding:var(--space-6);background-color:var(--color-white);border:var(--border-width)solid var(--border-color);margin-bottom:var(--space-6);border-radius:0}.upload-area{align-items:center;gap:var(--space-4);padding:var(--space-8);border:2px dashed var(--color-gray-300);background-color:var(--color-gray-50);border-radius:0;flex-direction:column;display:flex}.file-input{display:none}.upload-button{padding:var(--space-3)var(--space-6);background-color:var(--color-white);color:var(--color-black);border:2px solid var(--color-black);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--transition-base);border-radius:0}.upload-button:hover:not(:disabled){background-color:var(--color-black);color:var(--color-white)}.upload-button:disabled{opacity:.5;cursor:not-allowed}.file-info{text-align:center}.file-name{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-gray-900);margin-bottom:var(--space-1)}.file-size{font-size:var(--font-size-sm);color:var(--color-gray-600)}.upload-action{width:100%;margin-top:var(--space-4);padding:var(--space-4);background-color:var(--color-black);color:var(--color-white);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-base);text-transform:uppercase;letter-spacing:.5px;border:none;border-radius:0}.upload-action:hover:not(:disabled){background-color:var(--color-gray-800)}.upload-action:disabled{opacity:.5;cursor:not-allowed;background-color:var(--color-gray-400)}.upload-error{margin-top:var(--space-4);padding:var(--space-3);border:var(--border-width)solid var(--color-error);border-radius:var(--border-radius-md);color:var(--color-error);font-size:var(--font-size-sm);background-color:#fee}.schema-table-container{margin-bottom:var(--space-6)}.schema-table-container h4{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-3)}.schema-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);overflow:hidden}.schema-table thead{background-color:var(--color-gray-50)}.schema-table th{padding:var(--space-3);text-align:left;font-weight:var(--font-weight-semibold);color:var(--color-gray-700);border-bottom:var(--border-width)solid var(--border-color)}.schema-table td{padding:var(--space-3);border-bottom:var(--border-width)solid var(--color-gray-100);color:var(--color-gray-800)}.schema-table tbody tr:last-child td{border-bottom:none}.schema-table tbody tr:hover{background-color:var(--color-gray-50)}.column-name{font-weight:var(--font-weight-medium);color:var(--color-gray-900)}.type-badge{padding:var(--space-1)var(--space-2);border-radius:var(--border-radius-sm);font-size:11px;font-weight:var(--font-weight-medium);text-transform:uppercase;display:inline-block}.type-numeric{color:#0369a1;background-color:#e0f2fe}.type-categorical{color:#9f1239;background-color:#fce7f3}.type-boolean{color:#5b21b6;background-color:#ddd6fe}.type-datetime{color:#92400e;background-color:#fef3c7}.type-text{color:#374151;background-color:#e5e7eb}.type-identifier{color:#065f46;background-color:#d1fae5}.column-stat{color:var(--color-gray-600)}.column-samples{color:var(--color-gray-600);font-family:Monaco,Courier New,monospace;font-size:11px}.dataset-preview{background-color:var(--color-white);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-lg);padding:var(--space-6);margin-bottom:var(--space-6)}.dataset-info{margin-bottom:var(--space-6)}.dataset-info h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-2)}.dataset-stats{gap:var(--space-3);font-size:var(--font-size-sm);color:var(--color-gray-600);display:flex}.stat strong{color:var(--color-gray-900)}.stat-separator{color:var(--color-gray-400)}.preview-rows{margin-top:var(--space-6)}.preview-rows h4{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-3)}.preview-table-wrapper{border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);overflow-x:auto}.preview-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.preview-table thead{background-color:var(--color-gray-50)}.preview-table th{padding:var(--space-3);text-align:left;font-weight:var(--font-weight-semibold);color:var(--color-gray-700);border-bottom:var(--border-width)solid var(--border-color)}.preview-table td{padding:var(--space-3);border-bottom:var(--border-width)solid var(--color-gray-100);color:var(--color-gray-800)}.preview-table tbody tr:last-child td{border-bottom:none}.preview-table tbody tr:hover{background-color:var(--color-gray-50)}.selector-label{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-gray-900);margin-bottom:var(--space-2);display:block}.required{color:var(--color-error);margin-left:var(--space-1)}.selector-input{width:100%;padding:var(--space-3);font-size:var(--font-size-base);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);background-color:var(--color-white);color:var(--color-gray-900);transition:border-color var(--transition-base)}.selector-input:focus{border-color:var(--border-color-focus);outline:none;box-shadow:0 0 0 3px #3b82f61a}.selector-hint{margin-top:var(--space-2);font-size:var(--font-size-sm);color:var(--color-gray-600)}.feature-list{gap:var(--space-2);padding:var(--space-4);background-color:var(--color-gray-50);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);flex-direction:column;max-height:300px;display:flex;overflow-y:auto}.no-features{color:var(--color-gray-500);font-size:var(--font-size-sm);text-align:center;padding:var(--space-4)}.feature-checkbox-label{align-items:center;gap:var(--space-2);padding:var(--space-2);background-color:var(--color-white);border-radius:var(--border-radius-sm);cursor:pointer;transition:background-color var(--transition-fast);display:flex}.feature-checkbox-label:hover{background-color:var(--color-gray-100)}.feature-checkbox{cursor:pointer}.feature-name{font-weight:var(--font-weight-medium);color:var(--color-gray-900)}.feature-type{font-size:var(--font-size-sm);color:var(--color-gray-600);margin-left:auto}.parameter-form{padding:var(--space-4);background-color:var(--color-gray-50);border-radius:var(--border-radius-md);margin-bottom:var(--space-4)}.parameter-form h4{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-4)}.parameter-field{margin-bottom:var(--space-4)}.parameter-field:last-child{margin-bottom:0}.parameter-label{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-gray-900);margin-bottom:var(--space-2);display:block}.parameter-input{width:100%;padding:var(--space-3);font-size:var(--font-size-base);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);background-color:var(--color-white);color:var(--color-gray-900);transition:border-color var(--transition-base)}.parameter-input:focus{border-color:var(--border-color-focus);outline:none;box-shadow:0 0 0 3px #3b82f61a}.parameter-hint{margin-top:var(--space-1);font-size:var(--font-size-sm);color:var(--color-gray-600)}.mapping-form{background-color:var(--color-white);border:var(--border-width)solid var(--border-color);padding:var(--space-6);margin-bottom:var(--space-6);border-radius:0}.mapping-form h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-6)}.selector-group{margin-bottom:var(--space-6)}.form-actions{margin-top:var(--space-6);padding-top:var(--space-6);border-top:var(--border-width)solid var(--border-color)}.run-button{width:100%;padding:var(--space-4);background-color:var(--color-black);color:var(--color-white);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-base);text-transform:uppercase;letter-spacing:.5px;border:none;border-radius:0}.run-button:hover:not(:disabled){background-color:var(--color-gray-800)}.run-button:disabled{opacity:.5;cursor:not-allowed;background-color:var(--color-gray-400)}.run-error{margin-top:var(--space-4);padding:var(--space-3);border:var(--border-width)solid var(--color-error);border-radius:var(--border-radius-md);color:var(--color-error);font-size:var(--font-size-sm);background-color:#fee}.metrics-section{background-color:var(--color-white);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-lg);padding:var(--space-6);margin-bottom:var(--space-6)}.metrics-section h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-5)}.metrics-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.metric-card{padding:var(--space-5);background-color:var(--color-gray-50);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);text-align:center}.metric-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-gray-600);letter-spacing:.05em;margin-bottom:var(--space-2)}.metric-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-gray-900)}.chart-container{background-color:var(--color-white);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);padding:var(--space-5)}.chart-title{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-4)}.chart-content{min-height:300px}.chart-fallback{height:300px;color:var(--color-gray-500);font-size:var(--font-size-sm);justify-content:center;align-items:center;display:flex}.confusion-matrix{padding:var(--space-4)}.chart-note{font-size:var(--font-size-sm);color:var(--color-gray-600);margin-bottom:var(--space-4);text-align:center}.matrix-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.matrix-cell{padding:var(--space-4);background-color:var(--color-gray-50);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-sm);text-align:center}.matrix-labels{font-size:var(--font-size-sm);color:var(--color-gray-600);margin-bottom:var(--space-2)}.matrix-count{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-gray-900)}.explanation-panel{background-color:var(--color-primary-50);border:var(--border-width)solid var(--color-primary-200);border-radius:var(--border-radius-lg);padding:var(--space-6);margin-bottom:var(--space-6)}.explanation-panel h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-primary-900);margin-bottom:var(--space-4)}.explanation-list{margin:0;padding:0;list-style:none}.explanation-item{padding-left:var(--space-6);margin-bottom:var(--space-3);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);color:var(--color-primary-900);position:relative}.explanation-item:before{content:"→";color:var(--color-primary-600);font-weight:var(--font-weight-bold);position:absolute;left:0}.explanation-item:last-child{margin-bottom:0}.warnings-panel{border:var(--border-width)solid var(--color-warning);border-radius:var(--border-radius-md);padding:var(--space-5);margin-bottom:var(--space-6);background-color:#fef3c7}.warnings-panel h4{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:#92400e;margin-bottom:var(--space-3)}.warnings-list{margin:0;padding:0;list-style:none}.warning-item{padding-left:var(--space-5);margin-bottom:var(--space-2);font-size:var(--font-size-sm);line-height:var(--line-height-normal);color:#92400e;position:relative}.warning-item:before{content:"⚠";color:var(--color-warning);position:absolute;left:0}.warning-item:last-child{margin-bottom:0}.results-panel{max-width:var(--max-content-width)}.results-header{margin-bottom:var(--space-6)}.results-header h2{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-gray-900);margin-bottom:var(--space-2)}.results-summary{gap:var(--space-3);font-size:var(--font-size-sm);color:var(--color-gray-600);display:flex}.summary-item strong{color:var(--color-gray-900)}.summary-separator{color:var(--color-gray-400)}.charts-section,.tables-section{background-color:var(--color-white);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-lg);padding:var(--space-6);margin-bottom:var(--space-6)}.charts-section h3,.tables-section h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-5)}.charts-grid{gap:var(--space-6);grid-template-columns:repeat(auto-fit,minmax(500px,1fr));display:grid}.result-table-container{margin-bottom:var(--space-6)}.result-table-container:last-child{margin-bottom:0}.result-table-container h4{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-3);text-transform:capitalize}.result-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm);border:var(--border-width)solid var(--border-color);border-radius:var(--border-radius-md);overflow:hidden}.result-table thead{background-color:var(--color-gray-50)}.result-table th{padding:var(--space-3);text-align:left;font-weight:var(--font-weight-semibold);color:var(--color-gray-700);border-bottom:var(--border-width)solid var(--border-color)}.result-table td{padding:var(--space-3);border-bottom:var(--border-width)solid var(--color-gray-100);color:var(--color-gray-800)}.result-table tbody tr:last-child td{border-bottom:none}.result-table tbody tr:hover{background-color:var(--color-gray-50)}.dashboard{flex-direction:column;height:100vh;display:flex;overflow:hidden}.app-header{height:var(--header-height);background-color:var(--color-black);color:var(--color-white);padding:0 var(--space-8);border-bottom:1px solid var(--color-gray-800);justify-content:space-between;align-items:center;display:flex}.app-branding{font-size:30px;font-weight:500;line-height:20px}.app-header-actions{align-items:center;gap:var(--space-4);display:flex}.user-icon{background-color:var(--color-gray-800);width:40px;height:40px;color:var(--color-white);cursor:pointer;transition:background-color var(--transition-base);border-radius:50%;justify-content:center;align-items:center;display:flex}.user-icon:hover{background-color:var(--color-gray-700)}.dashboard-content{flex:1;display:flex;overflow:hidden}.workspace{padding:var(--space-8);flex:1;overflow-y:auto}.action-button{padding:var(--space-3)var(--space-5);background-color:var(--color-black);color:var(--color-white);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-base);border:none;border-radius:0}.action-button:hover{background-color:var(--color-gray-800)}.action-button.secondary{background-color:var(--color-gray-700)}.action-button.secondary:hover{background-color:var(--color-gray-600)}.results-actions{gap:var(--space-3);margin-bottom:var(--space-6);max-width:var(--max-content-width);display:flex}.placeholder{height:50vh;color:var(--color-gray-500);font-size:var(--font-size-md);justify-content:center;align-items:center;display:flex}.section{max-width:var(--max-content-width)}.section h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-3)}.section p{font-size:var(--font-size-base);color:var(--color-gray-600);margin-bottom:var(--space-6)}.work-area{gap:var(--space-8);height:calc(100vh - var(--header-height) - 64px);display:flex;overflow:hidden}.input-section{padding-right:var(--space-4);flex:1;overflow-y:auto}.output-section{padding-left:var(--space-4);border-left:var(--border-width)solid var(--border-color);flex:1;overflow-y:auto}.section-header{margin-bottom:var(--space-6)}.section-header h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-gray-900);margin-bottom:var(--space-2)}.section-header p{font-size:var(--font-size-base);color:var(--color-gray-600)}.output-placeholder{height:100%;color:var(--color-gray-500);font-size:var(--font-size-md);text-align:center;padding:var(--space-8);justify-content:center;align-items:center;display:flex}