:root{--bg:#f4f6f9;--panel:#ffffff;--panel-2:#eef1f5;--line:#d3dae3;--text:#1a2029;--fg:#1a2029;--muted:#5c6773;--accent:#1668c4;--warn:#8a5a00;--bad:#c0322b;--good:#1c7a3e;--on-accent:#ffffff;--pressed:#dbeafe;--pressed-line:#1668c4;--mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font:14px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}.app{display:grid;grid-template-columns:320px 1fr 340px;height:calc(100vh - 44px);overflow:hidden}.topbar{position:relative;display:flex;align-items:center;justify-content:center;height:44px;border-bottom:1px solid var(--line);background:var(--panel)}.topbar .brand{position:absolute;left:16px;font:600 13px var(--mono);letter-spacing:1.2px;color:var(--text)}.topbar nav{display:flex;gap:2px}.topbar nav a{padding:6px 16px;border-radius:6px;font-size:12px;color:var(--muted);text-decoration:none;letter-spacing:.3px}.topbar nav a:hover{background:var(--panel-2);color:var(--text)}.topbar nav a.on{background:var(--accent);color:var(--on-accent);font-weight:600}@media (max-width:720px){.topbar .brand{display:none}}@media (max-width:1100px){.app{grid-template-columns:1fr;grid-template-rows:auto 60vh auto;height:auto;overflow:auto}}.col{overflow-y:auto;border-right:1px solid var(--line);padding:16px}.col:last-child{border-right:none;border-left:1px solid var(--line)}.stage{position:relative;background:radial-gradient(circle at 50% 40%,#ffffff 0,#e4e9f0 72%);min-height:320px}h1{font-size:17px;margin:0 0 2px;letter-spacing:.3px}h2{text-transform:uppercase;letter-spacing:.9px;margin:22px 0 8px;border-bottom:1px solid var(--line);padding-bottom:5px}.sub,h2{font-size:12px;color:var(--muted)}.sub{margin:0 0 4px}.field,label{display:block;margin:10px 0;font-size:12px;color:var(--muted)}.field>span,label>span{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:3px}label b{color:var(--text);font-family:var(--mono);font-weight:500}input[type=number],input[type=text],select{width:100%;height:32px;line-height:1.2;background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:5px;padding:0 8px;font-family:var(--mono);font-size:13px}input[type=range]{width:100%;accent-color:var(--accent);margin:0}input:focus,select:focus{outline:1px solid var(--accent);border-color:var(--accent)}.row{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;align-items:start;grid-gap:0 10px;gap:0 10px;margin:10px 0}.row>*{grid-row:span 2}.row>.field,.row>label{display:grid;grid-template-rows:subgrid;grid-gap:3px;gap:3px;margin:0}.row>.field>span,.row>label>span{margin-bottom:0}.check{display:flex;align-items:center;gap:8px;margin:10px 0}.check,button{color:var(--text);font-size:13px;cursor:pointer}button{background:var(--panel-2);border:1px solid var(--line);border-radius:5px;padding:8px 10px;width:100%}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--pressed);border-color:var(--pressed-line)}table.data{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:12px}table.data td{padding:3px 0;border-bottom:1px solid var(--line)}table.data td:last-child{text-align:right;color:var(--text)}table.data td:first-child{color:var(--muted);font-family:system-ui,sans-serif}.msg{border-radius:5px;padding:8px 10px;font-size:12px;margin:8px 0;border-left:3px solid;background:var(--panel)}.msg.warn{border-color:var(--warn)}.msg.bad{border-color:var(--bad)}.msg.info{border-color:var(--accent)}.pill{display:inline-block;font-family:var(--mono);font-size:11px;padding:1px 6px;border-radius:10px;border:1px solid var(--line);color:var(--muted)}.pill.good{border-color:var(--good);color:var(--good)}.pill.warn{border-color:var(--warn);color:var(--warn)}.matches{display:grid;grid-gap:6px;gap:6px;margin:8px 0}.matches button{display:grid;grid-template-columns:1fr auto;grid-gap:2px 10px;gap:2px 10px;text-align:left;padding:7px 9px}.matches button strong{font-family:var(--mono);font-size:12.5px;font-weight:500}.matches button em{font-style:normal;font-family:var(--mono);color:var(--accent);font-size:12.5px;text-align:right}.matches button span{grid-column:1/-1;color:var(--muted);font-size:11px}.tabs{display:flex;gap:6px;margin:4px 0 12px}.tabs button{width:auto;flex:1 1;padding:7px 8px;font-size:12.5px}.tabs button[aria-pressed=true]{background:var(--pressed);border-color:var(--pressed-line);color:var(--text)}.bearing{border:1px solid var(--line);border-radius:6px;padding:9px 10px;margin:7px 0;background:var(--panel)}.bearing header{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);margin-bottom:4px}.bearing .dims{color:var(--muted);font-family:var(--mono);font-size:12px}.verdict{position:absolute;left:16px;right:16px;top:16px;background:#fff5f4;color:var(--text);border:1px solid var(--bad);border-left-width:4px;border-radius:6px;box-shadow:0 2px 10px rgb(0 0 0/8%);padding:12px 14px;font-size:12.5px;max-height:calc(100% - 32px);overflow-y:auto}.verdict strong{display:block;color:var(--bad);font-size:13px;margin-bottom:6px;letter-spacing:.2px}.verdict p{margin:4px 0;color:var(--text)}.fixes{display:flex;flex-wrap:wrap;gap:6px}.fixes button{width:auto;font-family:var(--mono);font-size:12px;padding:5px 9px;display:flex;gap:8px;align-items:baseline}.fixes button span{color:var(--muted);font-size:11px}.viewpoint{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:2;display:flex;flex-direction:column;align-items:center;gap:4px}.viewpoint .vbox{display:flex;gap:2px;padding:2px;background:rgba(255,255,255,.86);border:1px solid var(--line);border-radius:6px;box-shadow:0 1px 4px rgb(0 0 0/6%)}.viewpoint button{width:auto;display:flex;align-items:center;gap:4px;padding:3px 7px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--muted);font-size:10.5px;font-weight:600;letter-spacing:.6px;line-height:1}.viewpoint button.icon{padding:3px 5px}.viewpoint button:hover:not(:disabled){color:var(--text);border-color:var(--line)}.viewpoint button.on{background:var(--pressed);border-color:var(--pressed-line);color:var(--accent)}.overlay{position:absolute;left:12px;bottom:12px;font-family:var(--mono);font-size:11px;color:var(--text);background:rgba(255,255,255,.86);border:1px solid var(--line);border-radius:5px;padding:6px 9px;pointer-events:none;white-space:pre}a{color:var(--accent)}.schematic{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:18px 18px 62px}.schematic svg{flex:1 1;min-height:0;width:100%;overflow:visible}.schematic .paper{fill:var(--panel)}.schematic .cs-body{fill:#9aa5b1;stroke:#47525e;stroke-width:1.1}.schematic .cs-tooth{fill:#9aa5b1;stroke:#47525e;stroke-width:.8;stroke-linejoin:round}.schematic .pitch{fill:none;stroke:#47525e;stroke-width:.5;opacity:.45}.schematic .wg-cam{fill:#8a9a1f;stroke:#3a424b;stroke-width:1}.schematic .wg-race{fill:#6f7a17;stroke:#3a424b;stroke-width:.6}.schematic .wg-ball{fill:#b8c94a;stroke:#3a424b;stroke-width:.6}.schematic .wg-bore{fill:var(--panel);stroke:#3a424b;stroke-width:1}.schematic .major-axis{stroke:#6b7420;stroke-width:1;stroke-dasharray:6 4;opacity:.8}.schematic .fs-band{fill:#4257c4;stroke:#2b3691;stroke-width:.7}.schematic .fs-tooth{stroke:#2b3691;stroke-width:.6;stroke-linejoin:round}.schematic .legend{display:flex;flex-wrap:wrap;gap:6px 16px;justify-content:center;font:11px var(--mono);color:var(--muted)}.schematic .legend span{display:inline-flex;align-items:center;gap:6px}.schematic .legend i{width:10px;height:10px;border-radius:2px;display:inline-block}.viewmode{display:inline-flex;gap:0;border:1px solid var(--line);border-radius:6px;overflow:hidden}.viewmode button{white-space:nowrap;border:none;border-radius:0;background:var(--panel);font-size:11px;padding:6px 12px}.viewmode.spread{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;width:100%}.viewmode.spread button{padding:6px 4px;min-width:0;overflow:hidden;text-overflow:ellipsis}.viewmode button.on{background:var(--accent);color:var(--on-accent);font-weight:600}.more{margin:10px 0 4px;border-top:1px solid var(--line);padding-top:8px}.more summary{cursor:pointer;font-size:11px;text-transform:uppercase;letter-spacing:.9px;color:var(--muted);list-style:none}.more summary::-webkit-details-marker{display:none}.more summary:before{content:"▸ ";display:inline-block;transition:transform .12s}.more[open] summary:before{content:"▾ "}.more summary:hover{color:var(--text)}.pairgrid{display:grid;grid-template-columns:64px 1fr 1fr;grid-gap:6px 8px;gap:6px 8px;align-items:center;margin:8px 0}.pairgrid .gearhead{font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.8px;color:var(--muted);text-align:center}.pairgrid .rowlabel{font-size:11px;color:var(--muted)}.pairgrid .readout{font:12px var(--mono);color:var(--text);text-align:center;opacity:.75}.pairgrid input{width:100%;margin:0}.pairgrid input:disabled{opacity:.35}.findfoot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:7px}.findfoot .where{font:10px var(--mono);opacity:.7;letter-spacing:.3px}.findfoot button{flex:none;padding:4px 10px;font-size:11px;white-space:nowrap}.exportgrid{display:grid;grid-template-columns:minmax(64px,1.4fr) 1fr 1fr;grid-gap:6px 8px;gap:6px 8px;align-items:center;margin-top:14px}.exportgrid .gearhead{font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.8px;color:var(--muted);text-align:center}.exportgrid .rowlabel{font:11px var(--mono);color:var(--muted)}.exportgrid button{width:100%;padding:7px 4px;font-size:11px}.hint{font-size:10px;opacity:.6;letter-spacing:0}.cuts{display:block;margin:4px 0 2px;font-size:11px;line-height:1.45;color:var(--muted)}.settingsbar{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:4px;gap:4px;margin:10px 0 16px}.settingsbar button{padding:5px 2px;font-size:11px;white-space:nowrap}.section{border-bottom:1px solid var(--line)}.section>summary{display:flex;align-items:baseline;gap:8px;cursor:pointer;list-style:none;padding:9px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.section>summary::-webkit-details-marker{display:none}.section>summary:before{content:"";flex:none;width:0;height:0;border-left:4px solid var(--muted);border-top:3.5px solid transparent;border-bottom:3.5px solid transparent;transform-origin:25% 50%;transition:transform .12s ease}.section[open]>summary:before{transform:rotate(90deg)}.section>summary:hover .sectionTitle{color:var(--fg)}.sectionTitle{font-size:12px;text-transform:uppercase;letter-spacing:.9px;color:var(--muted)}.sectionSummary{margin-left:auto;font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--fg);opacity:.75}.sectionBody{padding:2px 0 12px}.section[open]>summary .sectionSummary{display:none}.sectionDetail{margin:0 0 10px;font-size:12px;line-height:1.5;color:var(--muted)}.sectionBody>h2:first-child:not(.cutTo),:root[data-explain=off] .cuts:not(.always),:root[data-explain=off] .sub:not(.always){display:none}.topbarTools{position:absolute;right:16px;display:flex;align-items:center;gap:6px}.explainToggle{position:static;width:auto;white-space:nowrap;font-size:11px;text-transform:uppercase;letter-spacing:.9px;padding:4px 10px;border-radius:999px;color:var(--muted);background:transparent;border:1px solid var(--line)}.explainToggle:hover{color:var(--fg)}.explainToggle.on{color:var(--fg);border-color:var(--accent,#1668c4)}.inlineReset{width:auto;padding:1px 7px;font-size:10px;text-transform:uppercase;letter-spacing:.6px;border-radius:999px;color:var(--muted);background:transparent}.inlineReset:hover{color:var(--fg)}.col label{position:relative}.col label>span{display:block;padding-right:5.5em}.col label>span>b{position:absolute;top:0;right:0;white-space:nowrap}.col label.check,.col label.check>span{padding-right:0}.parts{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0 2px}.parts button{font-size:11px;padding:4px 9px;border-radius:5px;white-space:nowrap}.parts button.on{background:var(--accent);color:var(--on-accent);font-weight:600;border-color:var(--accent)}.parts button.ghost{border-style:dashed;color:var(--muted)}.parts button.ghost.on{color:var(--on-accent);border-style:solid}:root:not([data-adv=on]) .adv{display:none}:root:not([data-adv=on]) .row:not(:has(>:not(.adv))){display:none}.verdict .fix{display:block;margin-top:3px;font-weight:600;color:var(--bad)}