Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 396ba6bc97 | |||
| 88298206bb | |||
| 0f65031114 | |||
| c91ce9436e | |||
| ace96b4a47 | |||
| ea079af9e1 | |||
| c66d81c73a | |||
| 20b7a617e0 | |||
| 7a0d57b2b1 | |||
| 93ec4a7478 | |||
| 72dfd741c4 | |||
| 3837a10b15 | |||
| 574115cb71 | |||
| 1707553790 | |||
| 6905f26b56 | |||
| 1b7c4d92aa | |||
| d685224ce6 | |||
| 539779d78b | |||
| f6506c57e5 | |||
| b88f3df119 | |||
| 0dcb783e94 | |||
| ea17f94b6c | |||
| d60dc18add | |||
| 38eefb22e8 | |||
| a579c25d5c | |||
| c40817d845 | |||
| c6c03b8bff | |||
| 5b3925a619 | |||
| 8485b3d1e0 | |||
| 8325bf6cf7 | |||
| ea58f5dd64 | |||
| c518255a2d | |||
| f5da9398f2 | |||
| b82573e7b1 | |||
| 40818f5bd2 | |||
| 228ebbad8a | |||
| 2b33feafc9 | |||
| f8c8c9158e | |||
| 9cc0837088 | |||
| b47462bd27 | |||
| 08d22c822a | |||
| feb581005c | |||
| 00f2d890f1 | |||
| 9533a7d420 | |||
| 5ec5ac1a19 | |||
| 86aea206b8 | |||
| 1bd1c0f927 | |||
| 7be7f4395c | |||
| 66c2907c25 | |||
| c2811fa661 | |||
| 933cc55ea9 | |||
| 58faae1911 | |||
| 96be1b85fb | |||
| bbf7709912 |
@@ -0,0 +1,118 @@
|
||||
name: Android Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# Rebuild whenever app/engine/asset code changes.
|
||||
# Skip server-only, deploy, and doc changes.
|
||||
paths-ignore:
|
||||
- 'deploy/**'
|
||||
- 'argocd/**'
|
||||
- 'solitaire_server/**'
|
||||
- '**.md'
|
||||
|
||||
env:
|
||||
ANDROID_SDK_ROOT: /opt/android-sdk
|
||||
NDK_VERSION: "25.2.9519653"
|
||||
BUILD_TOOLS_VERSION: "34.0.0"
|
||||
|
||||
jobs:
|
||||
build-apk:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set short SHA
|
||||
id: meta
|
||||
run: echo "sha=${GITHUB_SHA::8}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# ── Android SDK + NDK ──────────────────────────────────────────────
|
||||
# Cache the entire SDK root so subsequent runs skip the ~2 GB download.
|
||||
- name: Cache Android SDK
|
||||
uses: actions/cache@v4
|
||||
id: sdk-cache
|
||||
with:
|
||||
path: ${{ env.ANDROID_SDK_ROOT }}
|
||||
key: android-sdk-ndk${{ env.NDK_VERSION }}-bt${{ env.BUILD_TOOLS_VERSION }}
|
||||
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y openjdk-17-jdk-headless unzip
|
||||
|
||||
- name: Install Android SDK + NDK
|
||||
if: steps.sdk-cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
|
||||
curl -sL \
|
||||
"https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" \
|
||||
-o /tmp/cmdtools.zip
|
||||
unzip -q /tmp/cmdtools.zip -d /tmp/cmdtools
|
||||
mv /tmp/cmdtools/cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest"
|
||||
# Accept all SDK licences non-interactively.
|
||||
yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --licenses \
|
||||
> /dev/null 2>&1 || true
|
||||
"$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" \
|
||||
"build-tools;$BUILD_TOOLS_VERSION" \
|
||||
"platforms;android-34" \
|
||||
"ndk;$NDK_VERSION"
|
||||
|
||||
- name: Export Android environment
|
||||
run: |
|
||||
echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> "$GITHUB_ENV"
|
||||
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/$NDK_VERSION" >> "$GITHUB_ENV"
|
||||
|
||||
# ── Rust toolchain ─────────────────────────────────────────────────
|
||||
- name: Install Rust stable
|
||||
run: |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
||||
| sh -s -- -y --default-toolchain stable --no-modify-path
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Add Android cross-compilation targets
|
||||
run: |
|
||||
rustup target add \
|
||||
aarch64-linux-android \
|
||||
armv7-linux-androideabi \
|
||||
x86_64-linux-android
|
||||
|
||||
# ── Cargo caches ───────────────────────────────────────────────────
|
||||
- name: Cache Cargo registry
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry/index
|
||||
~/.cargo/registry/cache
|
||||
~/.cargo/git/db
|
||||
key: cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: cargo-registry-
|
||||
|
||||
- name: Cache cargo-apk binary
|
||||
uses: actions/cache@v4
|
||||
id: apk-tool-cache
|
||||
with:
|
||||
path: ~/.cargo/bin/cargo-apk
|
||||
key: cargo-apk-${{ runner.os }}-stable
|
||||
|
||||
- name: Cache build artifacts
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: target
|
||||
key: android-target-${{ hashFiles('**/Cargo.lock') }}-${{ github.sha }}
|
||||
restore-keys: android-target-${{ hashFiles('**/Cargo.lock') }}-
|
||||
|
||||
# ── Build ──────────────────────────────────────────────────────────
|
||||
- name: Install cargo-apk
|
||||
if: steps.apk-tool-cache.outputs.cache-hit != 'true'
|
||||
run: cargo install cargo-apk --locked
|
||||
|
||||
- name: Build debug APK
|
||||
run: cargo apk build --package solitaire_app --lib
|
||||
|
||||
# ── Artifact ───────────────────────────────────────────────────────
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: solitaire-quest-debug-${{ steps.meta.outputs.sha }}
|
||||
path: target/debug/apk/solitaire-quest.apk
|
||||
retention-days: 30
|
||||
@@ -0,0 +1,168 @@
|
||||
name: Android Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
|
||||
env:
|
||||
ANDROID_SDK_ROOT: /opt/android-sdk
|
||||
NDK_VERSION: "25.2.9519653"
|
||||
BUILD_TOOLS_VERSION: "34.0.0"
|
||||
GITEA_API: https://git.aleshym.co/api/v1
|
||||
REPO: funman300/Rusty_Solitare
|
||||
|
||||
jobs:
|
||||
build-release-apk:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract version from tag
|
||||
id: meta
|
||||
run: echo "tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# ── Android SDK + NDK ──────────────────────────────────────────────
|
||||
# Shared cache key with the debug workflow so a warm debug run
|
||||
# saves the ~2 GB SDK download for the release run too.
|
||||
- name: Cache Android SDK
|
||||
uses: actions/cache@v4
|
||||
id: sdk-cache
|
||||
with:
|
||||
path: ${{ env.ANDROID_SDK_ROOT }}
|
||||
key: android-sdk-ndk${{ env.NDK_VERSION }}-bt${{ env.BUILD_TOOLS_VERSION }}
|
||||
|
||||
# Java and jq are always needed (apksigner requires Java even on cache hits).
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y openjdk-17-jdk-headless unzip jq
|
||||
|
||||
- name: Install Android SDK + NDK
|
||||
if: steps.sdk-cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
|
||||
curl -sL \
|
||||
"https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" \
|
||||
-o /tmp/cmdtools.zip
|
||||
unzip -q /tmp/cmdtools.zip -d /tmp/cmdtools
|
||||
mv /tmp/cmdtools/cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest"
|
||||
yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --licenses \
|
||||
> /dev/null 2>&1 || true
|
||||
"$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" \
|
||||
"build-tools;$BUILD_TOOLS_VERSION" \
|
||||
"platforms;android-34" \
|
||||
"ndk;$NDK_VERSION"
|
||||
|
||||
- name: Export Android environment
|
||||
run: |
|
||||
echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> "$GITHUB_ENV"
|
||||
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/$NDK_VERSION" >> "$GITHUB_ENV"
|
||||
|
||||
# ── Rust toolchain ─────────────────────────────────────────────────
|
||||
- name: Install Rust stable
|
||||
run: |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
||||
| sh -s -- -y --default-toolchain stable --no-modify-path
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Add Android cross-compilation targets
|
||||
run: |
|
||||
rustup target add \
|
||||
aarch64-linux-android \
|
||||
armv7-linux-androideabi \
|
||||
x86_64-linux-android
|
||||
|
||||
# ── Cargo caches ───────────────────────────────────────────────────
|
||||
- name: Cache Cargo registry
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry/index
|
||||
~/.cargo/registry/cache
|
||||
~/.cargo/git/db
|
||||
key: cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: cargo-registry-
|
||||
|
||||
- name: Cache cargo-apk binary
|
||||
uses: actions/cache@v4
|
||||
id: apk-tool-cache
|
||||
with:
|
||||
path: ~/.cargo/bin/cargo-apk
|
||||
key: cargo-apk-${{ runner.os }}-stable
|
||||
|
||||
- name: Cache build artifacts
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: target
|
||||
key: android-release-target-${{ hashFiles('**/Cargo.lock') }}-${{ github.sha }}
|
||||
restore-keys: android-release-target-${{ hashFiles('**/Cargo.lock') }}-
|
||||
|
||||
# ── Build ──────────────────────────────────────────────────────────
|
||||
- name: Install cargo-apk
|
||||
if: steps.apk-tool-cache.outputs.cache-hit != 'true'
|
||||
run: cargo install cargo-apk --locked
|
||||
|
||||
- name: Build release APK
|
||||
run: cargo apk build --release --package solitaire_app --lib
|
||||
|
||||
# ── Sign ───────────────────────────────────────────────────────────
|
||||
- name: Decode keystore
|
||||
run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > /tmp/solitaire-release.jks
|
||||
|
||||
- name: Align and sign APK
|
||||
run: |
|
||||
TAG="${{ steps.meta.outputs.tag }}"
|
||||
UNSIGNED="target/release/apk/solitaire-quest.apk"
|
||||
ALIGNED="/tmp/solitaire-quest-aligned.apk"
|
||||
SIGNED="ferrous-solitaire-${TAG}.apk"
|
||||
|
||||
"$ANDROID_SDK_ROOT/build-tools/$BUILD_TOOLS_VERSION/zipalign" -v 4 \
|
||||
"$UNSIGNED" "$ALIGNED"
|
||||
|
||||
"$ANDROID_SDK_ROOT/build-tools/$BUILD_TOOLS_VERSION/apksigner" sign \
|
||||
--ks /tmp/solitaire-release.jks \
|
||||
--ks-pass "pass:${{ secrets.KEYSTORE_PASS }}" \
|
||||
--ks-key-alias "${{ secrets.KEY_ALIAS }}" \
|
||||
--key-pass "pass:${{ secrets.KEY_PASS }}" \
|
||||
--out "$SIGNED" \
|
||||
"$ALIGNED"
|
||||
|
||||
- name: Verify APK signature
|
||||
run: |
|
||||
TAG="${{ steps.meta.outputs.tag }}"
|
||||
"$ANDROID_SDK_ROOT/build-tools/$BUILD_TOOLS_VERSION/apksigner" verify \
|
||||
--verbose "ferrous-solitaire-${TAG}.apk"
|
||||
|
||||
# ── Publish ────────────────────────────────────────────────────────
|
||||
- name: Create Gitea release
|
||||
id: release
|
||||
run: |
|
||||
TAG="${{ steps.meta.outputs.tag }}"
|
||||
# Try to create; fall back to fetching the existing release on 409.
|
||||
RESPONSE=$(curl -s -o /tmp/release.json -w "%{http_code}" \
|
||||
-X POST "$GITEA_API/repos/$REPO/releases" \
|
||||
-H "Authorization: token ${{ secrets.CI_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"draft\":false,\"prerelease\":false}")
|
||||
if [ "$RESPONSE" = "409" ]; then
|
||||
curl -sf "$GITEA_API/repos/$REPO/releases/tags/$TAG" \
|
||||
-H "Authorization: token ${{ secrets.CI_TOKEN }}" \
|
||||
> /tmp/release.json
|
||||
elif [ "$RESPONSE" != "201" ]; then
|
||||
echo "Release creation failed with HTTP $RESPONSE"
|
||||
cat /tmp/release.json
|
||||
exit 1
|
||||
fi
|
||||
RELEASE_ID=$(jq -r '.id' /tmp/release.json)
|
||||
echo "release_id=$RELEASE_ID" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Upload signed APK
|
||||
run: |
|
||||
TAG="${{ steps.meta.outputs.tag }}"
|
||||
APK="ferrous-solitaire-${TAG}.apk"
|
||||
curl -sf -X POST \
|
||||
"$GITEA_API/repos/$REPO/releases/${{ steps.release.outputs.release_id }}/assets?name=$APK" \
|
||||
-H "Authorization: token ${{ secrets.CI_TOKEN }}" \
|
||||
-H "Content-Type: application/octet-stream" \
|
||||
--data-binary @"$APK"
|
||||
@@ -16,3 +16,8 @@ data/
|
||||
*.jks.bak
|
||||
*.jks.bak*
|
||||
*.keystore
|
||||
|
||||
# Kubernetes secrets — apply manually, never commit
|
||||
deploy/matomo-secret.yaml
|
||||
deploy/*-secret.yaml
|
||||
deploy/*-auth-secret.yaml
|
||||
|
||||
@@ -12,6 +12,14 @@ spec:
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: solitaire
|
||||
# Secrets are applied manually and must not be pruned by ArgoCD.
|
||||
ignoreDifferences:
|
||||
- group: ""
|
||||
kind: Secret
|
||||
name: matomo-secret
|
||||
namespace: solitaire
|
||||
jsonPointers:
|
||||
- /data
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
|
||||
@@ -11,7 +11,6 @@ resources:
|
||||
- mariadb-deployment.yaml
|
||||
- mariadb-service.yaml
|
||||
- matomo-pvc.yaml
|
||||
- matomo-secret.yaml
|
||||
- matomo-deployment.yaml
|
||||
- matomo-service.yaml
|
||||
- ingress-analytics.yaml
|
||||
@@ -21,4 +20,4 @@ resources:
|
||||
images:
|
||||
- name: solitaire-server
|
||||
newName: git.aleshym.co/funman300/solitaire-server
|
||||
newTag: 3e006a1e
|
||||
newTag: 0f650311
|
||||
|
||||
@@ -17,18 +17,20 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: matomo
|
||||
image: bitnami/matomo:5
|
||||
image: matomo:5.10.0
|
||||
env:
|
||||
- name: MATOMO_DATABASE_HOST
|
||||
value: mariadb
|
||||
- name: MATOMO_DATABASE_PORT_NUMBER
|
||||
- name: MATOMO_DATABASE_PORT
|
||||
value: "3306"
|
||||
- name: MATOMO_DATABASE_NAME
|
||||
- name: MATOMO_DATABASE_ADAPTER
|
||||
value: PDO\MYSQL
|
||||
- name: MATOMO_DATABASE_DBNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: matomo-secret
|
||||
key: MYSQL_DATABASE
|
||||
- name: MATOMO_DATABASE_USER
|
||||
- name: MATOMO_DATABASE_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: matomo-secret
|
||||
@@ -38,40 +40,32 @@ spec:
|
||||
secretKeyRef:
|
||||
name: matomo-secret
|
||||
key: MYSQL_PASSWORD
|
||||
- name: MATOMO_USERNAME
|
||||
value: admin
|
||||
- name: MATOMO_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: matomo-secret
|
||||
key: MATOMO_ADMIN_PASSWORD
|
||||
- name: MATOMO_EMAIL
|
||||
value: funman300@gmail.com
|
||||
- name: MATOMO_WEBSITE_NAME
|
||||
value: "Solitaire Quest"
|
||||
- name: MATOMO_WEBSITE_HOST
|
||||
value: "https://klondike.aleshym.co"
|
||||
- name: MATOMO_HOST
|
||||
value: analytics.aleshym.co
|
||||
- name: MATOMO_ENABLE_PROXY_URI_HEADER
|
||||
value: "yes"
|
||||
# Traefik terminates SSL; tell Matomo to trust X-Forwarded-* headers
|
||||
- name: MATOMO_GENERAL_ASSUME_SECURE_PROTOCOL
|
||||
value: "1"
|
||||
- name: MATOMO_GENERAL_PROXY_CLIENT_HEADERS
|
||||
value: HTTP_X_FORWARDED_FOR
|
||||
- name: MATOMO_GENERAL_PROXY_HOST_HEADERS
|
||||
value: HTTP_X_FORWARDED_HOST
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
- containerPort: 80
|
||||
volumeMounts:
|
||||
- name: matomo-data
|
||||
mountPath: /bitnami/matomo
|
||||
mountPath: /var/www/html
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /index.php
|
||||
port: 8080
|
||||
path: /matomo.php
|
||||
port: 80
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 5
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /index.php
|
||||
port: 8080
|
||||
path: /matomo.php
|
||||
port: 80
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
# Credentials for MariaDB and the Matomo admin account.
|
||||
# Regenerate with: python3 -c "import secrets; print(secrets.token_urlsafe(18))"
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: matomo-secret
|
||||
namespace: solitaire
|
||||
stringData:
|
||||
MYSQL_ROOT_PASSWORD: "jspRn-QU18sZhB55FR-JfrMJ"
|
||||
MYSQL_DATABASE: matomo
|
||||
MYSQL_USER: matomo
|
||||
MYSQL_PASSWORD: "ZxDp648UuL5fsN7eQI23E7ue"
|
||||
MATOMO_ADMIN_PASSWORD: "J6QUtbroK4Z7zao4Dnl0J7e2"
|
||||
@@ -0,0 +1,22 @@
|
||||
# DO NOT COMMIT THE REAL VERSION OF THIS FILE.
|
||||
# deploy/matomo-secret.yaml is gitignored — apply it manually once:
|
||||
#
|
||||
# cp deploy/matomo-secret.yaml.example deploy/matomo-secret.yaml
|
||||
# # edit the passwords below, then:
|
||||
# kubectl apply -f deploy/matomo-secret.yaml
|
||||
# kubectl annotate secret matomo-secret -n solitaire \
|
||||
# argocd.argoproj.io/sync-options=Prune=false --overwrite
|
||||
#
|
||||
# Generate strong passwords with:
|
||||
# python3 -c "import secrets; print(secrets.token_urlsafe(18))"
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: matomo-secret
|
||||
namespace: solitaire
|
||||
stringData:
|
||||
MYSQL_ROOT_PASSWORD: "CHANGE_ME"
|
||||
MYSQL_DATABASE: matomo
|
||||
MYSQL_USER: matomo
|
||||
MYSQL_PASSWORD: "CHANGE_ME"
|
||||
MATOMO_ADMIN_PASSWORD: "CHANGE_ME"
|
||||
@@ -9,4 +9,4 @@ spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
targetPort: 80
|
||||
|
||||
@@ -143,11 +143,10 @@ pub struct Settings {
|
||||
#[serde(default)]
|
||||
pub window_geometry: Option<WindowGeometry>,
|
||||
/// Identifier of the active card-art theme. Matches `meta.id` from
|
||||
/// the theme's `theme.ron` manifest. `"default"` is the bundled
|
||||
/// theme and is always present in the registry; user-supplied
|
||||
/// themes register under their own ids when they're imported.
|
||||
/// Older `settings.json` files default cleanly to `"default"` via
|
||||
/// `#[serde(default = ...)]`.
|
||||
/// the theme's `theme.ron` manifest. `"classic"` and `"dark"` are
|
||||
/// always present; user-supplied themes register under their own ids.
|
||||
/// Older `settings.json` files that stored `"default"` will fall
|
||||
/// back to the dark embedded theme at runtime.
|
||||
#[serde(default = "default_theme_id")]
|
||||
pub selected_theme_id: String,
|
||||
/// Set to `true` once the achievement-onboarding info-toast has been
|
||||
@@ -273,7 +272,7 @@ fn default_music_volume() -> f32 {
|
||||
}
|
||||
|
||||
fn default_theme_id() -> String {
|
||||
"default".to_string()
|
||||
"classic".to_string()
|
||||
}
|
||||
|
||||
/// Default tooltip-hover dwell delay in seconds. Mirrors
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<defs>
|
||||
<pattern id="dp" x="0" y="0" width="28" height="28" patternUnits="userSpaceOnUse">
|
||||
<rect width="28" height="28" fill="#1a3a6e"/>
|
||||
<polygon points="14,2 26,14 14,26 2,14" fill="#2255aa"/>
|
||||
<polygon points="14,7 21,14 14,21 7,14" fill="#1a3a6e"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
<!-- White card background -->
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14" fill="#FAFAF8"/>
|
||||
<!-- Red outer border -->
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="none" stroke="#CC1111" stroke-width="4"/>
|
||||
<!-- Navy diamond pattern inset -->
|
||||
<rect x="16" y="16" width="224" height="352" rx="8" ry="8" fill="url(#dp)"/>
|
||||
<!-- Thin red frame around pattern -->
|
||||
<rect x="16" y="16" width="224" height="352" rx="8" ry="8"
|
||||
fill="none" stroke="#CC1111" stroke-width="2"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 924 B |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">10</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">10</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">2</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">2</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">3</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">3</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">4</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">4</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">5</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">5</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">6</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">6</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">7</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">7</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">8</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">8</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">9</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">9</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">A</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">A</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">J</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">J</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">K</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">K</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">Q</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) 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="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">Q</text>
|
||||
<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="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,2 L 30,16 L 16,30 L 2,16 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#CC1111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,28 C 8,22 2,17 2,11 C 2,7 5,4 9,4 C 12,4 14,6 16,9 C 18,6 20,4 23,4 C 27,4 30,7 30,11 C 30,17 24,22 16,28 Z" fill="#CC1111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="11" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">10</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">2</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">3</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">4</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">5</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">6</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">7</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">8</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">9</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">A</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">J</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">K</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="384" viewBox="0 0 256 384">
|
||||
<rect x="2" y="2" width="252" height="380" rx="14" ry="14"
|
||||
fill="#FAFAF8" stroke="#AAAAAA" stroke-width="1.5"/>
|
||||
|
||||
<!-- Top-left corner: rank label + small suit -->
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Centre: large suit, 64x64 in 256x384 card -->
|
||||
<g transform="translate(96 160) scale(2)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
|
||||
<!-- Bottom-right corner: mirrored via 180° rotation around card centre -->
|
||||
<g transform="rotate(180 128 192)">
|
||||
<text x="14" y="44" font-family="Fira Mono" font-size="36" font-weight="700"
|
||||
fill="#111111">Q</text>
|
||||
<g transform="translate(14 50) scale(0.625)">
|
||||
<path d="M16,4 C 9,9 2,14 2,21 C 2,25 5,28 9,28 C 13,28 14,26 14,24 L 13,30 L 19,30 L 18,24 C 18,26 19,28 23,28 C 27,28 30,25 30,21 C 30,14 23,9 16,4 Z" fill="#111111"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,64 @@
|
||||
(
|
||||
meta: (
|
||||
id: "classic",
|
||||
name: "Classic",
|
||||
author: "Ferrous Solitaire",
|
||||
version: "1.0.0",
|
||||
card_aspect: (2, 3),
|
||||
),
|
||||
back: "back.svg",
|
||||
faces: {
|
||||
"clubs_ace": "clubs_ace.svg",
|
||||
"clubs_2": "clubs_2.svg",
|
||||
"clubs_3": "clubs_3.svg",
|
||||
"clubs_4": "clubs_4.svg",
|
||||
"clubs_5": "clubs_5.svg",
|
||||
"clubs_6": "clubs_6.svg",
|
||||
"clubs_7": "clubs_7.svg",
|
||||
"clubs_8": "clubs_8.svg",
|
||||
"clubs_9": "clubs_9.svg",
|
||||
"clubs_10": "clubs_10.svg",
|
||||
"clubs_jack": "clubs_jack.svg",
|
||||
"clubs_queen": "clubs_queen.svg",
|
||||
"clubs_king": "clubs_king.svg",
|
||||
"diamonds_ace": "diamonds_ace.svg",
|
||||
"diamonds_2": "diamonds_2.svg",
|
||||
"diamonds_3": "diamonds_3.svg",
|
||||
"diamonds_4": "diamonds_4.svg",
|
||||
"diamonds_5": "diamonds_5.svg",
|
||||
"diamonds_6": "diamonds_6.svg",
|
||||
"diamonds_7": "diamonds_7.svg",
|
||||
"diamonds_8": "diamonds_8.svg",
|
||||
"diamonds_9": "diamonds_9.svg",
|
||||
"diamonds_10": "diamonds_10.svg",
|
||||
"diamonds_jack": "diamonds_jack.svg",
|
||||
"diamonds_queen": "diamonds_queen.svg",
|
||||
"diamonds_king": "diamonds_king.svg",
|
||||
"hearts_ace": "hearts_ace.svg",
|
||||
"hearts_2": "hearts_2.svg",
|
||||
"hearts_3": "hearts_3.svg",
|
||||
"hearts_4": "hearts_4.svg",
|
||||
"hearts_5": "hearts_5.svg",
|
||||
"hearts_6": "hearts_6.svg",
|
||||
"hearts_7": "hearts_7.svg",
|
||||
"hearts_8": "hearts_8.svg",
|
||||
"hearts_9": "hearts_9.svg",
|
||||
"hearts_10": "hearts_10.svg",
|
||||
"hearts_jack": "hearts_jack.svg",
|
||||
"hearts_queen": "hearts_queen.svg",
|
||||
"hearts_king": "hearts_king.svg",
|
||||
"spades_ace": "spades_ace.svg",
|
||||
"spades_2": "spades_2.svg",
|
||||
"spades_3": "spades_3.svg",
|
||||
"spades_4": "spades_4.svg",
|
||||
"spades_5": "spades_5.svg",
|
||||
"spades_6": "spades_6.svg",
|
||||
"spades_7": "spades_7.svg",
|
||||
"spades_8": "spades_8.svg",
|
||||
"spades_9": "spades_9.svg",
|
||||
"spades_10": "spades_10.svg",
|
||||
"spades_jack": "spades_jack.svg",
|
||||
"spades_queen": "spades_queen.svg",
|
||||
"spades_king": "spades_king.svg",
|
||||
},
|
||||
)
|
||||
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 956 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |