:root{--bg:#f4f5f2;--card:#fff;--text:#222;--muted:#6a7068;--border:#d9ded6;--primary:#244d34;--primary2:#eef4ef;--warn:#fff4d8}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}.top{background:#fff;border-bottom:1px solid var(--border);padding:14px max(16px,calc((100% - 1150px)/2));display:flex;align-items:center;justify-content:space-between;gap:16px;position:sticky;top:0;z-index:5}.brand{font-weight:800}.top nav{display:flex;gap:14px;flex-wrap:wrap}.top a{color:var(--text);text-decoration:none;font-size:14px}.wrap{max-width:1150px;margin:0 auto;padding:22px 16px 50px}h1{font-size:28px;margin:0 0 5px}h2{font-size:18px;margin:0 0 14px}.muted{color:var(--muted);font-size:14px}.grid2{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(280px,.7fr);gap:18px}.card,.stat{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:18px}.stat{margin-bottom:18px;display:flex;justify-content:space-between;align-items:center}.stat strong{font-size:25px}.form{display:grid;gap:14px;margin-top:18px}.form label{font-size:14px;font-weight:650;display:grid;gap:6px}.cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}input,select,textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:12px;background:#fff;color:var(--text);font:inherit;min-height:46px}textarea{resize:vertical}.primary,.secondary,.buttonlink,.label-actions button{border:0;border-radius:10px;padding:12px 15px;font:inherit;font-weight:750;cursor:pointer}.primary{background:var(--primary);color:white;font-size:17px;min-height:50px}.secondary,.buttonlink{background:var(--primary2);color:var(--primary)}button:disabled{opacity:.45;cursor:not-allowed}.warning{background:var(--warn);border-radius:10px;padding:12px;font-size:14px;margin-top:14px}.list{display:grid}.row{display:flex;justify-content:space-between;gap:10px;padding:11px 0;border-top:1px solid var(--border);color:var(--text);text-decoration:none}.row:first-child{border-top:0}.row small,.mini-list small,td small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.right{text-align:right}.admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.inline-form{display:flex;gap:8px}.mini-list{border-top:1px solid var(--border);margin-top:15px;padding-top:8px;display:grid;gap:5px;font-size:14px}.mini-list>div{padding:7px 0}.badge{background:var(--primary2);color:var(--primary);border-radius:99px;padding:3px 7px;font-size:11px;font-weight:800}.heading-row{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px}.buttonlink{text-decoration:none}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--border);border-radius:14px}table{border-collapse:collapse;width:100%;min-width:900px}th,td{text-align:left;padding:11px;border-bottom:1px solid var(--border);font-size:13px}th{background:#f8f9f7;font-size:12px;text-transform:uppercase;color:var(--muted)}.label-page{background:#efefef}.label-actions{max-width:600px;margin:20px auto;display:flex;justify-content:space-between;align-items:center;padding:0 10px}.label-actions a{color:var(--primary)}.label-actions button{background:var(--primary);color:#fff}.label-sheet{width:60mm;min-height:40mm;margin:20px auto;background:#fff;padding:3mm;border:1px solid #ccc;position:relative}.label-title{font-size:10pt;font-weight:900}.lot{font-size:8pt;font-family:monospace;margin:1mm 0 2mm}.label-grid{display:grid;grid-template-columns:1fr 1fr;gap:1mm 3mm;font-size:7pt;padding-right:19mm}.label-grid span{display:block;color:#555}.label-grid b{font-size:8pt}.fine{font-size:5.8pt;margin-top:2mm;padding-right:19mm;line-height:1.3}.qr{width:18mm;height:18mm;position:absolute;right:2.5mm;bottom:5mm}.qrtext{position:absolute;right:2mm;bottom:2mm;font-size:5pt;font-family:monospace}
@media(max-width:760px){.top{align-items:flex-start;flex-direction:column}.grid2,.admin-grid{grid-template-columns:1fr}.cols{grid-template-columns:1fr}.wrap{padding-top:14px}.card{padding:15px}h1{font-size:24px}.inline-form{flex-direction:column}.heading-row{align-items:flex-start;flex-direction:column}}
@media print{body.label-page{background:#fff}.label-actions{display:none}.label-sheet{margin:0;border:0}@page{size:60mm 40mm;margin:0}}
.user-chip{font-size:12px;color:var(--muted);background:var(--primary2);padding:6px 9px;border-radius:999px;white-space:nowrap}.login-wrap{max-width:440px;margin:70px auto;padding:0 16px}.login-card{padding:24px}.login-help{margin-top:18px;padding:12px;background:#f7f8f6;border-radius:10px;font-size:13px;color:var(--muted)}.login-help code{font-weight:800;color:var(--text)}.errorbox{margin-top:14px;padding:11px 12px;border-radius:10px;background:#fdeaea;color:#922;font-size:14px}.narrow-card{max-width:560px;margin:0 auto}.users-card{margin-top:18px}.users-table{min-width:700px}.users-table code{font-size:12px;font-weight:700}@media(max-width:760px){.user-chip{order:3}.top nav{gap:10px}}

.scan-form{display:grid;grid-template-columns:1fr auto;gap:10px;margin-top:18px;align-items:end}.scan-form label{font-size:14px;font-weight:700;display:grid;gap:6px}.box-identity{margin-top:16px;padding:14px;border:2px solid var(--primary);border-radius:12px;background:var(--primary2);display:grid;gap:3px}.box-identity b{font-family:monospace;font-size:16px}.box-identity span{font-weight:750}.box-identity small{color:var(--muted)}.successbox{margin-top:14px;padding:12px;border-radius:10px;background:#e8f5ec;color:#245c36}.weight-row{display:grid;grid-template-columns:1fr auto;gap:8px}.mini-receipt{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:9px 0;border-top:1px solid var(--border)}.mini-receipt:first-of-type{border-top:0}.mini-receipt span{font-size:12px;color:var(--muted)}.mini-receipt strong{grid-row:1/3;grid-column:2;align-self:center}.source-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--border)}.source-row:first-of-type{border-top:0}.source-row small{display:block;color:var(--muted);font-size:11px;margin-top:3px}.tiny{border:0;background:#f1f2f0;border-radius:7px;padding:5px 8px;margin-top:5px;cursor:pointer}.class-total{margin-top:10px;padding-top:10px;border-top:2px solid var(--border);display:flex;justify-content:space-between}.classification-card,.latest-class{margin-top:18px}.category-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.balance{padding:12px;border-radius:10px;background:var(--primary2);font-weight:750}.barcode{position:absolute;left:2.5mm;bottom:1.2mm;width:34mm;height:8.5mm;object-fit:fill}.label-grid{padding-right:19mm;padding-bottom:8mm}.fine{padding-right:19mm;padding-bottom:8mm}.page-break{page-break-after:always}@media(max-width:760px){.scan-form{grid-template-columns:1fr}.weight-row{grid-template-columns:1fr}.category-grid{grid-template-columns:1fr 1fr}}@media(max-width:430px){.category-grid{grid-template-columns:1fr}}
.manual-weight-note{padding:10px 12px;border-radius:10px;background:#fff4d8;border:1px solid #efd89b;font-size:13px;font-weight:750;color:#694f00}.weight-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:18px 0}.stat-mini{background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px;display:grid;gap:4px}.stat-mini span{font-size:12px;color:var(--muted)}.stat-mini strong{font-size:20px}.stat-mini.alert{background:#fff0f0;border-color:#e4aaaa}.stat-mini.alert strong{color:#a02222}.missing-weight{display:inline-block;background:#fdeaea;color:#922;font-weight:850;padding:4px 7px;border-radius:7px}.row-alert{background:#fffafa}.status-pill{font-size:11px;font-weight:800;background:var(--primary2);color:var(--primary);padding:4px 7px;border-radius:999px;white-space:nowrap}.weight-table{min-width:1100px}code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}@media(max-width:900px){.weight-stats{grid-template-columns:1fr 1fr}}@media(max-width:500px){.weight-stats{grid-template-columns:1fr}}

/* v0.8 barcode: full-width, undistorted Code 128 with compact 8-digit scan id */
.label-sheet{padding-bottom:14mm}
.barcode-wrap{position:absolute;left:2.5mm;right:2.5mm;bottom:1.2mm;height:12mm;display:flex;align-items:flex-end;justify-content:center}
.barcode{position:static;width:auto;max-width:100%;height:10mm;object-fit:contain;display:block}
.scan-caption{position:absolute;right:0;bottom:-.4mm;font-size:4.6pt;font-family:monospace;color:#444}
.qr{width:17mm;height:17mm;right:2.5mm;bottom:14.5mm}
.qrtext{display:none}
.label-grid{padding-bottom:0}.fine{padding-bottom:0}
@media print{.barcode{width:auto!important;max-width:100%!important;height:10mm!important}}
/* v0.9 stock clasificado y salidas */
.stock-list{display:grid}.stock-row{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:14px;padding:12px 0;border-top:1px solid var(--border);align-items:center}.stock-row:first-child{border-top:0}.stock-row small{display:block;color:var(--muted);font-size:12px;margin-top:4px}.stock-right{text-align:right}.stock-right>strong{font-size:18px}.stock-add{display:grid;grid-template-columns:90px auto;gap:6px;margin-top:7px}.stock-add input{min-height:36px;padding:7px 9px}.stock-empty{opacity:.55}.stock-empty .stock-right strong{color:var(--muted)}
@media(max-width:760px){.stock-row{grid-template-columns:1fr}.stock-right{text-align:left}.stock-add{grid-template-columns:1fr auto}}
.category-grid-all{align-items:stretch}.category-option{border:1px solid var(--border);border-radius:12px;padding:12px;background:#fbfcfa;display:grid!important;grid-template-rows:auto 1fr;gap:10px!important}.category-option span{display:grid;gap:3px}.category-option b{font-size:14px}.category-option small{font-size:11px;color:var(--muted);font-weight:500;line-height:1.25}.category-option input{align-self:end}.category-option.non-igp{background:#fff8e8;border-color:#ead49b}.class-head{align-items:flex-start}.class-head h2{margin-bottom:4px}

/* v0.14 - etiqueta termica exacta 60x40 mm */
.label-page{margin:0;padding:0}
.label-sheet{width:60mm;height:40mm;min-height:0;max-height:40mm;margin:20px auto;padding:2mm 2.2mm 11.5mm;background:#fff;border:1px solid #ccc;position:relative;overflow:hidden;page-break-inside:avoid;break-inside:avoid}
.label-title{font-size:8.7pt;line-height:1;font-weight:900;white-space:nowrap;padding-right:16mm}
.lot{font-size:6.5pt;line-height:1.05;font-family:monospace;margin:.8mm 0 1.2mm;white-space:nowrap;overflow:hidden;text-overflow:clip;padding-right:16mm}
.label-grid{grid-template-columns:1fr 1fr;gap:.5mm 2mm;font-size:5.7pt;padding:0 16mm 0 0;line-height:1.05}
.label-grid span{font-size:5pt;line-height:1;color:#555}
.label-grid b{font-size:6.2pt;line-height:1.05;white-space:nowrap;overflow:hidden}
.fine{font-size:4.4pt;line-height:1.08;margin-top:1mm;padding:0 16mm 0 0;max-height:8mm;overflow:hidden}
.qr{width:14mm;height:14mm;right:2mm;top:2mm;bottom:auto}
.barcode-wrap{left:2mm;right:2mm;bottom:1.1mm;height:9.2mm;align-items:flex-start}
.barcode{width:auto;max-width:46mm;height:7.2mm;object-fit:contain;display:block}
.scan-caption{right:0;bottom:0;font-size:4.2pt;line-height:1;font-family:monospace;color:#333}
@media print{
 html,body.label-page{width:60mm!important;height:40mm!important;margin:0!important;padding:0!important;background:#fff!important}
 .label-actions{display:none!important}
 .label-sheet{width:60mm!important;height:40mm!important;min-height:40mm!important;max-height:40mm!important;margin:0!important;padding:2mm 2.2mm 11.5mm!important;border:0!important;overflow:hidden!important;page-break-after:always!important;break-after:page!important}
 .label-sheet:last-child{page-break-after:auto!important;break-after:auto!important}
 .barcode{width:auto!important;max-width:46mm!important;height:7.2mm!important}
 @page{size:60mm 40mm;margin:0}
}

/* v0.15 - Code128 optimizado para lector: modulo 0,50 mm (~4 dots a 203 dpi), sin deformacion */
.barcode-wrap{left:2mm;right:2mm;bottom:1mm;height:10mm;display:block;text-align:center}
.barcode{width:auto!important;max-width:54mm!important;height:8.5mm!important;object-fit:contain!important;margin:0 auto;display:block}
.scan-caption{position:absolute;left:0;right:0;bottom:0;text-align:center;font-size:5pt;font-weight:700;letter-spacing:.3mm;color:#111}
@media print{.barcode{width:auto!important;max-width:54mm!important;height:8.5mm!important}}

/* v0.16 - datos de productor/origen mas legibles en etiqueta 60x40; Code128 v0.15 intacto */
.fine{font-size:5.4pt!important;line-height:1.08!important;margin-top:1.1mm!important;padding-right:0!important;max-height:9.5mm!important;overflow:hidden!important;letter-spacing:0!important}
.fine b{font-weight:700}.fine strong{font-weight:850}
@media print{.fine{font-size:5.4pt!important;line-height:1.08!important;padding-right:0!important;max-height:9.5mm!important}}
