:root{--ink:#17383b;--muted:#697b80;--line:#dfe7e8;--bg:#f4f7f8;--lime:#d8f89c;--green:#276b53}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--bg);font:16px/1.6 'Microsoft YaHei',system-ui,sans-serif}button,input,select{font:inherit}button,a,input,select{ -webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer}a{color:inherit;text-decoration:none}button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:9px 16px;color:var(--ink);font-size:14px;font-weight:600}button:hover{background:#edf3f2}button:focus-visible,a:focus-visible{outline:3px solid #83acbd;outline-offset:3px}.primary{background:var(--ink);border-color:var(--ink);color:#fff}.primary:hover{background:#285359}.danger{color:#ae3940}input,select{border:1px solid var(--line);border-radius:7px;padding:10px 12px;background:white;color:var(--ink);min-width:0}input:focus{outline:2px solid #a5c9c5}.demo{min-height:34px;background:#eaf0ef;text-align:center;font-size:13px;padding:6px 16px;color:#516b68}.demo span{font-weight:400}.shell{display:flex;min-height:calc(100vh - 34px)}aside{width:230px;flex-shrink:0;background:var(--ink);color:white;display:flex;flex-direction:column;padding:32px 20px;position:sticky;top:0;height:calc(100vh - 34px)}.brand{display:flex;gap:12px;align-items:center;font-weight:600;white-space:nowrap}.brand b{background:var(--lime);color:var(--ink);font-size:24px;width:43px;height:46px;text-align:center;border-radius:11px;line-height:46px}.brand small{display:block;font-size:10px;font-weight:400;letter-spacing:1.6px;color:#a8c1bf;margin-top:3px}.navlabel{font-size:12px;color:#99b2b0;letter-spacing:2px;margin:48px 15px 16px}nav a{display:flex;align-items:center;gap:14px;padding:13px 15px;border-radius:8px;margin:5px 0;font-size:16px;color:#c6d5d4}nav a.active{background:#315256;color:#efffd5}nav a:hover{background:#29494d}.sidebottom{margin-top:auto;border-top:1px solid #3c595a;padding:24px 0 0;display:flex;gap:12px;font-size:14px}.avatar{border:1px solid #557172;border-radius:50%;width:38px;height:38px;display:grid;place-items:center}.sidebottom small{display:block;color:#a8c1bf;font-size:12px}.workspace{flex:1;min-width:0}header{height:72px;background:#fff;border-bottom:1px solid var(--line);padding:0 38px;display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--muted)}.version{font-size:11px;letter-spacing:1.4px}main{padding:32px 38px;max-width:1500px;margin:auto;min-height:calc(100vh - 165px)}h1{font-size:28px;letter-spacing:-.7px;margin:0 0 6px;font-weight:650}h2{font-size:18px;margin:0}h3{font-size:16px;margin:0}p{margin:5px 0 0}.muted{color:var(--muted);font-size:14px}.topline{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:28px}.actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:28px}.metric{background:white;border:1px solid var(--line);padding:21px 24px;border-radius:10px}.metric:first-child{background:#e6eeee;border-color:#d7e3e2}.metric label{font-size:14px;color:var(--muted)}.metric strong{display:block;font-size:32px;font-weight:600;margin:6px 0}.metric small{font-size:12px;color:var(--muted)}.panel{background:white;border:1px solid var(--line);border-radius:11px;overflow:hidden}.panelhead{padding:21px 24px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:12px}.filters{padding:18px 24px;display:flex;gap:12px;border-bottom:1px solid var(--line)}.search{flex:1;max-width:460px}.tablewrap{overflow-x:auto}table{width:100%;border-collapse:collapse;white-space:nowrap;text-align:left}th{background:#f9fbfb;font-weight:400;color:var(--muted);font-size:13px;padding:13px 20px}td{padding:17px 20px;border-top:1px solid #edf1f1;font-size:14px}tr:hover td{background:#fbfdfc}.product{display:flex;align-items:center;gap:12px}.tile{width:44px;height:44px;border-radius:8px;display:grid;place-items:center;background:#edf2f3;color:#6d8a8e;font-size:13px;font-weight:600}.tile.mint{background:#e6f0e9;color:#427356}.tile.gold{background:#f7f1df;color:#9b7b36}.product strong{display:block;font-size:14px;font-weight:600}.product small{display:block;font-size:12px;color:var(--muted)}.badge{display:inline-block;font-size:12px;padding:3px 10px;border-radius:5px;background:#edf2f4;color:#617277}.badge.published{background:#e8f3ec;color:#2c7953}.badge.draft{background:#fff3db;color:#98721e}.linkbutton{background:transparent;border:0;color:#276b65;padding:6px}.tabfoot{display:flex;align-items:center;justify-content:space-between;padding:17px 24px;color:var(--muted);font-size:13px}.note{padding:15px 19px;border:1px solid #d8e7e5;background:#edf6f3;border-radius:8px;font-size:14px;color:#4a6d62;margin-bottom:22px}.grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:22px}.stack>*+*{margin-top:22px}.pad{padding:24px}.fields{display:grid;grid-template-columns:1fr 1fr;gap:18px}.field{display:flex;flex-direction:column;gap:8px;font-size:14px}.dropzone{border:1.5px dashed #a6beba;border-radius:10px;background:#f7fbf9;text-align:center;padding:30px 18px;margin:20px 24px}.dropzone.over{background:#e8f5d7}.uploadicon{font-size:32px;font-weight:300;color:#567d72;line-height:1.3;margin-bottom:8px}.dropzone button{margin-top:14px}.filelist{padding:0 24px 18px}.filerow{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);padding:14px 0;font-size:14px}.filerow .filename{flex:1;min-width:0;overflow-wrap:anywhere}.fileicon{width:38px;height:44px;background:#fff0ea;color:#b46948;display:grid;place-items:center;font-size:11px;border-radius:5px;flex-shrink:0}.fileicon.img{background:#e8f1ec;color:#4f8060}.empty{text-align:center;padding:32px;color:var(--muted);font-size:14px}.tiny{font-size:12px;color:var(--muted)}.sidecard{padding:22px}.sidecard h3{margin-bottom:15px}.keyvalue{display:flex;justify-content:space-between;margin:12px 0;font-size:14px}.qrcode{display:block;width:150px;height:150px;margin:18px auto}.qrplaceholder{border:1px dashed var(--line);padding:25px;font-size:14px;margin:18px 0}.full{width:100%}.phonewrap{max-width:440px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:25px;overflow:hidden;box-shadow:0 18px 55px #193b3b0b}.phonehead{background:var(--ink);padding:26px;color:#fff}.phonehead small{font-size:11px;letter-spacing:2px;color:#bcd0cd}.phonehead h1{font-size:24px;margin:18px 0 4px}.phonebody{padding:24px}.phonebody section+section{border-top:1px solid var(--line);margin-top:24px;padding-top:24px}.gallery{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:15px}.gallery img{width:100%;height:150px;object-fit:contain;border-radius:8px;background:#f5f7f8;cursor:zoom-in}.qrgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.qrcard{background:white;border:1px solid var(--line);border-radius:10px;padding:20px;text-align:center;break-inside:avoid}.qrcard h3{margin-top:8px}.qrcard label{display:flex;justify-content:space-between;font-size:13px;color:var(--muted)}.qrcard .qrcode{width:145px;height:145px}.check{width:18px;height:18px;accent-color:var(--ink)}footer{padding:12px 38px 24px;color:#8a9a9e;display:flex;justify-content:space-between;font-size:12px}dialog{border:1px solid var(--line);border-radius:12px;padding:0;width:min(900px,95vw);max-height:90vh;color:var(--ink)}dialog::backdrop{background:#12353788}.dialoghead{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-bottom:1px solid var(--line)}#previewbody{padding:20px}#previewbody img{max-width:100%;max-height:70vh;display:block;margin:auto}#previewbody iframe{width:100%;height:70vh;border:0}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;padding:12px 22px;border-radius:8px;box-shadow:0 5px 30px #0002;z-index:10;display:none;max-width:90vw}.editfooter{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.back{font-size:14px;display:inline-block;color:var(--muted);margin-bottom:14px}.formnote{padding:0 24px 20px}.publictop{max-width:650px;margin:0 auto 24px}.publicmode aside,.publicmode header,.publicmode footer{display:none}.publicmode main{padding:24px 16px}.publicmode .phonewrap{border-radius:12px}.publication{font-size:12px;color:#738783;margin-top:25px;text-align:center}.photoempty{padding:25px 14px;border-radius:8px;background:#f5f8f8;color:var(--muted);text-align:center;font-size:14px;margin-top:15px}.subline{display:flex;gap:12px;align-items:center;margin-bottom:22px}.selected{font-size:14px;color:var(--muted)}
@media(min-width:1600px){main{padding-top:42px}.metrics{margin-bottom:34px}.metric{padding:26px}}@media(max-width:1100px){aside{width:200px;padding:28px 14px}main{padding:25px}.grid{grid-template-columns:minmax(0,1fr) 250px}.qrgrid{grid-template-columns:repeat(2,1fr)}.version{display:none}.metric{padding:16px}.metric strong{font-size:28px}}@media(max-width:760px){.shell{display:block}aside{width:100%;height:auto;position:static;padding:16px}.brand small,.navlabel,.sidebottom{display:none}.brand b{width:34px;height:36px;line-height:36px;font-size:19px}.brand{font-size:16px}nav{display:flex;gap:6px;margin-top:14px}nav a{padding:9px 10px;font-size:14px;gap:6px}header{height:45px;padding:0 18px;font-size:12px}main{padding:22px 16px}.topline{align-items:flex-start;flex-direction:column;gap:16px;margin-bottom:22px}h1{font-size:24px}.metrics{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px}.metric{padding:14px 17px}.metric strong{font-size:27px;margin:3px 0}.filters{flex-wrap:wrap;padding:15px}.search{width:100%;max-width:none;flex-basis:100%}.filters select{flex:1}.panelhead{padding:17px}.grid{grid-template-columns:1fr}.fields{grid-template-columns:1fr}.pad{padding:18px}.qrgrid{gap:12px;grid-template-columns:1fr 1fr}.qrcard{padding:12px}.qrcard .qrcode{width:120px;height:120px}.qrcard h3{font-size:14px}.qrcard button{padding:7px;font-size:12px}.demo{font-size:12px}.demo span{display:block}.dropzone{margin:18px}.filelist{padding:0 18px 15px}.filerow{flex-wrap:wrap}.filerow .filename{min-width:55%}footer{padding:12px 18px;font-size:11px}footer span{display:none}.phonewrap{border-radius:15px}.tabfoot{padding:16px;gap:12px}.publictop h1{font-size:23px}}
@media print{.demo,aside,header,footer,.topline,.note,.subline,.qrcard button,.qrcard label{display:none!important}.shell,.workspace{display:block}main{padding:0}.qrgrid{grid-template-columns:repeat(3,1fr);gap:12mm}.qrcard{border:1px solid #ddd}.qrcard.excluded{display:none}.qrcode{width:35mm!important;height:35mm!important}body{background:white}}

/* Guided demo and compact attachment controls */
.quickstart{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;padding:20px 24px;background:#e9f0ed;border:1px solid #d7e5de;border-radius:10px}.quickstart strong{font-size:16px}.quickstart p{font-size:14px;color:#59736a;margin-top:6px}.demo button{font-size:12px;padding:2px 10px;margin-left:16px;border-color:#b9cdca;background:transparent}.uploadissues{padding-left:20px}.uploadissues li{margin:14px 0;overflow-wrap:anywhere}.filters{flex-wrap:wrap}.search{min-width:200px}.filerow{flex-wrap:wrap}.filerow .filename{min-width:160px}.filerow button{padding:5px 8px}.phonebody .filerow .filename{min-width:140px}.phonebody{overflow-wrap:anywhere}.topline h1{overflow-wrap:anywhere}.uploadissues strong{font-weight:500}@media(max-width:760px){.quickstart{align-items:flex-start;padding:17px;flex-direction:column}.quickstart p{line-height:1.9}.filters select{min-width:130px}.demo button{margin-top:5px;margin-left:0}.actions{width:100%}.filerow .filename{flex:1;min-width:calc(100% - 60px)}.search{min-width:0}}

.product-entry{color:#276b65;text-decoration:underline;text-underline-offset:4px}.product-entry:hover{color:#17383b}

.expiry-expired{color:#c62932;font-weight:600}.expiry-soon{color:#a66b00;font-weight:600}.expiry-valid{color:var(--ink)}.datefilter{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted)}.datefilter input{min-width:145px}@media(max-width:760px){.datefilter{flex:1}.datefilter input{flex:1;min-width:0}}

@media(max-width:760px){nav{flex-wrap:wrap}}

body .shell{min-height:100vh}aside{height:100vh}.sidebottom button{font-size:12px;padding:5px 8px}.sidebottom .actions{margin-top:10px}.authpanel{max-width:460px;margin:8vh auto;padding:30px}.authpanel h1{margin-bottom:24px}.authpanel .field{margin-bottom:16px}.autherror{color:#b32632;white-space:pre-wrap}@media(max-width:760px){aside{height:auto}.authpanel{margin:25px 16px}}
[hidden]{display:none!important}

/* One 60 x 40 mm landscape label per printed page. */
@media print{.name-search{display:none!important}}
@page { size:60mm 40mm; margin:0; }
@media print {
 html,body { width:60mm!important; margin:0!important; padding:0!important; background:#fff!important; color:#000!important; }
 .demo,aside,header,footer,.topline,.note,.subline,dialog,#toast,.qrcard>label,.qrcard>div:last-child { display:none!important; }
 body .shell,.workspace,main { display:block!important; width:60mm!important; min-height:0!important; height:auto!important; max-width:none!important; padding:0!important; margin:0!important; }
 .qrgrid { display:block!important; margin:0!important; padding:0!important; }
 .qrcard { width:60mm!important; height:40mm!important; margin:0!important; padding:2mm!important; border:0!important; border-radius:0!important; box-shadow:none!important; break-inside:avoid; page-break-inside:avoid; }
 .qrcard.excluded { display:none!important; }
 .qrcard:not(.excluded)~.qrcard:not(.excluded) { break-before:page; page-break-before:always; }
 .qrcard .qr-label { display:grid!important; grid-template-columns:32mm 22mm; gap:2mm; align-items:center; width:56mm; height:36mm; margin:0!important; }
 .qrcard .qrcode { display:block!important; width:32mm!important; height:32mm!important; margin:0!important; }
 .qrcard h3 { margin:0!important; padding:0!important; font-size:9pt!important; line-height:1.15!important; color:#000!important; overflow-wrap:anywhere; word-break:break-all; text-align:center; }
 .qrcard h3.label-long { font-size:7pt!important; }
}
