:root{--ink:#1d2327;--mute:#5d676d;--line:#cfd5d8;--bg:#eef0f1;--acc:#1f4e79;--ok:#2e7d4f;--warn:#b26a00;--bad:#b3261e}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.5 "Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}
h1{font-size:1.5rem;margin:.2rem 0 1rem;line-height:1.25}
.muted{color:var(--mute);font-size:.875rem;margin:0}
button,input,textarea,select{font:inherit;color:inherit}
button{background:var(--acc);color:#fff;border:0;border-radius:3px;padding:.5rem .9rem;cursor:pointer}
button.alt{background:#fff;color:var(--ink);border:1px solid var(--line)}
button.del{background:#fff;color:var(--bad);border:1px solid var(--line)}
button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
input,textarea{width:100%;padding:.45rem .55rem;border:1px solid var(--line);border-radius:3px;background:#fff}
label{display:block;font-size:.875rem;color:var(--mute);margin-bottom:.9rem}
label input,label textarea{margin-top:.2rem;color:var(--ink)}

/* halaman publik (hasil scan) */
.pub main{max-width:34rem;margin:0 auto;padding:1.5rem 1rem 3rem;background:#fff;min-height:100vh;border-inline:1px solid var(--line)}
.pub table{width:100%;border-collapse:collapse;margin:1.2rem 0}
.pub th,.pub td{text-align:left;padding:.55rem 0;border-bottom:1px solid var(--line);vertical-align:top}
.pub th{width:40%;font-weight:400;color:var(--mute);padding-right:1rem}
.cal{display:grid;grid-template-columns:1fr 1fr;gap:1rem;border:1px solid var(--line);border-left:6px solid var(--ok);padding:.8rem 1rem}
.cal.warn{border-left-color:var(--warn)}.cal.bad{border-left-color:var(--bad)}
.cal span{display:block;font-size:.8rem;color:var(--mute)}
.cal b{font-size:1.05rem}
.cal em{display:block;font-style:normal;font-size:.85rem;color:var(--ok)}
.cal.warn em{color:var(--warn)}.cal.bad em{color:var(--bad)}

/* admin */
.wrap{max-width:62rem;margin:0 auto;padding:1rem}
header.top{display:flex;gap:.6rem;align-items:center;margin-bottom:1rem}
header.top h1{margin:0;flex:1;font-size:1.25rem}
.bar{display:flex;gap:.6rem;margin-bottom:.8rem}
.list{background:#fff;border:1px solid var(--line)}
.item{display:grid;grid-template-columns:1fr auto;gap:.5rem;padding:.7rem .9rem;border-bottom:1px solid var(--line);align-items:center}
.item:last-child{border-bottom:0}
.item b{display:block}
.item small{color:var(--mute)}
.item small.bad{color:var(--bad)}
.act{display:flex;gap:.4rem;flex-wrap:wrap;justify-content:flex-end}
.act button{padding:.35rem .65rem;font-size:.875rem}
.empty{padding:1.5rem;color:var(--mute)}
#login{max-width:22rem;margin:18vh auto 0;background:#fff;border:1px solid var(--line);padding:1.4rem}
#err,#ferr{color:var(--bad);min-height:1.3em;margin:.3rem 0 0;font-size:.9rem}
dialog{border:1px solid var(--line);border-radius:4px;padding:1.2rem;width:min(34rem,94vw);max-height:92vh;overflow:auto}
dialog::backdrop{background:rgba(20,28,33,.45)}
dialog h2{margin:0 0 1rem;font-size:1.15rem}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:0 .8rem}
.foot{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.4rem;flex-wrap:wrap}
#qrbox{text-align:center}
#qrbox canvas{width:240px;height:240px;image-rendering:pixelated;border:1px solid var(--line)}
#qrurl{word-break:break-all;font-size:.8rem;color:var(--mute);margin:.6rem 0}
@media(max-width:520px){.g2,.cal{grid-template-columns:1fr}.item{grid-template-columns:1fr}.act{justify-content:flex-start}}

.pub h2{font-size:.95rem;margin:1.4rem 0 0;padding-bottom:.3rem;border-bottom:2px solid var(--ink)}
.pub h2+table{margin-top:0}
.cal b small{display:block;font-weight:400;font-size:.8rem;color:var(--mute)}

/* stiker kalibrasi */
select{width:100%;padding:.45rem .55rem;border:1px solid var(--line);border-radius:3px;background:#fff;margin-top:.2rem}
#stPrev{display:flex;justify-content:center;margin:.4rem 0 1rem;overflow:auto}
.stk{width:90mm;height:50mm;border:.3mm solid #000;background:#fff;color:#000;display:grid;grid-template-rows:9mm 1fr 8mm;font-family:Arial,Helvetica,sans-serif;overflow:hidden;box-sizing:border-box;flex:none}
.stk-head{display:flex;flex-direction:column;justify-content:center;text-align:center;padding:0 2mm;border-bottom:.3mm solid #000;line-height:1.15}
.stk-head b{font-size:9pt;text-transform:uppercase}
.stk-head span{font-size:6pt}
.stk-mid{display:grid;grid-template-columns:29mm 1fr;align-items:center;padding:0 1.5mm}
.stk-mid canvas{width:27mm;height:27mm;image-rendering:pixelated}
.stk-f{font-size:7pt;min-width:0}
.stk-nm{font-weight:700;font-size:7.5pt;line-height:1.15;margin-bottom:1mm;max-height:8.6mm;overflow:hidden}
.stk-r{display:flex;gap:1.5mm;border-bottom:.2mm solid #000;height:4.6mm;align-items:flex-end;line-height:1.1}
.stk-r span{flex:none;width:7mm}
.stk-r i{font-style:normal;font-weight:700;overflow:hidden;white-space:nowrap}
.stk-bar{display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:8pt;letter-spacing:.03em;text-align:center;padding:0 1mm}
.stk-bar.green{background:#2e7d4f}.stk-bar.red{background:#b3261e}.stk-bar.amber{background:#b26a00}.stk-bar.grey{background:#555}
#printArea{display:none}
@media print{
  html,body{margin:0;background:#fff}
  body>*:not(#printArea){display:none!important}
  #printArea{display:block}
  #printArea.label{height:50mm;overflow:hidden}
  #printArea.a4{display:grid;grid-template-columns:repeat(2,90mm);gap:4mm 6mm}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

.inrow{display:flex;gap:.4rem;margin-top:.2rem}.inrow input{margin-top:0}.inrow button{white-space:nowrap;padding:.35rem .6rem;font-size:.85rem}
