:root{--bg: #f6f6f4;--bg-raised: #ffffff;--bg-sunken: #ececea;--ink: #141412;--ink-2: #6d6d68;--ink-3: #a3a39c;--line: rgba(20, 20, 18, .07);--accent: #2563eb;--accent-soft: #e9effd;--green: #3d9a50;--green-soft: #e8f3ea;--amber: #c58200;--amber-soft: #f7efdf;--red: #d64545;--red-soft: #fbecec;--shadow-card: 0 1px 2px rgba(20, 20, 18, .03), 0 4px 14px rgba(20, 20, 18, .04);--shadow-float: 0 4px 12px rgba(20, 20, 18, .08), 0 16px 48px rgba(20, 20, 18, .12);--radius: 20px;--radius-sm: 12px;--spring: cubic-bezier(.32, 1.4, .5, 1);--ease: cubic-bezier(.25, .1, .25, 1);--sat: env(safe-area-inset-top, 0px);--sab: env(safe-area-inset-bottom, 0px);--kb-inset: 0px}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overscroll-behavior:none;-webkit-tap-highlight-color:transparent}#root{height:100%}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer;touch-action:manipulation}input,textarea,select{font:inherit;color:inherit}.shell{position:relative;height:100%;max-width:430px;margin:0 auto;display:flex;flex-direction:column;overflow:hidden;background:var(--bg)}@media (min-width: 500px){body{background:var(--bg-sunken);display:grid;place-items:center}#root{height:auto;width:100%;display:grid;place-items:center;padding:24px 0}.shell{height:min(880px,calc(100vh - 48px));aspect-ratio:430 / 880;width:auto;border-radius:44px;box-shadow:var(--shadow-float),0 0 0 1px var(--line)}}.screen{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:calc(var(--sat) + 20px) 20px calc(var(--sab) + 110px + var(--kb-inset));animation:fade-up .45s var(--ease) backwards}.screen::-webkit-scrollbar{display:none}@keyframes fade-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}.display{font-size:42px;font-weight:800;letter-spacing:-.03em;line-height:1.05}h1{font-size:28px;font-weight:800;letter-spacing:-.025em;line-height:1.15}h2{font-size:20px;font-weight:700;letter-spacing:-.02em}h3{font-size:15px;font-weight:650;letter-spacing:-.01em}.muted{color:var(--ink-2)}.small{font-size:13px}.tiny{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.card{background:var(--bg-raised);border-radius:var(--radius);box-shadow:var(--shadow-card);border:1px solid var(--line);padding:18px}.row{display:flex;align-items:center;gap:12px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.divider{height:1px;background:var(--line);margin:14px 0}.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:16px 20px;border-radius:16px;font-size:16px;font-weight:700;letter-spacing:-.01em;transition:transform .15s var(--spring),opacity .15s ease,background .2s ease}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.4;pointer-events:none}.btn-primary{background:var(--ink);color:var(--bg)}.btn-accent{background:var(--accent);color:#fff}.btn-ghost{background:var(--bg-sunken);color:var(--ink)}.btn-text{width:auto;padding:8px 12px;background:none;color:var(--ink-2);font-size:14px;font-weight:600}.chip{padding:9px 16px;border-radius:999px;background:var(--bg-sunken);border:1.5px solid transparent;font-size:14px;font-weight:600;color:var(--ink-2);transition:all .18s var(--ease);white-space:nowrap}.chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.option-card{width:100%;text-align:left;padding:16px 18px;border-radius:16px;background:var(--bg-raised);border:1.5px solid var(--line);box-shadow:var(--shadow-card);transition:all .18s var(--ease);display:flex;align-items:center;gap:14px}.option-card:active{transform:scale(.98)}.option-card.on{border-color:var(--accent);background:var(--accent-soft)}.radio{width:22px;height:22px;border-radius:50%;flex-shrink:0;border:2px solid var(--line);background:var(--bg-raised);transition:border .18s ease;display:inline-block}.radio.on{border:6.5px solid var(--accent)}.option-card .oc-title{font-weight:700;font-size:16px;letter-spacing:-.01em}.option-card .oc-sub{font-size:13px;color:var(--ink-2);margin-top:2px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;font-weight:650;color:var(--ink-2);margin-bottom:7px}.input{width:100%;padding:15px 16px;border-radius:14px;border:1.5px solid var(--line);background:var(--bg-raised);font-size:17px;font-weight:600;outline:none;transition:border-color .15s ease;-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.input::-webkit-inner-spin-button{display:none}.input:focus{border-color:var(--accent)}.input::placeholder{color:var(--ink-3);font-weight:500}.ring-wrap{position:relative;display:grid;place-items:center}.ring-center{position:absolute;display:flex;flex-direction:column;align-items:center;text-align:center}.ring-track{stroke:var(--bg-sunken)}.ring-fill{transition:stroke-dashoffset .9s var(--ease),stroke .4s ease;stroke-linecap:round}.macro{flex:1;min-width:0}.macro-track{height:6px;border-radius:3px;background:var(--bg-sunken);overflow:hidden;margin-top:7px}.macro-fill{height:100%;border-radius:3px;background:var(--ink);transition:width .8s var(--ease)}.meal-row{display:flex;align-items:center;gap:14px;padding:14px 0;animation:fade-up .35s var(--ease) backwards}.meal-row+.meal-row{border-top:1px solid var(--line)}.meal-thumb{width:52px;height:52px;border-radius:15px;background:var(--bg-sunken);display:grid;place-items:center;font-size:26px;flex-shrink:0;overflow:hidden}.meal-thumb img{width:100%;height:100%;object-fit:cover}.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;font-size:11.5px;font-weight:700;letter-spacing:.02em}.badge-high{background:var(--green-soft);color:var(--green)}.badge-medium{background:var(--amber-soft);color:var(--amber)}.badge-low{background:var(--red-soft);color:var(--red)}.tabbar{position:absolute;bottom:0;left:0;right:0;display:grid;grid-template-columns:1fr 1fr auto 1fr 1fr;align-items:center;justify-items:center;padding:8px 10px calc(var(--sab) + 10px);background:color-mix(in srgb,var(--bg) 86%,transparent);-webkit-backdrop-filter:blur(22px) saturate(1.5);backdrop-filter:blur(22px) saturate(1.5);border-top:1px solid var(--line);z-index:20}.shell:has(.sheet) .tabbar,.shell:has(.scan-stage) .tabbar{visibility:hidden;pointer-events:none}.tab{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 10px;border-radius:12px;color:var(--ink-3);font-size:10px;font-weight:650;letter-spacing:.02em;transition:color .2s ease,transform .15s var(--spring)}.tab:active{transform:scale(.92)}.tab.on{color:var(--ink)}.tab svg{width:23px;height:23px}.scan-fab{width:56px;height:56px;margin:0 4px;border-radius:19px;background:var(--accent);color:#fff;display:grid;place-items:center;box-shadow:0 0 0 5px var(--bg);transition:transform .2s var(--spring)}.scan-fab:active{transform:scale(.9)}.scan-fab svg{width:26px;height:26px}.sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f0e0c73;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:40;animation:fade-in .25s ease both;touch-action:none}.sheet{position:absolute;left:0;right:0;bottom:0;z-index:50;background:var(--bg-raised);border-radius:28px 28px 0 0;box-shadow:var(--shadow-float);padding:12px 20px calc(var(--sab) + 20px);max-height:88%;display:flex;flex-direction:column;overscroll-behavior:contain;animation:sheet-fade-in .3s ease both}@media (min-width: 500px){.sheet{border-radius:28px 28px 44px 44px}}@keyframes sheet-fade-in{0%{opacity:.4}to{opacity:1}}.sheet-grab-area{flex-shrink:0;padding:10px 0 14px;margin:-10px 0 0;touch-action:none;cursor:grab}.sheet-grab{width:38px;height:5px;border-radius:3px;background:var(--line);margin:0 auto}.sheet-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-bottom:var(--kb-inset)}.sheet-body::-webkit-scrollbar{display:none}.switch{position:relative;width:46px;height:28px;border-radius:999px;background:var(--bg-sunken);border:1px solid var(--line);transition:background .2s ease;flex-shrink:0}.switch:after{content:"";position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 4px #00000040;transition:transform .22s var(--spring)}.switch.on{background:var(--accent);border-color:var(--accent)}.switch.on:after{transform:translate(18px)}.slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;background:var(--bg-sunken);outline:none}.slider::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;border-radius:50%;background:var(--bg-raised);border:2px solid var(--accent);box-shadow:0 2px 8px #0000002e;cursor:grab}.slider::-moz-range-thumb{width:26px;height:26px;border-radius:50%;background:var(--bg-raised);border:2px solid var(--accent);box-shadow:0 2px 8px #0000002e;cursor:grab}.scan-stage{position:absolute;top:0;right:0;bottom:0;left:0;z-index:60;background:var(--bg);display:flex;flex-direction:column;animation:fade-in .2s ease both}.scan-mode-switcher{position:absolute;left:20px;right:20px;bottom:calc(var(--sab) + 20px);z-index:5}.scan-preview{position:relative;flex:1;margin:calc(var(--sat) + 64px) 20px 20px;border-radius:28px;overflow:hidden;background:var(--bg-sunken);display:grid;place-items:center}.scan-preview img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.scan-laser{position:absolute;left:8%;right:8%;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--accent) 30%,#a5c0f7 50%,var(--accent) 70%,transparent);animation:laser 2.2s ease-in-out infinite}@keyframes laser{0%,to{top:12%}50%{top:86%}}.scan-status{display:inline-flex;align-items:center;gap:10px;padding:12px 20px;border-radius:999px;background:color-mix(in srgb,var(--bg-raised) 88%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:var(--shadow-float);font-size:14.5px;font-weight:650;position:absolute;bottom:18px;left:16px;right:16px;margin-inline:auto;width:fit-content;max-width:100%;text-align:center;animation:pop .35s var(--spring) both}.spinner{width:17px;height:17px;border-radius:50%;border:2.5px solid var(--accent-soft);border-top-color:var(--accent);animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.seg{display:flex;background:var(--bg-sunken);border-radius:14px;padding:4px;gap:4px}.seg button{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px 0;border-radius:10px;font-size:13px;font-weight:650;color:var(--ink-2);transition:all .18s var(--ease)}.seg button.on{background:var(--bg-raised);color:var(--ink);box-shadow:var(--shadow-card)}.seg svg{width:15px;height:15px}.set-chip{width:42px;height:42px;border-radius:13px;border:1.5px solid var(--line);background:var(--bg-raised);font-weight:750;font-size:13px;display:grid;place-items:center;color:var(--ink-3);transition:all .18s var(--spring);font-variant-numeric:tabular-nums}.set-chip:active{transform:scale(.88)}.set-chip.done{background:var(--ink);color:var(--bg);border-color:var(--ink)}.streak{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:14px;font-weight:750}.obar{display:flex;gap:5px;margin-bottom:28px}.obar span{height:4px;flex:1;border-radius:2px;background:var(--bg-sunken);transition:background .3s ease}.obar span.on{background:var(--accent)}.plan{width:100%;text-align:left;padding:17px 18px;border-radius:18px;border:2px solid var(--line);background:var(--bg-raised);transition:all .18s var(--ease);position:relative}.plan.on{border-color:var(--accent);background:var(--accent-soft)}.plan-save{position:absolute;top:-11px;right:14px;background:var(--accent);color:#fff;font-size:11px;font-weight:800;letter-spacing:.04em;padding:4px 10px;border-radius:999px}.chart-bar{transition:height .6s var(--ease);border-radius:4px 4px 2px 2px}.toast{position:absolute;top:calc(var(--sat) + 16px);left:50%;transform:translate(-50%);z-index:100;display:flex;align-items:center;gap:9px;padding:12px 18px;border-radius:999px;background:var(--ink);color:var(--bg);font-size:14px;font-weight:650;box-shadow:var(--shadow-float);animation:toast-in .4s var(--spring) both;white-space:nowrap}@keyframes toast-in{0%{transform:translate(-50%,-20px);opacity:0}to{transform:translate(-50%);opacity:1}}.logo-mark{display:inline-grid;place-items:center;border-radius:24%;background:var(--accent)}.pulse{animation:pulse 1.6s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(1);opacity:.85}50%{transform:scale(1.12);opacity:1}}.stagger>*{animation:fade-up .45s var(--ease) backwards}.stagger>*:nth-child(2){animation-delay:.05s}.stagger>*:nth-child(3){animation-delay:.1s}.stagger>*:nth-child(4){animation-delay:.15s}.stagger>*:nth-child(5){animation-delay:.2s}.stagger>*:nth-child(6){animation-delay:.25s}.stagger>*:nth-child(7){animation-delay:.3s}
