:root{
  --bg:#EEF2EF; --surface:#FFFFFF; --surface2:#E3E9E5; --ink:#17201D; --ink2:#56635D; --line:#D3DBD6;
  --accent:#0E6B5A; --accent-ink:#FFFFFF; --accent-soft:#D3EAE2;
  --cash:#24312C; --cash-ink:#FFFFFF;
  --good:#1D7446; --good-soft:#D8EEDF; --warn:#A8650C; --warn-soft:#F7E7CB; --crit:#B3382A; --crit-soft:#F6DAD5;
  --shadow:0 1px 2px rgba(20,40,32,.06),0 4px 14px rgba(20,40,32,.06);
  --r:14px;
  font-family:"Plus Jakarta Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  color-scheme:dark;
  --bg:#0F1513; --surface:#18201D; --surface2:#222C28; --ink:#E6ECE9; --ink2:#98A69F; --line:#2D3935;
  --accent:#3DB39A; --accent-ink:#04201A; --accent-soft:#15352D;
  --cash:#D5DFDA; --cash-ink:#101614;
  --good:#5CC48A; --good-soft:#15321F; --warn:#E6A547; --warn-soft:#3A2B12; --crit:#F07C6A; --crit-soft:#3D1D18;
  --shadow:0 1px 2px rgba(0,0,0,.3);
}}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0F1513; --surface:#18201D; --surface2:#222C28; --ink:#E6ECE9; --ink2:#98A69F; --line:#2D3935;
  --accent:#3DB39A; --accent-ink:#04201A; --accent-soft:#15352D;
  --cash:#D5DFDA; --cash-ink:#101614;
  --good:#5CC48A; --good-soft:#15321F; --warn:#E6A547; --warn-soft:#3A2B12; --crit:#F07C6A; --crit-soft:#3D1D18;
  --shadow:0 1px 2px rgba(0,0,0,.3);
}
*{box-sizing:border-box}
html,body{background:var(--bg);color:var(--ink)}
body{font-size:15px;line-height:1.45;-webkit-tap-highlight-color:transparent}
button{font:inherit;color:inherit;cursor:pointer}
input,textarea,select{font:inherit;color:var(--ink);background:var(--surface);border:1.5px solid var(--line);border-radius:10px;padding:10px 12px;width:100%}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.num,td,.k-val,.tile .price,.stock{font-variant-numeric:tabular-nums}

