:root{--verd:#1b6b4a;--verd2:#e6f2ec;--fons:#f5f6f4;--card:#fff;--text:#1d2420;--gris:#6b746f;--linia:#d9ded9;--err:#b3261e;--avis:#8a5a00;--avisbg:#fff4d6}
@media (prefers-color-scheme:dark){:root{--verd:#3fa57a;--verd2:#17261f;--fons:#101412;--card:#1a201d;--text:#e8ede9;--gris:#9aa59f;--linia:#2d3631;--err:#ff8a80;--avis:#ffd479;--avisbg:#3a2f12}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font:17px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--fons);color:var(--text);padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
#app{max-width:640px;margin:0 auto;padding:12px 12px 40px}
h1{font-size:1.35rem;margin:24px 0 4px}
h2{font-size:1.05rem;margin:0 0 10px;color:var(--verd);text-transform:uppercase;letter-spacing:.04em}
.carrega{text-align:center;color:var(--gris);margin-top:40vh}
.cap{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;background:var(--verd);color:#fff;border-radius:14px;padding:12px 14px;margin-bottom:12px}
.cap small{opacity:.9}
.cap button{background:rgba(255,255,255,.18);color:#fff;border:0;border-radius:10px;padding:8px 12px;font:inherit}
section.card,.card{background:var(--card);border:1px solid var(--linia);border-radius:14px;padding:14px;margin-bottom:12px}
.camp{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--linia)}
.camp:last-of-type{border-bottom:0}
.camp span{flex:1}
.camp small{display:block;color:var(--gris);font-size:.8rem}
.camp input{width:96px;font:inherit;font-size:1.25rem;text-align:right;padding:9px 10px;border:1.5px solid var(--linia);border-radius:10px;background:var(--fons);color:var(--text)}
.camp input:focus,#codi:focus{outline:none;border-color:var(--verd);box-shadow:0 0 0 3px var(--verd2)}
.camp input.mal{border-color:var(--err)}
.sep{font-weight:600;margin:10px 0 2px;color:var(--gris);font-size:.85rem}
.chk{margin-top:8px;padding:8px 10px;border-radius:10px;background:var(--verd2);font-size:.92rem}
.chk.avis{background:var(--avisbg);color:var(--avis)}
.chk.err{background:var(--avisbg);color:var(--err)}
button.primari{width:100%;font:inherit;font-weight:600;font-size:1.1rem;padding:14px;border:0;border-radius:12px;background:var(--verd);color:#fff;margin-top:4px}
button.primari:disabled{opacity:.6}
button.sec{font:inherit;padding:12px 14px;border:1.5px solid var(--linia);border-radius:12px;background:transparent;color:var(--text)}
#codi{width:100%;font:inherit;font-size:2rem;letter-spacing:.3em;text-align:center;text-transform:uppercase;padding:14px;border:1.5px solid var(--linia);border-radius:12px;background:var(--card);color:var(--text);margin:14px 0}
.msg{margin:10px 0;padding:10px 12px;border-radius:10px;background:var(--avisbg);color:var(--err);white-space:pre-line}
.ok{background:var(--verd2);color:var(--verd);border-radius:14px;padding:16px;text-align:center;margin-bottom:12px}
.ok b{font-size:1.3rem}
.foto{display:flex;gap:12px;align-items:center}
.foto img{width:72px;height:72px;object-fit:cover;border-radius:10px;border:1px solid var(--linia)}
.btnfoto{display:inline-block;padding:12px 14px;border-radius:12px;border:1.5px dashed var(--verd);color:var(--verd);font-weight:600}
.btnfoto input{display:none}
table.res{width:100%;border-collapse:collapse;font-size:.95rem}
table.res td{padding:5px 0;border-bottom:1px solid var(--linia)}
table.res td:last-child{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
dialog{border:0;border-radius:16px;padding:0;width:min(94vw,520px);max-height:90vh;background:var(--card);color:var(--text)}
dialog::backdrop{background:rgba(0,0,0,.5)}
dialog .in{padding:16px}
dialog .bot{display:flex;gap:10px;margin-top:14px}
dialog .bot button{flex:1}
.petit{color:var(--gris);font-size:.85rem}
.xarxa{position:sticky;top:0;z-index:5;background:var(--err);color:#fff;text-align:center;font-size:.9rem;padding:8px 12px}
.xarxa[hidden]{display:none}
dialog .bot{position:sticky;bottom:-16px;background:var(--card);padding:10px 0 16px;margin-bottom:-16px}
button.sec.ample{width:100%;margin-top:10px}
.msg.info{color:var(--text)}
.capbot{display:flex;gap:6px;flex-shrink:0}
.pest{display:flex;gap:6px;margin-bottom:12px;overflow-x:auto}
.pest button{flex:1;font:inherit;font-weight:600;padding:10px 12px;border:1.5px solid var(--linia);border-radius:12px;background:var(--card);color:var(--text);white-space:nowrap}
.pest button.on{background:var(--verd);border-color:var(--verd);color:#fff}
.pest.meses button{flex:0 0 auto;font-size:.85rem;font-weight:500;padding:7px 10px}
.capbot button{padding:7px 10px;font-size:.9rem}
#altra{margin:0 0 12px}
