:root{--ink:#1b2430;--ink-soft:#4a5568;--paper:#f3f5f7;--panel:#fff;--line:#d7dce2;--line-strong:#b7c0ca;--teal:#24625f;--teal-soft:#e4eeed;--copper:#c1622d;--copper-soft:#f7e7dc;--green:#3a7d44;--green-soft:#e5f0e6;--red:#b0402e;--red-soft:#f8e7e3;--font-sans:"IBM Plex Sans", -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", "SFMono-Regular", Menlo, monospace;--radius:3px;--shadow:0 1px 2px #1b24300f, 0 1px 1px #1b24300a}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font-sans);color:var(--ink);background:linear-gradient(var(--line) 1px, transparent 1px) 0 0 / 100% 28px, var(--paper);margin:0;font-size:15px;line-height:1.5}code,.mono,input,select,textarea{font-family:var(--font-mono)}h1,h2,h3{font-family:var(--font-sans);letter-spacing:-.01em;margin:0 0 .5em;font-weight:600}button{font-family:var(--font-sans);cursor:pointer}a{color:var(--teal)}.app-shell{max-width:920px;margin:0 auto;padding:32px 24px 80px}.app-header{border-bottom:2px solid var(--ink);justify-content:space-between;align-items:baseline;margin-bottom:8px;padding-bottom:14px;display:flex}.app-header .brand{font-size:20px;font-weight:700}.app-header .brand .brand-accent{color:var(--copper)}.app-header .tagline{font-family:var(--font-mono);color:var(--ink-soft);font-size:12px}.step-indicator{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);gap:0;margin:28px 0 32px;display:flex;overflow:hidden}.step-indicator .step{border-right:1px solid var(--line);opacity:.55;flex:1;align-items:center;gap:10px;padding:12px 16px;display:flex;position:relative}.step-indicator .step:last-child{border-right:none}.step-indicator .step.active{opacity:1;background:var(--teal-soft)}.step-indicator .step.done{opacity:1}.step-indicator .step-num{font-family:var(--font-mono);border:1.5px solid var(--ink);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:13px;font-weight:600;display:flex}.step-indicator .step.active .step-num{background:var(--teal);border-color:var(--teal);color:#fff}.step-indicator .step.done .step-num{background:var(--ink);border-color:var(--ink);color:#fff}.step-indicator .step-label{font-size:13px;font-weight:500}.panel{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:20px;padding:24px}.panel-title{margin-bottom:4px;font-size:16px;font-weight:600}.panel-subtitle{color:var(--ink-soft);margin-bottom:18px;font-size:13px}.field-row{flex-direction:column;gap:6px;margin-bottom:16px;display:flex}.field-row label{color:var(--ink);font-size:13px;font-weight:500}.field-hint{color:var(--ink-soft);font-size:12px;font-family:var(--font-sans)}.field-row input[type=text],.field-row input[type=number],.field-row select{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--paper);color:var(--ink);padding:8px 10px;font-size:14px}.field-row input:focus,.field-row select:focus{outline:2px solid var(--teal);outline-offset:1px}.field-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.btn{border:1.5px solid var(--ink);background:var(--ink);color:#fff;border-radius:var(--radius);padding:10px 20px;font-size:14px;font-weight:600;transition:transform 80ms,opacity .15s}.btn:hover{opacity:.88}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{color:var(--ink);background:0 0}.btn-teal{border-color:var(--teal);background:var(--teal)}.btn-row{justify-content:flex-end;gap:12px;margin-top:8px;display:flex}.tag{font-family:var(--font-mono);background:var(--teal-soft);color:var(--teal);border-radius:999px;align-items:center;margin:2px 4px 2px 0;padding:2px 8px;font-size:12px;display:inline-flex}.tag.copper{background:var(--copper-soft);color:var(--copper)}.tag-list{flex-wrap:wrap;margin-bottom:4px;display:flex}.mode-toggle{border:1px solid var(--line-strong);border-radius:var(--radius);width:fit-content;display:flex;overflow:hidden}.mode-toggle button{background:var(--panel);color:var(--ink-soft);border:none;border-right:1px solid var(--line-strong);padding:9px 16px;font-size:13px;font-weight:500}.mode-toggle button:last-child{border-right:none}.mode-toggle button.active{background:var(--copper);color:#fff}.upload-zone{border:1.5px dashed var(--line-strong);border-radius:var(--radius);text-align:center;background:var(--paper);cursor:pointer;padding:28px}.upload-zone.has-file{border-style:solid;border-color:var(--green);background:var(--green-soft)}.warning-box{background:var(--copper-soft);border-left:3px solid var(--copper);border-radius:2px;margin-bottom:16px;padding:10px 14px;font-size:13px}.error-box{background:var(--red-soft);border-left:3px solid var(--red);color:var(--red);border-radius:2px;margin-bottom:16px;padding:10px 14px;font-size:13px}.pipeline{justify-content:space-between;align-items:center;margin-bottom:16px;padding:20px 8px;display:flex}.pipeline .node{font-family:var(--font-mono);color:var(--ink-soft);text-align:center;flex-direction:column;align-items:center;gap:8px;width:92px;font-size:11px;display:flex}.pipeline .node-box{border:2px solid var(--line-strong);background:var(--panel);border-radius:2px;justify-content:center;align-items:center;width:56px;height:40px;display:flex}.pipeline .node.active .node-box{border-color:var(--teal);background:var(--teal-soft)}.pipeline .node.done .node-box{border-color:var(--green);background:var(--green-soft)}.pipeline .pipe{background:repeating-linear-gradient(90deg, var(--line-strong) 0 6px, transparent 6px 12px);flex:1;align-self:center;height:3px;margin:-20px -4px 0;position:relative}.pipeline .pipe.flowing{background:repeating-linear-gradient(90deg, var(--copper) 0 6px, transparent 6px 12px);background-size:200% 100%;animation:1s linear infinite flow}@keyframes flow{0%{background-position:0 0}to{background-position:-24px 0}}.result-metric{border-bottom:1px solid var(--line);justify-content:space-between;padding:10px 0;font-size:14px;display:flex}.result-metric .value{font-family:var(--font-mono);font-weight:600}.footer-note{color:var(--ink-soft);border-top:1px solid var(--line);margin-top:40px;padding-top:14px;font-size:12px}