/* header */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);display:flex;align-items:center;gap:10px;padding:12px 16px 10px;border-bottom:1px solid var(--line)}
.bz{flex:1;min-width:0}
.bz-name{font-weight:800;font-size:16px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bz-sub{color:var(--ink2);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pill{border:0;border-radius:999px;padding:6px 10px;font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.pill i{width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block}
.pill.good{background:var(--good-soft);color:var(--good)}
.pill.warn{background:var(--warn-soft);color:var(--warn)}
.pill.mute{background:var(--surface2);color:var(--ink2)}
.icon-btn{border:0;background:var(--surface2);width:38px;height:38px;border-radius:12px;display:grid;place-items:center;flex:none}
.icon-btn svg{width:20px;height:20px}

main{padding:14px 16px 170px;max-width:760px;margin:0 auto}
.sec-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:18px 2px 8px}
.sec-h h2{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);margin:0;font-weight:700}
.sec-h .aside{font-size:12.5px;color:var(--ink2);text-align:right}
.sec-h:first-child{margin-top:4px}

/* product tiles */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
@media (max-width:420px){.grid{grid-template-columns:1fr 1fr}}
.tile{position:relative;text-align:left;border:1.5px solid var(--line);background:var(--surface);border-radius:var(--r);padding:12px 12px 10px;display:flex;flex-direction:column;gap:6px;min-height:96px;box-shadow:var(--shadow);transition:transform .08s}
.tile:active{transform:scale(.97)}
.tile.in-cart{border-color:var(--accent);background:var(--accent-soft)}
.tile .nm{font-weight:700;font-size:15px;line-height:1.2;display:flex;gap:8px;align-items:flex-start;padding-right:26px}
.tile .meta{display:flex;justify-content:space-between;align-items:center;gap:6px;margin-top:auto;font-size:12.5px}
.tile .price{color:var(--ink2)}
.stock{font-weight:700;border-radius:6px;padding:1px 6px;font-size:12px}
.stock.ok{background:var(--surface2);color:var(--ink2)}
.stock.low{background:var(--warn-soft);color:var(--warn)}
.stock.out{background:var(--crit-soft);color:var(--crit)}
.qty-badge{position:absolute;top:8px;right:8px;min-width:26px;height:26px;border-radius:13px;background:var(--accent);color:var(--accent-ink);font-weight:800;font-size:14px;display:grid;place-items:center;padding:0 6px}
.dot{width:12px;height:12px;border-radius:50%;flex:none;margin-top:3px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}

/* list rows */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.rows>.row{display:flex;gap:10px;align-items:center;padding:11px 14px;border-top:1px solid var(--line)}
.rows>.row:first-child{border-top:0}
.row .main{flex:1;min-width:0}
.row .t1{font-weight:600}
.row .t2{color:var(--ink2);font-size:12.5px}
.row .amt{font-weight:700;text-align:right;white-space:nowrap}
.chip{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;border-radius:6px;padding:2px 6px;background:var(--surface2);color:var(--ink2)}
.chip.qris{background:var(--accent-soft);color:var(--accent)}
.chip.cash{background:var(--surface2);color:var(--ink)}
.chip.free{background:var(--warn-soft);color:var(--warn)}
.chip.void{background:var(--crit-soft);color:var(--crit)}
.chip.good{background:var(--good-soft);color:var(--good)}
.chip.warn{background:var(--warn-soft);color:var(--warn)}
.chip.crit{background:var(--crit-soft);color:var(--crit)}
.empty{padding:18px 14px;color:var(--ink2);font-size:14px;text-align:center}
.voided{opacity:.5;text-decoration:line-through}

/* buttons */
.btn{border:0;border-radius:12px;padding:12px 16px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--surface2);color:var(--ink)}
.btn.primary{background:var(--accent);color:var(--accent-ink)}
.btn.cash{background:var(--cash);color:var(--cash-ink)}
.btn.ghost{background:transparent;color:var(--ink2)}
.btn.small{padding:7px 11px;font-size:13px;border-radius:9px}
.btn.xl{padding:16px;font-size:17px;width:100%}
.btn.block{width:100%}
.btn.danger{background:var(--crit-soft);color:var(--crit)}
.btn:disabled{opacity:.45}

/* cart bar */
.cartbar{position:fixed;left:0;right:0;bottom:calc(64px + env(safe-area-inset-bottom,0px));z-index:25;padding:0 10px 8px}
.cartbar .inner{max-width:740px;margin:0 auto;background:var(--surface);border:1.5px solid var(--accent);border-radius:18px;box-shadow:0 8px 30px rgba(0,0,0,.18);padding:10px}
.cart-lines{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;max-height:92px;overflow:auto}
.cline{display:inline-flex;align-items:center;gap:4px;background:var(--surface2);border-radius:9px;padding:3px 3px 3px 9px;font-size:13px;font-weight:600}
.cline button{border:0;background:var(--surface);width:24px;height:24px;border-radius:7px;font-weight:800}
.cart-sum{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.cart-sum .tot{font-size:20px;font-weight:800}
.cart-sum .cnt{color:var(--ink2);font-size:13px}
.pay-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pay-row .btn{padding:14px;font-size:16px}

/* tab bar */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0px)}
.tabbar .inner{max-width:760px;margin:0 auto;display:grid;grid-template-columns:repeat(4,1fr)}
.tab{border:0;background:none;height:64px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:11.5px;font-weight:700;color:var(--ink2)}
.tab svg{width:23px;height:23px}
.tab.on{color:var(--accent)}

/* segmented */
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--surface2);border-radius:12px;padding:4px;gap:4px}
.seg button{border:0;background:none;border-radius:9px;padding:9px 8px;font-weight:700;font-size:14px;color:var(--ink2)}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}

/* stepper */
.step{display:flex;align-items:center;gap:10px;padding:9px 12px;border-top:1px solid var(--line)}
.step:first-child{border-top:0}
.step .nm{flex:1;font-weight:600;display:flex;gap:8px;align-items:flex-start;min-width:0}
.step .nm small{color:var(--ink2);font-weight:500}
.step .ctl{display:flex;align-items:center;gap:6px}
.step .ctl button{width:40px;height:40px;border-radius:11px;border:0;background:var(--surface2);font-size:20px;font-weight:700}
.step .ctl button.plus{background:var(--accent-soft);color:var(--accent)}
.step input{width:54px;text-align:center;padding:8px 4px;font-weight:800;font-size:17px}
.step.has input{border-color:var(--accent);background:var(--accent-soft)}

