:root{--green: #0d5b3d;--green-light: #147a52;--bg: #f4f6f5;--card: #ffffff;--ink: #16211c;--muted: #6b7a72;--line: #e2e8e4;--warn: #b45309;--warn-bg: #fef3c7;--ok-bg: #d1fae5;--danger: #b91c1c}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}input,select,button{font:inherit}.app{display:flex;flex-direction:column;height:100%;max-width:520px;margin:0 auto;background:var(--bg)}.topbar{display:flex;justify-content:space-between;align-items:center;background:var(--green);color:#fff;padding:12px 16px;padding-top:calc(12px + env(safe-area-inset-top))}.brand{font-weight:700;letter-spacing:.3px}.brand-mark{margin-right:6px}.topbar-right{display:flex;gap:6px}.pill{font-size:12px;padding:3px 8px;border-radius:999px;background:#fff3}.pill.ok{background:var(--ok-bg);color:var(--green)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.queued{background:#fde68a;color:#92400e}.instancebar{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;background:#fff;border-bottom:1px solid var(--line)}.instance-name{font-weight:600}.linkbtn{background:none;border:none;color:var(--green-light);cursor:pointer;padding:0}.content{flex:1;overflow-y:auto;padding:16px}.tabbar{display:flex;border-top:1px solid var(--line);background:#fff;padding-bottom:env(safe-area-inset-bottom)}.tab{flex:1;background:none;border:none;padding:10px 0;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer}.tab.active{color:var(--green)}.tab-icon{font-size:20px}.tab-label{font-size:11px}button.primary{background:var(--green);color:#fff;border:none;border-radius:10px;padding:12px 16px;font-weight:600;cursor:pointer}button.primary:disabled{opacity:.5}button.primary.big{width:100%;font-size:18px;padding:18px}button.ghost{background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:12px 16px;cursor:pointer}.chip{background:#fff;border:1px solid var(--line);border-radius:999px;padding:6px 12px;cursor:pointer;font-size:13px}.row{display:flex;gap:10px;align-items:center}.row.wrap{flex-wrap:wrap}.row>button.primary,.row>button.ghost{flex:1}.login{display:flex;align-items:center;justify-content:center;height:100%;padding:20px}.login-card{background:var(--card);border-radius:16px;padding:28px;width:100%;max-width:380px;box-shadow:0 8px 30px #00000014;text-align:center}.login-logo{font-size:44px}.login-card h1{margin:6px 0 2px;color:var(--green)}.login form{text-align:left;margin-top:16px;display:flex;flex-direction:column;gap:12px}.login label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}.login input{padding:12px;border:1px solid var(--line);border-radius:10px;font-size:16px}.mode-toggle{display:flex;gap:8px;margin-bottom:14px}.mode-toggle button{flex:1;padding:12px;border-radius:10px;border:1px solid var(--line);background:#fff;cursor:pointer;display:flex;flex-direction:column;gap:2px}.mode-toggle button small{color:var(--muted);font-size:11px}.mode-toggle button.active{border-color:var(--green);background:var(--ok-bg);color:var(--green);font-weight:600}.camera{position:relative;aspect-ratio:4/3;background:#0b0f0d;border-radius:14px;overflow:hidden;margin-bottom:12px;display:flex;align-items:center;justify-content:center}.camera video{width:100%;height:100%;object-fit:cover;display:none}.camera.live video{display:block}.camera-placeholder{color:#cbd5cf;text-align:center;padding:20px}.big-scan-icon{font-size:54px}.scan-reticle{position:absolute;top:18%;right:12%;bottom:18%;left:12%;border:3px solid rgba(255,255,255,.85);border-radius:12px;box-shadow:0 0 0 100vmax #00000026}.status{text-align:center;color:var(--muted);margin:8px 0}.upload{display:block;text-align:center;margin:12px 0;color:var(--green-light);border:1px dashed var(--line);border-radius:10px;padding:12px;cursor:pointer}.samples,.samples .row{margin-top:8px}.confirm-card,.saved-card{background:var(--card);border-radius:14px;padding:18px;box-shadow:0 4px 16px #0000000f}.confirm-card h3{margin-top:0}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.field-label{font-size:12px;color:var(--muted)}.field input,.party-new input,.party-pick select,.search,.daterange input{padding:12px;border:1px solid var(--line);border-radius:10px;font-size:16px;width:100%}.party-new{display:flex;flex-direction:column;gap:8px}.party-pick{display:flex;gap:8px;align-items:center}.party-pick select{flex:1}.autocaptured{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);background:var(--bg);border-radius:8px;padding:8px 10px;margin:8px 0 14px}.ai-note{background:#ecfdf5;border:1px solid #a7f3d0;color:var(--green);border-radius:10px;padding:8px 12px;margin-bottom:12px;font-size:14px}.saved-card{text-align:center}.saved-check{width:56px;height:56px;border-radius:50%;background:var(--ok-bg);color:var(--green);font-size:30px;display:flex;align-items:center;justify-content:center;margin:0 auto 8px}.filters{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}.daterange{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:4px;flex:1}.record-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.record{background:#fff;border-radius:12px;padding:12px 14px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border:1px solid var(--line)}.record-main{display:flex;gap:12px;align-items:center}.record-name{font-weight:600}.record-meta{text-align:right;font-size:13px}.dir{font-size:11px;font-weight:700;padding:4px 8px;border-radius:8px;white-space:nowrap}.dir.back{background:#dbeafe;color:#1e40af}.dir.forward{background:#fee2e2;color:#991b1b}.chain-summary{display:flex;align-items:center;gap:10px;margin:12px 0;flex-wrap:wrap}.chain-summary .linkbtn{margin-left:auto}.chain-flow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:14px;background:#fff;border-radius:12px;padding:12px;border:1px solid var(--line)}.flow-node-wrap{display:flex;align-items:center;gap:6px}.flow-node{background:var(--ok-bg);color:var(--green);font-weight:600;padding:6px 10px;border-radius:8px}.flow-arrow{color:var(--muted);font-weight:700}.chain-records{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.chain-record{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px}.chain-record-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.chain-biz{font-weight:600}.chain-record-head .muted{margin-left:auto}.export-block{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:14px}.export-block .row{margin:8px 0}.export-block button.primary{width:100%}.muted{color:var(--muted)}.small{font-size:12px}.error{color:var(--danger);background:#fee2e2;padding:8px 10px;border-radius:8px;font-size:13px}.empty{text-align:center;color:var(--muted);padding:40px 20px}.disclaimer{margin-top:16px;padding-top:12px;border-top:1px solid #e5eae7;font-size:11px;line-height:1.45;color:var(--muted);text-align:left}.disclaimer p{margin:0 0 8px}.app-footnote{text-align:center;font-size:10.5px;color:var(--muted);padding:6px 16px 10px;line-height:1.4}.addr-wrap{position:relative}.addr-wrap input{width:100%;box-sizing:border-box}.addr-suggest{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 2px);margin:0;padding:4px;list-style:none;background:#fff;border:1px solid #d8e0dc;border-radius:10px;box-shadow:0 8px 24px #0d5b3d1f;max-height:220px;overflow-y:auto}.addr-suggest li button{display:block;width:100%;text-align:left;background:none;border:none;padding:8px 10px;border-radius:8px;font-size:13px;color:var(--ink, #1c2b24);cursor:pointer}.addr-suggest li button:hover{background:#eef5f1}.admin-tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}.admin-tabs button{border:1px solid #d8e0dc;background:#fff;border-radius:999px;padding:8px 14px;font-size:13px;color:var(--muted);cursor:pointer}.admin-tabs button.active{background:var(--green);color:#fff;border-color:var(--green)}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.stat{background:#fff;border:1px solid #d8e0dc;border-radius:14px;padding:14px;text-align:center}.stat-warn{border-color:#e0b4b4;background:#fdf4f4}.stat-value{font-size:30px;font-weight:800;color:var(--green)}.stat-warn .stat-value{color:var(--danger, #b23a3a)}.stat-label{font-size:12px;color:var(--muted);margin-top:2px}.admin-list{display:flex;flex-direction:column;gap:8px}.admin-row{background:#fff;border:1px solid #d8e0dc;border-radius:12px;padding:10px 14px;display:flex;justify-content:space-between;gap:10px;align-items:center;font-size:14px}.charts{display:flex;flex-direction:column;gap:16px}.chart{background:#fff;border:1px solid #d8e0dc;border-radius:14px;padding:12px 14px}.chart-title{font-size:14px;font-weight:700;margin-bottom:8px}.chart-bars{display:flex;align-items:flex-end;gap:3px;height:90px}.chart-bar{flex:1;background:var(--green);border-radius:3px 3px 0 0;min-height:3px}.chart-bar-warn{background:#b23a3a}.chart-x{display:flex;justify-content:space-between;margin-top:4px}.bug-fab{position:fixed;right:14px;bottom:84px;z-index:40;width:52px;height:52px;border-radius:50%;border:none;background:#fff;box-shadow:0 6px 20px #0000002e;font-size:24px;cursor:pointer}.bug-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#00000073;display:flex;align-items:center;justify-content:center;padding:20px}.bug-card{background:#fff;border-radius:16px;padding:18px;width:100%;max-width:420px;display:flex;flex-direction:column;gap:10px}.bug-card textarea{width:100%;box-sizing:border-box;border:1px solid #d8e0dc;border-radius:10px;padding:10px;font:inherit;resize:vertical}.invite-code{text-align:center;font-size:40px;font-weight:800;letter-spacing:.25em;color:var(--green);background:#eef5f1;border-radius:12px;padding:14px 0}.expiry-alert{background:#fff7e6;border:1px solid #f2d49b;color:#7a5b16;border-radius:12px;padding:10px 14px;margin-bottom:12px;font-size:14px}.expiry-soon{color:#b23a3a;font-weight:700}.record-photo{display:block;margin-top:8px;max-width:220px;border-radius:10px;border:1px solid #d8e0dc}.instancebar{gap:12px}.instance-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.instancebar-actions{display:flex;gap:14px;flex-shrink:0;white-space:nowrap}.tab-icon{height:24px;display:flex;align-items:center;justify-content:center;line-height:1}.tab-label{line-height:1}.valueprops{list-style:none;padding:0;margin:4px 0 18px;text-align:left;font-size:13px;color:var(--muted)}.valueprops li{position:relative;padding-left:20px;margin:7px 0;line-height:1.35}.valueprops li:before{content:"✓";position:absolute;left:0;color:var(--green);font-weight:700}details.disclaimer>summary{cursor:pointer;font-size:12px;color:var(--muted);padding:6px 0}details.disclaimer>summary:hover{color:var(--green)}.deadline-note{background:var(--ok-bg);border-left:3px solid var(--green);border-radius:6px;padding:10px 12px;margin:10px 0 16px;font-size:13px;line-height:1.45}.export-block .row{align-items:center}.export-block .row .search{flex:1;min-width:0}.export-block .row button.primary{white-space:nowrap;flex-shrink:0}.record-meta .linkbtn{display:block;margin-top:2px}.ingredients-card{max-height:82vh;overflow-y:auto}.ingredients-card input{width:100%;margin-bottom:6px}.ingredient-row{border:1px solid var(--line);border-radius:10px;padding:10px;margin:10px 0;background:#fafafa}.ingredient-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.ingredient-row .row{display:flex;gap:8px;align-items:flex-end}.warn-note{background:var(--warn-bg);border-left:3px solid var(--warn);border-radius:6px;padding:9px 11px;margin:10px 0;font-size:12.5px;line-height:1.45}.modal-actions{display:flex;gap:8px;margin-top:12px}.modal-actions button{flex:1}.infopanel h3{margin:20px 0 6px;font-size:15px}.infopanel h3:first-child{margin-top:0}.infopanel>p.small{line-height:1.55}.coverage{border-collapse:collapse;width:100%;font-size:12px;margin:8px 0 4px}.coverage th,.coverage td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}.coverage th{background:var(--ok-bg);font-weight:600}.coverage .nowrap{white-space:nowrap;font-variant-numeric:tabular-nums}.doclist{list-style:none;padding:0;margin:8px 0 0}.doclist li{margin-bottom:8px}.doclink{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;background:#fff;border:1px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;text-decoration:none;color:inherit;font:inherit}.doclink:hover{border-color:var(--green)}.doc-title{font-weight:600;color:var(--green);font-size:13.5px}.infopanel-foot{margin-top:22px;padding-top:12px;border-top:1px solid var(--line)}.bug-fab{width:38px;height:38px;font-size:16px;background:#ffffffeb;border:1px solid var(--line);box-shadow:0 2px 8px #0000001a;opacity:.55;transition:opacity .15s ease,box-shadow .15s ease;bottom:78px}.bug-fab:hover,.bug-fab:focus-visible{opacity:1;box-shadow:0 4px 14px #00000029}.tab-label{font-size:10px;letter-spacing:-.1px}.tab{padding:8px 0}.combo-wrap{position:relative}.combo-wrap input{width:100%;box-sizing:border-box}.combo-spin{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:14px;pointer-events:none}.combo-list{position:absolute;z-index:40;left:0;right:0;top:calc(100% + 2px);margin:0;padding:4px;list-style:none;background:#fff;border:1px solid #d8e0dc;border-radius:10px;box-shadow:0 8px 24px #0d5b3d1f;max-height:260px;overflow-y:auto}.combo-opt{display:block;width:100%;text-align:left;background:none;border:none;padding:8px 10px;border-radius:8px;cursor:pointer}.combo-opt:hover,.combo-opt.active{background:#eef5f1}.combo-label{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:14px;color:var(--ink, #1c2b24)}.combo-badge{font-size:10px;text-transform:uppercase;letter-spacing:.04em;background:var(--green, #0d5b3d);color:#fff;padding:2px 6px;border-radius:999px;white-space:nowrap}.combo-hint{display:block;font-size:12px;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.combo-empty{padding:8px 10px;font-size:12px;color:var(--muted)}.food-note{margin-top:4px}
