merchant landing: footer link deployment → admin-log configs

This commit is contained in:
Hernâni Marques 2026-07-10 19:51:00 +02:00
parent cb9b70a298
commit 850f00eff9
No known key found for this signature in database

View file

@ -255,8 +255,65 @@
border-radius: 12px;
padding: 0.65rem 0.55rem 0.7rem;
text-align: center; min-width: 0;
cursor: pointer;
transition: border-color 0.15s, transform 0.12s, background 0.15s;
text-decoration: none;
color: inherit;
display: block;
}
.shop-item:hover, .shop-item:focus-visible {
border-color: rgba(196, 181, 253, 0.75);
background: rgba(0, 0, 0, 0.4);
transform: translateY(-1px);
outline: none;
}
.shop-modal {
position: fixed; inset: 0; z-index: 50;
display: none; align-items: center; justify-content: center;
padding: 1rem; background: rgba(8, 6, 14, 0.72);
backdrop-filter: blur(6px);
}
.shop-modal.open { display: flex; }
.shop-modal-card {
background: rgba(36, 28, 48, 0.96);
border: 1px solid rgba(167, 139, 250, 0.45);
border-radius: 16px;
padding: 1.25rem 1.2rem 1.35rem;
max-width: 20rem; width: 100%;
text-align: center;
box-shadow: 0 18px 48px rgba(0, 0, 0, 0.45);
}
.shop-modal-card h3 {
margin: 0 0 0.25rem; font-size: 1.05rem; color: #faf5ff;
}
.shop-modal-card .amount {
margin: 0 0 0.85rem; font-weight: 750; color: #c4b5fd; font-variant-numeric: tabular-nums;
}
.shop-modal-card .qr-wrap {
background: #fff; border-radius: 12px; padding: 0.75rem;
display: inline-block; margin: 0 auto 0.85rem;
}
.shop-modal-card .qr-wrap canvas,
.shop-modal-card .qr-wrap img,
.shop-modal-card .qr-wrap table {
display: block; margin: 0 auto;
}
.shop-modal-card .status {
min-height: 1.2em; font-size: 0.82rem; color: var(--muted); margin: 0 0 0.75rem;
}
.shop-modal-card .status.err { color: #fca5a5; }
.shop-modal-card .actions {
display: flex; flex-direction: column; gap: 0.45rem;
}
.shop-modal-card .meta {
font-size: 0.68rem; word-break: break-all; color: var(--muted); margin: 0.55rem 0 0;
}
.shop-item .emoji { display: block; font-size: 1.4rem; line-height: 1.2; margin-bottom: 0.25rem; }
.shop-item .emoji.pill-duo {
display: flex; justify-content: center; align-items: center;
min-height: 1.5rem; margin-bottom: 0.35rem;
}
.shop-item .pill-svg { display: block; }
.shop-item .name {
display: block; font-size: 0.8rem; font-weight: 700; color: #faf5ff; line-height: 1.25;
}
@ -264,6 +321,10 @@
display: block; margin-top: 0.25rem; font-size: 0.82rem; font-weight: 750;
color: #c4b5fd; font-variant-numeric: tabular-nums;
}
.shop-item .hint {
display: block; margin-top: 0.2rem; font-size: 0.65rem; font-weight: 600;
color: var(--muted); line-height: 1.25; letter-spacing: 0.01em;
}
</style>
</head>
<body>
@ -281,56 +342,96 @@
<aside class="shop-box" aria-labelledby="shop-title">
<h2 id="shop-title">GOA shop · samples</h2>
<p class="shop-lead">Typical exploration goods — pay with GOA in the wallet</p>
<div class="shop-grid">
<div class="shop-item">
<p class="shop-lead">Tap an item → pay QR for the wallet</p>
<div class="shop-grid" id="shop-grid">
<button type="button" class="shop-item" data-product="orbit-sticker">
<span class="emoji" aria-hidden="true">🪐</span>
<span class="name">Orbit sticker pack</span>
<span class="price">GOA:2</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="nebula-coffee">
<span class="emoji" aria-hidden="true"></span>
<span class="name">Nebula coffee</span>
<span class="price">GOA:5</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="voidwave-playlist">
<span class="emoji" aria-hidden="true">🎧</span>
<span class="name">Voidwave playlist</span>
<span class="price">GOA:8</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="comet-cap">
<span class="emoji" aria-hidden="true">🧢</span>
<span class="name">Comet cap</span>
<span class="price">GOA:15</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="shuttle-pass">
<span class="emoji" aria-hidden="true">🛸</span>
<span class="name">Shuttle day pass</span>
<span class="price">GOA:25</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="beacon-badge">
<span class="emoji" aria-hidden="true">📡</span>
<span class="name">Beacon badge</span>
<span class="price">GOA:3</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="relay-pin">
<span class="emoji" aria-hidden="true">🛰️</span>
<span class="name">Relay pin</span>
<span class="price">GOA:4</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="eclipse-shades">
<span class="emoji" aria-hidden="true">🕶️</span>
<span class="name">Eclipse shades</span>
<span class="price">GOA:12</span>
</div>
<div class="shop-item">
</button>
<button type="button" class="shop-item" data-product="star-chart">
<span class="emoji" aria-hidden="true">📜</span>
<span class="name">Star chart print</span>
<span class="price">GOA:7</span>
</div>
</button>
<button type="button" class="shop-item" data-product="rainbow-pill">
<span class="emoji" aria-hidden="true">🌈</span>
<span class="name">Rainbow pill</span>
<span class="price">GOA:4.2</span>
<span class="hint">sample only · joke · not a drug / legal product</span>
</button>
<button type="button" class="shop-item" data-product="blue-or-red-pill">
<span class="emoji pill-duo" aria-hidden="true" title="blue or red">
<svg class="pill-svg" viewBox="0 0 40 20" width="40" height="20">
<defs>
<clipPath id="pill-shape">
<rect x="1" y="3" width="38" height="14" rx="7" ry="7"/>
</clipPath>
</defs>
<g clip-path="url(#pill-shape)">
<rect x="1" y="3" width="19" height="14" fill="#3b82f6"/>
<rect x="20" y="3" width="19" height="14" fill="#ef4444"/>
<line x1="20" y1="3" x2="20" y2="17" stroke="rgba(255,255,255,0.35)" stroke-width="1"/>
</g>
<rect x="1" y="3" width="38" height="14" rx="7" ry="7" fill="none" stroke="rgba(233,213,255,0.45)" stroke-width="1"/>
</svg>
</span>
<span class="name">Blue or red pill</span>
<span class="price">GOA:1.5</span>
<span class="hint">sample only · joke · not a drug / legal product</span>
</button>
</div>
</aside>
<div class="shop-modal" id="shop-modal" role="dialog" aria-modal="true" aria-labelledby="shop-modal-title" hidden>
<div class="shop-modal-card">
<h3 id="shop-modal-title"></h3>
<p class="amount" id="shop-modal-amount"></p>
<div class="qr-wrap" id="shop-modal-qr"></div>
<p class="status" id="shop-modal-status">Preparing pay QR…</p>
<div class="actions">
<a class="cta teal" id="shop-modal-open" href="#">Open in wallet →</a>
<button type="button" class="cta-sec" id="shop-modal-close">Close</button>
</div>
<p class="meta" id="shop-modal-uri" hidden></p>
</div>
</div>
<section class="stats" id="stats" aria-labelledby="stats-title">
<h2 id="stats-title">Merchant stats</h2>
<p class="note">From merchant DB · dual currency side by side</p>
@ -464,7 +565,8 @@
<a href="https://exchange.hacktivism.ch/intro/">Exchange</a> ·
<a href="https://taler.hacktivism.ch/intro/">Merchant</a> ·
<a href="https://taler.hacktivism.ch/terms">Terms</a> ·
<a href="https://taler.hacktivism.ch/privacy">Privacy</a>
<a href="https://taler.hacktivism.ch/privacy">Privacy</a> ·
<a href="https://git.hacktivism.ch/hernani/koopa-admin-log/src/branch/main/configs/merchant-landing">deployment</a>
<p class="privacy-note" style="margin:0.65rem 0 0;font-size:0.78rem;color:var(--muted);line-height:1.4">
Privacy: processing under Swiss FADP (revDSG). What is retained is listed on
<a href="https://taler.hacktivism.ch/privacy" style="color:#5eead4">/privacy</a>.