feat: implement complete smart number entry system for quiz

- Add real-time input validation with automatic number acceptance
- Implement visual feedback (green pulse for correct, red shake for incorrect)
- Add guess penalty system with 50% extra attempts allowed
- Create contextual finish buttons ("Show Results", "Can't Remember More")
- Fix input clearing speed (150ms) for rapid number entry
- Add proper event listener management to prevent binding errors
- Remove obsolete submit-answers button causing null reference errors
- Integrate smart input results with existing scoring system

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Thomas Hallock 2025-09-10 14:02:36 -05:00
parent faf578c360
commit 150c195c33
56 changed files with 166445 additions and 99 deletions

View File

@ -21,7 +21,10 @@
"Bash(python -m pytest tests/test_quiz_functionality.py -v)",
"Bash(python:*)",
"Bash(git restore:*)",
"Bash(open test_heaven_beads.html)"
"Bash(open test_heaven_beads.html)",
"Bash(open test_scaling.html)",
"Read(//private/tmp/**)",
"Bash(open test_smart_input.html)"
],
"deny": [],
"ask": []

3596
demo_heaven_bead_fix.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2884
test_active_bead_gaps.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3006
test_adjacent_fixed.html Normal file

File diff suppressed because it is too large Load Diff

2807
test_adjacent_spacing.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2932
test_alternating_colors.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3154
test_animations.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_balanced_gaps.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_better_spacing.html Normal file

File diff suppressed because it is too large Load Diff

3050
test_clean.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_closer_gaps.html Normal file

File diff suppressed because it is too large Load Diff

2809
test_colorblind.html Normal file

File diff suppressed because it is too large Load Diff

3596
test_equal_gaps.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_equal_gaps_final.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2836
test_fixed_syntax.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_heaven_above_bar.html Normal file

File diff suppressed because it is too large Load Diff

3001
test_heaven_beads.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3426
test_heaven_beads_fixed.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2932
test_heaven_earth_spans.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_heaven_way_up_top.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2884
test_larger_abacus.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3028
test_long_number_colors.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_maximum_heaven_gap.html Normal file

File diff suppressed because it is too large Load Diff

2809
test_mnemonic_colors.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2932
test_place_value_colors.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3006
test_rod_bounds.html Normal file

File diff suppressed because it is too large Load Diff

2925
test_rod_bounds_hidden.html Normal file

File diff suppressed because it is too large Load Diff

3318
test_scaling.html Normal file

File diff suppressed because it is too large Load Diff

3601
test_simple_equal_gaps.html Normal file

File diff suppressed because it is too large Load Diff

