DEAL SELLER PWA - MULTI-CLUB EVENT EDITION

Last 25 cards lists your own entries for the current event, newest first.
Each active row has a Void button. Voided rows remain visible for reference.
Use Void Cards - open camera to scan cards for removal. The red VOID MODE
banner stays visible; every QR removes your own registered entry after the
PC confirms it. The camera continues, with a one-second VOIDED popup.
Back to entering cards stops the camera and restores normal registration.
Photos, handheld QR text and the manual checked-card action follow the mode.
The app always opens in entry mode. Use Retry for any saved pending void.

Phone voids require sales to be open and can affect only that seller's own
current-event entries. Ask the operator to correct another seller's entry,
closed sales or manually entered ranges. A scan covered by a manual range
remains in play after the scan is voided; the phone explains this explicitly.
The original entry, seller and void time stay in the PC's audit history.
Camera lookup is read-only, then the void targets that exact original receipt.
Retries cannot void a later re-entry of the same card. Pending voids are saved
before transmission and survive connection loss, sign-in renewal and reopening.

Refresh / reconnect is always visible at the top of the phone page. Use it
to check the connection without closing the app. If sign-in expired, the PC
restarted or the sales event changed, the seller-code form opens automatically.
Your event code and seller number are remembered; enter the current eight-digit
seller code from your club operator. Change the six-digit event code when needed.
The old token is removed so reopening cannot restore a known expired sign-in.
Pending cards, undos, saved baskets and receipts stay saved. After signing
into the same event as the same seller, Retry uses the original request.
If a pending request belongs to the previous event, have the operator check
its receipt before using Resolve pending request with operator. It is never
silently moved to a new event. Re-enter seller code also opens sign-in.

Normal seller address: https://playmobi.net/seller/
All clubs use this same address. Enter the six-digit EVENT code, seller number
and eight-digit SELLER code. Each event routes only to its paired club PC.
The main game PC must show ONLINE. On a new game PC,
use Set up Scanner on this PC.exe from the complete software package.
Pair it with a one-time 12-digit setup code from the administrator PC.
The shared address does not need a phone certificate installation.

Sign in, start continuous camera, and present each card QR. Valid new cards
enter the system automatically. A green Scanned & entered popup lasts ONE
SECOND only after the main PC acknowledges the card. The camera keeps going;
no Check, Add to basket or Confirm sale tap is required for new QR entries.
QR photos and handheld QR text also register directly. Already-in-play cards
are flagged without another entry. Manual Check card is still read-only;
Enter checked card registers it when explicitly chosen.

Undo last card stays at the bottom of the phone screen. It removes only your
most recent automatic entry while sales are open and keeps an audited void.
After Undo, remove the card from camera view before presenting it again.
A held QR is suppressed; a different card can be scanned immediately.

On a lost reply, scanning pauses and the request/receipt stays saved. Retry
pending card or Retry last undo uses the same request and cannot register or
remove a later card twice. Never treat an unconfirmed request as entered.
Previously saved baskets remain available for one-time completion or operator
resolution; the update does not discard them.

This ZIP contains the same installable web app built into Deal-Operator.exe.
It is for backup or hosting at an HTTPS website root, not an iPhone IPA/APK.

Alternative local-IP setup, when NOT using the Cloudflare address:
1. On the game PC: Audience Cards / Print > Seller / QR sales > HTTPS / Phone setup.
2. Enable local HTTPS, return, and Start seller server.
3. Each phone scans the setup QR. Its owner installs and trusts this PC's
   public certificate using the instructions. No private key is downloaded.
4. Open the HTTPS seller app in Safari and tap Install on Phone for instructions.
   iPhone: Share > Add to Home Screen > Open as Web App if shown.
   Android: use Install app / Add to Home Screen in the browser.
5. Launch the app, enter or confirm the operator PC's server address, Connect,
   and sign in with the event code, seller number and eight-digit seller code.

The server address is remembered; it can be changed at launch or using Change
server. For bare IP input the default is https://IP:42471/. Use the exact
address shown on the operator PC. If an address changes, the browser may open
Safari outside the installed app's original scope; add the new address to
Home Screen again. Never bypass certificate warnings.

Continuous camera requires a secure, trusted HTTPS origin and phone permission.
Local-IP mode needs phones to reach the PC over venue Wi-Fi. Cloudflare mode
needs internet on both ends and permits phone Wi-Fi or cellular data. The
cached app can show its connection screen offline; sales need main-PC receipts.
Resolve pending sales with the operator before changing server addresses.

For independent hosting, serve these files at the website root over trusted
HTTPS. Entering a different server address navigates the WHOLE PAGE to that
server so camera and API use the same secure origin. No cross-origin bearer
token is forwarded. A file opened directly from a ZIP cannot install a PWA;
use the HTTPS seller page for phone installation.

Third-party QR decoder: jsQR 1.4.0 (Apache 2.0), license included.
