:root{--bg: #faf7f1;--surface: #ffffff;--surface-2: #f4eee4;--border: #ebe2d5;--text: #2f2a25;--text-dim: #837a70;--accent: #c4603c;--accent-soft: #fbeee8;--accent-text: #ffffff;--protein: #b2543a;--carbs: #7c9a76;--fat: #d0983c;--fiber: #9a8bb0;--good: #6e9a6a;--warn: #d0983c;--bad: #c0533f;--shadow-sm: 0 1px 2px rgba(47, 42, 37, .04);--shadow: 0 1px 2px rgba(47, 42, 37, .04), 0 4px 12px rgba(47, 42, 37, .06);--shadow-lg: 0 2px 4px rgba(47, 42, 37, .05), 0 12px 28px rgba(47, 42, 37, .1);--tap: 56px;--radius: 18px;--radius-sm: 12px;--gap: 14px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);color-scheme:light}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,system-ui,sans-serif;font-size:17px;line-height:1.45;-webkit-font-smoothing:antialiased;overscroll-behavior-y:contain}h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}h1{font-size:26px}h2{font-size:20px}h3{font-size:17px}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum";font-weight:680;letter-spacing:-.02em}.num-hero{font-size:56px;line-height:1}.num-lg{font-size:28px;line-height:1.1}.dim{color:var(--text-dim)}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}button{font:inherit;color:inherit;cursor:pointer}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap);padding:0 20px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-text);font-weight:600;box-shadow:var(--shadow-sm);transition:transform .12s ease,opacity .12s ease}.btn:active{transform:scale(.97);opacity:.9}.btn-secondary{background:var(--surface-2);color:var(--text);box-shadow:none}.btn-ghost{background:transparent;color:var(--text-dim);box-shadow:none}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;min-height:var(--tap);width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.scanner-stage{position:relative;border-radius:var(--radius);overflow:hidden;background:#1a1613;aspect-ratio:3 / 4;box-shadow:var(--shadow)}.scanner-video{width:100%;height:100%;object-fit:cover;display:block}.scanner-canvas{display:none}.scanner-window{position:absolute;left:6%;right:6%;top:33.33%;height:33.33%;border:2px solid rgba(253,251,247,.9);border-radius:12px;box-shadow:0 0 0 100vmax #1a161373}.scanner-hint{position:absolute;left:0;right:0;bottom:16px;margin:0;text-align:center;color:#fdfbf7f2;font-size:15px;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.5)}.scanner-error{margin:14px 0 0;color:var(--bad);font-size:15px}.scanner-manual{margin-top:18px}.portion .card{margin-bottom:var(--gap)}.portion-head h2{margin-bottom:2px}.portion-brand,.portion-serving{margin:2px 0 0;font-size:15px}.unit-toggle{display:flex;gap:6px;padding:4px;background:var(--surface-2);border-radius:999px;margin-bottom:16px}.unit{flex:1;min-height:44px;border:none;border-radius:999px;background:transparent;color:var(--text-dim);font-weight:600}.unit-on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.unit:disabled{opacity:.4}.portion-amount{display:flex;align-items:baseline;gap:8px}.portion-input{width:6ch;padding:2px 0;font-size:44px;line-height:1.1;border:none;border-bottom:2px solid var(--border);border-radius:0;background:transparent;min-height:auto}.portion-input:focus{outline:none;border-bottom-color:var(--accent)}.portion-input::-webkit-outer-spin-button,.portion-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.portion-equiv{margin:8px 0 0;font-size:15px}.quick{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.chip{min-height:42px;padding:0 16px;border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--text);font-size:15px;font-weight:600}.chip-on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.macro-preview{display:flex;align-items:center;justify-content:space-between;gap:16px}.preview-cal .num-lg{font-size:34px}.preview-macros{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:15px}.preview-macros li{display:flex;align-items:center;gap:8px}.dot{width:9px;height:9px;border-radius:50%;flex:none}.dot-protein{background:var(--protein)}.dot-carbs{background:var(--carbs)}.dot-fat{background:var(--fat)}.dot-fiber{background:var(--fiber)}.meal-label{display:block;margin-bottom:10px;font-size:14px;font-weight:600}.meal-picker{display:flex;flex-wrap:wrap;gap:8px}.portion-actions{margin-bottom:var(--gap)}.portion-actions .btn{flex:1}.remove{width:100%;min-height:var(--tap);margin-bottom:var(--gap);border:none;border-radius:var(--radius-sm);background:transparent;font-weight:600}.remove:active{background:var(--accent-soft)}.add-title{margin-bottom:18px}.source-grid{display:grid;gap:10px}.source{display:flex;align-items:center;gap:14px;width:100%;min-height:68px;padding:0 16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm);text-align:left;transition:transform .12s ease}.source-primary{border-color:transparent;background:var(--accent);color:var(--accent-text);box-shadow:var(--shadow);min-height:76px}.source:active{transform:scale(.98)}.source-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;flex:none;border-radius:50%;background:var(--surface-2);color:var(--accent)}.source-primary .source-icon{background:#ffffff2e;color:var(--accent-text)}.source-text{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.source-label{font-size:17px;font-weight:650}.source-hint{font-size:13px;opacity:.75}.source-chevron{flex:none;font-size:22px;line-height:1;opacity:.5}.search-input{margin-bottom:12px;background:var(--surface);box-shadow:var(--shadow-sm);border-color:transparent}.filter-row{display:flex;gap:8px;margin-bottom:14px}.searching{padding:12px 2px;font-size:15px}.notice{margin:0 0 14px;padding:12px 14px;border-radius:var(--radius-sm);font-size:15px;line-height:1.4}.notice-bad{background:var(--accent-soft);color:var(--bad)}.food-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}.food-row{display:flex;align-items:stretch;gap:6px;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.food-main{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:14px 16px;min-height:var(--tap);border:none;background:transparent;text-align:left}.food-main:active{background:var(--surface-2)}.food-name{font-weight:600;line-height:1.3}.food-meta{font-size:14px}.star{width:52px;flex:none;border:none;background:transparent;color:var(--text-dim);font-size:22px}.star-on{color:var(--fat)}.day-nav{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:4px 0 16px}.day-label{flex:1;font-size:23px;text-align:center}.day-arrow{width:46px;height:46px;flex:none;border:none;border-radius:50%;background:transparent;color:var(--accent);font-size:28px;line-height:1}.day-arrow:disabled{color:var(--border)}.day-arrow:active:not(:disabled){background:var(--surface-2)}.notice-soft{background:var(--surface);color:var(--text-dim);box-shadow:var(--shadow-sm);margin-bottom:var(--gap);padding:12px 14px;border-radius:var(--radius-sm);font-size:15px;line-height:1.4}.ring-card{position:relative;display:flex;flex-direction:column;align-items:center;padding:20px 16px 16px;margin-bottom:var(--gap)}.ring-progress{transition:stroke-dashoffset .5s cubic-bezier(.22,1,.36,1)}.ring-centre{position:absolute;top:20px;height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.ring-caption{font-size:15px;font-weight:600;letter-spacing:.02em}.ring-detail{margin:10px 0 0;font-size:15px}.macros{display:grid;gap:14px;padding:16px;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:24px}.macro-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}.macro-label{font-size:15px;font-weight:600}.macro-emphasis .macro-label{font-size:17px;font-weight:700}.macro-emphasis .macro-numbers .num{font-size:19px}.macro-numbers{font-size:14px}.track{position:relative;height:10px;border-radius:5px;background:var(--surface-2);overflow:hidden}.macro-emphasis .track{height:14px;border-radius:7px}.band{position:absolute;top:0;bottom:0;background:#2f2a2517}.fill{position:absolute;top:0;bottom:0;left:0;border-radius:inherit;transition:width .45s cubic-bezier(.22,1,.36,1)}.fill-protein{background:var(--protein)}.fill-carbs{background:var(--carbs)}.fill-fat{background:var(--fat)}.meals{display:grid;gap:var(--gap)}.meal-card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 14px 6px}.meal-card-empty{background:transparent;box-shadow:none;border:1px dashed var(--border);padding-bottom:14px}.meal-head{display:flex;align-items:baseline;gap:10px;padding-bottom:10px;border-bottom:1px solid var(--border)}.meal-card-empty .meal-head{padding-bottom:0;border-bottom:none}.meal-title{font-size:17px;letter-spacing:-.01em}.meal-subtotal{flex:1;font-size:14px;text-align:right}.meal-protein{color:var(--protein)}.meal-add{width:32px;height:32px;flex:none;align-self:center;border:1px solid var(--border);border-radius:50%;background:transparent;color:var(--accent);font-size:19px;line-height:1}.meal-add:active{background:var(--accent-soft)}.meal-empty{margin:8px 0 0;font-size:15px}.entries{list-style:none;margin:0;padding:0}.entries li+li{border-top:1px solid var(--border)}.entry{display:flex;align-items:center;gap:12px;width:100%;padding:12px 0;border:none;background:transparent;text-align:left}.entry:active{background:var(--surface-2)}.entry-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.entry-name{font-weight:600;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-meta{font-size:14px}.entry-macros{display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:none}.entry-protein{font-size:13px;color:var(--protein);font-weight:600}.entry-chevron{flex:none;color:var(--text-dim);font-size:20px;line-height:1;opacity:.7}.fab-clearance{height:84px}.weigh-form h2{margin-bottom:12px}.weigh-amount{display:flex;align-items:baseline;gap:8px;margin-bottom:16px}.weigh-input{width:6ch;padding:2px 0;font-size:44px;line-height:1.1;border:none;border-bottom:2px solid var(--border);border-radius:0;background:transparent;min-height:auto}.weigh-input:focus{outline:none;border-bottom-color:var(--accent)}.weigh-input::-webkit-outer-spin-button,.weigh-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.med-field{margin:0 0 12px;padding:0;border:none}.med-field legend{padding:0;margin-bottom:8px;font-size:14px;font-weight:600;color:var(--text-dim)}.range-toggle{display:flex;gap:4px;padding:3px;background:var(--surface-2);border-radius:999px}.range{min-height:36px;padding:0 14px;border:none;border-radius:999px;background:transparent;color:var(--text-dim);font-size:14px;font-weight:600}.range-on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.chart-summary{margin:4px 0 12px;line-height:1.4}.chart{margin:0 -4px}.chart-note{margin:10px 0 0;font-size:14px;line-height:1.45}.checkin{margin:14px 0 0;padding:12px 14px;border-radius:var(--radius-sm);background:var(--surface-2);font-size:15px;line-height:1.45}.checkin-hold{background:var(--accent-soft);color:var(--text)}.tooltip{display:flex;flex-direction:column;gap:2px;padding:10px 12px;background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);font-size:14px;line-height:1.35}.day-entries{margin-top:var(--gap)}.history-empty{padding:24px 8px}.back{padding:0;min-height:auto;font-size:17px;font-weight:600;color:var(--accent);background:none;border:none}.editor-title{margin-bottom:4px}.editor-note{margin:0 0 18px;font-size:15px}.recon{margin-bottom:var(--gap);border-left:4px solid var(--good)}.recon-off{border-left-color:var(--warn)}.recon-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:3px 0}.recon-delta{margin-top:6px;padding-top:10px;border-top:1px solid var(--border);font-weight:650}.recon-off .recon-delta .num{color:var(--warn)}.recon-ok .recon-delta .num{color:var(--good)}.recon-hint{margin:10px 0 0;font-size:14px}.field-card{margin-bottom:var(--gap)}.field-emphasis{border-left:4px solid var(--protein)}.field-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.field-head h2{display:flex;align-items:center;gap:8px}.pill{font-size:11px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--protein);background:var(--accent-soft);padding:3px 8px;border-radius:999px}.lock{min-height:38px;padding:0 14px;border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--text-dim);font-size:14px;font-weight:600}.lock-on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.field-value{display:flex;align-items:baseline;gap:8px}.value-input{width:8ch;padding:4px 0;font-size:40px;line-height:1.1;border:none;border-bottom:2px solid var(--border);border-radius:0;background:transparent;min-height:auto}.value-input:focus{outline:none;border-bottom-color:var(--accent)}.value-input::-webkit-outer-spin-button,.value-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.unit{font-size:17px}.slider{width:100%;margin:16px 0 6px;padding:0;min-height:auto;border:none;background:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.slider::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:var(--surface-2)}.slider::-webkit-slider-thumb{-webkit-appearance:none;width:30px;height:30px;margin-top:-12px;border-radius:50%;background:var(--accent);box-shadow:var(--shadow-sm)}.slider-protein::-webkit-slider-thumb{background:var(--protein)}.slider-carbs::-webkit-slider-thumb{background:var(--carbs)}.slider-fat::-webkit-slider-thumb{background:var(--fat)}.band-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:10px}.band-row .dim{font-size:15px}.band-control{display:flex;align-items:center;gap:4px}.stepper{width:40px;height:40px;border:1px solid var(--border);border-radius:50%;background:transparent;color:var(--text);font-size:20px;line-height:1}.stepper:active{background:var(--surface-2)}.band-value{min-width:5ch;text-align:center;font-size:17px}.suggestion{margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}.suggestion ul{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:6px}.suggestion li{display:flex;justify-content:space-between;gap:12px}.save{margin:4px 0 var(--gap)}.history ul{list-style:none;margin:0;padding:0;display:grid;gap:10px}.history li{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:15px}.ingredients-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.small{min-height:40px;padding:0 14px;font-size:15px}.danger{color:var(--bad)}.ingredient-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.ingredient-list li{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.ingredient-list li:last-child{border-bottom:none}.ingredient-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.ingredient-name{font-weight:600;line-height:1.3}.ingredient-meta{font-size:14px}textarea{resize:vertical;min-height:64px}.hint{margin:12px 0 0;padding:11px 13px;background:var(--surface-2);border-radius:var(--radius-sm);color:var(--text-dim);font-size:14px;line-height:1.45}.totals-card .batch-line{margin:4px 0 0;line-height:1.5}.recipe-list{list-style:none;margin:var(--gap) 0 0;padding:0;display:grid;gap:var(--gap)}.recipe-card{margin:0}.recipe-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}.recipe-meta{margin:2px 0 0;font-size:15px}.recipe-actions{display:flex;align-items:center;gap:8px;margin-top:14px}.confirm{margin-top:var(--gap);border-left:4px solid var(--bad)}.confirm p{margin:0 0 14px;line-height:1.45}.confirm .btn{flex:1}.card+.card{margin-top:var(--gap)}.card h2{margin-bottom:6px}.setting-note{margin:0 0 14px;font-size:15px;line-height:1.4}.field{display:block;margin-bottom:12px}.field span{display:block;margin-bottom:6px;font-size:14px;font-weight:600;color:var(--text-dim)}.row{display:flex;gap:10px}.row .btn{flex:1}.full{width:100%;margin-top:14px}.check{margin:12px 0 0;font-size:15px}.check-ok{color:var(--good)}.check-bad{color:var(--bad)}.status{margin:18px 0 0;display:grid;gap:10px}.status div{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.status dt{color:var(--text-dim);font-size:15px}.status dd{margin:0;font-weight:600;text-align:right}.app{display:flex;flex-direction:column;min-height:100%}.app-body{flex:1;padding:calc(var(--safe-top) + 8px) 16px calc(var(--safe-bottom) + 88px);max-width:640px;width:100%;margin:0 auto}.screen-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 18px}.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:center;gap:4px;padding:6px 8px calc(var(--safe-bottom) + 6px);background:#faf7f1eb;backdrop-filter:saturate(1.6) blur(14px);-webkit-backdrop-filter:saturate(1.6) blur(14px);border-top:1px solid var(--border)}.tab{flex:1;max-width:140px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;min-height:var(--tap);border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-dim);font-size:11px;font-weight:600;transition:color .15s ease}.tab-active{color:var(--accent)}.fab{position:fixed;right:18px;bottom:calc(var(--safe-bottom) + 84px);width:62px;height:62px;border:none;border-radius:50%;background:var(--accent);color:var(--accent-text);box-shadow:var(--shadow-lg);display:flex;align-items:center;justify-content:center;transition:transform .14s ease;z-index:5}.fab:active{transform:scale(.93)}.empty{text-align:center;color:var(--text-dim);padding:40px 20px}
