diff --git a/web/static/index.html b/web/static/index.html
index 3e2a425..c787d1a 100644
--- a/web/static/index.html
+++ b/web/static/index.html
@@ -355,10 +355,8 @@
border-radius: 8px;
border: 1px solid rgba(0,0,0,.15);
box-shadow: 0 6px 18px rgba(0,0,0,.5);
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- padding: 5px 6px;
+ display: block;
+ overflow: hidden;
cursor: default;
position: relative;
user-select: none;
@@ -388,7 +386,21 @@
.card.red { color: var(--red); }
.card.black { color: #1a1a2e; }
-
+ .card-img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ display: block;
+ background: #fff;
+ }
+ .card-fallback {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 5px 6px;
+ }
.card-corner { font-size: .7rem; font-weight: 800; line-height: 1; }
.card-corner-bot { transform: rotate(180deg); }
.card-center { font-size: 2rem; text-align: center; }
@@ -1209,6 +1221,54 @@ const SUIT_ICONS = { hearts:'β₯', diamonds:'π', spades:'π', clubs:'π°'
const SUIT_NAMES = { hearts:'ΔervenΓ½', diamonds:'ZelenΓ½', spades:'Kule', clubs:'Ε½aludy' };
const SUIT_COLOR = { hearts:'red', diamonds:'black', spades:'black', clubs:'black' };
const VALUE_LABEL = { '7':'VII','8':'VIII','9':'IX','10':'X', under:'Sp', upper:'Sv', king:'Kr', ace:'Eso' };
+const GERMAN_CARD_FILES = {
+ hearts: {
+ '7': 'Playing card-german-hart-07.svg',
+ '8': 'Playing card-german-hart-08.svg',
+ '9': 'Playing card-german-hart-09.svg',
+ '10': 'Playing card-german-hart-10.svg',
+ under: 'Playing card-german-hart-11 unter.svg',
+ upper: 'Playing card-german-hart-12 ober.svg',
+ king: 'Playing card-german-hart-13 konig.svg',
+ ace: 'Playing card-german-hart-01 daus.svg'
+ },
+ diamonds: {
+ '7': 'Playing card-german-blatt-07.svg',
+ '8': 'Playing card-german-blatt-08.svg',
+ '9': 'Playing card-german-blatt-09.svg',
+ '10': 'Playing card-german-blatt-10.svg',
+ under: 'Playing card-german-blatt-11 jack.svg',
+ upper: 'Playing card-german-blatt-12 queen.svg',
+ king: 'Playing card-german-blatt-13 king.svg',
+ ace: 'Playing card-german-blatt-01 daus.svg'
+ },
+ spades: {
+ '7': 'Playing card-german-schellen-07.svg',
+ '8': 'Playing card-german-schellen-08.svg',
+ '9': 'Playing card-german-schellen-09.svg',
+ '10': 'Playing card-german-schellen-10.svg',
+ under: 'Playing card-german-schellen-11 jack.svg',
+ upper: 'Playing card-german-schellen-12 queen.svg',
+ king: 'Playing card-german-schellen-13 king.svg',
+ ace: 'Playing card-german-schellen-01.svg'
+ },
+ clubs: {
+ '7': 'Playing card-german-eichel-07.svg',
+ '8': 'Playing card-german-eichel-08.svg',
+ '9': 'Playing card-german-eichel-09.svg',
+ '10': 'Playing card-german-eichel-10.svg',
+ under: 'Playing card-german-eichel-11 unter.svg',
+ upper: 'Playing card-german-eichel-12 ober.svg',
+ king: 'Playing card-german-eichel-13 konig.svg',
+ ace: 'Playing card-german-eichel-01 daus.svg'
+ }
+};
+
+function cardAssetUrl(card) {
+ const file = GERMAN_CARD_FILES[card.suit] && GERMAN_CARD_FILES[card.suit][card.value];
+ if (!file) return null;
+ return `https://commons.wikimedia.org/wiki/Special:FilePath/${encodeURIComponent(file)}`;
+}
// ββ WebSocket ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
function connect() {
@@ -1821,10 +1881,17 @@ function buildCardHTML(card, playable, selected = false) {
const val = VALUE_LABEL[card.value] || card.value;
const icon = SUIT_ICONS[card.suit];
const cls = ['card', colorClass, playable ? 'playable' : '', selected ? 'selected' : ''].filter(Boolean).join(' ');
+ const assetUrl = cardAssetUrl(card);
+ const img = assetUrl
+ ? ``
+ : '';
return `