.sticky-save{position:fixed;left:0;right:0;bottom:calc(64px + env(safe-area-inset-bottom,0px));z-index:25;padding:8px 12px;background:linear-gradient(to top,var(--bg) 70%,transparent)}
.sticky-save .inner{max-width:736px;margin:0 auto}

.notice{border-radius:12px;padding:12px 14px;font-size:14px;display:flex;gap:10px;align-items:flex-start}
.notice.info{background:var(--accent-soft)}
.notice.warn{background:var(--warn-soft)}
.notice.crit{background:var(--crit-soft)}
.notice .grow{flex:1}

/* tables */
.tbl-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:14px}
th{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink2);font-weight:700;text-align:right;padding:9px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
th:first-child,td:first-child{text-align:left;padding-left:14px}
th:last-child,td:last-child{padding-right:14px}
td{padding:8px;border-top:1px solid var(--line);text-align:right;white-space:nowrap}
tr:first-child td{border-top:0}
td .nm{display:flex;gap:7px;align-items:flex-start;font-weight:600}
td input{width:62px;text-align:center;padding:6px 4px;font-weight:800}
.diff-neg{color:var(--crit);font-weight:800}
.diff-pos{color:var(--warn);font-weight:800}
.diff-0{color:var(--good);font-weight:800}