5857
test_smart_input.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
<svg class="typst-doc" viewBox="0 0 252 180" width="252pt" height="180pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<path class="typst-shape" fill="#ffffff" fill-rule="nonzero" d="M 0 0 L 0 180 L 252 180 L 252 0 Z "/>
<g>
<g transform="translate(105.912 104.21279999999999)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g19480BF3572030D7913B87D66E55C45B" x="0" fill="#000000" fill-rule="nonzero"/>
<use xlink:href="#g1BE2FD2BC12AB488A636D0F2EA2BCD50" x="20.088000000000005" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
<defs id="glyph">
<symbol id="g19480BF3572030D7913B87D66E55C45B" overflow="visible">
<path d="M 2.6352 20.2176 C 2.6352 19.3104 3.456 18.5328 4.3632 18.5328 C 5.0976 18.5328 6.3936 19.3104 6.3936 20.260801 C 6.3936 20.606401 6.3072 20.8656 6.2208004 21.168001 C 6.1344004 21.4704 5.8752003 21.859201 5.8752003 22.2048 C 5.8752003 23.284801 6.9984 24.84 10.152 24.84 C 11.7072 24.84 13.9104 23.76 13.9104 19.6128 C 13.9104 16.848 12.9168005 14.601601 10.368 12.009601 L 7.1712003 8.856 C 2.9376001 4.5360003 2.2464 2.4624 2.2464 -0.0864 C 2.2464 -0.0864 4.4496 0 5.8320003 0 L 13.392 0 C 14.774401 0 16.7616 -0.0864 16.7616 -0.0864 C 17.3232 2.2032 17.755201 5.4432 17.7984 6.7392 C 17.5392 6.9552 16.9776 7.0416 16.5456 6.9552 C 15.8112 3.888 15.0768 2.808 13.521601 2.808 L 5.8320003 2.808 C 5.8320003 4.8816 8.8128 7.8192 9.0288 8.0352 L 13.392 12.2256 C 15.854401 14.601601 17.712 16.502401 17.712 19.7856 C 17.712 24.4512 13.9104 26.352001 10.411201 26.352001 C 5.616 26.352001 2.6352 22.8096 2.6352 20.2176 Z "/>
</symbol>
<symbol id="g1BE2FD2BC12AB488A636D0F2EA2BCD50" overflow="visible">
<path d="M 9.288 24.84 C 11.1456 24.84 12.8736 23.7168 12.8736 20.952 C 12.8736 18.792 10.368 15.4656 6.0912004 14.860801 L 6.3072 13.4784 C 7.0416 13.5648 7.8192 13.5648 8.3808 13.5648 C 10.843201 13.5648 14.04 12.8736 14.04 7.992 C 14.04 2.2464 10.1952 1.08 8.6832 1.08 C 6.48 1.08 6.0912004 2.0736 5.5728 2.8512 C 5.1408 3.456 4.5792003 3.9744 3.7152002 3.9744 C 2.808 3.9744 1.9008 3.1536 1.9008 2.4624 C 1.9008 0.73440003 5.5296 -0.432 8.1216 -0.432 C 13.262401 -0.432 17.8416 2.8944001 17.8416 8.5968 C 17.8416 13.3056 14.2992 14.9904 11.750401 15.4224 L 11.7072 15.5088005 C 15.2496 17.1936 16.2432 18.9648 16.2432 21.2544 C 16.2432 22.5504 15.940801 23.5872 14.904 24.6672 C 13.9536 25.617601 12.441601 26.352001 10.1952 26.352001 C 3.8448 26.352001 2.0304 22.2048 2.0304 20.7792 C 2.0304 20.1744 2.4624 19.3104 3.4992 19.3104 C 5.0112 19.3104 5.184 20.736 5.184 21.5568 C 5.184 24.3216 8.164801 24.84 9.288 24.84 Z "/>
</symbol>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,128 @@
<svg class="typst-doc" viewBox="0 0 252 180" width="252pt" height="180pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<path class="typst-shape" fill="#ffffff" fill-rule="nonzero" d="M 0 0 L 0 180 L 252 180 L 252 0 Z "/>
<g>
<g transform="translate(12.600000000000005 12.600000000000005)">
<g class="typst-group">
<g>
<g transform="translate(88.39999999999999 17.399999999999995)">
<g class="typst-group">
<g transform="matrix(0.9 0 0 0.9 2.5 6)">
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(11 0)">
<path class="typst-shape" fill="#eeeeee" fill-rule="nonzero" d="M 0 0 L 0 120 L 3 120 L 3 0 Z "/>
</g>
<g transform="translate(4.1000000000000005 -1)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 33)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 49)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 67)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 51)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(36 0)">
<path class="typst-shape" fill="#eeeeee" fill-rule="nonzero" d="M 0 0 L 0 120 L 3 120 L 3 0 Z "/>
</g>
<g transform="translate(29.099999999999998 -1)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 33)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 49)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 65)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 51)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(0 30)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" d="M 0 0 L 0 2 L 50 2 L 50 0 Z "/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,19 @@
<svg class="typst-doc" viewBox="0 0 252 180" width="252pt" height="180pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<path class="typst-shape" fill="#ffffff" fill-rule="nonzero" d="M 0 0 L 0 180 L 252 180 L 252 0 Z "/>
<g>
<g transform="translate(105.912 104.21279999999999)">
<g class="typst-text" transform="scale(1, -1)">
<use xlink:href="#g19480BF3572030D7913B87D66E55C45B" x="0" fill="#000000" fill-rule="nonzero"/>
<use xlink:href="#g1BE2FD2BC12AB488A636D0F2EA2BCD50" x="20.088000000000005" fill="#000000" fill-rule="nonzero"/>
</g>
</g>
</g>
<defs id="glyph">
<symbol id="g19480BF3572030D7913B87D66E55C45B" overflow="visible">
<path d="M 2.6352 20.2176 C 2.6352 19.3104 3.456 18.5328 4.3632 18.5328 C 5.0976 18.5328 6.3936 19.3104 6.3936 20.260801 C 6.3936 20.606401 6.3072 20.8656 6.2208004 21.168001 C 6.1344004 21.4704 5.8752003 21.859201 5.8752003 22.2048 C 5.8752003 23.284801 6.9984 24.84 10.152 24.84 C 11.7072 24.84 13.9104 23.76 13.9104 19.6128 C 13.9104 16.848 12.9168005 14.601601 10.368 12.009601 L 7.1712003 8.856 C 2.9376001 4.5360003 2.2464 2.4624 2.2464 -0.0864 C 2.2464 -0.0864 4.4496 0 5.8320003 0 L 13.392 0 C 14.774401 0 16.7616 -0.0864 16.7616 -0.0864 C 17.3232 2.2032 17.755201 5.4432 17.7984 6.7392 C 17.5392 6.9552 16.9776 7.0416 16.5456 6.9552 C 15.8112 3.888 15.0768 2.808 13.521601 2.808 L 5.8320003 2.808 C 5.8320003 4.8816 8.8128 7.8192 9.0288 8.0352 L 13.392 12.2256 C 15.854401 14.601601 17.712 16.502401 17.712 19.7856 C 17.712 24.4512 13.9104 26.352001 10.411201 26.352001 C 5.616 26.352001 2.6352 22.8096 2.6352 20.2176 Z "/>
</symbol>
<symbol id="g1BE2FD2BC12AB488A636D0F2EA2BCD50" overflow="visible">
<path d="M 9.288 24.84 C 11.1456 24.84 12.8736 23.7168 12.8736 20.952 C 12.8736 18.792 10.368 15.4656 6.0912004 14.860801 L 6.3072 13.4784 C 7.0416 13.5648 7.8192 13.5648 8.3808 13.5648 C 10.843201 13.5648 14.04 12.8736 14.04 7.992 C 14.04 2.2464 10.1952 1.08 8.6832 1.08 C 6.48 1.08 6.0912004 2.0736 5.5728 2.8512 C 5.1408 3.456 4.5792003 3.9744 3.7152002 3.9744 C 2.808 3.9744 1.9008 3.1536 1.9008 2.4624 C 1.9008 0.73440003 5.5296 -0.432 8.1216 -0.432 C 13.262401 -0.432 17.8416 2.8944001 17.8416 8.5968 C 17.8416 13.3056 14.2992 14.9904 11.750401 15.4224 L 11.7072 15.5088005 C 15.2496 17.1936 16.2432 18.9648 16.2432 21.2544 C 16.2432 22.5504 15.940801 23.5872 14.904 24.6672 C 13.9536 25.617601 12.441601 26.352001 10.1952 26.352001 C 3.8448 26.352001 2.0304 22.2048 2.0304 20.7792 C 2.0304 20.1744 2.4624 19.3104 3.4992 19.3104 C 5.0112 19.3104 5.184 20.736 5.184 21.5568 C 5.184 24.3216 8.164801 24.84 9.288 24.84 Z "/>
</symbol>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,128 @@
<svg class="typst-doc" viewBox="0 0 252 180" width="252pt" height="180pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml">
<path class="typst-shape" fill="#ffffff" fill-rule="nonzero" d="M 0 0 L 0 180 L 252 180 L 252 0 Z "/>
<g>
<g transform="translate(12.600000000000005 12.600000000000005)">
<g class="typst-group">
<g>
<g transform="translate(88.39999999999999 17.399999999999995)">
<g class="typst-group">
<g transform="matrix(0.9 0 0 0.9 2.5 6)">
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<g class="typst-group">
<g>
<g transform="translate(11 0)">
<path class="typst-shape" fill="#eeeeee" fill-rule="nonzero" d="M 0 0 L 0 120 L 3 120 L 3 0 Z "/>
</g>
<g transform="translate(4.1000000000000005 13)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 33)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 49)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 53)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(4.1000000000000005 37)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(36 0)">
<path class="typst-shape" fill="#eeeeee" fill-rule="nonzero" d="M 0 0 L 0 120 L 3 120 L 3 0 Z "/>
</g>
<g transform="translate(29.099999999999998 13)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 33)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 49)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 65)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(29.099999999999998 37)">
<g class="typst-group">
<g>
<g transform="translate(0 0)">
<path class="typst-shape" fill="#e6e6e6" fill-rule="nonzero" stroke="#000000" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 8.4 0 L 16.8 6 L 8.4 12 L 0 6 Z "/>
</g>
</g>
</g>
</g>
<g transform="translate(0 30)">
<path class="typst-shape" fill="#000000" fill-rule="nonzero" d="M 0 0 L 0 2 L 50 2 L 50 0 Z "/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

2791
test_zero_hidden.html Normal file

File diff suppressed because it is too large Load Diff