commit 02671197ed5dfc53147d29e399d44baaec2c8570
parent bca5704bbd20da5f8128386f2f393e1618cb6fb3
Author: Florian Dold <dold@taler.net>
Date: Sat, 22 Aug 2026 20:34:02 +0200
merchant frontend: fix branded QR rendering
Diffstat:
2 files changed, 14 insertions(+), 28 deletions(-)
diff --git a/src/frontend/offer_refund.en.must b/src/frontend/offer_refund.en.must
@@ -47,14 +47,13 @@
.wallet-help { margin: 1rem 0 0; color: var(--taler-muted); font-size: .92rem; }
.qr-column { display: grid; justify-items: center; gap: 1rem; }
.qr-instruction { margin: 0; max-width: 26rem; color: var(--taler-slate); text-align: center; line-height: 1.5; }
- .qr-frame { position: relative; width: min(100%, 25rem); aspect-ratio: 1; padding: 6.25%; overflow: hidden; border-radius: 8%; background: var(--taler-qr-frame); }
- .qr-code { width: 100%; height: 100%; background: #fff; }
+ .qr-frame { position: relative; width: min(100%, 25rem); aspect-ratio: 1 / 1; overflow: hidden; border-radius: 8%; background: var(--taler-qr-frame); }
+ .qr-frame::before { content: ""; position: absolute; inset: -50%; background: conic-gradient(#f1f1f4 0deg, #0042b3 18deg, #f1f1f4 55deg, #f1f1f4 180deg, #0042b3 198deg, #f1f1f4 235deg); animation: qr-rotate 10s linear infinite; pointer-events: none; }
+ .qr-frame::after { content: ""; position: absolute; inset: 4.1%; border-radius: 4.6%; background: var(--taler-qr-frame); pointer-events: none; }
+ .qr-code { position: absolute; z-index: 1; inset: 6.25%; background: #fff; }
.qr-code > svg { display: block; width: 100%; height: 100%; fill: #000; }
- .qr-motion { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
- .qr-motion rect { fill: none; stroke: url(#taler-scan-gradient); stroke-width: 2.6; stroke-linecap: round; stroke-dasharray: 57 343; animation: scan 4s linear infinite; }
- .qr-motion rect + rect { animation-delay: -2s; }
- .qr-badge { position: absolute; inset: 50% auto auto 50%; height: 12.5%; width: auto; transform: translate(-50%, -50%); }
- @keyframes scan { to { stroke-dashoffset: -400; } }
+ .qr-badge { position: absolute; z-index: 2; top: 50%; left: 50%; width: 26.32%; height: 12.5%; object-fit: contain; transform: translate(-50%, -50%); }
+ @keyframes qr-rotate { to { transform: rotate(1turn); } }
.claimed { width: min(100%, 25rem); aspect-ratio: 1; display: grid; place-items: center; padding: 2.5rem; border-radius: 8%; background: var(--taler-qr-frame); text-align: center; }
.claimed-icon { width: 4.25rem; height: 4.25rem; margin: 0 auto 1.3rem; display: grid; place-items: center; border-radius: 50%; background: var(--taler-blue); color: #fff; font-size: 2rem; }
.claimed h2 { margin: 0; font-size: 1.35rem; }
@@ -81,8 +80,7 @@
.site-footer { flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
- .qr-motion rect { animation: none; }
- .qr-motion rect + rect { stroke-dashoffset: -200; }
+ .qr-frame::before { animation: none; }
}
</style>
</head>
@@ -112,11 +110,6 @@
<section class="qr-column">
<div class="qr-frame" aria-label="QR code for the Taler wallet">
<div class="qr-code">{{{ taler_refund_qrcode_svg }}}</div>
- <svg class="qr-motion" viewBox="0 0 100 100" aria-hidden="true" focusable="false">
- <defs><linearGradient id="taler-scan-gradient"><stop offset="0" stop-color="#f1f1f4"/><stop offset=".5" stop-color="#0042b3"/><stop offset="1" stop-color="#f1f1f4"/></linearGradient></defs>
- <rect x="1.3" y="1.3" width="97.4" height="97.4" rx="8" pathLength="400"/>
- <rect x="1.3" y="1.3" width="97.4" height="97.4" rx="8" pathLength="400"/>
- </svg>
<img class="qr-badge" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iOTUiIGlkPSJzY3JlZW5zaG90LWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxYiIgdmlld0JveD0iMCAwIDIwMCA5NSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZpbGw9Im5vbmUiIHZlcnNpb249IjEuMSI+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxYiI+PGcgY2xhc3M9ImZyYW1lLWNvbnRhaW5lci13cmFwcGVyIj48ZyBjbGFzcz0iZnJhbWUtY29udGFpbmVyLWJsdXIiPjxnIGNsYXNzPSJmcmFtZS1jb250YWluZXItc2hhZG93cyI+PGcgZmlsbD0ibm9uZSI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFiIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9Ijk1IiBjbGFzcz0iZnJhbWUtYmFja2dyb3VuZCIgeD0iMCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkiIHN0eWxlPSJmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsiIHJ5PSI0Ny41IiByeD0iNDcuNSIgeT0iMCIvPjwvZz48ZyBjbGFzcz0iZnJhbWUtY2hpbGRyZW4iPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWMiIHdpZHRoPSI2NzAiIGhlaWdodD0iMzAwIiByeD0iMCIgcnk9IjAiIHN0eWxlPSJmaWxsOiByZ2IoMCwgMCwgMCk7Ij48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFkIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxZCI+PHJlY3Qgd2lkdGg9IjE4MCIgaGVpZ2h0PSI4MC43NjkyMzA3NjkyMzA5NCIgeD0iMTAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApIiBzdHlsZT0iZmlsbDogbm9uZTsiIHJ5PSIwIiBmaWxsPSJub25lIiByeD0iMCIgeT0iNy4xMTUzODQ2MTUzODQzMDEiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWUiIHJ4PSIwIiByeT0iMCIgc3R5bGU9ImZpbGw6IHJnYigwLCAwLCAwKTsiPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjQiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNCI+PHBhdGggZD0iTTg3LjYwNzkxMDE1NjI1LDguMTIxNTgyMDMxMjVDMTAxLjU2ODgxNzEzODY3MTg4LDguMTIxNTgyMDMxMjUsMTEzLjY5Mzc4NjYyMTA5Mzc1LDE2LjU1ODU5Mzc1LDExOS44MTE3OTgwOTU3MDMxMiwyOC45NDM2MDM1MTU2MjVMMTE0LjYwMjIzMzg4NjcxODc1LDI4Ljk0MzYwMzUxNTYyNUMxMDguOTQzMjM3MzA0Njg3NSwxOS4zNDEzMDg1OTM3NSw5OC45NjkyNjg3OTg4MjgxMiwxMi45NjQ4NDM3NSw4Ny42MDc5MTAxNTYyNSwxMi45NjQ4NDM3NUM2OS45NzQ1NDgzMzk4NDM3NSwxMi45NjQ4NDM3NSw1NS42Nzk5NjIxNTgyMDMxMjUsMjguMzIxNzc3MzQzNzUsNTUuNjc5OTYyMTU4MjAzMTI1LDQ3LjI2NTM4MDg1OTM3NUM1NS42Nzk5NjIxNTgyMDMxMjUsNTYuNTM3NTk3NjU2MjUsNTkuMTA1ODY1NDc4NTE1NjI1LDY0Ljk0OTIxODc1LDY0LjY3MDYyMzc3OTI5Njg4LDcxLjEyMTgyNjE3MTg3NUM2My40Njg1MDU4NTkzNzUsNzIuMTI3OTI5Njg3NSw2Mi4xODg2MjkxNTAzOTA2MjUsNzMuMDMxNDk0MTQwNjI1LDYwLjg0MTgyNzM5MjU3ODEyNSw3My44MjAzMTI1QzU0Ljg0MDE0ODkyNTc4MTI1LDY2Ljg0Mjc3MzQzNzUsNTEuMTcxNTA4Nzg5MDYyNSw1Ny41MTUzODA4NTkzNzUsNTEuMTcxNTA4Nzg5MDYyNSw0Ny4yNjUzODA4NTkzNzVDNTEuMTcxNTA4Nzg5MDYyNSwyNS42NDY5NzI2NTYyNSw2Ny40ODQ2NDk2NTgyMDMxMiw4LjEyMTU4MjAzMTI1LDg3LjYwNzkxMDE1NjI1LDguMTIxNTgyMDMxMjVaTTExOS43MTQxNzIzNjMyODEyNSw2NS43ODYxMzI4MTI1QzExMy41NjUxMjQ1MTE3MTg3NSw3OC4wNjI5ODgyODEyNSwxMDEuNDk0MjMyMTc3NzM0MzgsODYuNDA5NDIzODI4MTI1LDg3LjYwNzkxMDE1NjI1LDg2LjQwOTQyMzgyODEyNUM4Ni42NjUxOTE2NTAzOTA2Miw4Ni40MDk0MjM4MjgxMjUsODUuNzMwODA0NDQzMzU5MzgsODYuMzcwODQ5NjA5Mzc1LDg0LjgwNjA5MTMwODU5Mzc1LDg2LjI5NTQxMDE1NjI1Qzg3LjUzOTM5ODE5MzM1OTM4LDg0Ljg5NDI4NzEwOTM3NSw5MC4xMDE4MzcxNTgyMDMxMiw4My4xNzE4NzUsOTIuNDUyMzMxNTQyOTY4NzUsODEuMTczMzM5ODQzNzVDMTAxLjY5NDk3NjgwNjY0MDYyLDc5LjY2MTg2NTIzNDM3NSwxMDkuNjMzODE5NTgwMDc4MTIsNzMuODkxODQ1NzAzMTI1LDExNC40ODM4MjU2ODM1OTM3NSw2NS43ODYxMzI4MTI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjUiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNSI+PHBhdGggZD0iTTY3LjUwMzYzMTU5MTc5Njg4LDguMTIxNTgyMDMxMjVDNjguNDQ2MjU4NTQ0OTIxODgsOC4xMjE1ODIwMzEyNSw2OS4zODA2MTUyMzQzNzUsOC4xNjAxNTYyNSw3MC4zMDU0MTk5MjE4NzUsOC4yMzU1OTU3MDMxMjVDNjcuNTcyMTEzMDM3MTA5MzgsOS42MzY3MTg3NSw2NS4wMDk1ODI1MTk1MzEyNSwxMS4zNTg4ODY3MTg3NSw2Mi42NTkwODgxMzQ3NjU2MjUsMTMuMzU3NjY2MDE1NjI1QzQ3LjMyNDk1MTE3MTg3NSwxNS44NjUyMzQzNzUsMzUuNTc1NjUzMDc2MTcxODc1LDMwLjA5MTA2NDQ1MzEyNSwzNS41NzU2NTMwNzYxNzE4NzUsNDcuMjY1MzgwODU5Mzc1QzM1LjU3NTY1MzA3NjE3MTg3NSw2MC4wNjY4OTQ1MzEyNSw0Mi4xMDQ1NTMyMjI2NTYyNSw3MS4yMjg3NTk3NjU2MjUsNTEuNzc5MTEzNzY5NTMxMjUsNzcuMTIyMDcwMzEyNUM1MC4zNTE5NTkyMjg1MTU2MjUsNzcuMzYyMDYwNTQ2ODc1LDQ4Ljg4OTI4MjIyNjU2MjUsNzcuNDg3MzA0Njg3NSw0Ny4zOTkzMjI1MDk3NjU2MjUsNzcuNDg3MzA0Njg3NUM0Ni4yODkzMDY2NDA2MjUsNzcuNDg3MzA0Njg3NSw0NS4xOTUwMDczMjQyMTg3NSw3Ny40MTYwMTU2MjUsNDQuMTE4NTYwNzkxMDE1NjI1LDc3LjI4MTQ5NDE0MDYyNUMzNi4xNDEyOTYzODY3MTg3NSw3MC4xMDEwNzQyMTg3NSwzMS4wNjcyMzAyMjQ2MDkzNzUsNTkuMzIwODAwNzgxMjUsMzEuMDY3MjMwMjI0NjA5Mzc1LDQ3LjI2NTM4MDg1OTM3NUMzMS4wNjcyMzAyMjQ2MDkzNzUsMjUuNjQ2OTcyNjU2MjUsNDcuMzgwMzcxMDkzNzUsOC4xMjE1ODIwMzEyNSw2Ny41MDM2MzE1OTE3OTY4OCw4LjEyMTU4MjAzMTI1Wk03Mi4zNDgxNDQ1MzEyNSw4MS4xNzMzMzk4NDM3NUM4MS41OTA5NDIzODI4MTI1LDc5LjY2MTg2NTIzNDM3NSw4OS41Mjk2OTM2MDM1MTU2Miw3My44OTE2MDE1NjI1LDk0LjM3OTc2MDc0MjE4NzUsNjUuNzg1NjQ0NTMxMjVMOTkuNjEwMDc2OTA0Mjk2ODgsNjUuNzg1NjQ0NTMxMjVDOTMuNDYxMDkwMDg3ODkwNjIsNzguMDYyNzQ0MTQwNjI1LDgxLjM5MDE2NzIzNjMyODEyLDg2LjQwOTQyMzgyODEyNSw2Ny41MDM2MzE1OTE3OTY4OCw4Ni40MDk0MjM4MjgxMjVDNjYuNTYwODgyNTY4MzU5MzgsODYuNDA5NDIzODI4MTI1LDY1LjYyNjYxNzQzMTY0MDYyLDg2LjM3MDg0OTYwOTM3NSw2NC43MDE4MTI3NDQxNDA2Miw4Ni4yOTU0MTAxNTYyNUM2Ny40MzQ5MzY1MjM0Mzc1LDg0Ljg5NDA0Mjk2ODc1LDY5Ljk5Nzc3MjIxNjc5Njg4LDgzLjE3MjExOTE0MDYyNSw3Mi4zNDgxNDQ1MzEyNSw4MS4xNzMzMzk4NDM3NVpNOTQuNDk3ODAyNzM0Mzc1LDI4Ljk0MzYwMzUxNTYyNUM5MS42ODY0MDEzNjcxODc1LDI0LjE3NDA3MjI2NTYyNSw4Ny44MTA0NTUzMjIyNjU2MiwyMC4yMDAxOTUzMTI1LDgzLjIyODA4ODM3ODkwNjI1LDE3LjQwODY5MTQwNjI1Qzg0LjY1NTI0MjkxOTkyMTg4LDE3LjE2ODk0NTMxMjUsODYuMTE3ODU4ODg2NzE4NzUsMTcuMDQzNDU3MDMxMjUsODcuNjA3OTEwMTU2MjUsMTcuMDQzNDU3MDMxMjVDODguNzE3ODY0OTkwMjM0MzgsMTcuMDQzNDU3MDMxMjUsODkuODEyMjI1MzQxNzk2ODgsMTcuMTE0OTkwMjM0Mzc1LDkwLjg4ODY3MTg3NSwxNy4yNDkyNjc1NzgxMjVDOTQuNDg1MTA3NDIxODc1LDIwLjQ4NjU3MjI2NTYyNSw5Ny40OTE1MTYxMTMyODEyNSwyNC40NTU4MTA1NDY4NzUsOTkuNzA4NzA5NzE2Nzk2ODgsMjguOTQzNjAzNTE1NjI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjYiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNiI+PHBhdGggZD0iTTQ3LjM5OTMyMjUwOTc2NTYyNSw4LjEyMTU4MjAzMTI1QzQ4LjM1MjQ0NzUwOTc2NTYyNSw4LjEyMTU4MjAzMTI1LDQ5LjI5Njc4MzQ0NzI2NTYyNSw4LjE2MTM3Njk1MzEyNSw1MC4yMzE1MDYzNDc2NTYyNSw4LjIzODUyNTM5MDYyNUM0Ny41MDMyOTU4OTg0Mzc1LDkuNjM3NDUxMTcxODc1LDQ0Ljk0NTA5ODg3Njk1MzEyNSwxMS4zNTY2ODk0NTMxMjUsNDIuNTk4NDQ5NzA3MDMxMjUsMTMuMzUxMDc0MjE4NzVDMjcuMjQyOTUwNDM5NDUzMTI1LDE1LjgzOTExMTMyODEyNSwxNS40NzEzNzQ1MTE3MTg3NSwzMC4wNzQ5NTExNzE4NzUsMTUuNDcxMzc0NTExNzE4NzUsNDcuMjY1MzgwODU5Mzc1QzE1LjQ3MTM3NDUxMTcxODc1LDY2LjIwODk4NDM3NSwyOS43NjYwODI3NjM2NzE4NzUsODEuNTY1OTE3OTY4NzUsNDcuMzk5MzIyNTA5NzY1NjI1LDgxLjU2NTkxNzk2ODc1QzU4LjY4MjY3ODIyMjY1NjI1LDgxLjU2NTkxNzk2ODc1LDY4LjU5ODU0MTI1OTc2NTYyLDc1LjI3NzU4Nzg5MDYyNSw3NC4yNzczMTMyMzI0MjE4OCw2NS43ODU2NDQ1MzEyNUw3OS41MDU4Mjg4NTc0MjE4OCw2NS43ODU2NDQ1MzEyNUM3My4zNTY4NzI1NTg1OTM3NSw3OC4wNjI3NDQxNDA2MjUsNjEuMjg1ODg4NjcxODc1LDg2LjQwOTQyMzgyODEyNSw0Ny4zOTkzMjI1MDk3NjU2MjUsODYuNDA5NDIzODI4MTI1QzI3LjI3NjEyMzA0Njg3NSw4Ni40MDk0MjM4MjgxMjUsMTAuOTYzMDQzMjEyODkwNjI1LDY4Ljg4NDAzMzIwMzEyNSwxMC45NjMwNDMyMTI4OTA2MjUsNDcuMjY1MzgwODU5Mzc1QzEwLjk2MzA0MzIxMjg5MDYyNSwyNS42NDY5NzI2NTYyNSwyNy4yNzYxMjMwNDY4NzUsOC4xMjE1ODIwMzEyNSw0Ny4zOTkzMjI1MDk3NjU2MjUsOC4xMjE1ODIwMzEyNVpNNzQuMzkyODgzMzAwNzgxMjUsMjguOTQzNjAzNTE1NjI1QzczLjIxODAxNzU3ODEyNSwyNi45NTA5Mjc3MzQzNzUsNzEuODU3NjY2MDE1NjI1LDI1LjA5NjQzNTU0Njg3NSw3MC4zMzcxNTgyMDMxMjUsMjMuNDA5NjY3OTY4NzVDNzEuNTM5MzY3Njc1NzgxMjUsMjIuNDAzODA4NTkzNzUsNzIuODE5MDAwMjQ0MTQwNjIsMjEuNDk5NTExNzE4NzUsNzQuMTY1NjQ5NDE0MDYyNSwyMC43MTA5Mzc1Qzc2LjI5MDcxMDQ0OTIxODc1LDIzLjE4MTY0MDYyNSw3OC4xMjI4MzMyNTE5NTMxMiwyNS45NDcwMjE0ODQzNzUsNzkuNjAzNjk4NzMwNDY4NzUsMjguOTQzNjAzNTE1NjI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjwvZz48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFmIj48ZyBjbGFzcz0iZmlsbHMiIGlkPSJmaWxscy1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWYiPjxwYXRoIGQ9Ik03OC4xODA5NjkyMzgyODEyNSwzNy45OTUzNjEzMjgxMjVMODYuMzg0ODg3Njk1MzEyNSwzNy45OTUzNjEzMjgxMjVMODYuMzg0ODg3Njk1MzEyNSwzMy40Njk0ODI0MjE4NzVMNjUuMzk0ODA1OTA4MjAzMTIsMzMuNDY5NDgyNDIxODc1TDY1LjM5NDgwNTkwODIwMzEyLDM3Ljk5NTM2MTMyODEyNUw3My41OTg4MTU5MTc5Njg3NSwzNy45OTUzNjEzMjgxMjVMNzMuNTk4ODE1OTE3OTY4NzUsNjEuMjU5NzY1NjI1TDc4LjE4MDk2OTIzODI4MTI1LDYxLjI1OTc2NTYyNVoiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjAiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMCI+PHBhdGggZD0iTTkyLjk2Nzk4NzA2MDU0Njg4LDU0LjU1MDUzNzEwOTM3NUwxMDUuMTk5OTIwNjU0Mjk2ODgsNTQuNTUwNTM3MTA5Mzc1TDEwNy44MjM4ODMwNTY2NDA2Miw2MS4yNTk3NjU2MjVMMTEyLjYyODAyMTI0MDIzNDM4LDYxLjI1OTc2NTYyNUwxMDEuMjQ1ODgwMTI2OTUzMTIsMzMuMjcwOTk2MDkzNzVMOTcuMDMzMjk0Njc3NzM0MzgsMzMuMjcwOTk2MDkzNzVMODUuNjUxMTIzMDQ2ODc1LDYxLjI1OTc2NTYyNUw5MC4zMDc0MzQwODIwMzEyNSw2MS4yNTk3NjU2MjVaTTEwMy41MzcwMTc4MjIyNjU2Miw1MC4yMjI5MDAzOTA2MjVMOTQuNjMxMjU2MTAzNTE1NjIsNTAuMjIyOTAwMzkwNjI1TDk5LjA2NTY0MzMxMDU0Njg4LDM5LjEwNjkzMzU5Mzc1WiIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMSI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIxIj48cGF0aCBkPSJNMTIwLjg3MTM5ODkyNTc4MTI1LDMzLjQ2OTQ4MjQyMTg3NUwxMTYuNzY5NTkyMjg1MTU2MjUsMzMuNDY5NDgyNDIxODc1TDExNi43Njk1OTIyODUxNTYyNSw2MS4yNTk3NjU2MjVMMTM1LjE3MDEzNTQ5ODA0Njg4LDYxLjI1OTc2NTYyNUwxMzUuMTcwMTM1NDk4MDQ2ODgsNTYuODUzMjcxNDg0Mzc1QzEzMC40MDM5MzA2NjQwNjI1LDU2Ljg1MzI3MTQ4NDM3NSwxMjUuNjM3NjM0Mjc3MzQzNzUsNTYuODUzMjcxNDg0Mzc1LDEyMC44NzEzOTg5MjU3ODEyNSw1Ni44NTMyNzE0ODQzNzVaIi8+PC9nPjwvZz48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIyIj48ZyBjbGFzcz0iZmlsbHMiIGlkPSJmaWxscy1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjIiPjxwYXRoIGQ9Ik0xNTkuMDc5NTg5ODQzNzUsMzMuNDY5NDgyNDIxODc1TDEzOS45MzcyMjUzNDE3OTY4OCwzMy40Njk0ODI0MjE4NzVMMTM5LjkzNzIyNTM0MTc5Njg4LDYxLjI1OTc2NTYyNUwxNTkuMjY0NDA0Mjk2ODc1LDYxLjI1OTc2NTYyNUwxNTkuMjY0NDA0Mjk2ODc1LDU2Ljg1MzI3MTQ4NDM3NUwxNDQuNDQ1NTU2NjQwNjI1LDU2Ljg1MzI3MTQ4NDM3NUwxNDQuNDQ1NTU2NjQwNjI1LDQ5LjQyODk1NTA3ODEyNUwxNTcuNDE2NjU2NDk0MTQwNjIsNDkuNDI4OTU1MDc4MTI1TDE1Ny40MTY2NTY0OTQxNDA2Miw0NS4wMjI0NjA5Mzc1TDE0NC40NDU1NTY2NDA2MjUsNDUuMDIyNDYwOTM3NUwxNDQuNDQ1NTU2NjQwNjI1LDM3Ljg3NjIyMDcwMzEyNUwxNTkuMDc5NTg5ODQzNzUsMzcuODc2MjIwNzAzMTI1WiIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMyI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIzIj48cGF0aCBkPSJNMTgxLjIxNTI0MDQ3ODUxNTYyLDQyLjU0MTI1OTc2NTYyNUMxODEuMjE1MjQwNDc4NTE1NjIsNDMuOTc2ODA2NjQwNjI1LDE4MC43MzQ4MzI3NjM2NzE4OCw0NS4xMjE4MjYxNzE4NzUsMTc5Ljc2NzgyMjI2NTYyNSw0NS45Njg1MDU4NTkzNzVDMTc4LjgwNzA5ODM4ODY3MTg4LDQ2LjgyMjI2NTYyNSwxNzcuNTA3NDQ2Mjg5MDYyNSw0Ny4yNDUzNjEzMjgxMjUsMTc1Ljg3NTE4MzEwNTQ2ODc1LDQ3LjI0NTM2MTMyODEyNUwxNjkuMjA0ODY0NTAxOTUzMTIsNDcuMjQ1MzYxMzI4MTI1TDE2OS4yMDQ4NjQ1MDE5NTMxMiwzNy44NzYyMjA3MDMxMjVMMTc1LjgzODI4NzM1MzUxNTYyLDM3Ljg3NjIyMDcwMzEyNUMxNzcuNTQ0MzQyMDQxMDE1NjIsMzcuODc2MjIwNzAzMTI1LDE3OC44Njg0OTk3NTU4NTkzOCwzOC4yNjY2MDE1NjI1LDE3OS44MDQ5MDExMjMwNDY4OCwzOS4wNTM5NTUwNzgxMjVDMTgwLjc0NzIyMjkwMDM5MDYyLDM5LjgzNDk2MDkzNzUsMTgxLjIxNTI0MDQ3ODUxNTYyLDQwLjk5OTI2NzU3ODEyNSwxODEuMjE1MjQwNDc4NTE1NjIsNDIuNTQxMjU5NzY1NjI1Wk0xODYuNjQ3NDkxNDU1MDc4MTIsNjEuMjU5NzY1NjI1TDE3OS42NjMyMDgwMDc4MTI1LDUwLjczOTAxMzY3MTg3NUMxODAuNTc0NTg0OTYwOTM3NSw1MC40NzQzNjUyMzQzNzUsMTgxLjQwNjE4ODk2NDg0Mzc1LDUwLjA5NzY1NjI1LDE4Mi4xNTc3MTQ4NDM3NSw0OS42MDc2NjYwMTU2MjVDMTgyLjkwODkzNTU0Njg3NSw0OS4xMTgxNjQwNjI1LDE4My41NTU4MTY2NTAzOTA2Miw0OC41MjI0NjA5Mzc1LDE4NC4wOTc2ODY3Njc1NzgxMiw0Ny44MjEyODkwNjI1QzE4NC42Mzk4MzE1NDI5Njg3NSw0Ny4xMTk2Mjg5MDYyNSwxODUuMDY0NjY2NzQ4MDQ2ODgsNDYuMzEyNzQ0MTQwNjI1LDE4NS4zNzI2MTk2Mjg5MDYyNSw0NS4zOTk2NTgyMDMxMjVDMTg1LjY4MDQ4MDk1NzAzMTI1LDQ0LjQ4NjU3MjI2NTYyNSwxODUuODM0MzgxMTAzNTE1NjIsNDMuNDQ3NTA5NzY1NjI1LDE4NS44MzQzODExMDM1MTU2Miw0Mi4yODI5NTg5ODQzNzVDMTg1LjgzNDM4MTEwMzUxNTYyLDQwLjkzMzEwNTQ2ODc1LDE4NS42MTI3OTI5Njg3NSwzOS43MDkyMjg1MTU2MjUsMTg1LjE2OTI4MTAwNTg1OTM4LDM4LjYxMDU5NTcwMzEyNUMxODQuNzI1ODYwNTk1NzAzMTIsMzcuNTEyNDUxMTcxODc1LDE4NC4wOTE1ODMyNTE5NTMxMiwzNi41ODU5Mzc1LDE4My4yNjYzMjY5MDQyOTY4OCwzNS44MzE1NDI5Njg3NUMxODIuNDQwODg3NDUxMTcxODgsMzUuMDc3MzkyNTc4MTI1LDE4MS40MzA4Nzc2ODU1NDY4OCwzNC40OTUxMTcxODc1LDE4MC4yMzYwODM5ODQzNzUsMzQuMDg0NzE2Nzk2ODc1QzE3OS4wNDEwNDYxNDI1NzgxMiwzMy42NzQzMTY0MDYyNSwxNzcuNzA0NTI4ODA4NTkzNzUsMzMuNDY5NDgyNDIxODc1LDE3Ni4yMjY0NzA5NDcyNjU2MiwzMy40Njk0ODI0MjE4NzVMMTY0LjY5NjUzMzIwMzEyNSwzMy40Njk0ODI0MjE4NzVMMTY0LjY5NjUzMzIwMzEyNSw2MS4yNTk3NjU2MjVMMTY5LjIwNDg2NDUwMTk1MzEyLDYxLjI1OTc2NTYyNUwxNjkuMjA0ODY0NTAxOTUzMTIsNTEuNTcyOTk4MDQ2ODc1TDE3NC45MTQ0NTkyMjg1MTU2Miw1MS41NzI5OTgwNDY4NzVMMTgxLjI4OTAzMTk4MjQyMTg4LDYxLjI1OTc2NTYyNVoiLz48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=" alt="">
</div>
<p class="qr-instruction">Scan this code with the Taler wallet on your phone.</p>
diff --git a/src/frontend/request_payment.en.must b/src/frontend/request_payment.en.must
@@ -47,14 +47,13 @@
.wallet-help { margin: 1rem 0 0; color: var(--taler-muted); font-size: .92rem; }
.qr-column { display: grid; justify-items: center; gap: 1rem; }
.qr-instruction { margin: 0; max-width: 26rem; color: var(--taler-slate); text-align: center; line-height: 1.5; }
- .qr-frame { position: relative; width: min(100%, 25rem); aspect-ratio: 1; padding: 6.25%; overflow: hidden; border-radius: 8%; background: var(--taler-qr-frame); }
- .qr-code { width: 100%; height: 100%; background: #fff; }
+ .qr-frame { position: relative; width: min(100%, 25rem); aspect-ratio: 1 / 1; overflow: hidden; border-radius: 8%; background: var(--taler-qr-frame); }
+ .qr-frame::before { content: ""; position: absolute; inset: -50%; background: conic-gradient(#f1f1f4 0deg, #0042b3 18deg, #f1f1f4 55deg, #f1f1f4 180deg, #0042b3 198deg, #f1f1f4 235deg); animation: qr-rotate 10s linear infinite; pointer-events: none; }
+ .qr-frame::after { content: ""; position: absolute; inset: 4.1%; border-radius: 4.6%; background: var(--taler-qr-frame); pointer-events: none; }
+ .qr-code { position: absolute; z-index: 1; inset: 6.25%; background: #fff; }
.qr-code > svg { display: block; width: 100%; height: 100%; fill: #000; }
- .qr-motion { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
- .qr-motion rect { fill: none; stroke: url(#taler-scan-gradient); stroke-width: 2.6; stroke-linecap: round; stroke-dasharray: 57 343; animation: scan 4s linear infinite; }
- .qr-motion rect + rect { animation-delay: -2s; }
- .qr-badge { position: absolute; inset: 50% auto auto 50%; height: 12.5%; width: auto; transform: translate(-50%, -50%); }
- @keyframes scan { to { stroke-dashoffset: -400; } }
+ .qr-badge { position: absolute; z-index: 2; top: 50%; left: 50%; width: 26.32%; height: 12.5%; object-fit: contain; transform: translate(-50%, -50%); }
+ @keyframes qr-rotate { to { transform: rotate(1turn); } }
.claimed { width: min(100%, 25rem); aspect-ratio: 1; display: grid; place-items: center; padding: 2.5rem; border-radius: 8%; background: var(--taler-qr-frame); text-align: center; }
.claimed-icon { width: 4.25rem; height: 4.25rem; margin: 0 auto 1.3rem; display: grid; place-items: center; border-radius: 50%; background: var(--taler-blue); color: #fff; font-size: 2rem; }
.claimed h2 { margin: 0; font-size: 1.35rem; }
@@ -81,8 +80,7 @@
.site-footer { flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
- .qr-motion rect { animation: none; }
- .qr-motion rect + rect { stroke-dashoffset: -200; }
+ .qr-frame::before { animation: none; }
}
</style>
</head>
@@ -112,11 +110,6 @@
{{^claimed}}
<div class="qr-frame" aria-label="QR code for the Taler wallet">
<div class="qr-code">{{{ taler_pay_qrcode_svg }}}</div>
- <svg class="qr-motion" viewBox="0 0 100 100" aria-hidden="true" focusable="false">
- <defs><linearGradient id="taler-scan-gradient"><stop offset="0" stop-color="#f1f1f4"/><stop offset=".5" stop-color="#0042b3"/><stop offset="1" stop-color="#f1f1f4"/></linearGradient></defs>
- <rect x="1.3" y="1.3" width="97.4" height="97.4" rx="8" pathLength="400"/>
- <rect x="1.3" y="1.3" width="97.4" height="97.4" rx="8" pathLength="400"/>
- </svg>
<img class="qr-badge" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iOTUiIGlkPSJzY3JlZW5zaG90LWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxYiIgdmlld0JveD0iMCAwIDIwMCA5NSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZpbGw9Im5vbmUiIHZlcnNpb249IjEuMSI+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxYiI+PGcgY2xhc3M9ImZyYW1lLWNvbnRhaW5lci13cmFwcGVyIj48ZyBjbGFzcz0iZnJhbWUtY29udGFpbmVyLWJsdXIiPjxnIGNsYXNzPSJmcmFtZS1jb250YWluZXItc2hhZG93cyI+PGcgZmlsbD0ibm9uZSI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFiIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9Ijk1IiBjbGFzcz0iZnJhbWUtYmFja2dyb3VuZCIgeD0iMCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkiIHN0eWxlPSJmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsiIHJ5PSI0Ny41IiByeD0iNDcuNSIgeT0iMCIvPjwvZz48ZyBjbGFzcz0iZnJhbWUtY2hpbGRyZW4iPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWMiIHdpZHRoPSI2NzAiIGhlaWdodD0iMzAwIiByeD0iMCIgcnk9IjAiIHN0eWxlPSJmaWxsOiByZ2IoMCwgMCwgMCk7Ij48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFkIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQxZCI+PHJlY3Qgd2lkdGg9IjE4MCIgaGVpZ2h0PSI4MC43NjkyMzA3NjkyMzA5NCIgeD0iMTAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApIiBzdHlsZT0iZmlsbDogbm9uZTsiIHJ5PSIwIiBmaWxsPSJub25lIiByeD0iMCIgeT0iNy4xMTUzODQ2MTUzODQzMDEiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWUiIHJ4PSIwIiByeT0iMCIgc3R5bGU9ImZpbGw6IHJnYigwLCAwLCAwKTsiPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjQiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNCI+PHBhdGggZD0iTTg3LjYwNzkxMDE1NjI1LDguMTIxNTgyMDMxMjVDMTAxLjU2ODgxNzEzODY3MTg4LDguMTIxNTgyMDMxMjUsMTEzLjY5Mzc4NjYyMTA5Mzc1LDE2LjU1ODU5Mzc1LDExOS44MTE3OTgwOTU3MDMxMiwyOC45NDM2MDM1MTU2MjVMMTE0LjYwMjIzMzg4NjcxODc1LDI4Ljk0MzYwMzUxNTYyNUMxMDguOTQzMjM3MzA0Njg3NSwxOS4zNDEzMDg1OTM3NSw5OC45NjkyNjg3OTg4MjgxMiwxMi45NjQ4NDM3NSw4Ny42MDc5MTAxNTYyNSwxMi45NjQ4NDM3NUM2OS45NzQ1NDgzMzk4NDM3NSwxMi45NjQ4NDM3NSw1NS42Nzk5NjIxNTgyMDMxMjUsMjguMzIxNzc3MzQzNzUsNTUuNjc5OTYyMTU4MjAzMTI1LDQ3LjI2NTM4MDg1OTM3NUM1NS42Nzk5NjIxNTgyMDMxMjUsNTYuNTM3NTk3NjU2MjUsNTkuMTA1ODY1NDc4NTE1NjI1LDY0Ljk0OTIxODc1LDY0LjY3MDYyMzc3OTI5Njg4LDcxLjEyMTgyNjE3MTg3NUM2My40Njg1MDU4NTkzNzUsNzIuMTI3OTI5Njg3NSw2Mi4xODg2MjkxNTAzOTA2MjUsNzMuMDMxNDk0MTQwNjI1LDYwLjg0MTgyNzM5MjU3ODEyNSw3My44MjAzMTI1QzU0Ljg0MDE0ODkyNTc4MTI1LDY2Ljg0Mjc3MzQzNzUsNTEuMTcxNTA4Nzg5MDYyNSw1Ny41MTUzODA4NTkzNzUsNTEuMTcxNTA4Nzg5MDYyNSw0Ny4yNjUzODA4NTkzNzVDNTEuMTcxNTA4Nzg5MDYyNSwyNS42NDY5NzI2NTYyNSw2Ny40ODQ2NDk2NTgyMDMxMiw4LjEyMTU4MjAzMTI1LDg3LjYwNzkxMDE1NjI1LDguMTIxNTgyMDMxMjVaTTExOS43MTQxNzIzNjMyODEyNSw2NS43ODYxMzI4MTI1QzExMy41NjUxMjQ1MTE3MTg3NSw3OC4wNjI5ODgyODEyNSwxMDEuNDk0MjMyMTc3NzM0MzgsODYuNDA5NDIzODI4MTI1LDg3LjYwNzkxMDE1NjI1LDg2LjQwOTQyMzgyODEyNUM4Ni42NjUxOTE2NTAzOTA2Miw4Ni40MDk0MjM4MjgxMjUsODUuNzMwODA0NDQzMzU5MzgsODYuMzcwODQ5NjA5Mzc1LDg0LjgwNjA5MTMwODU5Mzc1LDg2LjI5NTQxMDE1NjI1Qzg3LjUzOTM5ODE5MzM1OTM4LDg0Ljg5NDI4NzEwOTM3NSw5MC4xMDE4MzcxNTgyMDMxMiw4My4xNzE4NzUsOTIuNDUyMzMxNTQyOTY4NzUsODEuMTczMzM5ODQzNzVDMTAxLjY5NDk3NjgwNjY0MDYyLDc5LjY2MTg2NTIzNDM3NSwxMDkuNjMzODE5NTgwMDc4MTIsNzMuODkxODQ1NzAzMTI1LDExNC40ODM4MjU2ODM1OTM3NSw2NS43ODYxMzI4MTI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjUiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNSI+PHBhdGggZD0iTTY3LjUwMzYzMTU5MTc5Njg4LDguMTIxNTgyMDMxMjVDNjguNDQ2MjU4NTQ0OTIxODgsOC4xMjE1ODIwMzEyNSw2OS4zODA2MTUyMzQzNzUsOC4xNjAxNTYyNSw3MC4zMDU0MTk5MjE4NzUsOC4yMzU1OTU3MDMxMjVDNjcuNTcyMTEzMDM3MTA5MzgsOS42MzY3MTg3NSw2NS4wMDk1ODI1MTk1MzEyNSwxMS4zNTg4ODY3MTg3NSw2Mi42NTkwODgxMzQ3NjU2MjUsMTMuMzU3NjY2MDE1NjI1QzQ3LjMyNDk1MTE3MTg3NSwxNS44NjUyMzQzNzUsMzUuNTc1NjUzMDc2MTcxODc1LDMwLjA5MTA2NDQ1MzEyNSwzNS41NzU2NTMwNzYxNzE4NzUsNDcuMjY1MzgwODU5Mzc1QzM1LjU3NTY1MzA3NjE3MTg3NSw2MC4wNjY4OTQ1MzEyNSw0Mi4xMDQ1NTMyMjI2NTYyNSw3MS4yMjg3NTk3NjU2MjUsNTEuNzc5MTEzNzY5NTMxMjUsNzcuMTIyMDcwMzEyNUM1MC4zNTE5NTkyMjg1MTU2MjUsNzcuMzYyMDYwNTQ2ODc1LDQ4Ljg4OTI4MjIyNjU2MjUsNzcuNDg3MzA0Njg3NSw0Ny4zOTkzMjI1MDk3NjU2MjUsNzcuNDg3MzA0Njg3NUM0Ni4yODkzMDY2NDA2MjUsNzcuNDg3MzA0Njg3NSw0NS4xOTUwMDczMjQyMTg3NSw3Ny40MTYwMTU2MjUsNDQuMTE4NTYwNzkxMDE1NjI1LDc3LjI4MTQ5NDE0MDYyNUMzNi4xNDEyOTYzODY3MTg3NSw3MC4xMDEwNzQyMTg3NSwzMS4wNjcyMzAyMjQ2MDkzNzUsNTkuMzIwODAwNzgxMjUsMzEuMDY3MjMwMjI0NjA5Mzc1LDQ3LjI2NTM4MDg1OTM3NUMzMS4wNjcyMzAyMjQ2MDkzNzUsMjUuNjQ2OTcyNjU2MjUsNDcuMzgwMzcxMDkzNzUsOC4xMjE1ODIwMzEyNSw2Ny41MDM2MzE1OTE3OTY4OCw4LjEyMTU4MjAzMTI1Wk03Mi4zNDgxNDQ1MzEyNSw4MS4xNzMzMzk4NDM3NUM4MS41OTA5NDIzODI4MTI1LDc5LjY2MTg2NTIzNDM3NSw4OS41Mjk2OTM2MDM1MTU2Miw3My44OTE2MDE1NjI1LDk0LjM3OTc2MDc0MjE4NzUsNjUuNzg1NjQ0NTMxMjVMOTkuNjEwMDc2OTA0Mjk2ODgsNjUuNzg1NjQ0NTMxMjVDOTMuNDYxMDkwMDg3ODkwNjIsNzguMDYyNzQ0MTQwNjI1LDgxLjM5MDE2NzIzNjMyODEyLDg2LjQwOTQyMzgyODEyNSw2Ny41MDM2MzE1OTE3OTY4OCw4Ni40MDk0MjM4MjgxMjVDNjYuNTYwODgyNTY4MzU5MzgsODYuNDA5NDIzODI4MTI1LDY1LjYyNjYxNzQzMTY0MDYyLDg2LjM3MDg0OTYwOTM3NSw2NC43MDE4MTI3NDQxNDA2Miw4Ni4yOTU0MTAxNTYyNUM2Ny40MzQ5MzY1MjM0Mzc1LDg0Ljg5NDA0Mjk2ODc1LDY5Ljk5Nzc3MjIxNjc5Njg4LDgzLjE3MjExOTE0MDYyNSw3Mi4zNDgxNDQ1MzEyNSw4MS4xNzMzMzk4NDM3NVpNOTQuNDk3ODAyNzM0Mzc1LDI4Ljk0MzYwMzUxNTYyNUM5MS42ODY0MDEzNjcxODc1LDI0LjE3NDA3MjI2NTYyNSw4Ny44MTA0NTUzMjIyNjU2MiwyMC4yMDAxOTUzMTI1LDgzLjIyODA4ODM3ODkwNjI1LDE3LjQwODY5MTQwNjI1Qzg0LjY1NTI0MjkxOTkyMTg4LDE3LjE2ODk0NTMxMjUsODYuMTE3ODU4ODg2NzE4NzUsMTcuMDQzNDU3MDMxMjUsODcuNjA3OTEwMTU2MjUsMTcuMDQzNDU3MDMxMjVDODguNzE3ODY0OTkwMjM0MzgsMTcuMDQzNDU3MDMxMjUsODkuODEyMjI1MzQxNzk2ODgsMTcuMTE0OTkwMjM0Mzc1LDkwLjg4ODY3MTg3NSwxNy4yNDkyNjc1NzgxMjVDOTQuNDg1MTA3NDIxODc1LDIwLjQ4NjU3MjI2NTYyNSw5Ny40OTE1MTYxMTMyODEyNSwyNC40NTU4MTA1NDY4NzUsOTkuNzA4NzA5NzE2Nzk2ODgsMjguOTQzNjAzNTE1NjI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjYiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyNiI+PHBhdGggZD0iTTQ3LjM5OTMyMjUwOTc2NTYyNSw4LjEyMTU4MjAzMTI1QzQ4LjM1MjQ0NzUwOTc2NTYyNSw4LjEyMTU4MjAzMTI1LDQ5LjI5Njc4MzQ0NzI2NTYyNSw4LjE2MTM3Njk1MzEyNSw1MC4yMzE1MDYzNDc2NTYyNSw4LjIzODUyNTM5MDYyNUM0Ny41MDMyOTU4OTg0Mzc1LDkuNjM3NDUxMTcxODc1LDQ0Ljk0NTA5ODg3Njk1MzEyNSwxMS4zNTY2ODk0NTMxMjUsNDIuNTk4NDQ5NzA3MDMxMjUsMTMuMzUxMDc0MjE4NzVDMjcuMjQyOTUwNDM5NDUzMTI1LDE1LjgzOTExMTMyODEyNSwxNS40NzEzNzQ1MTE3MTg3NSwzMC4wNzQ5NTExNzE4NzUsMTUuNDcxMzc0NTExNzE4NzUsNDcuMjY1MzgwODU5Mzc1QzE1LjQ3MTM3NDUxMTcxODc1LDY2LjIwODk4NDM3NSwyOS43NjYwODI3NjM2NzE4NzUsODEuNTY1OTE3OTY4NzUsNDcuMzk5MzIyNTA5NzY1NjI1LDgxLjU2NTkxNzk2ODc1QzU4LjY4MjY3ODIyMjY1NjI1LDgxLjU2NTkxNzk2ODc1LDY4LjU5ODU0MTI1OTc2NTYyLDc1LjI3NzU4Nzg5MDYyNSw3NC4yNzczMTMyMzI0MjE4OCw2NS43ODU2NDQ1MzEyNUw3OS41MDU4Mjg4NTc0MjE4OCw2NS43ODU2NDQ1MzEyNUM3My4zNTY4NzI1NTg1OTM3NSw3OC4wNjI3NDQxNDA2MjUsNjEuMjg1ODg4NjcxODc1LDg2LjQwOTQyMzgyODEyNSw0Ny4zOTkzMjI1MDk3NjU2MjUsODYuNDA5NDIzODI4MTI1QzI3LjI3NjEyMzA0Njg3NSw4Ni40MDk0MjM4MjgxMjUsMTAuOTYzMDQzMjEyODkwNjI1LDY4Ljg4NDAzMzIwMzEyNSwxMC45NjMwNDMyMTI4OTA2MjUsNDcuMjY1MzgwODU5Mzc1QzEwLjk2MzA0MzIxMjg5MDYyNSwyNS42NDY5NzI2NTYyNSwyNy4yNzYxMjMwNDY4NzUsOC4xMjE1ODIwMzEyNSw0Ny4zOTkzMjI1MDk3NjU2MjUsOC4xMjE1ODIwMzEyNVpNNzQuMzkyODgzMzAwNzgxMjUsMjguOTQzNjAzNTE1NjI1QzczLjIxODAxNzU3ODEyNSwyNi45NTA5Mjc3MzQzNzUsNzEuODU3NjY2MDE1NjI1LDI1LjA5NjQzNTU0Njg3NSw3MC4zMzcxNTgyMDMxMjUsMjMuNDA5NjY3OTY4NzVDNzEuNTM5MzY3Njc1NzgxMjUsMjIuNDAzODA4NTkzNzUsNzIuODE5MDAwMjQ0MTQwNjIsMjEuNDk5NTExNzE4NzUsNzQuMTY1NjQ5NDE0MDYyNSwyMC43MTA5Mzc1Qzc2LjI5MDcxMDQ0OTIxODc1LDIzLjE4MTY0MDYyNSw3OC4xMjI4MzMyNTE5NTMxMiwyNS45NDcwMjE0ODQzNzUsNzkuNjAzNjk4NzMwNDY4NzUsMjguOTQzNjAzNTE1NjI1WiIgc3R5bGU9ImZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDAuMzI3OTQzOyBmaWxsOiByZ2IoMCwgNjYsIDE3OSk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjwvZz48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDFmIj48ZyBjbGFzcz0iZmlsbHMiIGlkPSJmaWxscy1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MWYiPjxwYXRoIGQ9Ik03OC4xODA5NjkyMzgyODEyNSwzNy45OTUzNjEzMjgxMjVMODYuMzg0ODg3Njk1MzEyNSwzNy45OTUzNjEzMjgxMjVMODYuMzg0ODg3Njk1MzEyNSwzMy40Njk0ODI0MjE4NzVMNjUuMzk0ODA1OTA4MjAzMTIsMzMuNDY5NDgyNDIxODc1TDY1LjM5NDgwNTkwODIwMzEyLDM3Ljk5NTM2MTMyODEyNUw3My41OTg4MTU5MTc5Njg3NSwzNy45OTUzNjEzMjgxMjVMNzMuNTk4ODE1OTE3OTY4NzUsNjEuMjU5NzY1NjI1TDc4LjE4MDk2OTIzODI4MTI1LDYxLjI1OTc2NTYyNVoiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjAiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMCI+PHBhdGggZD0iTTkyLjk2Nzk4NzA2MDU0Njg4LDU0LjU1MDUzNzEwOTM3NUwxMDUuMTk5OTIwNjU0Mjk2ODgsNTQuNTUwNTM3MTA5Mzc1TDEwNy44MjM4ODMwNTY2NDA2Miw2MS4yNTk3NjU2MjVMMTEyLjYyODAyMTI0MDIzNDM4LDYxLjI1OTc2NTYyNUwxMDEuMjQ1ODgwMTI2OTUzMTIsMzMuMjcwOTk2MDkzNzVMOTcuMDMzMjk0Njc3NzM0MzgsMzMuMjcwOTk2MDkzNzVMODUuNjUxMTIzMDQ2ODc1LDYxLjI1OTc2NTYyNUw5MC4zMDc0MzQwODIwMzEyNSw2MS4yNTk3NjU2MjVaTTEwMy41MzcwMTc4MjIyNjU2Miw1MC4yMjI5MDAzOTA2MjVMOTQuNjMxMjU2MTAzNTE1NjIsNTAuMjIyOTAwMzkwNjI1TDk5LjA2NTY0MzMxMDU0Njg4LDM5LjEwNjkzMzU5Mzc1WiIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMSI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIxIj48cGF0aCBkPSJNMTIwLjg3MTM5ODkyNTc4MTI1LDMzLjQ2OTQ4MjQyMTg3NUwxMTYuNzY5NTkyMjg1MTU2MjUsMzMuNDY5NDgyNDIxODc1TDExNi43Njk1OTIyODUxNTYyNSw2MS4yNTk3NjU2MjVMMTM1LjE3MDEzNTQ5ODA0Njg4LDYxLjI1OTc2NTYyNUwxMzUuMTcwMTM1NDk4MDQ2ODgsNTYuODUzMjcxNDg0Mzc1QzEzMC40MDM5MzA2NjQwNjI1LDU2Ljg1MzI3MTQ4NDM3NSwxMjUuNjM3NjM0Mjc3MzQzNzUsNTYuODUzMjcxNDg0Mzc1LDEyMC44NzEzOTg5MjU3ODEyNSw1Ni44NTMyNzE0ODQzNzVaIi8+PC9nPjwvZz48ZyBpZD0ic2hhcGUtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIyIj48ZyBjbGFzcz0iZmlsbHMiIGlkPSJmaWxscy1iODcxOGVhZC00NTkyLTgwNWYtODAwNy1hOWVmNTVmMGE0MjIiPjxwYXRoIGQ9Ik0xNTkuMDc5NTg5ODQzNzUsMzMuNDY5NDgyNDIxODc1TDEzOS45MzcyMjUzNDE3OTY4OCwzMy40Njk0ODI0MjE4NzVMMTM5LjkzNzIyNTM0MTc5Njg4LDYxLjI1OTc2NTYyNUwxNTkuMjY0NDA0Mjk2ODc1LDYxLjI1OTc2NTYyNUwxNTkuMjY0NDA0Mjk2ODc1LDU2Ljg1MzI3MTQ4NDM3NUwxNDQuNDQ1NTU2NjQwNjI1LDU2Ljg1MzI3MTQ4NDM3NUwxNDQuNDQ1NTU2NjQwNjI1LDQ5LjQyODk1NTA3ODEyNUwxNTcuNDE2NjU2NDk0MTQwNjIsNDkuNDI4OTU1MDc4MTI1TDE1Ny40MTY2NTY0OTQxNDA2Miw0NS4wMjI0NjA5Mzc1TDE0NC40NDU1NTY2NDA2MjUsNDUuMDIyNDYwOTM3NUwxNDQuNDQ1NTU2NjQwNjI1LDM3Ljg3NjIyMDcwMzEyNUwxNTkuMDc5NTg5ODQzNzUsMzcuODc2MjIwNzAzMTI1WiIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWI4NzE4ZWFkLTQ1OTItODA1Zi04MDA3LWE5ZWY1NWYwYTQyMyI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtYjg3MThlYWQtNDU5Mi04MDVmLTgwMDctYTllZjU1ZjBhNDIzIj48cGF0aCBkPSJNMTgxLjIxNTI0MDQ3ODUxNTYyLDQyLjU0MTI1OTc2NTYyNUMxODEuMjE1MjQwNDc4NTE1NjIsNDMuOTc2ODA2NjQwNjI1LDE4MC43MzQ4MzI3NjM2NzE4OCw0NS4xMjE4MjYxNzE4NzUsMTc5Ljc2NzgyMjI2NTYyNSw0NS45Njg1MDU4NTkzNzVDMTc4LjgwNzA5ODM4ODY3MTg4LDQ2LjgyMjI2NTYyNSwxNzcuNTA3NDQ2Mjg5MDYyNSw0Ny4yNDUzNjEzMjgxMjUsMTc1Ljg3NTE4MzEwNTQ2ODc1LDQ3LjI0NTM2MTMyODEyNUwxNjkuMjA0ODY0NTAxOTUzMTIsNDcuMjQ1MzYxMzI4MTI1TDE2OS4yMDQ4NjQ1MDE5NTMxMiwzNy44NzYyMjA3MDMxMjVMMTc1LjgzODI4NzM1MzUxNTYyLDM3Ljg3NjIyMDcwMzEyNUMxNzcuNTQ0MzQyMDQxMDE1NjIsMzcuODc2MjIwNzAzMTI1LDE3OC44Njg0OTk3NTU4NTkzOCwzOC4yNjY2MDE1NjI1LDE3OS44MDQ5MDExMjMwNDY4OCwzOS4wNTM5NTUwNzgxMjVDMTgwLjc0NzIyMjkwMDM5MDYyLDM5LjgzNDk2MDkzNzUsMTgxLjIxNTI0MDQ3ODUxNTYyLDQwLjk5OTI2NzU3ODEyNSwxODEuMjE1MjQwNDc4NTE1NjIsNDIuNTQxMjU5NzY1NjI1Wk0xODYuNjQ3NDkxNDU1MDc4MTIsNjEuMjU5NzY1NjI1TDE3OS42NjMyMDgwMDc4MTI1LDUwLjczOTAxMzY3MTg3NUMxODAuNTc0NTg0OTYwOTM3NSw1MC40NzQzNjUyMzQzNzUsMTgxLjQwNjE4ODk2NDg0Mzc1LDUwLjA5NzY1NjI1LDE4Mi4xNTc3MTQ4NDM3NSw0OS42MDc2NjYwMTU2MjVDMTgyLjkwODkzNTU0Njg3NSw0OS4xMTgxNjQwNjI1LDE4My41NTU4MTY2NTAzOTA2Miw0OC41MjI0NjA5Mzc1LDE4NC4wOTc2ODY3Njc1NzgxMiw0Ny44MjEyODkwNjI1QzE4NC42Mzk4MzE1NDI5Njg3NSw0Ny4xMTk2Mjg5MDYyNSwxODUuMDY0NjY2NzQ4MDQ2ODgsNDYuMzEyNzQ0MTQwNjI1LDE4NS4zNzI2MTk2Mjg5MDYyNSw0NS4zOTk2NTgyMDMxMjVDMTg1LjY4MDQ4MDk1NzAzMTI1LDQ0LjQ4NjU3MjI2NTYyNSwxODUuODM0MzgxMTAzNTE1NjIsNDMuNDQ3NTA5NzY1NjI1LDE4NS44MzQzODExMDM1MTU2Miw0Mi4yODI5NTg5ODQzNzVDMTg1LjgzNDM4MTEwMzUxNTYyLDQwLjkzMzEwNTQ2ODc1LDE4NS42MTI3OTI5Njg3NSwzOS43MDkyMjg1MTU2MjUsMTg1LjE2OTI4MTAwNTg1OTM4LDM4LjYxMDU5NTcwMzEyNUMxODQuNzI1ODYwNTk1NzAzMTIsMzcuNTEyNDUxMTcxODc1LDE4NC4wOTE1ODMyNTE5NTMxMiwzNi41ODU5Mzc1LDE4My4yNjYzMjY5MDQyOTY4OCwzNS44MzE1NDI5Njg3NUMxODIuNDQwODg3NDUxMTcxODgsMzUuMDc3MzkyNTc4MTI1LDE4MS40MzA4Nzc2ODU1NDY4OCwzNC40OTUxMTcxODc1LDE4MC4yMzYwODM5ODQzNzUsMzQuMDg0NzE2Nzk2ODc1QzE3OS4wNDEwNDYxNDI1NzgxMiwzMy42NzQzMTY0MDYyNSwxNzcuNzA0NTI4ODA4NTkzNzUsMzMuNDY5NDgyNDIxODc1LDE3Ni4yMjY0NzA5NDcyNjU2MiwzMy40Njk0ODI0MjE4NzVMMTY0LjY5NjUzMzIwMzEyNSwzMy40Njk0ODI0MjE4NzVMMTY0LjY5NjUzMzIwMzEyNSw2MS4yNTk3NjU2MjVMMTY5LjIwNDg2NDUwMTk1MzEyLDYxLjI1OTc2NTYyNUwxNjkuMjA0ODY0NTAxOTUzMTIsNTEuNTcyOTk4MDQ2ODc1TDE3NC45MTQ0NTkyMjg1MTU2Miw1MS41NzI5OTgwNDY4NzVMMTgxLjI4OTAzMTk4MjQyMTg4LDYxLjI1OTc2NTYyNVoiLz48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=" alt="">
</div>
<p class="qr-instruction">Scan this code with the Taler wallet on your phone.</p>