@tscircuit/schematic-trace-solver 0.0.86 → 0.0.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.agents/skills/schematic-trace-visualization/SKILL.md +115 -0
  2. package/.github/scripts/import-json-bug-report.ts +15 -1
  3. package/.github/workflows/json-bug-report.yml +3 -2
  4. package/AGENTS.md +22 -0
  5. package/dist/index.js +86 -10
  6. package/lib/solvers/Example28Solver/Example28Solver.ts +46 -10
  7. package/lib/solvers/Example28Solver/countCrossingsWithOtherTraces.ts +19 -0
  8. package/lib/solvers/Example28Solver/scoreSolutionTracePath.ts +26 -0
  9. package/lib/testing/PipelineStageDebugRunner.ts +344 -0
  10. package/package.json +3 -2
  11. package/scripts/debug-pipeline-stages.ts +146 -0
  12. package/site/bug-reports/bug-report-20260706T220324Z.page.tsx +4 -0
  13. package/site/bug-reports/bug-report-20260707T020342Z.page.tsx +4 -0
  14. package/site/bug-reports/bug-report-20260707T092615Z.page.tsx +4 -0
  15. package/site/bug-reports/bug-report-20260707T134549Z.page.tsx +4 -0
  16. package/site/bug-reports/bug-report-20260707T134722Z.page.tsx +4 -0
  17. package/site/bug-reports/bug-report-20260707T140410Z.page.tsx +4 -0
  18. package/site/bug-reports/bug-report-20260707T141025Z.page.tsx +4 -0
  19. package/site/bug-reports/bug-report-20260707T141421Z.page.tsx +4 -0
  20. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +357 -3448
  21. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +64 -0
  22. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.json +233 -0
  23. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.test.ts +12 -0
  24. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +2098 -0
  25. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.json +1392 -0
  26. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.test.ts +12 -0
  27. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +857 -0
  28. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.json +652 -0
  29. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.test.ts +12 -0
  30. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +275 -0
  31. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.json +265 -0
  32. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.test.ts +12 -0
  33. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +950 -0
  34. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.json +610 -0
  35. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.test.ts +12 -0
  36. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +218 -0
  37. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.json +185 -0
  38. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.test.ts +12 -0
  39. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +613 -0
  40. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.json +499 -0
  41. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.test.ts +12 -0
  42. package/tests/examples/__snapshots__/example01.snap.svg +59 -162
  43. package/tests/examples/__snapshots__/example02.snap.svg +64 -273
  44. package/tests/examples/__snapshots__/example03.snap.svg +85 -290
  45. package/tests/examples/__snapshots__/example04.snap.svg +50 -94
  46. package/tests/examples/__snapshots__/example05.snap.svg +73 -191
  47. package/tests/examples/__snapshots__/example06.snap.svg +49 -95
  48. package/tests/examples/__snapshots__/example07.snap.svg +65 -218
  49. package/tests/examples/__snapshots__/example08.snap.svg +61 -143
  50. package/tests/examples/__snapshots__/example09.snap.svg +123 -493
  51. package/tests/examples/__snapshots__/example10.snap.svg +57 -136
  52. package/tests/examples/__snapshots__/example11.snap.svg +64 -173
  53. package/tests/examples/__snapshots__/example12.snap.svg +58 -159
  54. package/tests/examples/__snapshots__/example13.snap.svg +78 -348
  55. package/tests/examples/__snapshots__/example14.snap.svg +77 -293
  56. package/tests/examples/__snapshots__/example15.snap.svg +140 -984
  57. package/tests/examples/__snapshots__/example16.snap.svg +62 -162
  58. package/tests/examples/__snapshots__/example17.snap.svg +67 -198
  59. package/tests/examples/__snapshots__/example18.snap.svg +69 -249
  60. package/tests/examples/__snapshots__/example19.snap.svg +63 -202
  61. package/tests/examples/__snapshots__/example20.snap.svg +60 -148
  62. package/tests/examples/__snapshots__/example21.snap.svg +73 -298
  63. package/tests/examples/__snapshots__/example22.snap.svg +62 -156
  64. package/tests/examples/__snapshots__/example23.snap.svg +66 -172
  65. package/tests/examples/__snapshots__/example24.snap.svg +64 -164
  66. package/tests/examples/__snapshots__/example25.snap.svg +76 -299
  67. package/tests/examples/__snapshots__/example26.snap.svg +64 -164
  68. package/tests/examples/__snapshots__/example27.snap.svg +83 -300
  69. package/tests/examples/__snapshots__/example28.snap.svg +54 -115
  70. package/tests/examples/__snapshots__/example29.snap.svg +257 -1299
  71. package/tests/examples/__snapshots__/example30.snap.svg +91 -293
  72. package/tests/examples/__snapshots__/example31.snap.svg +47 -88
  73. package/tests/examples/__snapshots__/example32.snap.svg +107 -405
  74. package/tests/examples/__snapshots__/example33.snap.svg +71 -180
  75. package/tests/examples/__snapshots__/example34.snap.svg +55 -116
  76. package/tests/examples/__snapshots__/example35.snap.svg +69 -176
  77. package/tests/examples/__snapshots__/example36.snap.svg +65 -159
  78. package/tests/examples/__snapshots__/example37.snap.svg +75 -223
  79. package/tests/examples/__snapshots__/example38.snap.svg +46 -76
  80. package/tests/examples/__snapshots__/example39.snap.svg +51 -106
  81. package/tests/examples/__snapshots__/example40.snap.svg +83 -270
  82. package/tests/examples/__snapshots__/example41.snap.svg +54 -118
  83. package/tests/examples/__snapshots__/example42.snap.svg +67 -194
  84. package/tests/examples/__snapshots__/example43.snap.svg +62 -168
  85. package/tests/examples/__snapshots__/example44.snap.svg +86 -369
  86. package/tests/examples/__snapshots__/example45.snap.svg +60 -169
  87. package/tests/examples/__snapshots__/example46.snap.svg +80 -342
  88. package/tests/examples/__snapshots__/example47.snap.svg +82 -323
  89. package/tests/examples/__snapshots__/example48.snap.svg +64 -167
  90. package/tests/examples/__snapshots__/example49.snap.svg +120 -565
  91. package/tests/examples/__snapshots__/example50.snap.svg +71 -195
  92. package/tests/fixtures/getLastStepGraphicsObject.ts +38 -0
  93. package/tests/fixtures/getLastStepSvg.ts +9 -0
  94. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +67 -218
  95. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +47 -87
  96. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +73 -272
  97. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +284 -0
  98. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +470 -0
  99. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +94 -395
  100. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +88 -467
  101. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +109 -569
  102. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +95 -459
  103. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +64 -176
  104. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +51 -112
  105. package/tests/repros/assets/repro-atmega328p-fault-pullup.input.json +239 -0
  106. package/tests/repros/assets/repro-atmega328p-missing-gnd-netlabel.input.json +432 -0
  107. package/tests/repros/repro-atmega328p-fault-pullup.test.ts +11 -0
  108. package/tests/repros/repro-atmega328p-missing-gnd-netlabel.test.ts +16 -0
  109. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +59 -159
  110. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +54 -118
  111. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +58 -245
  112. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView01.snap.svg +73 -222
  113. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView02.snap.svg +65 -204
  114. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView03.snap.svg +65 -183
  115. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +54 -139
  116. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +61 -215
  117. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +54 -124
@@ -0,0 +1,470 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="100%" height="100%" fill="white" />
3
+ <g>
4
+ <circle data-type="point" data-label="U_MCU.1
5
+ x-" data-x="8.9" data-y="15.5" cx="97.87142665414046" cy="153.54616856797747" r="3" fill="hsl(144, 100%, 50%, 0.8)" />
6
+ </g>
7
+ <g>
8
+ <circle data-type="point" data-label="U_MCU.2
9
+ x-" data-x="8.9" data-y="15.3" cx="97.87142665414046" cy="168.57770795866327" r="3" fill="hsl(145, 100%, 50%, 0.8)" />
10
+ </g>
11
+ <g>
12
+ <circle data-type="point" data-label="U_MCU.3
13
+ x-" data-x="8.9" data-y="15.1" cx="97.87142665414046" cy="183.6092473493493" r="3" fill="hsl(146, 100%, 50%, 0.8)" />
14
+ </g>
15
+ <g>
16
+ <circle data-type="point" data-label="U_MCU.4
17
+ x-" data-x="8.9" data-y="14.9" cx="97.87142665414046" cy="198.64078674003486" r="3" fill="hsl(147, 100%, 50%, 0.8)" />
18
+ </g>
19
+ <g>
20
+ <circle data-type="point" data-label="U_MCU.5
21
+ x-" data-x="8.9" data-y="14.7" cx="97.87142665414046" cy="213.67232613072088" r="3" fill="hsl(148, 100%, 50%, 0.8)" />
22
+ </g>
23
+ <g>
24
+ <circle data-type="point" data-label="U_MCU.6
25
+ x-" data-x="8.9" data-y="14.5" cx="97.87142665414046" cy="228.70386552140667" r="3" fill="hsl(149, 100%, 50%, 0.8)" />
26
+ </g>
27
+ <g>
28
+ <circle data-type="point" data-label="U_MCU.7
29
+ x-" data-x="8.9" data-y="14.3" cx="97.87142665414046" cy="243.73540491209246" r="3" fill="hsl(150, 100%, 50%, 0.8)" />
30
+ </g>
31
+ <g>
32
+ <circle data-type="point" data-label="U_MCU.8
33
+ x-" data-x="8.9" data-y="14.1" cx="97.87142665414046" cy="258.76694430277826" r="3" fill="hsl(151, 100%, 50%, 0.8)" />
34
+ </g>
35
+ <g>
36
+ <circle data-type="point" data-label="U_MCU.9
37
+ x-" data-x="8.9" data-y="13.9" cx="97.87142665414046" cy="273.79848369346405" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
38
+ </g>
39
+ <g>
40
+ <circle data-type="point" data-label="U_MCU.10
41
+ x-" data-x="8.9" data-y="13.700000000000001" cx="97.87142665414046" cy="288.83002308414984" r="3" fill="hsl(192, 100%, 50%, 0.8)" />
42
+ </g>
43
+ <g>
44
+ <circle data-type="point" data-label="U_MCU.11
45
+ x-" data-x="8.9" data-y="13.5" cx="97.87142665414046" cy="303.86156247483564" r="3" fill="hsl(193, 100%, 50%, 0.8)" />
46
+ </g>
47
+ <g>
48
+ <circle data-type="point" data-label="U_MCU.12
49
+ x-" data-x="8.9" data-y="13.3" cx="97.87142665414046" cy="318.89310186552143" r="3" fill="hsl(194, 100%, 50%, 0.8)" />
50
+ </g>
51
+ <g>
52
+ <circle data-type="point" data-label="U_MCU.13
53
+ x-" data-x="8.9" data-y="13.1" cx="97.87142665414046" cy="333.92464125620734" r="3" fill="hsl(195, 100%, 50%, 0.8)" />
54
+ </g>
55
+ <g>
56
+ <circle data-type="point" data-label="U_MCU.14
57
+ x-" data-x="8.9" data-y="12.9" cx="97.87142665414046" cy="348.95618064689313" r="3" fill="hsl(196, 100%, 50%, 0.8)" />
58
+ </g>
59
+ <g>
60
+ <circle data-type="point" data-label="U_MCU.15
61
+ x-" data-x="8.9" data-y="12.7" cx="97.87142665414046" cy="363.98772003757904" r="3" fill="hsl(197, 100%, 50%, 0.8)" />
62
+ </g>
63
+ <g>
64
+ <circle data-type="point" data-label="U_MCU.16
65
+ x-" data-x="8.9" data-y="12.5" cx="97.87142665414046" cy="379.01925942826483" r="3" fill="hsl(198, 100%, 50%, 0.8)" />
66
+ </g>
67
+ <g>
68
+ <circle data-type="point" data-label="U_MCU.17
69
+ x+" data-x="11.1" data-y="12.5" cx="263.2183599516844" cy="379.01925942826483" r="3" fill="hsl(199, 100%, 50%, 0.8)" />
70
+ </g>
71
+ <g>
72
+ <circle data-type="point" data-label="U_MCU.18
73
+ x+" data-x="11.1" data-y="12.7" cx="263.2183599516844" cy="363.98772003757904" r="3" fill="hsl(200, 100%, 50%, 0.8)" />
74
+ </g>
75
+ <g>
76
+ <circle data-type="point" data-label="U_MCU.19
77
+ x+" data-x="11.1" data-y="12.9" cx="263.2183599516844" cy="348.95618064689313" r="3" fill="hsl(201, 100%, 50%, 0.8)" />
78
+ </g>
79
+ <g>
80
+ <circle data-type="point" data-label="U_MCU.20
81
+ x+" data-x="11.1" data-y="13.1" cx="263.2183599516844" cy="333.92464125620734" r="3" fill="hsl(223, 100%, 50%, 0.8)" />
82
+ </g>
83
+ <g>
84
+ <circle data-type="point" data-label="U_MCU.21
85
+ x+" data-x="11.1" data-y="13.3" cx="263.2183599516844" cy="318.89310186552143" r="3" fill="hsl(224, 100%, 50%, 0.8)" />
86
+ </g>
87
+ <g>
88
+ <circle data-type="point" data-label="U_MCU.22
89
+ x+" data-x="11.1" data-y="13.5" cx="263.2183599516844" cy="303.86156247483564" r="3" fill="hsl(225, 100%, 50%, 0.8)" />
90
+ </g>
91
+ <g>
92
+ <circle data-type="point" data-label="U_MCU.23
93
+ x+" data-x="11.1" data-y="13.7" cx="263.2183599516844" cy="288.83002308414984" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
94
+ </g>
95
+ <g>
96
+ <circle data-type="point" data-label="U_MCU.24
97
+ x+" data-x="11.1" data-y="13.9" cx="263.2183599516844" cy="273.79848369346405" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
98
+ </g>
99
+ <g>
100
+ <circle data-type="point" data-label="U_MCU.25
101
+ x+" data-x="11.1" data-y="14.1" cx="263.2183599516844" cy="258.76694430277826" r="3" fill="hsl(228, 100%, 50%, 0.8)" />
102
+ </g>
103
+ <g>
104
+ <circle data-type="point" data-label="U_MCU.26
105
+ x+" data-x="11.1" data-y="14.299999999999999" cx="263.2183599516844" cy="243.73540491209246" r="3" fill="hsl(229, 100%, 50%, 0.8)" />
106
+ </g>
107
+ <g>
108
+ <circle data-type="point" data-label="U_MCU.27
109
+ x+" data-x="11.1" data-y="14.5" cx="263.2183599516844" cy="228.70386552140667" r="3" fill="hsl(230, 100%, 50%, 0.8)" />
110
+ </g>
111
+ <g>
112
+ <circle data-type="point" data-label="U_MCU.28
113
+ x+" data-x="11.1" data-y="14.7" cx="263.2183599516844" cy="213.67232613072088" r="3" fill="hsl(231, 100%, 50%, 0.8)" />
114
+ </g>
115
+ <g>
116
+ <circle data-type="point" data-label="U_MCU.29
117
+ x+" data-x="11.1" data-y="14.9" cx="263.2183599516844" cy="198.64078674003486" r="3" fill="hsl(232, 100%, 50%, 0.8)" />
118
+ </g>
119
+ <g>
120
+ <circle data-type="point" data-label="U_MCU.30
121
+ x+" data-x="11.1" data-y="15.1" cx="263.2183599516844" cy="183.6092473493493" r="3" fill="hsl(254, 100%, 50%, 0.8)" />
122
+ </g>
123
+ <g>
124
+ <circle data-type="point" data-label="U_MCU.31
125
+ x+" data-x="11.1" data-y="15.3" cx="263.2183599516844" cy="168.57770795866327" r="3" fill="hsl(255, 100%, 50%, 0.8)" />
126
+ </g>
127
+ <g>
128
+ <circle data-type="point" data-label="U_MCU.32
129
+ x+" data-x="11.1" data-y="15.5" cx="263.2183599516844" cy="153.54616856797747" r="3" fill="hsl(256, 100%, 50%, 0.8)" />
130
+ </g>
131
+ <g>
132
+ <circle data-type="point" data-label="C_AREF.1
133
+ x-" data-x="13.45" data-y="14" cx="439.8389477922427" cy="266.28271399812115" r="3" fill="hsl(273, 100%, 50%, 0.8)" />
134
+ </g>
135
+ <g>
136
+ <circle data-type="point" data-label="C_AREF.2
137
+ x+" data-x="14.55" data-y="14" cx="522.5124144410149" cy="266.28271399812115" r="3" fill="hsl(274, 100%, 50%, 0.8)" />
138
+ </g>
139
+ <g>
140
+ <circle data-type="point" data-label="R_FAULT_PULLUP.1
141
+ x-" data-x="13.14" data-y="10" cx="416.54006173667983" cy="566.9135018118375" r="3" fill="hsl(344, 100%, 50%, 0.8)" />
142
+ </g>
143
+ <g>
144
+ <circle data-type="point" data-label="R_FAULT_PULLUP.2
145
+ x+" data-x="14.86" data-y="10" cx="545.8113004965778" cy="566.9135018118375" r="3" fill="hsl(344, 100%, 50%, 0.8)" />
146
+ </g>
147
+ <g>
148
+ <circle data-type="point" data-label="C_MCU_DEC.1
149
+ x-" data-x="13.45" data-y="16" cx="439.8389477922427" cy="115.96732009126299" r="3" fill="hsl(64, 100%, 50%, 0.8)" />
150
+ </g>
151
+ <g>
152
+ <circle data-type="point" data-label="C_MCU_DEC.2
153
+ x+" data-x="14.55" data-y="16" cx="522.5124144410149" cy="115.96732009126299" r="3" fill="hsl(64, 100%, 50%, 0.8)" />
154
+ </g>
155
+ <g>
156
+ <circle data-type="point" data-label="anchorPoint
157
+ orientation: y-" data-x="15.010000000000002" data-y="15.999" cx="557.0849550395922" cy="116.04247778821627" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
158
+ </g>
159
+ <g>
160
+ <circle data-type="point" data-label="anchorPoint
161
+ orientation: y-" data-x="13.860999999999999" data-y="12.799000000000001" cx="470.72876124010213" cy="356.5471080391894" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
162
+ </g>
163
+ <g>
164
+ <circle data-type="point" data-label="anchorPoint
165
+ orientation: y+" data-x="12.862499999999999" data-y="16" cx="395.6838008321031" cy="115.96732009126299" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
166
+ </g>
167
+ <g>
168
+ <circle data-type="point" data-label="anchorPoint
169
+ orientation: y+" data-x="8.34" data-y="14.501" cx="55.783116360220106" cy="228.62870782445316" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
170
+ </g>
171
+ <g>
172
+ <circle data-type="point" data-label="anchorPoint
173
+ orientation: y+" data-x="12.929" data-y="10.401" cx="400.6817876795062" cy="536.7752653335124" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
174
+ </g>
175
+ <g>
176
+ <circle data-type="point" data-label="anchorPoint
177
+ orientation: x-" data-x="8.9" data-y="13.9" cx="97.87142665414046" cy="273.79848369346405" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
178
+ </g>
179
+ <g>
180
+ <circle data-type="point" data-label="anchorPoint
181
+ orientation: x-" data-x="8.9" data-y="13.700000000000001" cx="97.87142665414046" cy="288.83002308414984" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
182
+ </g>
183
+ <g>
184
+ <circle data-type="point" data-label="anchorPoint
185
+ orientation: x-" data-x="8.9" data-y="13.5" cx="97.87142665414046" cy="303.86156247483564" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
186
+ </g>
187
+ <g>
188
+ <circle data-type="point" data-label="anchorPoint
189
+ orientation: x-" data-x="8.9" data-y="13.3" cx="97.87142665414046" cy="318.89310186552143" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
190
+ </g>
191
+ <g>
192
+ <circle data-type="point" data-label="anchorPoint
193
+ orientation: x-" data-x="13.45" data-y="14" cx="439.8389477922427" cy="266.28271399812115" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
194
+ </g>
195
+ <g>
196
+ <circle data-type="point" data-label="anchorPoint
197
+ orientation: x+" data-x="11.1" data-y="13.1" cx="263.2183599516844" cy="333.92464125620734" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
198
+ </g>
199
+ <g>
200
+ <circle data-type="point" data-label="anchorPoint
201
+ orientation: x+" data-x="11.1" data-y="13.7" cx="263.2183599516844" cy="288.83002308414984" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
202
+ </g>
203
+ <g>
204
+ <circle data-type="point" data-label="anchorPoint
205
+ orientation: x+" data-x="11.1" data-y="13.9" cx="263.2183599516844" cy="273.79848369346405" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
206
+ </g>
207
+ <g>
208
+ <circle data-type="point" data-label="anchorPoint
209
+ orientation: x+" data-x="11.1" data-y="14.1" cx="263.2183599516844" cy="258.76694430277826" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
210
+ </g>
211
+ <g>
212
+ <circle data-type="point" data-label="anchorPoint
213
+ orientation: x+" data-x="11.1" data-y="14.299999999999999" cx="263.2183599516844" cy="243.73540491209246" r="3" fill="hsl(80, 100%, 50%, 0.9)" />
214
+ </g>
215
+ <g>
216
+ <circle data-type="point" data-label="anchorPoint
217
+ orientation: x+" data-x="11.1" data-y="14.5" cx="263.2183599516844" cy="228.70386552140667" r="3" fill="hsl(80, 100%, 50%, 0.9)" />
218
+ </g>
219
+ <g>
220
+ <circle data-type="point" data-label="anchorPoint
221
+ orientation: x+" data-x="11.1" data-y="15.5" cx="263.2183599516844" cy="153.54616856797747" r="3" fill="hsl(80, 100%, 50%, 0.9)" />
222
+ </g>
223
+ <g>
224
+ <circle data-type="point" data-label="anchorPoint
225
+ orientation: x+" data-x="14.86" data-y="10" cx="545.8113004965778" cy="566.9135018118375" r="3" fill="hsl(80, 100%, 50%, 0.9)" />
226
+ </g>
227
+ <g>
228
+ <polyline data-points="13.45,16 8.9,14.5" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1" />
229
+ </g>
230
+ <g>
231
+ <polyline data-points="14.55,16 8.9,15.1" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 97.87142665414046,183.6092473493493" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1" />
232
+ </g>
233
+ <g>
234
+ <polyline data-points="13.45,14 11.1,13.1" data-type="line" data-label="" points="439.8389477922427,266.28271399812115 263.2183599516844,333.92464125620734" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1" />
235
+ </g>
236
+ <g>
237
+ <polyline data-points="8.9,15.1 8.9,14.7" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 97.87142665414046,213.67232613072088" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
238
+ </g>
239
+ <g>
240
+ <polyline data-points="8.9,15.1 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
241
+ </g>
242
+ <g>
243
+ <polyline data-points="8.9,15.1 14.55,14" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
244
+ </g>
245
+ <g>
246
+ <polyline data-points="8.9,15.1 14.55,16" data-type="line" data-label="" points="97.87142665414046,183.6092473493493 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
247
+ </g>
248
+ <g>
249
+ <polyline data-points="8.9,14.7 11.1,13.3" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 263.2183599516844,318.89310186552143" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
250
+ </g>
251
+ <g>
252
+ <polyline data-points="8.9,14.7 14.55,14" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
253
+ </g>
254
+ <g>
255
+ <polyline data-points="8.9,14.7 14.55,16" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
256
+ </g>
257
+ <g>
258
+ <polyline data-points="11.1,13.3 14.55,14" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,266.28271399812115" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
259
+ </g>
260
+ <g>
261
+ <polyline data-points="11.1,13.3 14.55,16" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
262
+ </g>
263
+ <g>
264
+ <polyline data-points="14.55,14 14.55,16" data-type="line" data-label="" points="522.5124144410149,266.28271399812115 522.5124144410149,115.96732009126299" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
265
+ </g>
266
+ <g>
267
+ <polyline data-points="8.9,14.9 8.9,14.5" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 97.87142665414046,228.70386552140667" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
268
+ </g>
269
+ <g>
270
+ <polyline data-points="8.9,14.9 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
271
+ </g>
272
+ <g>
273
+ <polyline data-points="8.9,14.9 13.14,10" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
274
+ </g>
275
+ <g>
276
+ <polyline data-points="8.9,14.9 13.45,16" data-type="line" data-label="" points="97.87142665414046,198.64078674003486 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
277
+ </g>
278
+ <g>
279
+ <polyline data-points="8.9,14.5 11.1,12.7" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 263.2183599516844,363.98772003757904" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
280
+ </g>
281
+ <g>
282
+ <polyline data-points="8.9,14.5 13.14,10" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
283
+ </g>
284
+ <g>
285
+ <polyline data-points="8.9,14.5 13.45,16" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
286
+ </g>
287
+ <g>
288
+ <polyline data-points="11.1,12.7 13.14,10" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 416.54006173667983,566.9135018118375" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
289
+ </g>
290
+ <g>
291
+ <polyline data-points="11.1,12.7 13.45,16" data-type="line" data-label="" points="263.2183599516844,363.98772003757904 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
292
+ </g>
293
+ <g>
294
+ <polyline data-points="13.14,10 13.45,16" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 439.8389477922427,115.96732009126299" fill="none" stroke="hsl(23, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
295
+ </g>
296
+ <g>
297
+ <polyline data-points="11.1,15.5 14.86,10" data-type="line" data-label="" points="263.2183599516844,153.54616856797747 545.8113004965778,566.9135018118375" fill="none" stroke="hsl(50, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
298
+ </g>
299
+ <g>
300
+ <polyline data-points="8.9,14.5 8.600000000000001,14.5 8.600000000000001,14.9 8.9,14.9" data-type="line" data-label="" points="97.87142665414046,228.70386552140667 75.32411756811189,228.70386552140667 75.32411756811189,198.64078674003486 97.87142665414046,198.64078674003486" fill="none" stroke="purple" stroke-width="1" />
301
+ </g>
302
+ <g>
303
+ <polyline data-points="14.55,16 14.75,16 14.75,14 14.55,14" data-type="line" data-label="" points="522.5124144410149,115.96732009126299 537.5439538317005,115.96732009126299 537.5439538317005,266.28271399812115 522.5124144410149,266.28271399812115" fill="none" stroke="purple" stroke-width="1" />
304
+ </g>
305
+ <g>
306
+ <polyline data-points="8.9,14.7 8.8,14.7 8.8,15.1 8.9,15.1" data-type="line" data-label="" points="97.87142665414046,213.67232613072088 90.35565695879757,213.67232613072088 90.35565695879757,183.6092473493493 97.87142665414046,183.6092473493493" fill="none" stroke="purple" stroke-width="1" />
307
+ </g>
308
+ <g>
309
+ <polyline data-points="13.45,16 12.274999999999999,16 12.274999999999999,13.299999999999999 13.630999999999998,13.299999999999999 13.630999999999998,12.9 12.274999999999999,12.9 12.274999999999999,12.7 11.1,12.7" data-type="line" data-label="" points="439.8389477922427,115.96732009126299 351.52865387196346,115.96732009126299 351.52865387196346,318.89310186552154 453.4424909408133,318.89310186552154 453.4424909408133,348.95618064689313 351.52865387196346,348.95618064689313 351.52865387196346,363.98772003757904 263.2183599516844,363.98772003757904" fill="none" stroke="purple" stroke-width="1" />
310
+ </g>
311
+ <g>
312
+ <polyline data-points="14.75,16 15.010000000000002,16 15.010000000000002,15.999" data-type="line" data-label="" points="537.5439538317005,115.96732009126299 557.0849550395922,115.96732009126299 557.0849550395922,116.04247778821627" fill="none" stroke="purple" stroke-width="1" />
313
+ </g>
314
+ <g>
315
+ <polyline data-points="11.1,13.3 13.860999999999999,13.3 13.860999999999999,12.799000000000001" data-type="line" data-label="" points="263.2183599516844,318.89310186552143 470.72876124010213,318.89310186552143 470.72876124010213,356.5471080391894" fill="none" stroke="purple" stroke-width="1" />
316
+ </g>
317
+ <g>
318
+ <polyline data-points="8.600000000000001,14.5 8.34,14.5 8.34,14.501" data-type="line" data-label="" points="75.32411756811189,228.70386552140667 55.783116360220106,228.70386552140667 55.783116360220106,228.62870782445316" fill="none" stroke="purple" stroke-width="1" />
319
+ </g>
320
+ <g>
321
+ <polyline data-points="13.14,10 12.929,10 12.929,10.401" data-type="line" data-label="" points="416.54006173667983,566.9135018118375 400.6817876795062,566.9135018118375 400.6817876795062,536.7752653335124" fill="none" stroke="purple" stroke-width="1" />
322
+ </g>
323
+ <g>
324
+ <rect data-type="rect" data-label="schematic_component_0" data-x="10" data-y="14" x="97.87142665414046" y="138.51462917729168" width="165.34693329754396" height="255.53616964165883" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141" />
325
+ </g>
326
+ <g>
327
+ <rect data-type="rect" data-label="schematic_component_1" data-x="14" data-y="14" x="439.8389477922427" y="219.68494188699515" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141" />
328
+ </g>
329
+ <g>
330
+ <rect data-type="rect" data-label="schematic_component_2" data-x="14" data-y="10" x="416.54006173667983" y="537.6429346396459" width="129.27123875989798" height="58.54113434438318" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141" />
331
+ </g>
332
+ <g>
333
+ <rect data-type="rect" data-label="schematic_component_3" data-x="14" data-y="16" x="439.8389477922427" y="69.36954798013699" width="82.6734666487722" height="93.19554422225201" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013305357142857141" />
334
+ </g>
335
+ <g>
336
+ <rect data-type="rect" data-label="ATMEGA328P_AU" data-x="10.080000000000002" data-y="12.17" x="127.93450543551216" y="397.05710669708776" width="117.24600724734955" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141" />
337
+ </g>
338
+ <g>
339
+ <rect data-type="rect" data-label="U_MCU" data-x="9.600000000000001" data-y="15.83" x="127.93450543551216" y="121.97993584753726" width="45.094618172057494" height="13.528385451617169" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013305357142857141" />
340
+ </g>
341
+ <g>
342
+ <rect data-type="rect" data-label="netId: GND
343
+ globalConnNetId: connectivity_net1" data-x="15.010000000000002" data-y="15.759" x="541.3018386793722" y="116.04247778821627" width="31.566232720440212" height="36.075694537646086" fill="#00000066" stroke="#000000" stroke-width="0.013305357142857141" />
344
+ </g>
345
+ <g>
346
+ <rect data-type="rect" data-label="netId: GND
347
+ globalConnNetId: connectivity_net1" data-x="13.860999999999999" data-y="12.559000000000001" x="454.9456448798819" y="356.5471080391894" width="31.566232720440212" height="36.07569453764597" fill="#00000066" stroke="#000000" stroke-width="0.013305357142857141" />
348
+ </g>
349
+ <g>
350
+ <rect data-type="rect" data-label="netId: VCC_3V3
351
+ globalConnNetId: connectivity_net0" data-x="12.862499999999999" data-y="16.48" x="379.900684471883" y="43.815931015971046" width="31.566232720440325" height="72.15138907529195" fill="#ef444466" stroke="#ef4444" stroke-width="0.013305357142857141" />
352
+ </g>
353
+ <g>
354
+ <rect data-type="rect" data-label="netId: VCC_3V3
355
+ globalConnNetId: connectivity_net0" data-x="8.34" data-y="14.981" x="40" y="156.4773187491612" width="31.566232720440325" height="72.15138907529195" fill="#ef444466" stroke="#ef4444" stroke-width="0.013305357142857141" />
356
+ </g>
357
+ <g>
358
+ <rect data-type="rect" data-label="netId: VCC_3V3
359
+ globalConnNetId: connectivity_net0" data-x="12.929" data-y="10.881" x="384.8986713192861" y="464.62387625822043" width="31.566232720440325" height="72.15138907529195" fill="#ef444466" stroke="#ef4444" stroke-width="0.013305357142857141" />
360
+ </g>
361
+ <g>
362
+ <rect data-type="rect" data-label="netId: X_IN1
363
+ globalConnNetId: connectivity_net3" data-x="8.539000000000001" data-y="13.9" x="43.68272715071828" y="266.28271399812115" width="54.11354180646879" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
364
+ </g>
365
+ <g>
366
+ <rect data-type="rect" data-label="netId: X_IN2
367
+ globalConnNetId: connectivity_net4" data-x="8.539000000000001" data-y="13.700000000000001" x="43.68272715071828" y="281.31425338880695" width="54.11354180646879" height="15.03153939068568" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
368
+ </g>
369
+ <g>
370
+ <rect data-type="rect" data-label="netId: Y_IN1
371
+ globalConnNetId: connectivity_net5" data-x="8.539000000000001" data-y="13.5" x="43.68272715071828" y="296.34579277949285" width="54.11354180646879" height="15.03153939068568" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
372
+ </g>
373
+ <g>
374
+ <rect data-type="rect" data-label="netId: Y_IN2
375
+ globalConnNetId: connectivity_net6" data-x="8.539000000000001" data-y="13.3" x="43.68272715071828" y="311.37733217017853" width="54.11354180646879" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
376
+ </g>
377
+ <g>
378
+ <rect data-type="rect" data-label="netId: C_AREF.pin1 to U_MCU.AREF
379
+ globalConnNetId: connectivity_net2" data-x="12.234" data-y="14" x="257.13058649845664" y="258.76694430277826" width="182.6332035968327" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
380
+ </g>
381
+ <g>
382
+ <rect data-type="rect" data-label="netId: C_AREF.pin1 to U_MCU.AREF
383
+ globalConnNetId: connectivity_net2" data-x="12.315999999999999" data-y="13.1" x="263.2935176486378" y="326.40887156086444" width="182.63320359683257" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
384
+ </g>
385
+ <g>
386
+ <rect data-type="rect" data-label="netId: JOY_X
387
+ globalConnNetId: connectivity_net7" data-x="11.460999999999999" data-y="13.7" x="263.2935176486378" y="281.31425338880695" width="54.11354180646879" height="15.031539390685907" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
388
+ </g>
389
+ <g>
390
+ <rect data-type="rect" data-label="netId: JOY_Y
391
+ globalConnNetId: connectivity_net8" data-x="11.460999999999999" data-y="13.9" x="263.2935176486378" y="266.28271399812115" width="54.11354180646879" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
392
+ </g>
393
+ <g>
394
+ <rect data-type="rect" data-label="netId: X_SPEED_WIPER
395
+ globalConnNetId: connectivity_net9" data-x="11.940999999999999" data-y="14.1" x="263.2935176486378" y="251.25117460743536" width="126.26493088176085" height="15.031539390685793" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
396
+ </g>
397
+ <g>
398
+ <rect data-type="rect" data-label="netId: Y_SPEED_WIPER
399
+ globalConnNetId: connectivity_net10" data-x="11.940999999999999" data-y="14.299999999999999" x="263.2935176486378" y="236.21963521674957" width="126.26493088176085" height="15.031539390685793" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
400
+ </g>
401
+ <g>
402
+ <rect data-type="rect" data-label="netId: JOY_SW
403
+ globalConnNetId: connectivity_net11" data-x="11.520999999999999" data-y="14.5" x="263.2935176486378" y="221.18809582606377" width="63.132465440880424" height="15.031539390685793" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
404
+ </g>
405
+ <g>
406
+ <rect data-type="rect" data-label="netId: FAULT
407
+ globalConnNetId: connectivity_net12" data-x="11.460999999999999" data-y="15.5" x="263.2935176486378" y="146.03039887263458" width="54.11354180646879" height="15.031539390685793" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
408
+ </g>
409
+ <g>
410
+ <rect data-type="rect" data-label="netId: FAULT
411
+ globalConnNetId: connectivity_net12" data-x="15.220999999999998" data-y="10" x="545.8864581935311" y="559.3977321164946" width="54.1135418064689" height="15.031539390685793" fill="hsl(80, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013305357142857141" />
412
+ </g>
413
+ <g id="crosshair" style="display: none">
414
+ <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
415
+ <line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5" /><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text>
416
+ </g>
417
+ <script>
418
+ <![CDATA[
419
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
420
+ const svg = e.currentTarget;
421
+ const rect = svg.getBoundingClientRect();
422
+ const x = e.clientX - rect.left;
423
+ const y = e.clientY - rect.top;
424
+ const crosshair = svg.getElementById('crosshair');
425
+ const h = svg.getElementById('crosshair-h');
426
+ const v = svg.getElementById('crosshair-v');
427
+ const coords = svg.getElementById('coordinates');
428
+
429
+ crosshair.style.display = 'block';
430
+ h.setAttribute('x1', '0');
431
+ h.setAttribute('x2', '640');
432
+ h.setAttribute('y1', y);
433
+ h.setAttribute('y2', y);
434
+ v.setAttribute('x1', x);
435
+ v.setAttribute('x2', x);
436
+ v.setAttribute('y1', '0');
437
+ v.setAttribute('y2', '640');
438
+
439
+ // Calculate real coordinates using inverse transformation
440
+ const matrix = {
441
+ "a": 75.15769695342908,
442
+ "c": 0,
443
+ "e": -571.0320762313784,
444
+ "b": 0,
445
+ "d": -75.15769695342908,
446
+ "f": 1318.4904713461283
447
+ };
448
+ // Manually invert and apply the affine transform
449
+ // Since we only use translate and scale, we can directly compute:
450
+ // x' = (x - tx) / sx
451
+ // y' = (y - ty) / sy
452
+ const sx = matrix.a;
453
+ const sy = matrix.d;
454
+ const tx = matrix.e;
455
+ const ty = matrix.f;
456
+ const realPoint = {
457
+ x: (x - tx) / sx,
458
+ y: (y - ty) / sy // Flip y back since we used negative scale
459
+ }
460
+
461
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
462
+ coords.setAttribute('x', (x + 5).toString());
463
+ coords.setAttribute('y', (y - 5).toString());
464
+ });
465
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
466
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
467
+ });
468
+ ]]>
469
+ </script>
470
+ </svg>