:root{--font-mono: ui-monospace, "SF Mono", SFMono-Regular, "JetBrains Mono", "Cascadia Code", "Roboto Mono", Menlo, Consolas, monospace;--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;--text-2xs: .72rem;--text-xs: .8rem;--text-sm: .9rem;--text-base: 1rem;--text-md: 1.12rem;--text-lg: clamp(1.3rem, 1.1rem + .9vw, 1.6rem);--text-xl: clamp(1.9rem, 1.5rem + 2vw, 2.7rem);--leading-tight: 1.15;--leading-normal: 1.55;--tracking-label: .14em;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--space-8: 3rem;--space-10: 4.5rem;--radius: 3px;--measure: 880px;--paper: #f5f2ea;--panel: #efeadd;--ink: #1f1d18;--ink-soft: #5b574c;--ink-faint: #6e695c;--hairline: rgba(31, 29, 24, .16);--hairline-strong: rgba(31, 29, 24, .32);--grid-line: rgba(31, 29, 24, .045);--plate-edge: rgba(31, 29, 24, .22);--accent: #7d5516;--accent-soft: rgba(125, 85, 22, .12);--accent-line: rgba(125, 85, 22, .55);--focus: #305a7a}@media (prefers-color-scheme: dark){:root{--paper: #12161c;--panel: #171c24;--ink: #dce1e8;--ink-soft: #98a2ad;--ink-faint: #7d8794;--hairline: rgba(220, 225, 232, .14);--hairline-strong: rgba(220, 225, 232, .28);--grid-line: rgba(220, 225, 232, .038);--plate-edge: rgba(220, 225, 232, .2);--accent: #d6a441;--accent-soft: rgba(214, 164, 65, .14);--accent-line: rgba(214, 164, 65, .6);--focus: #6fa8cf}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background-color:var(--paper);background-image:linear-gradient(var(--grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--grid-line) 1px,transparent 1px);background-size:24px 24px;color:var(--ink);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);overflow-x:hidden}#app{max-width:1120px;margin:0 auto;padding:var(--space-8) var(--space-5) var(--space-10);display:flex;flex-direction:column;gap:var(--space-6)}.num,.err,.teeth,.corr,.tooth-label,.dir-tag,input[type=number],input[type=text],select{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.masthead{border-bottom:1px solid var(--hairline-strong);padding-bottom:var(--space-4)}.masthead h1{margin:0;font-size:var(--text-xl);font-weight:600;letter-spacing:-.01em;line-height:var(--leading-tight)}.masthead .tagline{margin:var(--space-2) 0 0;color:var(--ink-soft);font-size:var(--text-sm);text-transform:uppercase;letter-spacing:var(--tracking-label)}.input-panel label,thead th{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:var(--tracking-label);color:var(--ink-soft);font-weight:600}.masthead .intro{margin:var(--space-3) 0 0;max-width:78ch;color:var(--ink-soft);font-size:var(--text-sm);line-height:var(--leading-normal)}.input-panel{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:var(--space-5);align-items:start}.field-group{margin:0;padding:var(--space-5);border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel)}.field-group>legend{padding:0 var(--space-2);font-size:var(--text-md);font-weight:600;letter-spacing:-.01em;color:var(--ink)}.field-group .group-note{margin:0 0 var(--space-4);color:var(--ink-soft);font-size:var(--text-sm)}.group-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--space-4) var(--space-5)}.input-panel .field{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.group-fields .target-field{grid-column:1 / -1}.input-panel .hint{font-size:var(--text-2xs);color:var(--ink-faint);line-height:var(--leading-tight)}.input-panel input,.input-panel select{width:100%;padding:var(--space-2) var(--space-3);font-size:var(--text-sm);color:var(--ink);background:var(--paper);border:1px solid var(--hairline);border-radius:var(--radius);-webkit-appearance:none;-moz-appearance:none;appearance:none}.input-panel input:focus-visible,.input-panel select:focus-visible,button:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.input-panel select{cursor:pointer}.input-panel [hidden]{display:none}.input-panel .custom-target,.input-panel .custom-ratio-field,.input-panel .going-train-field,.input-panel .gear-range{flex-flow:row wrap;align-items:end;gap:var(--space-2) var(--space-3)}.input-panel .custom-target label,.input-panel .custom-ratio-field label,.input-panel .going-train-field label{flex-basis:100%}.input-panel .gear-range{align-items:center}.input-panel .gear-range label{flex-basis:100%}.input-panel .gear-range input{flex:1;min-width:4rem}.input-panel .range-sep{color:var(--ink-faint);font-family:var(--font-mono)}.schematic-slot:not(:empty){padding:var(--space-5);border:1px solid var(--plate-edge);border-radius:var(--radius);background:var(--panel);overflow-x:auto}.schematic{display:block;height:220px;width:auto;max-width:100%;margin:0 auto}.schematic .plate-line{stroke:var(--hairline-strong);stroke-width:1}.schematic .gear-node{fill:none;stroke:var(--ink-soft);stroke-width:1.25}.schematic .gear-node.idler{stroke:var(--ink-faint);stroke-dasharray:3 3}.schematic .tooth-label{fill:var(--ink);font-size:13px;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.schematic .idler-tag{fill:var(--ink-faint);font-size:9px;font-family:var(--font-sans);text-transform:uppercase;letter-spacing:.08em}.schematic .dir-tag{fill:var(--accent);font-size:10px;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em}.results{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel)}.table-scroll{overflow-x:auto}.results table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.results thead th{text-align:left;padding:var(--space-3);border-bottom:1px solid var(--hairline-strong);white-space:nowrap}.results thead th:nth-child(1),.results thead th:nth-child(3),.results thead th:nth-child(4){text-align:right}.results tbody td{padding:var(--space-3);border-bottom:1px solid var(--hairline);vertical-align:baseline}.results tbody tr:last-child td{border-bottom:none}.results td.num,.results td.err{text-align:right;white-space:nowrap}.results td.teeth{color:var(--ink);white-space:nowrap}.results td.corr{color:var(--ink-soft);min-width:11ch}.results td.corr,.results td.bench-cell{white-space:normal}.results .bench{display:inline-block;font-size:var(--text-2xs);color:var(--ink-soft);border:1px solid var(--hairline);border-radius:var(--radius);padding:1px var(--space-2)}.results tbody tr[data-best=true]{background:var(--accent-soft)}.results tbody tr[data-best=true] td:first-child{position:relative}.results tbody tr[data-best=true] td:first-child:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent)}.results tbody tr[data-best=true] .err{color:var(--accent);font-weight:600}.results .empty{margin:0;padding:var(--space-6);color:var(--ink-soft);text-align:center;font-size:var(--text-sm)}.best-badge{display:inline-block;margin-right:var(--space-1);font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:var(--tracking-label);font-weight:600;color:var(--accent)}.results-legend{margin:var(--space-3) 0 0;max-width:62ch;color:var(--ink-soft);font-size:var(--text-xs);line-height:var(--leading-normal)}.schematic-caption{margin:var(--space-2) 0 0;color:var(--ink-soft);font-size:var(--text-xs);text-align:center}.export-slot{display:flex;gap:var(--space-3);flex-wrap:wrap}button[data-export]{font-family:var(--font-sans);font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:var(--tracking-label);color:var(--ink);background:transparent;border:1px solid var(--hairline-strong);border-radius:var(--radius);padding:var(--space-2) var(--space-4);cursor:pointer;transition:border-color .12s ease,color .12s ease}button[data-export]:hover{border-color:var(--accent-line);color:var(--accent)}@media print{body{background:#fff;color:#000}#app{max-width:none;padding:0;gap:var(--space-4)}.panel-slot,.input-panel,.export-slot,.masthead .intro,.results-legend{display:none!important}.masthead{border-color:#000}.schematic-slot:not(:empty),.results{border-color:#999;background:#fff;break-inside:avoid}.schematic .gear-node{stroke:#000}.schematic .tooth-label,.schematic .dir-tag{fill:#000}.results tbody tr[data-best=true]{background:transparent}.results tbody tr[data-best=true] .err{color:#000}.results tbody tr:not([data-best=true]){color:#666}}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.solve-summary{margin:0;font-size:.85rem;color:var(--ink-soft)}
