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 | | 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 | | `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 **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) Use [perigoso/keyswitch-kicad-library](https://github.com/perigoso/keyswitch-kicad-library)
for footprints — don't draw them. 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 Splitting a full 104 at the 6/T/G/B boundary gives **36 keys left, 39 right**
socket footprints per key with one populated. Two mirrored layouts sharing one the right side inherits Backspace, Enter, both brackets, the backslash and an
schematic and one BOM is simpler and keeps everything that mattered. 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 ### 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,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,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" 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-L,Matrix,D1-D36,36,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Left half: 36 keys"
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-R,Matrix,D1-D39,39,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Right half: 39 keys"
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-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,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,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,-,-,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/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,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,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" 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,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,-,-,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" 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" 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,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" 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"> <svg width="100%" viewBox="0 0 680 330" role="img" xmlns="http://www.w3.org/2000/svg">
<title>All three boards to scale</title> <title>All three boards to scale, split from a 104</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> <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="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> <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="66" y="97" width="23" height="23" rx="3" stroke-width="0.5"/></g> <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="66" y="123" width="23" height="23" 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="66" y="149" width="23" height="23" 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="66" y="175" width="23" height="23" 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="92" y="97" width="23" height="23" 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="92" y="123" width="23" height="23" 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="92" y="149" width="23" height="23" 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="92" y="175" width="23" height="23" 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="118" y="92" width="23" height="23" 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="118" y="118" width="23" height="23" 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="118" y="144" width="23" height="23" 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="118" y="170" width="23" height="23" 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="144" y="88" width="23" height="23" 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="144" y="114" width="23" height="23" 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="144" y="140" width="23" height="23" 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="144" y="166" width="23" height="23" 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="170" y="91" width="23" height="23" 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="170" y="117" width="23" height="23" 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="170" y="143" width="23" height="23" 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="170" y="169" width="23" height="23" 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="196" y="95" width="23" height="23" 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="196" y="121" width="23" height="23" 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="196" y="147" width="23" height="23" 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="196" y="173" width="23" height="23" 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="144" y="206" width="23" height="23" 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="170" y="209" width="23" height="23" 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="196" y="214" width="23" height="23" 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-purple"><rect x="262" y="95" width="23" height="23" 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-purple"><rect x="262" y="121" width="23" height="23" 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-purple"><rect x="262" y="147" width="23" height="23" 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-purple"><rect x="262" y="173" width="23" height="23" 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-purple"><rect x="288" y="91" width="23" height="23" 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-purple"><rect x="288" y="117" width="23" height="23" 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-purple"><rect x="288" y="143" width="23" height="23" 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-purple"><rect x="288" y="169" width="23" height="23" 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-purple"><rect x="314" y="88" width="23" height="23" 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="314" y="114" width="23" height="23" 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="314" y="140" width="23" height="23" 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="314" y="166" width="23" height="23" 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="340" y="92" width="23" height="23" 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="340" y="118" width="23" height="23" 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="340" y="144" width="23" height="23" 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="340" y="170" width="23" height="23" 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="366" y="97" width="23" height="23" 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="366" y="123" width="23" height="23" 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="366" y="149" width="23" height="23" 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="366" y="175" width="23" height="23" 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="392" y="97" width="23" height="23" 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="392" y="123" width="23" height="23" 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="392" y="149" width="23" height="23" 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="392" y="175" width="23" height="23" 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="262" y="214" width="23" height="23" 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="288" y="209" width="23" height="23" 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="314" y="206" width="23" height="23" 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-coral"><rect x="458" y="88" width="23" height="23" 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-coral"><rect x="458" y="114" width="23" height="23" 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-coral"><rect x="458" y="140" width="23" height="23" 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-coral"><rect x="458" y="166" width="23" height="23" 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-coral"><rect x="458" y="192" width="23" height="23" 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-coral"><rect x="484" y="114" width="23" height="23" 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-coral"><rect x="484" y="140" width="23" height="23" 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-coral"><rect x="484" y="166" width="23" height="23" 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-coral"><rect x="484" y="192" width="23" height="23" 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-coral"><rect x="510" y="114" width="23" height="23" 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-coral"><rect x="510" y="140" width="23" height="23" 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-coral"><rect x="510" y="166" width="23" height="23" 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-coral"><rect x="510" y="192" width="49" height="23" 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-coral"><rect x="536" y="88" width="23" height="23" 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-coral"><rect x="536" y="114" width="23" height="23" 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-coral"><rect x="536" y="140" width="23" height="23" 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-coral"><rect x="536" y="166" width="23" height="23" 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-coral"><rect x="562" y="88" width="23" height="23" 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-coral"><rect x="562" y="114" width="23" height="23" 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-coral"><rect x="562" y="140" width="23" height="23" 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-coral"><rect x="562" y="166" width="23" height="23" 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="562" y="192" width="23" height="23" 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="588" y="88" width="23" height="23" 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="588" y="114" width="23" height="49" 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="588" y="166" width="23" height="49" 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-gray"><rect x="484" y="88" width="49" height="23" 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-gray"><circle cx="508" cy="101" r="10" 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>
<text class="th" x="144" y="278" text-anchor="middle">Left half</text> <g class="c-coral"><rect x="528" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<text class="ts" x="144" y="296" text-anchor="middle">layout TBD</text> <g class="c-coral"><rect x="528" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<text class="th" x="340" y="278" text-anchor="middle">Right half</text> <g class="c-coral"><rect x="528" y="184" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<text class="ts" x="340" y="296" text-anchor="middle">mirror of left</text> <g class="c-coral"><rect x="553" y="109" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<text class="th" x="536" y="278" text-anchor="middle">Numpad</text> <g class="c-coral"><rect x="553" y="134" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<text class="ts" x="536" y="296" text-anchor="middle">25 keys + knob</text> <g class="c-coral"><rect x="553" y="159" width="22" height="22" rx="3" stroke-width="0.5"/></g>
<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> <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> </svg>

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 10 KiB