:root{--bg:#f4f4f4;--surface:#fff;--surface-2:#efefef;--border:#e0e0e0;--text:#0a0a0a;--text-2:#5e5e5e;--accent:#0a0a0a;--accent-text:#fff;--accent-soft:#ebebeb;--protein:#c2410c;--carbs:#1d4ed8;--fat:#a16207;--danger:#b91c1c;--warn-bg:#efefef;--warn-text:#0a0a0a;--chart-trend:#0a0a0a;--chart-scale:#8c8c8c;--chart-grid:#ebebeb;--radius:14px;--tap:48px;--tabbar-h:60px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#000;--surface:#111;--surface-2:#1c1c1c;--border:#2a2a2a;--text:#f5f5f5;--text-2:#a0a0a0;--accent:#f5f5f5;--accent-text:#000;--accent-soft:#262626;--protein:#fb923c;--carbs:#60a5fa;--fat:#facc15;--danger:#f87171;--warn-bg:#1c1c1c;--warn-text:#f5f5f5;--chart-trend:#f5f5f5;--chart-scale:#8a8a8a;--chart-grid:#262626}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0;font:16px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,system-ui,sans-serif}button,input,select,textarea{font:inherit;color:inherit}input,select,textarea{font-size:16px}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.app{min-height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left)}.page{max-width:640px;padding:16px 16px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 24px);margin:0 auto}.page-header{justify-content:space-between;align-items:center;gap:12px;margin:4px 0 16px;display:flex}.page-header h1{letter-spacing:-.01em;margin:0;font-size:28px;line-height:1.15}.tabbar{z-index:10;padding:0 env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);background:color-mix(in srgb, var(--surface) 92%, transparent);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);grid-template-columns:repeat(4,1fr);display:grid;position:fixed;inset:auto 0 0}.tabbar a{height:var(--tabbar-h);color:var(--text-2);flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:11px;font-weight:600;text-decoration:none;display:flex}.tabbar a.active{color:var(--accent)}.tabbar svg{width:26px;height:26px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:12px;padding:16px}.card h2{margin:0 0 12px;font-size:17px}.muted{color:var(--text-2)}.small{font-size:14px}.stack{gap:14px;display:grid}.row{align-items:center;gap:12px;display:flex}.row>*{flex:1;min-width:0}.btn{min-height:var(--tap);border:1px solid var(--border);background:var(--surface-2);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:0 20px;font-weight:600;display:inline-flex}.btn.primary{background:var(--accent);color:var(--accent-text);border-color:#0000}.btn.block{width:100%}.btn svg{flex:none;width:20px;height:20px}.btn.link{color:var(--accent);background:0 0;border:none;padding:0 8px;text-decoration:none}a.btn{color:inherit;text-decoration:none}a.btn.primary{color:var(--accent-text)}a.btn.link{color:var(--accent)}.btn:disabled{opacity:.45;cursor:default}.field{gap:6px;display:grid}.field>span{color:var(--text-2);font-size:14px;font-weight:600}.input-wrap{align-items:center;display:flex;position:relative}.input,select.input{width:100%;min-height:var(--tap);border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:0 14px}.input-wrap .unit{color:var(--text-2);pointer-events:none;position:absolute;right:14px}.input-wrap .input{padding-right:56px}.field .error{color:var(--danger);font-size:13px}.field .hint{color:var(--text-2);font-size:13px}.segmented{background:var(--surface-2);border-radius:12px;grid-auto-columns:1fr;grid-auto-flow:column;gap:4px;padding:4px;display:grid}.segmented button{min-height:44px;color:var(--text-2);cursor:pointer;background:0 0;border:none;border-radius:9px;font-weight:600}.segmented button[aria-checked=true]{background:var(--surface);color:var(--text);box-shadow:0 1px 2px #0000001f}.choice-list{gap:8px;display:grid}.choice{text-align:left;width:100%;min-height:var(--tap);border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:12px;flex-direction:column;align-items:flex-start;padding:10px 14px;display:flex}.choice[aria-checked=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.choice strong{font-weight:600}.choice small{color:var(--text-2)}.note{background:var(--warn-bg);color:var(--warn-text);border:1px solid var(--border);border-left:3px solid var(--text);border-radius:12px;padding:10px 14px;font-size:14px}.stats{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;display:grid}.stat{background:var(--surface-2);border-radius:12px;padding:12px}.stat .label{color:var(--text-2);font-size:13px;font-weight:600}.stat .value{font-variant-numeric:tabular-nums;font-size:22px;font-weight:700}.stat .value small{color:var(--text-2);font-size:14px;font-weight:600}.dot{border-radius:50%;width:9px;height:9px;margin-right:6px;display:inline-block}.steps{gap:6px;margin-bottom:20px;display:flex}.steps span{background:var(--border);border-radius:2px;flex:1;height:4px}.steps span.on{background:var(--accent)}.empty{text-align:center;color:var(--text-2);padding:32px 16px}.empty svg{opacity:.6;width:40px;height:40px}.sticky-actions{padding:12px 0 calc(12px + env(safe-area-inset-bottom));background:linear-gradient(to top, var(--bg) 70%, transparent);gap:10px;display:flex;position:sticky;bottom:0}.sticky-actions .btn{flex:1}dl.kv{grid-template-columns:1fr auto;gap:8px 12px;margin:0;display:grid}dl.kv dt{color:var(--text-2)}dl.kv dd{text-align:right;font-variant-numeric:tabular-nums;margin:0;font-weight:600}.error-text{color:var(--danger);margin:-6px 0 0;font-size:13px}.sheet{background:var(--surface);width:100%;max-width:640px;max-height:92dvh;color:var(--text);border:none;border-radius:20px 20px 0 0;margin:auto auto 0;padding:0}.sheet::backdrop{background:#00000073}.sheet-body{padding:8px 16px calc(16px + env(safe-area-inset-bottom));gap:14px;display:grid}.sheet-header{background:var(--surface);justify-content:space-between;align-items:center;padding-top:8px;display:flex;position:sticky;top:0}.sheet-header h2{margin:0;font-size:18px}@media (width>=700px){.sheet{border-radius:20px;margin:auto}}.ring{flex:none;position:relative}.ring svg{width:100%;height:100%;display:block}.ring circle{transition:stroke-dasharray .3s}.ring-label{text-align:center;place-content:center;display:grid;position:absolute;inset:0}.ring-label strong{font-variant-numeric:tabular-nums;font-size:24px;line-height:1.1}.ring-label span{color:var(--text-2);font-size:12px;font-weight:600}.macro-bar{gap:4px;display:grid}.macro-bar-head{justify-content:space-between;font-size:14px;font-weight:600;display:flex}.bar{background:var(--surface-2);border-radius:4px;height:8px;overflow:hidden}.bar>div{border-radius:4px;height:100%;transition:width .3s}.num{font-variant-numeric:tabular-nums;color:var(--text)}.totals{align-items:center;gap:16px;display:flex}.totals .macros{flex:1;gap:10px;min-width:0;display:grid}.totals-foot{color:var(--text-2);justify-content:space-between;margin-top:12px;font-size:14px;display:flex}.date-nav{grid-template-columns:var(--tap) 1fr var(--tap);align-items:center;gap:4px;margin:0 0 12px;display:grid}.icon-btn{width:var(--tap);height:var(--tap);color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:12px;place-items:center;display:grid}.icon-btn:hover{background:var(--surface-2)}.icon-btn svg{width:24px;height:24px}.date-label{text-align:center;min-height:var(--tap);border-radius:12px;place-content:center;display:grid;position:relative}.date-label strong{font-size:22px;line-height:1.15}.date-label small{color:var(--text-2);font-size:13px}.date-label input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.date-label:focus-within{outline:3px solid var(--accent)}.meal{padding:0;overflow:hidden}.meal-head{align-items:center;gap:8px;padding:6px 6px 6px 16px;display:flex}.meal-head h2{flex:1;margin:0;font-size:17px}.meal-head .kcal{color:var(--text-2);font-variant-numeric:tabular-nums;font-size:14px;font-weight:600}.entry{border:none;border-top:1px solid var(--border);text-align:left;cursor:pointer;background:0 0;align-items:center;gap:12px;width:100%;min-height:56px;padding:8px 16px;display:flex}.entry:hover{background:var(--surface-2)}.entry .main{flex:1;min-width:0}.entry .name{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.entry .sub{color:var(--text-2);font-size:13px}.entry .kcal{font-variant-numeric:tabular-nums;font-weight:600}.add-row{width:100%;min-height:var(--tap);border:none;border-top:1px solid var(--border);color:var(--accent);cursor:pointer;background:0 0;align-items:center;gap:8px;padding:0 16px;font-weight:600;text-decoration:none;display:flex}.add-row svg{width:20px;height:20px}.switch-row{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:12px;width:100%;padding:0;display:flex}.switch-row .text{flex:1}.switch{background:var(--border);border-radius:16px;flex:none;width:52px;height:32px;transition:background .2s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:26px;height:26px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.switch-row[aria-checked=true] .switch{background:var(--accent)}.switch-row[aria-checked=true] .switch:after{background:var(--accent-text);transform:translate(20px)}.tabs{scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:6px;margin:0 -16px 12px;padding:0 16px;display:flex;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tabs button{border:1px solid var(--border);background:var(--surface);min-height:44px;color:var(--text-2);cursor:pointer;white-space:nowrap;border-radius:20px;flex:auto;padding:0 8px;font-size:14px;font-weight:600}.tabs button[aria-selected=true]{background:var(--text);color:var(--bg);border-color:var(--text)}.food-list{padding:0;overflow:hidden}.food-row{border-top:1px solid var(--border);align-items:center;display:flex}.food-row:first-child{border-top:none}.food-row .entry{border-top:none;flex:1;width:auto;min-width:0}.quick-log{width:var(--tap);height:var(--tap);background:var(--accent-soft);color:var(--accent);cursor:pointer;border:none;border-radius:50%;flex:none;place-items:center;margin-right:8px;display:grid}.quick-log svg{width:22px;height:22px}.star{color:var(--fat)}.toast{left:50%;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 16px);z-index:20;background:var(--text);color:var(--bg);border-radius:12px;width:max-content;max-width:calc(100% - 32px);padding:10px 16px;font-size:14px;font-weight:600;position:fixed;transform:translate(-50%);box-shadow:0 4px 16px #00000040}.back-header{align-items:center;gap:4px;margin:0 0 12px -8px;display:flex}.back-header h1{flex:1;margin:0;font-size:22px}.macro-preview{text-align:center;grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.macro-preview div{background:var(--surface-2);border-radius:12px;padding:8px 4px}.macro-preview strong{font-variant-numeric:tabular-nums;font-size:18px;display:block}.macro-preview span{color:var(--text-2);font-size:12px;font-weight:600}.btn.danger{color:var(--danger)}.text-input{width:100%;min-height:var(--tap);border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:0 14px}input.text-input[type=date]{appearance:none;min-width:0;max-width:100%;height:var(--tap);line-height:var(--tap);text-align:left;display:block}input.text-input[type=date]::-webkit-date-and-time-value{text-align:left;margin:0}input.text-input[type=date]::-webkit-datetime-edit{padding:0}.search-bar{gap:8px;margin-bottom:12px;display:flex}.search-input{flex:1;position:relative}.search-input svg{width:20px;height:20px;color:var(--text-2);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.search-input input{appearance:none;padding-left:40px;padding-right:44px}.search-input input::-webkit-search-cancel-button{display:none}.search-input .clear{width:44px;height:44px;position:absolute;top:50%;right:2px;transform:translateY(-50%)}.search-input .clear svg{position:static;transform:none}.scan-btn{width:var(--tap);flex:none;padding:0}.section-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);margin:16px 4px 8px;font-size:13px}.scanner{z-index:50;color:#fff;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);background:#000;flex-direction:column;display:flex;position:fixed;inset:0}.scanner-top{justify-content:flex-end;padding:8px;display:flex}.scanner-close{color:#fff}.scanner-close:hover{background:#ffffff26}.scanner-view{flex:1;min-height:0;position:relative;overflow:hidden}.scanner-view video{object-fit:cover;width:100%;height:100%}.scanner-frame{aspect-ratio:16/9;border:3px solid #fff;border-radius:16px;width:min(78%,360px);position:absolute;top:45%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 9999px #00000073}.scanner-hint{text-align:center;text-shadow:0 1px 3px #000;margin:0;font-weight:600;position:absolute;bottom:16px;left:16px;right:16px}.scanner-manual{background:var(--surface);color:var(--text);padding:16px}.legend{color:var(--text-2);gap:16px;margin:0 0 8px;font-size:13px;font-weight:600;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.swatch-dot{background:var(--chart-scale);border-radius:50%;width:9px;height:9px}.swatch-line{background:var(--chart-trend);border-radius:1px;width:16px;height:2px}.chart-box{height:220px;margin:0 -8px 0 -12px}.chart-tip{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-size:13px;box-shadow:0 4px 12px #00000026}.chart-tip strong{margin-bottom:2px;display:block}.chart-tip div{color:var(--text-2);align-items:center;gap:6px;display:flex}.chart-tip b{color:var(--text);font-variant-numeric:tabular-nums}.history{padding:0;overflow:hidden}.history .entry .kcal{text-align:right}.change-up{color:var(--text)}.segmented button{white-space:nowrap;padding:0 10px}.stats.three{grid-template-columns:repeat(3,minmax(0,1fr))}.stats.three .value{font-size:19px}.explanation{margin:0;font-size:17px;line-height:1.5}.kcal-change{color:var(--text-2);align-items:baseline;gap:8px;font-weight:600;display:flex}.kcal-change .num{color:var(--text);font-size:34px;font-weight:700}.pill{background:var(--surface-2);color:var(--text-2);white-space:nowrap;border-radius:999px;padding:3px 10px;font-size:13px;font-weight:600;display:inline-block}.pill.up,.pill.down{background:var(--accent-soft);color:var(--text)}.macro-change{border-top:1px solid var(--border);grid-template-columns:1fr auto auto;gap:8px;padding:8px 0;font-size:15px;display:grid}.reasons{gap:6px;margin:0;padding-left:20px;display:grid}.card.due{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.swatch-line.alt{background:var(--chart-scale)}.legend i{display:inline-block}.tab-badge{background:var(--danger);width:9px;height:9px;box-shadow:0 0 0 2px var(--surface);border-radius:50%;position:absolute;top:8px;left:calc(50% + 8px)}.tabbar a{position:relative}.due-banner{color:var(--text);align-items:center;gap:12px;text-decoration:none;display:flex}.due-banner .main{flex:1}.due-banner svg{width:22px;height:22px;color:var(--accent);flex:none}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.link-row{min-height:var(--tap);color:var(--text);align-items:center;gap:12px;text-decoration:none;display:flex}.link-row>span{flex:1}.link-row svg{width:22px;height:22px;color:var(--text-2)}a{color:var(--accent)}.steps-list{gap:10px;margin:0;padding-left:22px;display:grid}.inline-icon{vertical-align:-5px;color:var(--accent);display:inline-flex}.inline-icon svg{width:20px;height:20px}.install-hint{align-items:center;gap:12px;padding:10px 6px 10px 14px;font-size:15px;display:flex}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.sync-pill{z-index:11;right:max(12px, env(safe-area-inset-right));bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 8px);background:var(--surface);border:1px solid var(--border);min-height:28px;color:var(--text-2);border-radius:14px;align-items:center;gap:5px;padding:0 10px 0 8px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex;position:fixed;box-shadow:0 2px 8px #00000014}.sync-pill svg{width:15px;height:15px}.sync-pill.synced svg{color:var(--accent)}.sync-pill.pending svg,.sync-pill.syncing svg{color:var(--text-2)}.sync-pill.error{color:var(--danger);border-color:var(--danger)}.sync-pill.syncing svg{animation:1.2s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.35}}.page{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 56px)}.code-input{letter-spacing:.3em;font-variant-numeric:tabular-nums;font-size:22px}.ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:60vw;overflow:hidden}.gate{text-align:center;min-height:100dvh;padding:calc(env(safe-area-inset-top) + 24px) 16px calc(env(safe-area-inset-bottom) + 24px);place-items:center;display:grid}.gate-inner{width:100%;max-width:400px}.gate-logo{border-radius:18px;margin:0 auto 16px;display:block}.gate h1{margin:0 0 4px;font-size:28px}.chart-head{gap:12px;margin-bottom:12px;display:grid}
