/* Foodworld Till. Layout: basket column left, scan bar + quick keys + function keys right; back office as tabbed tables. */
:root{
  --bg:#eef2ec; --panel:#ffffff; --ink:#15211a; --muted:#5a6a60; --line:#d3dbd2;
  --key:#e4ebe3; --green:#1d4a33; --green-ink:#ffffff; --saffron:#f0a500; --saffron-ink:#2a1c00;
  --danger:#b3261e; --ok:#2b7a4b; --warn:#9a6200; --sel:#fff4d6;
  --f-ui:"Segoe UI",system-ui,-apple-system,sans-serif;
  --f-key:"Bahnschrift","Segoe UI Semibold","Arial Narrow",system-ui,sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--ink);font-family:var(--f-ui);font-size:15px;line-height:1.35;user-select:none;overflow:hidden}
input,textarea{user-select:text}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;border-radius:10px;touch-action:manipulation}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--saffron);outline-offset:2px}
[hidden]{display:none!important}
.num{font-variant-numeric:tabular-nums}
#app{height:100%;padding:10px}
.screen{height:100%}
.center{display:grid;place-items:center;height:100%}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px}
.brand{font-family:var(--f-key);font-weight:700;color:var(--green);letter-spacing:.01em}
.muted{color:var(--muted)}
.btn{padding:10px 16px;background:var(--key);font-weight:600}
.btn.primary{background:var(--green);color:var(--green-ink)}
.btn.pay{background:var(--saffron);color:var(--saffron-ink)}
.btn.danger{background:transparent;color:var(--danger);border:1.5px solid var(--danger)}
.btn.ghost{background:transparent;border:1.5px solid var(--line)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.label{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600}
input[type=text],input[type=number],input[type=date],input[type=password],select,textarea{width:100%;padding:10px 12px;border:1.5px solid var(--line);border-radius:10px;background:var(--panel)}
.field{display:grid;gap:4px;min-width:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.chip{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:3px 8px;border-radius:999px;background:var(--key);color:var(--muted)}
.chip.warn{background:var(--sel);color:var(--warn)}
.chip.bad{background:#fde8e6;color:var(--danger)}
.chip.ok{background:#e3f2e8;color:var(--ok)}

/* PIN pad */
.pinwrap{width:380px;padding:26px;display:grid;gap:16px}
.dots{display:flex;gap:12px;justify-content:center;height:22px}
.dots i{width:16px;height:16px;border-radius:50%;border:2px solid var(--muted)}
.dots i.on{background:var(--ink);border-color:var(--ink)}
.pad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.pad button{height:64px;font-size:26px;font-weight:600;background:var(--key);font-family:var(--f-key)}
.pad button.go{background:var(--green);color:var(--green-ink);font-size:19px}
.shake{animation:shake .3s}
@keyframes shake{25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}

/* Till */
#till{display:grid;grid-template-rows:auto 1fr;gap:10px;height:100%}
.topbar{display:flex;gap:10px;align-items:center}
.topbar .who{font-weight:600}
.scanbox{flex:1;min-width:0}
.scanbox input{font-size:19px;padding:12px 14px;border-color:var(--green)}
.tillmain{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,3fr);gap:10px;min-height:0}
.basket{display:flex;flex-direction:column;min-height:0;overflow:hidden}
.lines{flex:1;overflow:auto;min-height:0}
.line{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:9px 14px;border-bottom:1px solid var(--line);cursor:pointer}
.line.sel{background:var(--sel)}
.line .nm{font-weight:600;min-width:0;overflow-wrap:anywhere}
.line .dt{font-size:13px;color:var(--muted)}
.line .tt{font-weight:700;text-align:right}
.empty{padding:28px 18px;color:var(--muted);text-align:center}
.totals{padding:8px 14px;border-top:2px solid var(--line);display:grid;gap:2px}
.totals .r{display:flex;justify-content:space-between}
.totals .big{font-size:32px;font-weight:700;font-family:var(--f-key)}
.paybar{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:10px}
.paybar button{height:66px;font-size:24px;font-family:var(--f-key);font-weight:700}
.fastcash{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:0 10px 10px}
.fastcash button{height:46px;font-family:var(--f-key);font-weight:700;font-size:18px;background:#f6e7a8;color:#2a1c00}
.fastcash button:disabled{opacity:.45}
.right{display:grid;grid-template-rows:auto 1fr auto auto;gap:8px;min-height:0}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tabs button{padding:9px 13px;background:var(--panel);border:1.5px solid var(--line);font-weight:600;white-space:nowrap}
.tabs button.on{background:var(--green);color:var(--green-ink);border-color:var(--green)}
.keys{overflow:hidden;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-auto-rows:84px;gap:8px;align-content:start;padding:2px;min-height:0}
.qk.noprice{border-style:dashed}
.qk.noprice span{color:var(--warn)}
.pager{display:grid;grid-template-columns:150px 1fr 150px;gap:8px;align-items:center;text-align:center;font-weight:600;color:var(--muted)}
.pager button{height:48px;background:var(--green);color:var(--green-ink);font-family:var(--f-key);font-weight:700;font-size:17px}
.pager button:disabled{background:var(--key);color:var(--muted);opacity:.6}
.qk{min-height:0;padding:5px 6px;overflow:hidden;background:var(--panel);border:1.5px solid var(--line);display:grid;align-content:center;gap:2px;text-align:center}
.qk b{font-family:var(--f-key);font-size:16.5px;line-height:1.12;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.qk span{font-size:13px;color:var(--muted)}
.qk:active,.fnbar button:active,.pad button:active{transform:scale(.97)}
.results{display:grid;gap:6px;align-content:start;overflow:auto}
.res{display:flex;justify-content:space-between;gap:10px;padding:12px 14px;background:var(--panel);border:1.5px solid var(--line);text-align:left}
.fnbar{display:grid;grid-template-columns:repeat(8,1fr);gap:7px}
.fnbar button{min-height:54px;padding:6px;background:var(--key);font-family:var(--f-key);font-weight:600;font-size:16px;line-height:1.1}
.fnbar button.mgr::after{content:" *";color:var(--warn)}

/* Modal */
#modal{position:fixed;inset:0;background:rgba(8,16,12,.55);display:grid;place-items:center;z-index:50;padding:12px}
.mbox{width:min(580px,100%);max-height:100%;overflow:auto;padding:22px;display:grid;gap:14px}
.mbox.wide{width:min(860px,100%)}
.mbox h2{margin:0;font-family:var(--f-key);font-size:27px}
.mbox p{margin:0}
.amount{font-family:var(--f-key);font-size:42px;font-weight:700;text-align:center;padding:8px;border:2px solid var(--line);border-radius:12px}
.notes{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.notes button{height:54px;background:var(--key);font-weight:700}
.change{font-size:52px;font-family:var(--f-key);font-weight:700;color:var(--ok);text-align:center}
.receipt{font-family:Consolas,"Courier New",monospace;font-size:13px;background:var(--bg);padding:14px;border-radius:10px;white-space:pre;overflow-x:auto}
#toast{position:fixed;left:50%;transform:translateX(-50%);top:74px;z-index:60;display:grid;gap:8px;width:min(480px,calc(100% - 32px))}
#toast div{background:var(--ink);color:#fff;padding:12px 16px;border-radius:10px;font-weight:600}
#toast div.warn{background:var(--warn)}
#toast div.bad{background:var(--danger)}
.offline{background:var(--danger);color:#fff;padding:6px 12px;border-radius:8px;font-weight:600}

/* Office */
#office{display:grid;grid-template-rows:auto auto 1fr;gap:12px;height:100%}
.otabs{display:flex;gap:6px;flex-wrap:wrap}
.otabs button{padding:10px 18px;background:transparent;border:1.5px solid var(--line);font-weight:600}
.otabs button.on{background:var(--green);color:var(--green-ink);border-color:var(--green)}
.obody{overflow:auto;min-height:0;display:grid;gap:14px;align-content:start;padding-bottom:20px}
.tablewrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
th{font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--panel)}
td.r,th.r{text-align:right}
tbody tr.click{cursor:pointer}
tbody tr.click:hover{background:var(--sel)}
.tiles{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}
.tile{padding:14px}
.tile .v{font-size:27px;font-weight:700;font-family:var(--f-key)}
.sec{padding:16px;display:grid;gap:10px;min-width:0}
.sec h3{margin:0;font-family:var(--f-key);font-size:21px}
.bars{display:grid;gap:4px}
.bar{display:grid;grid-template-columns:52px 1fr 90px;gap:8px;align-items:center;font-size:13px}
.bar i{display:block;height:16px;background:var(--green);border-radius:4px;min-width:2px}
.weightbox{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.weightbox .amount{font-size:36px}

/* key pictures */
.qk.pic{grid-template-rows:auto auto auto;align-content:center;gap:0;padding:2px 6px}
.qk.pic b{-webkit-line-clamp:2;font-size:15px;line-height:1.08}
.kpic{display:grid;place-items:center;height:34px;margin:0 auto}
.kpic.emo{font-size:28px;line-height:1;font-family:"Segoe UI Emoji","Apple Color Emoji","Noto Color Emoji",sans-serif}
.kpic img{height:34px;width:34px;border-radius:8px;object-fit:cover}
.kpic.ini{width:34px;height:34px;border-radius:50%;font:700 14px var(--f-key)}
.kpic.svg{width:38px;height:34px}
.kpic.svg svg{overflow:visible;transform:scale(1.15);transform-origin:50% 35%}

/* compact till buttons (default): more per page, like the old E-tek screen */
.keys.compact{gap:6px}
.keys.compact .qk{padding:2px 4px;border-radius:8px}
.keys.compact .qk b{font-size:13.5px;line-height:1.08;-webkit-line-clamp:2}
.keys.compact .qk span{font-size:12px}
.keys.compact .kpic{height:24px}
.keys.compact .kpic.emo{font-size:20px}
.keys.compact .kpic img,.keys.compact .kpic.ini{height:24px;width:24px;font-size:11px}
.keys.compact .kpic.svg{width:28px;height:24px}

/* many till pages: smaller page tabs so the buttons keep their room */
.tabs.many{gap:4px}
.tabs.many button{padding:6px 10px;font-size:13.5px;border-radius:8px}

/* on-screen keyboard */
#osk{position:fixed;left:0;right:0;bottom:0;z-index:80;background:#1b2620;padding:8px 8px 10px;display:grid;gap:6px;box-shadow:0 -4px 18px rgba(0,0,0,.3)}
#osk[hidden]{display:none}
.osk-row{display:flex;gap:6px}
#osk button{flex:1;height:58px;border-radius:8px;background:#f3f6f2;color:#15211a;font:600 22px var(--f-key);touch-action:manipulation}
#osk button:active{background:#d6e3d6}
#osk button.fn{background:#9fb0a4;font-size:17px;flex:1.3}
#osk button.fn.on{background:var(--saffron)}
#osk button.go{background:var(--green);color:#fff}
#osk button.space{flex:5}
body.osk-open #modal{align-items:start;padding-bottom:330px}
body.osk-open .mbox{max-height:calc(100vh - 340px)}
body.osk-open .obody{padding-bottom:340px}

/* ---------- phone back office (opened in a phone browser from the main till) ---------- */
html.mobile body{overflow:auto;user-select:auto;font-size:16px}
html.mobile #app{height:auto;min-height:100dvh;padding:10px max(10px,env(safe-area-inset-left)) 24px}
html.mobile #office{height:auto;min-height:calc(100dvh - 34px);grid-template-rows:auto auto auto}
html.mobile .obody{overflow:visible}
html.mobile #tillf,html.mobile #mpf,html.mobile #bkf{display:none}
@media (max-width:760px){
  .pinwrap{width:100%;max-width:380px;padding:20px}
  #office .topbar{flex-wrap:wrap;gap:6px 10px}
  #office .topbar .brand{font-size:21px!important}
  .otabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
  .otabs button{flex:none;padding:10px 14px}
  .obody{gap:10px}
  .grid2,.grid3{grid-template-columns:1fr}
  .tiles{grid-template-columns:repeat(2,1fr)}
  .tile .v{font-size:22px}
  .sec{padding:12px}
  .row{gap:8px}
  .row .btn{flex:1 1 auto}
  table{font-size:14px}
  th,td{padding:8px 7px}
  .tablewrap,#ptable{overflow-x:auto;-webkit-overflow-scrolling:touch}
  #modal{padding:0;align-items:end}
  .mbox,.mbox.wide{width:100%;max-height:92dvh;border-radius:16px 16px 0 0;padding:16px}
  .mbox h2{font-size:22px}
  input[type=text],input[type=number],input[type=date],input[type=password],select,textarea{font-size:16px}
  .bar{grid-template-columns:44px 1fr 72px}
  #toast{top:10px}
}
@media (max-width:760px){
  /* products list on a phone: name, price and stock only (tap a row to see everything) */
  #ptable th:nth-child(2),#ptable td:nth-child(2),#ptable th:nth-child(3),#ptable td:nth-child(3),#ptable th:nth-child(5),#ptable td:nth-child(5),#ptable th:nth-child(7),#ptable td:nth-child(7),#ptable th:nth-child(8),#ptable td:nth-child(8){display:none}
  #ptable td:first-child{white-space:normal}
}

/* phone camera scanner */
.cambtn{flex:none;white-space:nowrap;padding:10px 12px}
#cam{position:fixed;inset:0;z-index:90;background:#000;display:flex;flex-direction:column;color:#fff}
#cam .cam-top{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;padding-top:max(12px,env(safe-area-inset-top))}
#cam .cam-top button{background:#fff;color:#000;padding:10px 16px;font-weight:700}
#cam .cam-view{position:relative;flex:1;overflow:hidden}
#cam video{width:100%;height:100%;object-fit:cover}
#cam .cam-aim{position:absolute;left:8%;right:8%;top:50%;height:26%;transform:translateY(-50%);border:3px solid var(--saffron);border-radius:12px;box-shadow:0 0 0 999px rgba(0,0,0,.35)}
#cam .cam-msg{text-align:center;padding:14px 16px 22px;margin:0;font-size:16px}
@media (max-width:760px){
  .row .cambtn{flex:none}
  html.mobile #office{align-content:start}
  #st-log td:first-child,#gi-log td:nth-child(2){white-space:normal}
  #st-log th,#st-log td{padding:8px 5px}
}

html.mobile #toast{top:auto;bottom:max(16px,env(safe-area-inset-bottom))}

/* invoices */
.inv-line{gap:8px}
.inv-line.off{opacity:.45}
.inv-match{display:grid;gap:6px}

.paybar button{font-size:21px}
.fnbar button{font-size:15px}
/* back office website: Live screen */
tr.drop td{color:var(--danger)} tr.drop td b{color:var(--danger)}
td .bar{display:block} td .bar i{height:12px}
#lv-days{height:40px;border-radius:10px;border:1px solid var(--line,#ddd);padding:0 8px;font:inherit}
/* offers */
.offers{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.offer{padding:12px;display:grid;gap:10px;align-content:start}.offer.off{opacity:.5}
.offer img,.offer .nopic{width:100%;height:150px;object-fit:cover;border-radius:10px;background:var(--key);display:grid;place-items:center;color:var(--muted)}
.offer .op{font-size:22px;font-weight:800;color:var(--green)}.offer .op s{font-size:15px;color:var(--muted);font-weight:400}
.ofpv{width:120px;height:80px;border-radius:8px;background:var(--key);display:grid;place-items:center;overflow:hidden;color:var(--muted);font-size:13px}.ofpv img{width:100%;height:100%;object-fit:cover}
.newsup{display:grid;gap:6px;margin-top:6px;padding:8px;border-radius:10px;background:var(--sel)}
.packrow{display:grid;grid-template-columns:1.4fr .8fr 1.4fr auto;gap:6px;margin-bottom:6px}
@media (max-width:700px){.packrow{grid-template-columns:1fr 1fr}.packrow .pk-bar{grid-column:1/-1}}
/* cash up */
.cu{display:grid;grid-template-columns:1.1fr 1fr;gap:14px;margin:10px 0}
.cu-den,.cu-side{display:grid;gap:6px;align-content:start}
.cu-row{display:grid;grid-template-columns:1fr 80px 100px;align-items:center;gap:8px;padding:9px 12px;border-radius:10px;border:1px solid var(--line,#ddd);background:#fff;font:inherit;font-size:16px;text-align:left;cursor:pointer}
.cu-side .cu-row{grid-template-columns:1fr 110px}
.cu-row b{text-align:right}.cu-row.on{border-color:var(--green);box-shadow:0 0 0 2px var(--green) inset;background:var(--sel)}
.cu-row.tot{cursor:default;font-weight:800;background:var(--key)}
.cu-pad button{height:58px;font-size:22px}
@media (max-width:760px){.cu{grid-template-columns:1fr}}
@media (max-height:820px){.cu-row{padding:5px 10px;font-size:15px}.cu-den,.cu-side{gap:4px}.cu-pad button{height:46px}.cu{margin:6px 0}}
.startgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;max-width:300px;margin:8px auto}
.startgrid button{height:40px;border-radius:8px;border:2px solid #3a9e74;background:#fff;font:inherit;font-weight:700;cursor:pointer}
.startgrid button.on{background:#f5e63a}.startgrid button.used{background:#ddd;color:#999;border-color:#bbb}
