/* Sample venue skin (a Caddie demo with sample data only). A plain light theme: white page, light grey cards, black text,
   colour only for meaning (green pay and confirm, red clear and void, blue neutral actions). No logo, no photos, no web
   font: the system font stack. The wordmark is the plain text header_name in skin.json, "Sample venue". */
:root{
  --bg:#FFFFFF; --bg-2:#F4F4F5; --fg:#111111; --fg-dim:rgba(17,17,17,.72);
  --panel:#FAFAFA; --panel-fg:#111111; --panel-dim:rgba(17,17,17,.72);
  --accent:#1B7A3A; --accent-strong:#1B4F8A; --accent-on-panel:#1B4F8A; --on-accent:#FFFFFF;
  --cash:#1B7A3A; --cdc:#1B7A3A; --card:#1B7A3A; --danger:#B3261E; --good:#1B7A3A;
  --line:rgba(17,17,17,.22); --line-panel:rgba(17,17,17,.16);
  --card-edge:#D4D4D8; --fg-alt:#3D3D3D;
  --info:#1F5FBF;
  --font:"Segoe UI",Roboto,system-ui,sans-serif;
  --font-dish:var(--font); --dish-weight:600;
  --font-display:var(--font);
}
/* The light theme reaches the engine's few fixed colours through its own selectors (no engine change). */
.kitchen{--k-aside:#F4F4F5}
.toast{background:#FFFFFF;color:#111111;border:1.5px solid rgba(17,17,17,.35);box-shadow:0 6px 18px rgba(0,0,0,.12)}
dialog::backdrop,body.cats dialog.ppanel::backdrop{background:rgba(17,17,17,.28)}
.kscrim{background:rgba(17,17,17,.28)}
.lbox .lmsg.bad,.lbox .lnote{color:var(--danger)}
.sync.ok .dot,.tsync.ok .dot{background:var(--good)}
.sync.wait .dot{background:#B7791F}
.sync.bad{border-color:var(--danger)}
.sync.bad .dot{background:var(--danger)}
#btnTable,.obtn{color:var(--info);border-color:var(--info)}
#btnClear{color:var(--danger);border-color:var(--danger)}
body.cats .tab[aria-selected="true"]{background:#FFFFFF;border-color:var(--fg);color:var(--fg);box-shadow:inset 0 0 0 1.5px var(--fg)}
.vsw{border-color:var(--line)}
.vsw svg{color:var(--fg)}
/* "Sample data" on screen: the pairing (lock) screen, with the published demo PIN (Caddie decisions C-020: an invented
   demo value for the invented owner "Sample Owner", restored nightly; never one of JJ's real PINs), and under the cards. */
#lockScr{flex-direction:column}
#lockScr::after{content:"Sample data. A demo till: no money moves. Demo PIN for Sample Owner: 246810. Sales, menu and PINs reset every night.";display:block;text-align:center;font-size:15px;line-height:1.4;color:var(--fg);padding:12px 16px}
#cards::after{content:"Sample data. Invented menu and prices. This demo adds no service charge or GST.";grid-column:1/-1;font-size:13px;line-height:1.4;color:var(--fg-dim);padding:6px 2px 14px}
/* PayNow: the engine draws a QR from the venue's paynow.proxy. Here the proxy is the invented "SAMPLE0000", and the
   engine's canvas is hidden: the panel shows a DRAWN pattern instead (img\drawn-paynow.svg, no finder squares, no data),
   captioned "Drawn, will not scan". The cashier still presses "Payment received": nothing confirms it by itself. */
#qrPay{display:none!important}
#dPay .qrwrap{width:230px;height:264px;max-width:100%;background:#FFFFFF url("/skin/img/drawn-paynow.svg") center/contain no-repeat;border-radius:8px}
/* The engine's line under the QR ("Customer scans with their banking app. The amount is locked into the QR.") is not true
   of a drawn pattern, so it is hidden and replaced with the honest one. */
#dPay .paysub{display:none}
#dPay .paylogo::after{content:"Nothing is scanned or paid. The cashier taps Payment received to finish the sale; nothing confirms it by itself.";display:block;font-weight:400;font-size:14px;line-height:1.4;color:var(--fg-dim);margin-top:8px}
/* Owner pages: a light paper look. */
body.owner{--o-bg:#F7F7F8;--o-bg-2:#EDEDEF;--o-surface:#FFFFFF;--o-ink:#111111;--o-dim:rgba(17,17,17,.74);--o-line:rgba(17,17,17,.16);
  --o-line-2:rgba(17,17,17,.55);--o-bar:#111111;--o-bar-fg:#F7F7F8;--o-bar-line:rgba(247,247,248,.45);--o-red:#B3261E;--o-red-bg:#FFF4F1;
  --o-save:#1B7A3A;--o-check:#F2D16B;--o-check-edge:#9C7A1C;--o-check-bg:#FFFBEE;--o-on:#1B7A3A}