/* dashboard */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
@media (max-width:600px){.kpis{grid-template-columns:1fr 1fr}}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px}
.k-lbl{font-size:11.5px;color:var(--ink2);font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.k-val{font-size:22px;font-weight:800;letter-spacing:-.02em;margin-top:2px}
.k-sub{font-size:12px;color:var(--ink2)}
.stack{display:flex;height:14px;border-radius:7px;overflow:hidden;background:var(--surface2);margin:10px 0 8px}
.stack span{height:100%}
.legend{display:flex;flex-wrap:wrap;gap:12px;font-size:12.5px;color:var(--ink2)}
.legend b{color:var(--ink)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.hbar{display:grid;grid-template-columns:minmax(110px,38%) 1fr 34px;gap:10px;align-items:center;padding:6px 14px;font-size:13.5px}
.hbar .track{height:12px;background:var(--surface2);border-radius:6px;overflow:hidden}
.hbar .fill{height:100%;background:var(--accent);border-radius:6px}
.hbar .v{text-align:right;font-weight:800;font-variant-numeric:tabular-nums}
.cols{display:flex;align-items:flex-end;gap:4px;height:150px;padding:18px 14px 0;overflow-x:auto}
.col{flex:1;min-width:18px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px}
.col .bar{width:100%;max-width:34px;background:var(--accent);border-radius:6px 6px 2px 2px;min-height:2px}
.col .bar.future{background:repeating-linear-gradient(45deg,var(--surface2),var(--surface2) 3px,transparent 3px,transparent 6px);border:1px dashed var(--line)}
.col .v{font-size:11.5px;font-weight:800;font-variant-numeric:tabular-nums}
.col-lbls{display:flex;gap:4px;padding:6px 14px 12px;border-top:1px solid var(--line);margin-top:0;overflow-x:auto}
.col-lbls span{flex:1;min-width:18px;text-align:center;font-size:11px;color:var(--ink2)}

/* sheet */
.overlay{position:fixed;inset:0;z-index:50;background:rgba(8,14,12,.45);display:flex;align-items:flex-end;justify-content:center}
.sheet{background:var(--bg);width:100%;max-width:560px;max-height:92%;overflow:auto;border-radius:20px 20px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:12px}
@media (min-width:700px){.overlay{align-items:center}.sheet{border-radius:20px;max-height:86%}}
.sheet h3{margin:0;font-size:19px;font-weight:800;text-wrap:balance}
.sheet .big{font-size:36px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.sheet ol{margin:0;padding-left:20px;color:var(--ink2)}
.lbl{font-size:12px;font-weight:700;color:var(--ink2);text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px;display:block}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips button{border:1.5px solid var(--line);background:var(--surface);border-radius:10px;padding:10px 12px;font-weight:700}
.chips button.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.change{display:flex;justify-content:space-between;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-weight:700}
.change b{font-size:22px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.form-grid .full{grid-column:1/-1}
.prod-edit{display:grid;grid-template-columns:1fr 70px 110px auto;gap:6px;align-items:center;padding:8px 12px;border-top:1px solid var(--line)}
.prod-edit:first-child{border-top:0}
.prod-edit input{padding:7px 8px}
.muted{color:var(--ink2)}
.small{font-size:12.5px}
.gap{display:flex;flex-direction:column;gap:10px}
.hr{height:1px;background:var(--line);margin:4px 0}

.toast{position:fixed;left:50%;top:calc(70px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:60;background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:12px;font-weight:700;font-size:14px;box-shadow:0 8px 24px rgba(0,0,0,.2);max-width:calc(100% - 32px);text-align:center}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* ---------- additions for the production app ---------- */
html,body{margin:0;overflow-x:hidden}
.top-btns{display:flex;gap:8px;align-items:center}
.tabbar .inner{grid-template-columns:repeat(var(--tabs,4),1fr)}
[hidden]{display:none!important}

/* login */
.login{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px calc(24px + env(safe-area-inset-bottom,0px));gap:18px;max-width:420px;margin:0 auto}
.login h1{margin:0;font-size:22px;font-weight:800;letter-spacing:-.01em;text-align:center}
.login .muted{text-align:center}
.brand{width:64px;height:64px;border-radius:18px;background:var(--accent);display:grid;place-items:center}
.brand svg{width:34px;height:34px;color:var(--accent-ink)}
.names{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%}
.names button{border:1.5px solid var(--line);background:var(--surface);border-radius:var(--r);padding:18px 10px;font-size:18px;font-weight:800;box-shadow:var(--shadow)}
.names button small{display:block;font-size:11px;font-weight:700;color:var(--ink2);text-transform:uppercase;letter-spacing:.06em;margin-top:2px}
.pin-dots{display:flex;gap:14px;justify-content:center;margin:4px 0}
.pin-dots i{width:16px;height:16px;border-radius:50%;border:2px solid var(--ink2)}
.pin-dots i.on{background:var(--ink);border-color:var(--ink)}
.pinpad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;width:100%;max-width:320px}
.pinpad button{border:0;background:var(--surface);border-radius:16px;height:64px;font-size:26px;font-weight:700;box-shadow:var(--shadow)}
.pinpad button.fn{background:transparent;box-shadow:none;font-size:15px;color:var(--ink2)}
.pinpad button:active{background:var(--accent-soft)}
.err{color:var(--crit);font-weight:700;text-align:center;min-height:21px}

/* settings */
.set-prod{display:grid;grid-template-columns:72px 1fr auto;grid-template-areas:"nm nm nm" "sz pr tg";gap:6px;padding:10px 12px;border-top:1px solid var(--line);align-items:center}
.set-prod:first-child{border-top:0}
.set-prod .nm-in{grid-area:nm;display:flex;gap:8px;align-items:center}
.set-prod input{padding:8px}
.set-prod .sz{grid-area:sz}.set-prod .pr{grid-area:pr}.set-prod .tg{grid-area:tg;justify-self:end}
.set-prod.off .nm-in input{opacity:.55}
input[type=color]{width:38px;height:38px;padding:2px;flex:none}
@media (min-width:560px){.set-prod{grid-template-columns:1fr 70px 110px auto;grid-template-areas:"nm sz pr tg"}}
.pin-big{font-size:44px;font-weight:800;letter-spacing:.3em;text-align:center;font-variant-numeric:tabular-nums;padding:6px 0}
.row .btns{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
details summary{padding:4px 0}

/* phone width: tables must fit without sideways scrolling */
@media (max-width:480px){
  table{font-size:13px}
  th{font-size:9px;letter-spacing:0;padding:8px 2px;white-space:normal}
  td{padding:7px 2px}
  th:first-child,td:first-child{padding-left:10px}
  th:last-child,td:last-child{padding-right:10px}
  td:first-child{white-space:normal}
  td .nm{font-size:13px;line-height:1.25;gap:5px}
  td .dot{width:9px;height:9px}
  td .nm .muted{display:block;font-weight:500}
  td input{width:40px;padding:6px 2px}
  td input#nz,td input#ci{width:84px!important}
  .chip{font-size:10px;padding:2px 4px}
}
