Halves are a straight 104 split: 36 left, 39 right

Labelled layouts for both halves, and the overview redrawn from the real
shapes rather than a placeholder ergo core. The 36/39 asymmetry means the two
halves are separate board designs, not one file mirrored - README and BOM
updated to match.

100 of the 104 positions now have a physical key; only Insert, PrtSc, ScrLk
and Pause need a layer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
William Rickert
2026-08-27 14:52:06 -05:00
co-authored by Claude Opus 5
parent 1e335b7ba2
commit bf6388a061
5 changed files with 221 additions and 102 deletions
+14 -5
View File
@@ -11,7 +11,8 @@ Status: **design**. No boards ordered, no firmware written.
| Board | Qty | Keys | Carries |
|---|---|---|---|
| `hardware/half` | 2 (mirrored) | TBD — layout not designed | MCU, matrix, USB-C, SBU split link |
| `hardware/half-left` | 1 | **36** | MCU, matrix, USB-C, SBU split link |
| `hardware/half-right` | 1 | **39** | MCU, matrix, USB-C, SBU split link |
| `hardware/numpad` | 1 | 25 (16 numpad + 9 nav) | MCU, matrix, 1 encoder, **CH334R hub**, 3 downstream ports |
**Numpad layout is settled** — see `docs/numpad-layout.svg`, and
@@ -145,11 +146,19 @@ socket pads off. FR4 plate is just another JLC board.
Use [perigoso/keyswitch-kicad-library](https://github.com/perigoso/keyswitch-kicad-library)
for footprints — don't draw them.
### Mirrored board files, not a reversible PCB
### The halves are two different boards
The socket footprint isn't mirror-symmetric, so a reversible board needs two
socket footprints per key with one populated. Two mirrored layouts sharing one
schematic and one BOM is simpler and keeps everything that mattered.
Splitting a full 104 at the 6/T/G/B boundary gives **36 keys left, 39 right**
the right side inherits Backspace, Enter, both brackets, the backslash and an
extra bottom-row key. They are therefore *not* mirrors, and the earlier plan of
one layout flipped for both halves does not survive.
Two separate designs: two schematics, two layouts, two fab setups, different
diode and socket counts. A reversible PCB was never on the table anyway — the
hotswap socket footprint isn't mirror-symmetric, so it would have needed two
socket footprints per key with one populated.
See `docs/half-left.svg` and `docs/half-right.svg`.
### RGB: numpad underglow only
+8 -6
View File
@@ -16,11 +16,12 @@ ALL,MCU,R1-R2,2,22R 0402,FRC0402F22R0TS,C2929994,0402,Extended,0.0007,"USB D+/D-
ALL,MCU,R3-R4,2,5.1k 0402,JLC basic library,-,0402,Basic,0.002,"USB-C CC1/CC2 pull-DOWN (Rd - device side)"
ALL,MCU,R5,1,1.5k 0402,JLC basic library,-,0402,Basic,0.002,"*** SWAP-DEPENDENT *** D+ pull-up. POPULATE for STM32F103. DNF for CH32L103 (internal 1.5k via RB_UC_DEV_PU_EN)"
ALL,MCU,R6-R7,2,10k 0402,FRC0402F1002TS,C25744,0402,Basic,0.003,"BOOT0 pulldown, BOOT1/PB2 pulldown"
HALF,Matrix,D1-Dn,1,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"One per key. Qty per your layout"
HALF,Split,R14,1,100R 0402,JLC basic library,-,0402,Basic,0.002,"Series on the SBU net between connector and MCU USART pin"
HALF,Split,D-ESD,1,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"On the SBU net - user-exposed signal going to a GPIO"
HALF,Split,J3,1,3-pin header DNF,JST SH,-,-,Consigned,0.02,"*** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing"
HALF,Split,-,-,SBU1+SBU2 TIE,-,-,-,-,0.00,"Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor"
HALF-L,Matrix,D1-D36,36,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Left half: 36 keys"
HALF-R,Matrix,D1-D39,39,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Right half: 39 keys"
HALF-L/R,Split,R14,1,100R 0402,JLC basic library,-,0402,Basic,0.002,"Series on the SBU net between connector and MCU USART pin"
HALF-L/R,Split,D-ESD,1,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"On the SBU net - user-exposed signal going to a GPIO"
HALF-L/R,Split,J3,1,3-pin header DNF,JST SH,-,-,Consigned,0.02,"*** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing"
HALF-L/R,Split,-,-,SBU1+SBU2 TIE,-,-,-,-,0.00,"Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor"
NUMPAD,DNF,J1/U3/R3/R4/R5,0,DO NOT POPULATE,-,-,-,-,0.00,"*** From the ALL block: numpad MCU has NO connector of its own. Its D+/D- route internally to hub downstream port 1. No connector = no ESD part and no CC resistors needed. Saves ~$0.19"
NUMPAD,Matrix,D1-D25,25,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"25 keys: 16 numpad (no Num key) + 9 nav"
NUMPAD,Encoder,ENC1,1,EC11 detented,EC11L1525G01,C2991196,THT,Extended,1.27,"VOLUME - detented, which is what a stock EC11 already is. Occupies a 2u cell so a full-size knob fits. THT: hand-solder or JLC THT surcharge"
@@ -35,7 +36,8 @@ NUMPAD,Hub,U8-U10,3,Ideal diode / OCP,CH213K,C5456874,SOT-23-3,Extended,0.073,"V
NUMPAD,Hub,R8-R13,6,56k 0402,FRC0402F5602TS,C2906875,0402,Extended,0.0018,"Rp pull-UPS on CC1/CC2 of each downstream port - host side. NOT 5.1k"
NUMPAD,SBU,-,-,SBU PASS-THROUGH,-,-,-,-,0.00,"*** Passive trace *** Tie SBU1+SBU2 on J5 (left half) and on J6 (right half), then connect the two nets together. Carries QMK split_common UART between the halves. Numpad MCU does NOT touch this net"
NUMPAD,SBU,D-ESD2,2,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"One per half-port SBU net"
HALF,Switches,SW-,1,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"One per key. BOTTOM SIDE. Alt: C49352235 (CPG151101S11-2)"
HALF-L,Switches,SW-,36,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"BOTTOM SIDE. Alt: C49352235"
HALF-R,Switches,SW-,39,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"BOTTOM SIDE. Alt: C49352235"
NUMPAD,Switches,SW-,25,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"One per key. BOTTOM SIDE"
NOTE,Assembly,-,-,SINGLE-SIDED,-,-,-,-,-,"Put ALL SMD on the BOTTOM: sockets, MCU, passives, diodes, and any reverse-mount SK6812MINI-E. Top face bare except switch holes. Keeps JLC to one assembly pass"
NOTE,Mechanical,-,-,PLATE REQUIRED,-,-,-,-,-,"Hotswap needs a switch plate or socket pads tear off during switch insertion. FR4 plate = just another JLC board"
1 Board Section Ref Qty Value MPN LCSC Package JLC Unit USD Notes
16 ALL MCU R3-R4 2 5.1k 0402 JLC basic library - 0402 Basic 0.002 USB-C CC1/CC2 pull-DOWN (Rd - device side)
17 ALL MCU R5 1 1.5k 0402 JLC basic library - 0402 Basic 0.002 *** SWAP-DEPENDENT *** D+ pull-up. POPULATE for STM32F103. DNF for CH32L103 (internal 1.5k via RB_UC_DEV_PU_EN)
18 ALL MCU R6-R7 2 10k 0402 FRC0402F1002TS C25744 0402 Basic 0.003 BOOT0 pulldown, BOOT1/PB2 pulldown
19 HALF HALF-L Matrix D1-Dn D1-D36 1 36 1N4148W 1N4148W C81598 SOD-123 Basic 0.011 One per key. Qty per your layout Left half: 36 keys
20 HALF HALF-R Split Matrix R14 D1-D39 1 39 100R 0402 1N4148W JLC basic library 1N4148W - C81598 0402 SOD-123 Basic 0.002 0.011 Series on the SBU net between connector and MCU USART pin Right half: 39 keys
21 HALF HALF-L/R Split D-ESD R14 1 ESD 5V bidirectional 100R 0402 PESD5V0S1BA JLC basic library C2827694 - SOD-323 0402 Extended Basic 0.036 0.002 On the SBU net - user-exposed signal going to a GPIO Series on the SBU net between connector and MCU USART pin
22 HALF HALF-L/R Split J3 D-ESD 1 3-pin header DNF ESD 5V bidirectional JST SH PESD5V0S1BA - C2827694 - SOD-323 Consigned Extended 0.02 0.036 *** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing On the SBU net - user-exposed signal going to a GPIO
23 HALF HALF-L/R Split - J3 - 1 SBU1+SBU2 TIE 3-pin header DNF - JST SH - - - Consigned 0.00 0.02 Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor *** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing
24 HALF-L/R Split - - SBU1+SBU2 TIE - - - - 0.00 Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor
25 NUMPAD DNF J1/U3/R3/R4/R5 0 DO NOT POPULATE - - - - 0.00 *** From the ALL block: numpad MCU has NO connector of its own. Its D+/D- route internally to hub downstream port 1. No connector = no ESD part and no CC resistors needed. Saves ~$0.19
26 NUMPAD Matrix D1-D25 25 1N4148W 1N4148W C81598 SOD-123 Basic 0.011 25 keys: 16 numpad (no Num key) + 9 nav
27 NUMPAD Encoder ENC1 1 EC11 detented EC11L1525G01 C2991196 THT Extended 1.27 VOLUME - detented, which is what a stock EC11 already is. Occupies a 2u cell so a full-size knob fits. THT: hand-solder or JLC THT surcharge
36 NUMPAD Hub R8-R13 6 56k 0402 FRC0402F5602TS C2906875 0402 Extended 0.0018 Rp pull-UPS on CC1/CC2 of each downstream port - host side. NOT 5.1k
37 NUMPAD SBU - - SBU PASS-THROUGH - - - - 0.00 *** Passive trace *** Tie SBU1+SBU2 on J5 (left half) and on J6 (right half), then connect the two nets together. Carries QMK split_common UART between the halves. Numpad MCU does NOT touch this net
38 NUMPAD SBU D-ESD2 2 ESD 5V bidirectional PESD5V0S1BA C2827694 SOD-323 Extended 0.036 One per half-port SBU net
39 HALF HALF-L Switches SW- 1 36 MX hotswap socket CPG151101S11 C41430893 SMD 14.5x5.9mm Extended 0.037 One per key. BOTTOM SIDE. Alt: C49352235 (CPG151101S11-2) BOTTOM SIDE. Alt: C49352235
40 HALF-R Switches SW- 39 MX hotswap socket CPG151101S11 C41430893 SMD 14.5x5.9mm Extended 0.037 BOTTOM SIDE. Alt: C49352235
41 NUMPAD Switches SW- 25 MX hotswap socket CPG151101S11 C41430893 SMD 14.5x5.9mm Extended 0.037 One per key. BOTTOM SIDE
42 NOTE Assembly - - SINGLE-SIDED - - - - - Put ALL SMD on the BOTTOM: sockets, MCU, passives, diodes, and any reverse-mount SK6812MINI-E. Top face bare except switch holes. Keeps JLC to one assembly pass
43 NOTE Mechanical - - PLATE REQUIRED - - - - - Hotswap needs a switch plate or socket pads tear off during switch insertion. FR4 plate = just another JLC board
+42
View File
@@ -0,0 +1,42 @@
<svg width="100%" viewBox="0 0 680 614" role="img" xmlns="http://www.w3.org/2000/svg">
<title>Left half — 36 keys</title><desc>The left side of a 104 layout, split at the 6 / T / G / B boundary.</desc>
<text class="th" x="18" y="24">Left half — 36 keys</text>
<text class="ts" x="18" y="44">The left side of a 104 layout, split at the 6 / T / G / B boundary.</text>
<g class="c-teal"><rect x="51" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="82" y="112" text-anchor="middle">Esc</text></g>
<g class="c-teal"><rect x="187" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="218" y="112" text-anchor="middle">F1</text></g>
<g class="c-teal"><rect x="255" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="286" y="112" text-anchor="middle">F2</text></g>
<g class="c-teal"><rect x="323" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="354" y="112" text-anchor="middle">F3</text></g>
<g class="c-teal"><rect x="391" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="422" y="112" text-anchor="middle">F4</text></g>
<g class="c-teal"><rect x="493" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="524" y="112" text-anchor="middle">F5</text></g>
<g class="c-teal"><rect x="561" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="592" y="112" text-anchor="middle">F6</text></g>
<g class="c-teal"><rect x="51" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="82" y="214" text-anchor="middle">`</text></g>
<g class="c-teal"><rect x="119" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="150" y="214" text-anchor="middle">1</text></g>
<g class="c-teal"><rect x="187" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="218" y="214" text-anchor="middle">2</text></g>
<g class="c-teal"><rect x="255" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="286" y="214" text-anchor="middle">3</text></g>
<g class="c-teal"><rect x="323" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="354" y="214" text-anchor="middle">4</text></g>
<g class="c-teal"><rect x="391" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="422" y="214" text-anchor="middle">5</text></g>
<g class="c-teal"><rect x="459" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="490" y="214" text-anchor="middle">6</text></g>
<g class="c-teal"><rect x="51" y="246" width="97" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="100" y="282" text-anchor="middle">Tab</text></g>
<g class="c-teal"><rect x="153" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="184" y="282" text-anchor="middle">Q</text></g>
<g class="c-teal"><rect x="221" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="252" y="282" text-anchor="middle">W</text></g>
<g class="c-teal"><rect x="289" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="320" y="282" text-anchor="middle">E</text></g>
<g class="c-teal"><rect x="357" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="388" y="282" text-anchor="middle">R</text></g>
<g class="c-teal"><rect x="425" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="456" y="282" text-anchor="middle">T</text></g>
<g class="c-teal"><rect x="51" y="314" width="114" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="108" y="350" text-anchor="middle">Caps</text></g>
<g class="c-teal"><rect x="170" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="202" y="350" text-anchor="middle">A</text></g>
<g class="c-teal"><rect x="238" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="270" y="350" text-anchor="middle">S</text></g>
<g class="c-teal"><rect x="306" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="338" y="350" text-anchor="middle">D</text></g>
<g class="c-teal"><rect x="374" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="406" y="350" text-anchor="middle">F</text></g>
<g class="c-teal"><rect x="442" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="474" y="350" text-anchor="middle">G</text></g>
<g class="c-teal"><rect x="51" y="382" width="148" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="125" y="418" text-anchor="middle">Shift</text></g>
<g class="c-teal"><rect x="204" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="236" y="418" text-anchor="middle">Z</text></g>
<g class="c-teal"><rect x="272" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="304" y="418" text-anchor="middle">X</text></g>
<g class="c-teal"><rect x="340" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="372" y="418" text-anchor="middle">C</text></g>
<g class="c-teal"><rect x="408" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="440" y="418" text-anchor="middle">V</text></g>
<g class="c-teal"><rect x="476" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="508" y="418" text-anchor="middle">B</text></g>
<g class="c-teal"><rect x="51" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="91" y="486" text-anchor="middle">Ctrl</text></g>
<g class="c-teal"><rect x="136" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="176" y="486" text-anchor="middle">Win</text></g>
<g class="c-teal"><rect x="221" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="261" y="486" text-anchor="middle">Alt</text></g>
<g class="c-teal"><rect x="306" y="450" width="165" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="388" y="486" text-anchor="middle">Space</text></g>
<text class="ts" x="18" y="558">Widest row is the function row at 8.5u — about 162 mm. Thumb key is a 2.5u space.</text>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

+45
View File
@@ -0,0 +1,45 @@
<svg width="100%" viewBox="0 0 680 614" role="img" xmlns="http://www.w3.org/2000/svg">
<title>Right half — 39 keys</title><desc>The right side of the same 104. PrtSc, ScrLk, Pause and Insert are not on any board.</desc>
<text class="th" x="18" y="24">Right half — 39 keys</text>
<text class="ts" x="18" y="44">The right side of the same 104. PrtSc, ScrLk, Pause and Insert are not on any board.</text>
<g class="c-purple"><rect x="196" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="227" y="112" text-anchor="middle">F7</text></g>
<g class="c-purple"><rect x="264" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="295" y="112" text-anchor="middle">F8</text></g>
<g class="c-purple"><rect x="366" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="397" y="112" text-anchor="middle">F9</text></g>
<g class="c-purple"><rect x="434" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="465" y="112" text-anchor="middle">F10</text></g>
<g class="c-purple"><rect x="502" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="533" y="112" text-anchor="middle">F11</text></g>
<g class="c-purple"><rect x="570" y="76" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="601" y="112" text-anchor="middle">F12</text></g>
<g class="c-purple"><rect x="94" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="125" y="214" text-anchor="middle">7</text></g>
<g class="c-purple"><rect x="162" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="193" y="214" text-anchor="middle">8</text></g>
<g class="c-purple"><rect x="230" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="261" y="214" text-anchor="middle">9</text></g>
<g class="c-purple"><rect x="298" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="329" y="214" text-anchor="middle">0</text></g>
<g class="c-purple"><rect x="366" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="397" y="214" text-anchor="middle">-</text></g>
<g class="c-purple"><rect x="434" y="178" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="465" y="214" text-anchor="middle">=</text></g>
<g class="c-purple"><rect x="502" y="178" width="131" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="567" y="214" text-anchor="middle">Bksp</text></g>
<g class="c-purple"><rect x="60" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="91" y="282" text-anchor="middle">Y</text></g>
<g class="c-purple"><rect x="128" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="159" y="282" text-anchor="middle">U</text></g>
<g class="c-purple"><rect x="196" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="227" y="282" text-anchor="middle">I</text></g>
<g class="c-purple"><rect x="264" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="295" y="282" text-anchor="middle">O</text></g>
<g class="c-purple"><rect x="332" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="363" y="282" text-anchor="middle">P</text></g>
<g class="c-purple"><rect x="400" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="431" y="282" text-anchor="middle">[</text></g>
<g class="c-purple"><rect x="468" y="246" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="499" y="282" text-anchor="middle">]</text></g>
<g class="c-purple"><rect x="536" y="246" width="97" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="584" y="282" text-anchor="middle">\</text></g>
<g class="c-purple"><rect x="76" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="108" y="350" text-anchor="middle">H</text></g>
<g class="c-purple"><rect x="144" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="176" y="350" text-anchor="middle">J</text></g>
<g class="c-purple"><rect x="212" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="244" y="350" text-anchor="middle">K</text></g>
<g class="c-purple"><rect x="280" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="312" y="350" text-anchor="middle">L</text></g>
<g class="c-purple"><rect x="348" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="380" y="350" text-anchor="middle">;</text></g>
<g class="c-purple"><rect x="416" y="314" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="448" y="350" text-anchor="middle">'</text></g>
<g class="c-purple"><rect x="484" y="314" width="148" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="558" y="350" text-anchor="middle">Enter</text></g>
<g class="c-purple"><rect x="110" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="142" y="418" text-anchor="middle">N</text></g>
<g class="c-purple"><rect x="178" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="210" y="418" text-anchor="middle">M</text></g>
<g class="c-purple"><rect x="246" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="278" y="418" text-anchor="middle">,</text></g>
<g class="c-purple"><rect x="314" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="346" y="418" text-anchor="middle">.</text></g>
<g class="c-purple"><rect x="382" y="382" width="63" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="414" y="418" text-anchor="middle">/</text></g>
<g class="c-purple"><rect x="450" y="382" width="182" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="542" y="418" text-anchor="middle">Shift</text></g>
<g class="c-purple"><rect x="42" y="450" width="250" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="168" y="486" text-anchor="middle">Space</text></g>
<g class="c-purple"><rect x="298" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="338" y="486" text-anchor="middle">Alt</text></g>
<g class="c-purple"><rect x="382" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="422" y="486" text-anchor="middle">Win</text></g>
<g class="c-purple"><rect x="468" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="508" y="486" text-anchor="middle">Menu</text></g>
<g class="c-purple"><rect x="552" y="450" width="80" height="63" rx="4" stroke-width="0.5"/><text class="ts" x="592" y="486" text-anchor="middle">Ctrl</text></g>
<text class="ts" x="18" y="558">8.75u wide — about 167 mm. Three more keys than the left, so the two boards are not mirrors.</text>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

+112 -91
View File
@@ -1,94 +1,115 @@
<svg width="100%" viewBox="0 0 680 330" role="img" xmlns="http://www.w3.org/2000/svg">
<title>All three boards to scale</title>
<desc>Left half, right half and numpad drawn at the same key spacing. The halves show a placeholder column-staggered core; the numpad shows its settled six by five layout with the two-unit zero key, tall plus and enter keys, and the two-unit encoder cell.</desc>
<title>All three boards to scale, split from a 104</title>
<desc>Left half thirty-six keys, right half thirty-nine, numpad twenty-five, all drawn at the same key spacing.</desc>
<text class="th" x="18" y="24">All three boards, same scale</text>
<text class="ts" x="18" y="44">One cable to the PC. Both halves plug into the numpad; the split link rides the spare SBU pins.</text>
<g class="c-teal"><rect x="66" y="97" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="66" y="123" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="66" y="149" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="66" y="175" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="92" y="97" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="92" y="123" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="92" y="149" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="92" y="175" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="118" y="92" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="118" y="118" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="118" y="144" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="118" y="170" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="144" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="144" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="144" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="144" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="91" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="117" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="143" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="169" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="196" y="95" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="196" y="121" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="196" y="147" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="196" y="173" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="144" y="206" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="209" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="196" y="214" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="262" y="95" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="262" y="121" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="262" y="147" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="262" y="173" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="288" y="91" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="288" y="117" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="288" y="143" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="288" y="169" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="314" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="314" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="314" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="314" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="92" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="118" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="144" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="170" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="366" y="97" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="366" y="123" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="366" y="149" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="366" y="175" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="392" y="97" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="392" y="123" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="392" y="149" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="392" y="175" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="262" y="214" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="288" y="209" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="314" y="206" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="458" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="458" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="458" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="458" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="458" y="192" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="484" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="484" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="484" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="484" y="192" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="510" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="510" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="510" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="510" y="192" width="49" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="536" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="536" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="536" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="536" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="562" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="562" y="114" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="562" y="140" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="562" y="166" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="562" y="192" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="588" y="88" width="23" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="588" y="114" width="23" height="49" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="588" y="166" width="23" height="49" rx="3" stroke-width="0.5"/></g>
<g class="c-gray"><rect x="484" y="88" width="49" height="23" rx="3" stroke-width="0.5"/></g>
<g class="c-gray"><circle cx="508" cy="101" r="10" stroke-width="0.5"/></g>
<text class="th" x="144" y="278" text-anchor="middle">Left half</text>
<text class="ts" x="144" y="296" text-anchor="middle">layout TBD</text>
<text class="th" x="340" y="278" text-anchor="middle">Right half</text>
<text class="ts" x="340" y="296" text-anchor="middle">mirror of left</text>
<text class="th" x="536" y="278" text-anchor="middle">Numpad</text>
<text class="ts" x="536" y="296" text-anchor="middle">25 keys + knob</text>
<text class="ts" x="18" y="322">Half layouts are a placeholder 6&#215;4 plus three thumbs &#8212; shown for scale only. That is the one decision still open.</text>
<text class="ts" x="18" y="44">100 of a 104 layout&#8217;s keys have a physical home. Only Insert, PrtSc, ScrLk and Pause need a layer.</text>
<g class="c-teal"><rect x="20" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="70" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="95" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="120" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="145" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="182" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="208" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="20" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="45" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="70" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="95" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="120" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="145" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="170" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="20" y="146" width="34" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="58" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="82" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="108" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="132" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="158" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="20" y="172" width="41" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="64" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="89" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="114" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="139" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="164" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="20" y="196" width="53" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="76" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="101" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="126" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="151" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="176" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="20" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="51" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="82" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-teal"><rect x="114" y="222" width="60" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="315" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="377" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="402" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="427" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="452" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="277" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="302" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="327" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="352" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="377" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="402" y="122" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="427" y="122" width="47" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="265" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="290" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="315" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="340" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="365" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="390" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="415" y="146" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="440" y="146" width="34" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="271" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="296" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="321" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="346" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="371" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="396" y="172" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="421" y="172" width="53" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="284" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="308" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="334" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="358" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="384" y="196" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="408" y="196" width="66" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="258" y="222" width="91" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="352" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="384" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="415" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-purple"><rect x="446" y="222" width="28" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="503" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="503" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="503" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="503" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="503" y="184" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="528" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="528" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="528" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="528" y="184" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="553" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="553" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="553" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="578" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="578" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="578" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="578" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="603" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="603" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="603" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="603" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="603" y="184" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="553" y="184" width="47" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="628" y="84" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="628" y="109" width="22" height="47" rx="3" stroke-width="0.5"/></g>
<g class="c-coral"><rect x="628" y="159" width="22" height="47" rx="3" stroke-width="0.5"/></g>
<g class="c-gray"><rect x="528" y="84" width="47" height="22" rx="3" stroke-width="0.5"/></g>
<g class="c-gray"><circle cx="552" cy="96" r="9" stroke-width="0.5"/></g>
<text class="th" x="126" y="280" text-anchor="middle">Left half</text>
<text class="ts" x="126" y="298" text-anchor="middle">36 keys</text>
<text class="th" x="368" y="280" text-anchor="middle">Right half</text>
<text class="ts" x="368" y="298" text-anchor="middle">39 keys</text>
<text class="th" x="578" y="280" text-anchor="middle">Numpad</text>
<text class="ts" x="578" y="298" text-anchor="middle">25 + knob</text>
<text class="ts" x="18" y="322">The halves are not mirrors &#8212; 36 vs 39 keys means two separate board designs, not one file flipped.</text>
</svg>

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 10 KiB