dd101b3d54
The user noticed the bottom-right large suit glyphs were rendering upside-down — point-up hearts, stem-up spades — because the SVG transform pipeline applied a `rotate(180)` to match the traditional playing-card inverted-corner convention. That convention exists so a card reads correctly when flipped or read from the opposite side of the table. Single-orientation digital play doesn't benefit from it; most modern digital decks have abandoned it. User preference is upright. Drops the rotate from face_svg's bottom-right `<g transform>` and adjusts the translate so the visible glyph still lands at (178, 286)–(242, 350) — same screen footprint, same scale, just no flip. design-system.md § Game Cards updated in lockstep — line 220 no longer says "rotated 180°", instead documents the deliberate deviation from the traditional convention. Knock-on lockstep changes in this commit: - EXPECTED in tests/card_face_svg_pin.rs rebaselined: 52 face hashes shift, 5 back hashes unchanged. - assets/cards/faces/*.png regenerated (52 face PNGs). - solitaire_engine/assets/themes/default/*_*.svg regenerated (52 theme face SVGs that production rasterises at startup). Workspace clippy + cargo test --workspace clean. Pin test passes against the new hashes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
25 lines
1.5 KiB
XML
25 lines
1.5 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||
<rect x="1" y="1" width="254" height="382" rx="16" ry="16"
|
||
fill="#1a1a1a" stroke="#d0d0d0" stroke-width="2"/>
|
||
|
||
<!-- Top-left rank in JetBrains-Mono-styled FiraMono (rank digits
|
||
and letters render correctly in FiraMono; only the suit glyphs
|
||
needed to escape to paths). -->
|
||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||
fill="#d0d0d0">7</text>
|
||
|
||
<!-- Top-left small suit glyph at (14, 50), 20 × 20.
|
||
`suit_path_d` is authored in a 32-unit box, so scale 0.625
|
||
lands the visible glyph at 20 px. -->
|
||
<g transform="translate(14 50) scale(0.625)">
|
||
<path d="M16,4 C 13,4 10,7 10,10 C 10,12 11,13 12,14 C 9,14 4,17 4,21 C 4,24 7,27 10,27 C 12,27 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 20,27 22,27 C 25,27 28,24 28,21 C 28,17 23,14 20,14 C 21,13 22,12 22,10 C 22,7 19,4 16,4 Z" fill="none" stroke="#d0d0d0" stroke-width="3"/>
|
||
</g>
|
||
|
||
<!-- Bottom-right large suit glyph at (178, 286), 64 × 64.
|
||
Visible bottom-right at (242, 350), visible top-left at
|
||
(178, 286). Same upright orientation as the top-left small
|
||
glyph — no 180° rotation applied. -->
|
||
<g transform="translate(178 286) scale(2)">
|
||
<path d="M16,4 C 13,4 10,7 10,10 C 10,12 11,13 12,14 C 9,14 4,17 4,21 C 4,24 7,27 10,27 C 12,27 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 20,27 22,27 C 25,27 28,24 28,21 C 28,17 23,14 20,14 C 21,13 22,12 22,10 C 22,7 19,4 16,4 Z" fill="none" stroke="#d0d0d0" stroke-width="3"/>
|
||
</g>
|
||
</svg> |