@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans+Condensed:wght@500;600&display=swap";:root{--bg:#0b2d55;--bg-deep:#08223f;--panel:#061a32eb;--line:#e6f0ff;--line-dim:#d6e6ff8c;--grid-minor:#96c3ff12;--grid-major:#96c3ff29;--rule:#96c3ff38;--accent:#7fd6ff;--ok:#7ee2b8;--warn:#f5d76e;--adapter:#ffb454;--error:#ff7a7a;--angle:#c9a6ff;--overlay:#08223fe0;--group-bg:#7fd6ff12;--text:#e6f0ff;--muted:#d6e6ff8c;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--cond:"IBM Plex Sans Condensed", "Arial Narrow", sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:light){:root:not([data-theme]){--bg:#eef3fa;--bg-deep:#fff;--panel:#fffffff5;--line:#0d2f5e;--line-dim:#0d2f5e6b;--grid-minor:#1e5ab412;--grid-major:#1e5ab42b;--rule:#0d2f5e29;--accent:#0a6fd6;--angle:#7a3fd1;--ok:#138a5a;--warn:#9a6f00;--adapter:#c76a00;--error:#d23c3c;--text:#0d2142;--muted:#0d214299;--overlay:#ffffffe6;--group-bg:#0a6fd60f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}:root[data-theme=light]{--bg:#eef3fa;--bg-deep:#fff;--panel:#fffffff5;--line:#0d2f5e;--line-dim:#0d2f5e6b;--grid-minor:#1e5ab412;--grid-major:#1e5ab42b;--rule:#0d2f5e29;--accent:#0a6fd6;--angle:#7a3fd1;--ok:#138a5a;--warn:#9a6f00;--adapter:#c76a00;--error:#d23c3c;--text:#0d2142;--muted:#0d214299;--overlay:#ffffffe6;--group-bg:#0a6fd60f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg-deep);color:var(--text);font:13px/1.4 var(--mono)}button,input,select{font:inherit;color:inherit}.splash{letter-spacing:.1em;place-items:center;height:100%;display:grid}.app{grid-template-rows:auto auto 1fr;height:100%;display:grid}:root[data-theme=dark]{--bg:#15171b;--bg-deep:#0d0e11;--panel:#131519f5;--line:#e9eaec;--line-dim:#e9eaec73;--grid-minor:#ffffff09;--grid-major:#ffffff14;--rule:#ffffff1c;--accent:#5fd4c4;--angle:#c4a7ff;--ok:#7ee2b8;--warn:#f5d76e;--adapter:#ffb454;--error:#ff7a7a;--text:#e9eaec;--muted:#e9eaec8c;--overlay:#0d0e11e6;--group-bg:#5fd4c412;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.topbar{border-bottom:1px solid var(--rule);background:var(--bg-deep);flex-wrap:wrap;align-items:center;gap:14px;padding:10px 16px;display:flex}.brand{font:600 16px var(--cond);letter-spacing:.18em}.brand-mark{color:var(--accent)}.brand-sub{color:var(--muted);letter-spacing:.08em;font-weight:500}.field{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);align-items:center;gap:8px;font-size:11px;display:flex}.field.grow{flex:1;min-width:160px}.field.grow input{flex:1}input,select{border:1px solid var(--rule);text-transform:none;letter-spacing:0;color:var(--text);background:0 0;border-radius:2px;padding:5px 8px}select option,select optgroup{background:var(--bg-deep)}input:focus,select:focus,button:focus-visible{outline:1px solid var(--accent);outline-offset:1px}.btn{border:1px solid var(--rule);cursor:pointer;text-transform:uppercase;letter-spacing:.08em;background:0 0;border-radius:2px;padding:6px 12px;font-size:11px}.btn:hover{border-color:var(--accent)}.btn.primary{background:var(--accent);color:var(--bg-deep);border-color:var(--accent);font-weight:600}.btn.ghost{border-style:dashed}.btn.small{margin-top:6px;padding:3px 8px}.save-note{color:var(--ok);font-size:11px}.save-note.err{color:var(--error)}.banner{color:var(--error);cursor:pointer;background:#ff7a7a26;padding:6px 16px}.workspace{grid-template-columns:340px minmax(0,1fr) 340px;min-height:0;display:grid}.panel{background:var(--panel);min-height:0;overflow-y:auto}.parts{border-right:1px solid var(--rule)}.stats{border-left:1px solid var(--rule)}.panel-head{background:var(--bg-deep);z-index:2;border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;padding:12px 14px 8px;display:flex;position:sticky;top:0}h2{font:600 13px var(--cond);letter-spacing:.2em;text-transform:uppercase;margin:0}h3{font:600 11px var(--cond);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);justify-content:space-between;align-items:center;gap:8px;margin:0 0 8px;display:flex}.toggle{color:var(--muted);cursor:pointer;align-items:center;gap:6px;font-size:11px;display:flex}.reqs{border-bottom:1px solid var(--rule)}.reqs-toggle{text-align:left;cursor:pointer;text-transform:uppercase;letter-spacing:.1em;width:100%;color:var(--muted);background:0 0;border:0;align-items:center;gap:6px;padding:8px 14px;font-size:11px;display:flex}.dot-on{background:var(--accent);border-radius:50%;width:6px;height:6px}.reqs-body{gap:6px;padding:0 14px 12px;display:grid}.reqs-body label{color:var(--muted);justify-content:space-between;align-items:center;font-size:12px;display:flex}.reqs-body input{width:64px}.pair{align-items:center;gap:4px;display:flex}.group-name{font:600 10px var(--cond);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);padding:10px 14px 4px}.slot{border-left:2px solid #0000}.slot.hover,.slot.open{border-left-color:var(--accent);background:#7fd6ff0d}.slot-row{text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;width:100%;padding:6px 14px 6px 12px;display:flex}.slot-n{color:var(--muted);font-size:11px}.slot-main{flex:1;min-width:0;display:grid}.slot-label{text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-size:10px}.slot-value{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.slot-value.empty{color:var(--muted);font-style:italic}.sev{border:1px solid var(--line-dim);border-radius:50%;flex:none;width:9px;height:9px}.sev-ok{background:var(--ok);border-color:var(--ok)}.sev-warning{background:var(--warn);border-color:var(--warn)}.sev-adapter{background:var(--adapter);border-color:var(--adapter)}.sev-error{background:var(--error);border-color:var(--error)}.sizes{flex-wrap:wrap;gap:6px;padding:2px 14px 8px 38px;display:flex}.chip{border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:2px;padding:2px 10px}.chip.rec{border-color:var(--ok)}.chip.active{background:var(--accent);color:var(--bg-deep);border-color:var(--accent)}.options{gap:4px;padding:2px 14px 12px 38px;display:grid}.option{text-align:left;border:1px solid var(--rule);cursor:pointer;background:#ffffff05;border-radius:2px;gap:2px;padding:6px 8px;display:grid}.option:hover{border-color:var(--accent)}.option.selected{border-color:var(--accent);background:#7fd6ff1f}.option.st-error,.option.filtered{opacity:.55}.opt-top{justify-content:space-between;gap:8px;display:flex}.opt-name{font-weight:500}.opt-spec,.opt-meta{color:var(--muted);font-size:11px}.opt-meta{gap:12px;display:flex}.opt-reasons{color:var(--warn);font-size:11px;display:grid}.st-error .opt-reasons{color:var(--error)}.st-adapter .opt-reasons{color:var(--adapter)}.badge{text-transform:uppercase;letter-spacing:.08em;white-space:nowrap;border:1px solid;border-radius:2px;height:fit-content;padding:0 5px;font-size:10px}.b-ok{color:var(--ok)}.b-warning{color:var(--warn)}.b-adapter{color:var(--adapter)}.b-error{color:var(--error)}.selected .badge{color:var(--accent)}.hidden-note{color:var(--muted);padding-top:4px;font-size:11px}.drawing{background:var(--bg);min-width:0;min-height:0;position:relative;overflow:hidden}.bp-wrap{position:absolute;inset:0}.bp{width:100%;height:100%;display:block}.grid-minor{fill:none;stroke:var(--grid-minor);stroke-width:1px}.grid-major{fill:none;stroke:var(--grid-major);stroke-width:1.4px}.ground{stroke:var(--line-dim);stroke-width:2px;stroke-dasharray:30 8 4 8}.center line,line.center{stroke:var(--accent);stroke-width:1.2px;stroke-dasharray:24 6 4 6;opacity:.6}.bp-part{cursor:pointer}.bp-part *{fill:none;stroke:var(--line);stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round;transition:stroke .12s}.bp-part .tube-i{stroke:var(--bg)}.bp-part .tube-o{stroke:var(--line);stroke-linecap:butt}.bp-part .tube-i{stroke-linecap:butt}.bp-part.ghost *{stroke:var(--line-dim);stroke-dasharray:8 7;stroke-width:1.6px}.bp-part.ghost .tube-i{display:none}.bp-part.ghost .tube-o{stroke-width:1.6px!important}.bp-part.adp *{stroke:var(--adapter)}.bp-part.err *{stroke:var(--error)}.bp-part.adp .tube-i,.bp-part.err .tube-i{stroke:var(--bg)}.bp-part.hov *,.bp-part.sel *{stroke:var(--accent)}.bp-part.hov .tube-i,.bp-part.sel .tube-i{stroke:var(--bg)}.bp-part.sel .tube-o{filter:drop-shadow(0 0 6px #7fd6ffb3)}.bp-part .tire-o{stroke-width:3px}.bp-part .tire-i,.bp-part .rim{stroke-width:1.6px}.bp-part .spoke,.bp-part .tread,.bp-part .cog{stroke-width:1px}.bp-part .chain{stroke-width:3px;stroke-dasharray:3 4}.bp-part .saddle,.bp-part .caliper,.bp-part .pedal,.bp-part .fd{fill:var(--bg)}.dim line,.dim path{stroke:var(--accent);stroke-width:1.3px;fill:none}.dim .ext{stroke-dasharray:4 5;opacity:.5}.dim text,.callout text{fill:var(--accent);font:500 26px var(--mono);letter-spacing:.04em}.arrowhead{fill:none;stroke:var(--accent);stroke-width:1.4px}.callout circle{fill:var(--accent)}.callout polyline{fill:none;stroke:var(--accent);stroke-width:1.5px}.callout text{fill:var(--line);paint-order:stroke;stroke:var(--bg);stroke-width:8px;font-size:28px}.callout text.sub{fill:var(--accent);font-size:22px}.legend{color:var(--muted);pointer-events:none;flex-wrap:wrap;gap:14px;font-size:11px;display:flex;position:absolute;top:12px;left:14px}.legend span{align-items:center;gap:6px;display:flex}.lg{border-top:2px solid var(--line);width:20px;display:inline-block}.lg.ghost{border-top:2px dashed var(--line-dim)}.lg.adp{border-color:var(--adapter)}.lg.err{border-color:var(--error)}.legend .hint{color:var(--accent)}.titleblock{border:1.5px solid var(--line-dim);background:var(--overlay);pointer-events:none;min-width:240px;font-size:10px;position:absolute;bottom:14px;right:14px}.tb-title{border-bottom:1px solid var(--line-dim);font:600 13px var(--cond);letter-spacing:.14em;padding:6px 10px}.tb-grid{grid-template-columns:auto 1fr;display:grid}.tb-grid>*{border-bottom:1px solid var(--rule);padding:3px 10px}.tb-grid span{color:var(--muted);border-right:1px solid var(--rule)}.tb-grid b{font-weight:500}.bp-empty{background-image:linear-gradient(var(--grid-major) 1px, transparent 1px), linear-gradient(90deg, var(--grid-major) 1px, transparent 1px);background-size:48px 48px;place-items:center;display:grid;position:absolute;inset:0}.bp-empty-box{border:1.5px dashed var(--line-dim);background:var(--bg);max-width:380px;color:var(--muted);padding:24px 28px}.bp-empty-title{font:600 14px var(--cond);letter-spacing:.2em;color:var(--text)}.rider{border-bottom:1px solid var(--rule);grid-template-columns:1fr 1fr;gap:8px;padding:12px 14px;display:grid}.rider label{color:var(--muted);align-items:center;gap:6px;font-size:11px;display:flex}.rider input[type=number]{width:58px}.rider .wide{grid-column:1/-1}.rider input[type=range]{accent-color:var(--accent);flex:1}.readouts{border-bottom:1px solid var(--rule);grid-template-columns:1fr 1fr;display:grid}.readout{border-bottom:1px solid var(--rule);padding:10px 14px}.readout:nth-child(odd){border-right:1px solid var(--rule)}.ro-label{text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-size:10px}.ro-value{font:600 20px var(--cond);letter-spacing:.02em}.ro-value.small{font-size:14px}.ro-note{color:var(--muted);font-size:10px}.block{border-bottom:1px solid var(--rule);padding:12px 14px}details.block summary{cursor:pointer;font:600 11px var(--cond);letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}.kv{grid-template-columns:1fr auto;gap:2px 8px;display:grid}.kv span{color:var(--muted)}.good{color:var(--ok)}.bad{color:var(--adapter)}.upgrade.over{background:#ffb45414}.warn-line{color:var(--adapter);margin-top:6px;font-size:12px}.muted{color:var(--muted);margin-top:6px;font-size:11px}.issue{padding:3px 0;font-size:12px}.issue.err{color:var(--error)}.issue.adp{color:var(--adapter)}.issue.warn{color:var(--warn)}.fit{letter-spacing:.08em;border:1px solid;padding:0 6px;font-size:10px}.fit.ok{color:var(--ok)}.fit.off{color:var(--adapter)}table{border-collapse:collapse;width:100%;font-size:12px}.geo th{color:var(--muted);text-align:right;text-transform:uppercase;letter-spacing:.08em;font-size:10px;font-weight:500}.geo td{text-align:right;border-bottom:1px dotted var(--rule);padding:2px 0}.geo td:first-child{text-align:left;color:var(--muted)}.geo td.delta{color:var(--accent)}.geo td.muted{margin:0}.breakdown td{border-bottom:1px dotted var(--rule);padding:3px 0}.breakdown td:not(:first-child){text-align:right;white-space:nowrap;padding-left:8px}.gears{width:100%}.g-grid{stroke:var(--rule)}.g-tick{fill:var(--muted);font-size:10px}.g-ring{fill:var(--text);font-size:11px}.g-line{stroke:var(--line-dim)}.g-dot{fill:var(--bg-deep);stroke:var(--accent);stroke-width:1.5px}.g-dot.ext{fill:var(--accent)}.verify{color:var(--warn);margin:6px 0;padding-left:18px;font-size:11px}.sources{flex-wrap:wrap;gap:8px;margin-top:6px;font-size:11px;display:flex}.sources a{color:var(--accent)}@media (width<=1100px){.app{height:auto}.workspace{grid-template-columns:1fr}.drawing{order:-1;height:62vh}.panel{overflow:visible}.parts,.stats{border:0;border-top:1px solid var(--rule)}}@media (width<=700px){.titleblock{display:none}}.group-head{background:var(--group-bg);border:0;border-left:3px solid var(--accent);border-top:1px solid var(--rule);cursor:pointer;text-align:left;align-items:center;gap:8px;width:100%;margin-top:2px;padding:9px 14px;display:flex}.group-head .chev{width:12px;color:var(--accent)}.group-head .g-name{font:600 12px var(--cond);letter-spacing:.18em;text-transform:uppercase;flex:1}.group-head .g-count{color:var(--muted);font-size:11px}.group.collapsed .group-head{border-left-color:var(--line-dim)}.head-actions{align-items:center;gap:10px;display:flex}.link-btn{color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;font-size:11px}.styles{flex-wrap:wrap;grid-column:1/-1;gap:4px;display:flex}.styles .chip{padding:2px 8px;font-size:11px}.layers{gap:6px;display:flex;position:absolute;top:10px;right:14px}.layers .chip{background:var(--overlay);font-size:11px}.layers .chip.active{background:var(--accent);color:var(--bg-deep)}.ang path{fill:none;stroke:var(--angle);stroke-width:1.4px}.ang text{fill:var(--angle);font:500 21px var(--mono);paint-order:stroke;stroke:var(--bg);stroke-width:6px}.account{position:relative}.menu{background:var(--bg-deep);border:1px solid var(--rule);z-index:20;min-width:200px;display:grid;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #00000040}.menu .menu-email{color:var(--muted);border-bottom:1px solid var(--rule);padding:8px 12px;font-size:11px}.menu button{text-align:left;cursor:pointer;background:0 0;border:0;padding:8px 12px}.menu button:hover{background:var(--group-bg)}.modal-backdrop{z-index:50;background:#00000073;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--bg-deep);border:1px solid var(--rule);gap:12px;width:min(380px,100%);padding:18px;display:grid}.modal .tabs{border-bottom:1px solid var(--rule);gap:16px;display:flex}.modal .tabs button{cursor:pointer;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 0;font-size:11px}.modal .tabs button.on{color:var(--text);border-bottom-color:var(--accent)}.modal label{color:var(--muted);gap:4px;font-size:11px;display:grid}.modal .actions{justify-content:flex-end;gap:8px;display:flex}.form-error{color:var(--error);font-size:12px}.theme-select{padding:4px 6px;font-size:11px}.icon-btn{border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:2px;width:30px;height:28px}
