:root{--u-bg: #f0ece3;--u-surface: #fbf9f4;--u-surface-2: #f4f0e7;--u-head: #26221d;--u-ink: #211d18;--u-ink-2: #5f574b;--u-ink-3: #968c7c;--u-line: #e2dccc;--u-line-strong: #d2cab6;--u-good: #3f6f53;--u-good-soft: #e7efe4;--u-warn: #b8893a;--u-bad: #c25438;--u-info: #3f5d6b;--u-font-display: "Space Grotesk", "Zen Kaku Gothic New", system-ui, sans-serif;--u-font-body: "Zen Kaku Gothic New", -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic ProN", "Noto Sans JP", Meiryo, system-ui, sans-serif;--u-font-mono: "JetBrains Mono", "SFMono-Regular", ui-monospace, monospace;--u-radius: 16px;--u-radius-sm: 11px}:root{--bg: var(--u-bg);--surface: var(--u-surface);--surface-2: var(--u-surface-2);--surface-3: var(--u-surface-2);--ink: var(--u-ink);--ink-2: var(--u-ink-2);--ink-3: var(--u-ink-3);--line: var(--u-line);--line-strong: var(--u-line-strong);--brand: var(--u-good);--brand-ink: var(--u-good);--brand-soft: var(--u-good-soft);--protein: #5b6ef5;--fat: #f0982a;--sugar: #e6457f;--fiber: #0fb6a3;--good: var(--u-good);--conditional: var(--u-info);--caution: var(--u-warn);--bad: var(--u-bad);--q1: #e23b3b;--q2: #f0982a;--q3: #0e9f6e;--q4: #6b7570;--radius: var(--u-radius);--radius-sm: var(--u-radius-sm);--shadow: 0 1px 0 rgba(20, 24, 26, .02);--shadow-float: 0 12px 30px -18px rgba(20, 24, 26, .28);--font-display: var(--u-font-display);--font-body: var(--u-font-body);--font-mono: var(--u-font-mono);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-top: env(safe-area-inset-top, 0px)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0}body{background-color:var(--bg);background-image:radial-gradient(120% 80% at 100% 0%,rgba(14,159,110,.06),transparent 55%),radial-gradient(100% 60% at 0% 100%,rgba(91,110,245,.05),transparent 60%);background-attachment:fixed;color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.62;font-feature-settings:"palt" 1;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#root{max-width:540px;margin:0 auto;min-height:100vh;position:relative}button{font-family:inherit;cursor:pointer}.app{padding-bottom:calc(82px + var(--safe-bottom))}.appbar{position:sticky;top:0;z-index:20;background:#26221ddb;backdrop-filter:saturate(160%) blur(16px);-webkit-backdrop-filter:saturate(160%) blur(16px);border-bottom:1px solid rgba(243,237,225,.12);color:var(--u-bg);padding:calc(15px + var(--safe-top)) 20px 14px;display:flex;align-items:center;gap:11px}.error-banner{display:flex;align-items:center;gap:8px;margin:10px 14px 0;padding:10px 12px;border:1px solid var(--bad);border-radius:10px;background:#e23b3b14;color:var(--bad);font-size:13px;line-height:1.4}.error-banner span{flex:1}.error-banner .error-close{border:0;background:transparent;color:var(--bad);font-size:18px;line-height:1;cursor:pointer;padding:0 4px}.appbar h1{font-family:var(--font-display);font-size:17px;font-weight:900;margin:0;letter-spacing:.01em}.appbar .logo{width:34px;height:34px;border-radius:10px;background:var(--brand);color:#fff;display:grid;place-items:center;font-family:var(--font-display);font-weight:900;font-size:11px;letter-spacing:.04em;position:relative;overflow:hidden}.appbar .logo:after{content:"";position:absolute;right:5px;bottom:5px;width:6px;height:6px;border-radius:50%;background:var(--u-bg);box-shadow:0 0 0 2px var(--brand)}.appbar .sub{margin-left:auto;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#f0ece399}.view{padding:18px 16px 4px;animation:viewIn .4s ease both}@keyframes viewIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:540px;display:flex;gap:6px;background:#ffffffd1;backdrop-filter:saturate(180%) blur(18px);-webkit-backdrop-filter:saturate(180%) blur(18px);border-top:1px solid var(--line);padding:8px 14px calc(8px + var(--safe-bottom));z-index:30}.tabbar button{flex:1;border:none;background:none;padding:9px 0 7px;border-radius:12px;color:var(--ink-3);display:flex;flex-direction:column;align-items:center;gap:4px;font-size:11px;font-weight:700;letter-spacing:.02em;transition:color .18s,background .18s}.tabbar button.active{color:var(--brand-ink);background:var(--brand-soft)}.tabbar .ico{display:grid;place-items:center;line-height:0}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;margin-bottom:14px}.card h2{font-family:var(--font-display);font-size:13px;font-weight:700;letter-spacing:.02em;margin:0 0 14px;display:flex;align-items:center;gap:8px;color:var(--ink)}.card h2 svg{color:var(--brand)}.card h2:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line),transparent)}.card .hint{font-size:12px;color:var(--ink-3);margin:-8px 0 12px;line-height:1.55}.result-stream>.card{animation:cardIn .45s cubic-bezier(.22,1,.36,1) both}.result-stream>.card:nth-child(2){animation-delay:.05s}.result-stream>.card:nth-child(3){animation-delay:.1s}.result-stream>.card:nth-child(4){animation-delay:.15s}.result-stream>.card:nth-child(5){animation-delay:.2s}@keyframes cardIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.capture{display:grid;grid-template-columns:1fr 1fr;gap:10px}.capture label{border:1.5px dashed var(--line-strong);border-radius:var(--radius-sm);padding:20px 10px;text-align:center;color:var(--ink-2);background:var(--surface-2);font-size:12.5px;font-weight:700;display:flex;flex-direction:column;align-items:center;gap:8px;transition:border-color .18s,background .18s,color .18s,transform .08s}.capture label svg{color:var(--ink-3);transition:color .18s}.capture label:active{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-ink);transform:scale(.99)}.capture label:active svg{color:var(--brand)}.capture input[type=file]{display:none}.ocr-progress{margin-top:14px;font-size:12px;font-weight:600;color:var(--ink-2);font-variant-numeric:tabular-nums}.bar{height:6px;border-radius:99px;background:var(--surface-3);overflow:hidden;margin-top:7px}.bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),#34d399);border-radius:99px;transition:width .25s ease}.preview{margin-top:14px;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--line)}.preview img{width:100%;display:block;max-height:220px;object-fit:contain;background:#111513}.ocr-result{margin-top:14px;font-size:13px;color:var(--brand-ink);background:var(--brand-soft);border:1px solid #bfead2;border-radius:var(--radius-sm);padding:12px 14px;line-height:1.55}.ocr-result svg{color:var(--brand)}.ocr-result.warn-tone{color:#92560e;background:#fdf6e8;border-color:#f3e0b0}.ocr-result.warn-tone svg{color:var(--caution)}.raw-toggle{display:block;margin-top:9px;border:none;background:none;color:var(--ink-2);font-size:12px;font-weight:700;text-decoration:underline;text-underline-offset:2px;padding:2px 0}.raw-text{margin:8px 0 0;padding:11px;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;font-family:var(--font-mono);font-size:11px;line-height:1.55;color:var(--ink-2);white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto}.field{margin-bottom:13px}.field label{display:block;font-size:11.5px;font-weight:700;letter-spacing:.01em;color:var(--ink-2);margin-bottom:6px}.field .unit{color:var(--ink-3);font-weight:500}.field input{width:100%;border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:12px 14px;font-size:16px;font-family:var(--font-body);background:var(--surface-2);color:var(--ink);transition:border-color .18s,background .18s,box-shadow .18s}.field input[type=number]{font-family:var(--font-mono);font-weight:500}.field input::placeholder{color:var(--ink-3);font-family:var(--font-body)}.field input:focus{outline:none;border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px var(--brand-soft)}.field.flagged input{border-color:var(--conditional);background:#eef8fd}.field.flagged label{color:var(--conditional)}.field .ocr-flag{font-size:11px;color:var(--conditional);margin-top:4px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.btn{width:100%;border:1px solid transparent;border-radius:var(--radius-sm);padding:15px;font-size:15px;font-weight:700;letter-spacing:.01em;color:#fff;background:var(--ink);display:inline-flex;align-items:center;justify-content:center;gap:7px;box-shadow:var(--shadow-float);transition:transform .08s,opacity .18s,background .18s}.btn:active{transform:translateY(1px) scale(.995)}.btn:disabled{opacity:.4;box-shadow:none}.btn.primary,.btn.cta{background:var(--brand)}.btn svg{vertical-align:middle}.btn.secondary{background:var(--surface);color:var(--ink-2);border-color:var(--line-strong);box-shadow:var(--shadow)}.btn.danger{background:#fdeeee;color:var(--bad);border-color:#f6cccc;box-shadow:none}.result-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:4px}.result-head .name{font-family:var(--font-display);font-size:19px;font-weight:700;line-height:1.3;flex:1}.badge{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border-radius:99px;font-size:11.5px;font-weight:700;letter-spacing:.02em;white-space:nowrap;border:1px solid transparent}.badge.good{background:var(--brand-soft);color:var(--good);border-color:#bfead2}.badge.conditional{background:#e7f4fb;color:var(--conditional);border-color:#c2e3f3}.badge.caution{background:#fcf3e0;color:#a8650c;border-color:#f0dcae}.badge.bad{background:#fdeaea;color:var(--bad);border-color:#f5c9c9}.kpi{display:flex;gap:10px;margin:16px 0}.kpi>div{flex:1;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:13px 12px;text-align:center}.kpi .num{font-family:var(--font-display);font-size:26px;font-weight:900;line-height:1.05;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.kpi .lab{margin-top:3px;font-size:10.5px;font-weight:600;letter-spacing:.02em;color:var(--ink-3)}.cat-line{font-size:13px;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:11px 13px;margin-top:4px}.cat-line b{color:var(--ink);font-weight:700}.macrobar{display:flex;height:12px;border-radius:99px;overflow:hidden;margin:6px 0 16px;background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line)}.macrobar>span{height:100%;transition:width .4s ease}.legend{display:flex;flex-direction:column;gap:2px}.legend .item{display:flex;align-items:center;gap:9px;font-size:13.5px;padding:7px 0;border-bottom:1px solid var(--line)}.legend .item:last-child{border-bottom:none}.legend .dot{width:10px;height:10px;border-radius:3px}.legend .val{color:var(--ink-2);font-family:var(--font-mono);font-weight:500;font-variant-numeric:tabular-nums}.legend .judge{margin-left:auto;display:inline-flex}.jg svg[aria-label=良好]{color:var(--good)}.jg svg[aria-label=注意]{color:var(--caution)}.jg svg[aria-label=不可]{color:var(--bad)}.breakdown-row{display:grid;grid-template-columns:14px 1fr auto auto;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);font-size:14px}.breakdown-row:last-child{border-bottom:none}.breakdown-row .dot{width:11px;height:11px;border-radius:3px}.breakdown-row .meta{color:var(--ink-3);font-family:var(--font-mono);font-size:11.5px;font-variant-numeric:tabular-nums}.breakdown-row .pct{font-family:var(--font-display);font-weight:700;font-size:15px;font-variant-numeric:tabular-nums}.breakdown-row .jg{display:inline-flex}.warn{display:flex;gap:10px;background:#fdf6e8;border:1px solid #f3e0b0;color:#92560e;border-radius:var(--radius-sm);padding:12px 13px;font-size:13px;margin-bottom:8px;line-height:1.55}.warn svg{color:var(--caution)}.warn:last-child{margin-bottom:0}.ai-note{margin-top:0;padding:14px 15px 14px 17px;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--line);border-left:3px solid var(--brand)}.ai-note-label{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-display);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--brand-ink);margin-bottom:6px}.ai-note p{margin:0;font-size:14px;line-height:1.7;color:var(--ink)}.chart-wrap{width:100%}.chart-wrap svg{width:100%;height:auto;display:block}.chart-position{margin:10px 0 0;text-align:center;font-size:13px;font-weight:600;color:var(--ink-2)}@keyframes plotPulse{0%,to{opacity:.16;r:9}50%{opacity:.06;r:14}}.history-item{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px solid var(--line);transition:opacity .15s}.history-item:active{opacity:.6}.history-item:last-child{border-bottom:none}.history-item .q{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-family:var(--font-display);font-weight:900;font-size:15px;flex-shrink:0;color:#fff}.q.I{background:var(--q1)}.q.II{background:var(--q2)}.q.III{background:var(--q3)}.q.IV{background:var(--q4)}.history-item .info{flex:1;min-width:0}.history-item .info .nm{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-item .info .dt{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}.history-item .info .pf{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}.history-item .del{border:none;background:none;color:var(--ink-3);display:grid;place-items:center;padding:8px;border-radius:9px;transition:color .15s,background .15s}.history-item .del:active{color:var(--bad);background:#fdeaea}.empty{text-align:center;color:var(--ink-3);padding:64px 24px;font-size:14px;line-height:1.8}.empty .empty-mark{display:inline-grid;place-items:center;width:56px;height:56px;border-radius:16px;background:var(--surface);border:1px solid var(--line);color:var(--ink-3);margin-bottom:14px}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.toolbar .count{font-family:var(--font-display);font-size:13px;color:var(--ink-2);font-weight:700;letter-spacing:.01em}.toolbar button{border:1px solid var(--line-strong);background:var(--surface);border-radius:99px;color:var(--bad);font-size:12px;font-weight:700;padding:6px 13px}.detail-back{border:none;background:none;color:var(--brand-ink);font-weight:700;font-size:14px;padding:4px 0 14px;display:inline-flex;align-items:center;gap:5px}.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px;margin-right:7px}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.token-settings input{width:100%;padding:9px 10px;border:1px solid var(--line, #e2e8f0);border-radius:8px}.tag-chips{display:flex;flex-wrap:wrap;gap:8px}.tag-chip{padding:6px 12px;border-radius:999px;cursor:pointer;border:1px solid var(--line, rgba(0,0,0,.18));background:transparent;color:inherit;font-size:.9rem;-webkit-tap-highlight-color:transparent}.tag-chip.on{background:var(--accent, #2d6cdf);color:#fff;border-color:transparent}.register-msg{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:8px;margin-bottom:10px;font-size:.9rem;line-height:1.4}.register-msg.ok{background:#2ea04324;color:#1a7f37}.register-msg.err{background:#cf222e1f;color:#cf222e}.register-msg svg{flex:none}.menu-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;flex-direction:column;background:var(--bg);animation:menu-modal-in .22s ease}@keyframes menu-modal-in{0%{transform:translate(100%)}to{transform:translate(0)}}.menu-modal-head{background:var(--u-head);color:var(--u-bg);display:flex;align-items:center;gap:6px;padding:12px 12px calc(12px + env(safe-area-inset-top));position:sticky;top:0;z-index:10}.menu-modal-back{background:transparent;border:none;color:var(--u-bg);font-size:30px;line-height:1;padding:0 6px;cursor:pointer;-webkit-tap-highlight-color:transparent}.menu-modal-title{font-size:15px;font-weight:700;letter-spacing:1px}.menu-modal-body{flex:1;overflow-y:auto;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
