:root{--bg: #f7f4ef;--surface: #ffffff;--surface-2: #f0ebe3;--text: #211c19;--muted: #8c8177;--border: #eae2d7;--border-strong: #ded3c4;--primary: #b06a3f;--primary-soft: rgba(176, 106, 63, .12);--primary-ink: #ffffff;--danger: #c0432f;--radius: 14px;--radius-lg: 20px;--radius-pill: 999px;--shadow: 0 1px 2px rgba(33, 28, 25, .05), 0 8px 24px -12px rgba(33, 28, 25, .18);--shadow-sheet: 0 -8px 40px -12px rgba(33, 28, 25, .35);--tabbar-h: 60px;--tabbar-bg: rgba(255, 255, 255, .82)}@media (prefers-color-scheme: dark){:root{--bg: #161311;--surface: #211d1a;--surface-2: #2b2622;--text: #ede6dd;--muted: #a1958a;--border: #332d28;--border-strong: #423a34;--primary: #d59a6d;--primary-soft: rgba(213, 154, 109, .16);--primary-ink: #201510;--danger: #e68374;--shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px -12px rgba(0, 0, 0, .6);--shadow-sheet: 0 -8px 40px -12px rgba(0, 0, 0, .7);--tabbar-bg: rgba(28, 24, 21, .82)}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.45;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}a{color:var(--primary)}.center{display:grid;place-items:center;height:100%}.muted{color:var(--muted)}.small{font-size:.85rem}.app{min-height:100%;padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom))}.content{max-width:720px;margin:0 auto}.tabbar{position:fixed;bottom:0;left:0;right:0;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);display:flex;background:var(--tabbar-bg);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-top:1px solid var(--border);z-index:10}.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:none;background:none;color:var(--muted);text-decoration:none;font:inherit;cursor:pointer;padding:0;transition:color .15s ease}.tab svg{transition:transform .15s ease}.tab small{font-size:.64rem;letter-spacing:.01em}.tab.active{color:var(--primary)}.tab.active svg{transform:translateY(-1px)}.tab:active svg{transform:scale(.9)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#14100e66;z-index:20;display:flex;align-items:flex-end;animation:fade-in .2s ease}.sheet{width:100%;background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--shadow-sheet);padding:8px 12px calc(16px + env(safe-area-inset-bottom));animation:slide-up .24s cubic-bezier(.22,1,.36,1)}.sheet-grip{width:38px;height:4px;border-radius:999px;background:var(--border-strong);margin:6px auto 10px}.sheet-list{display:flex;flex-direction:column}.sheet-item{display:flex;align-items:center;gap:14px;padding:15px 10px;border-radius:var(--radius);color:var(--text);text-decoration:none;font-weight:500}.sheet-item svg:first-child{color:var(--muted)}.sheet-item.active{color:var(--primary);background:var(--primary-soft)}.sheet-item.active svg:first-child{color:var(--primary)}.sheet-item:active{background:var(--surface-2)}.sheet-chevron{margin-left:auto;color:var(--muted);opacity:.6}@keyframes fade-in{0%{opacity:0}}@keyframes slide-up{0%{transform:translateY(100%)}}.page{padding:16px 16px 24px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.page-head h1{font-size:1.55rem;font-weight:700;letter-spacing:-.02em;margin:0}label{display:block;font-size:.85rem;color:var(--muted);margin:12px 0 4px}input,textarea,select{width:100%;padding:11px 12px;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);-webkit-appearance:none;-moz-appearance:none;appearance:none}input:focus,textarea:focus,select:focus{outline:2px solid var(--primary);outline-offset:-1px}textarea{resize:vertical}button{font:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:11px 16px;border-radius:var(--radius);border:1px solid var(--primary);background:var(--primary);color:var(--primary-ink);font-weight:600;transition:transform .1s ease,opacity .15s ease,background .15s ease}button:active{transform:scale(.97)}button:disabled{opacity:.55}button.secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}button.danger{background:transparent;color:var(--danger);border-color:var(--danger)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;text-decoration:none;padding:9px 15px;border-radius:var(--radius-pill);background:var(--primary);color:var(--primary-ink);font-weight:600;border:1px solid var(--primary);transition:transform .1s ease}.btn:active{transform:scale(.97)}.btn.secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;color:var(--muted);padding:8px;border-radius:10px}.icon-btn:active{background:var(--surface-2)}.form-actions{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}.form-actions .danger{margin-left:auto}.error{color:var(--danger);font-size:.9rem}.notice{background:var(--surface-2);padding:12px;border-radius:var(--radius)}.search-wrap{position:relative;margin-bottom:14px}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}.search-wrap .search{padding-left:38px;border-radius:var(--radius-pill);margin-bottom:0}.search{margin-bottom:12px}.inline-add{display:flex;gap:8px;margin-bottom:12px}.inline-add input{flex:1}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.list-item{display:flex;align-items:center;gap:8px;padding:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);transition:transform .1s ease}.list-item:active{transform:scale(.99)}.list-item.editing{flex-wrap:wrap}.grow{flex:1;min-width:0}.link-plain{text-decoration:none;color:inherit}.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.chip{display:inline-flex;align-items:center;gap:4px;background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:999px;padding:3px 10px;font-size:.8rem}.chip.static{cursor:default}.chip.active{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}.chip button{background:none;border:none;color:inherit;padding:0;font-size:1rem;line-height:1}.taginput .chips{padding:6px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.taginput input{flex:1;min-width:100px;border:none;padding:4px;background:none}.taginput input:focus{outline:none}.tag-filter{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.tag-filter .chip{cursor:pointer}.step-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}.ratio-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.ratio-line{display:flex;gap:8px;align-items:center}.ratio-line select{flex:1;min-width:0}.ratio-amount-wrap{position:relative;flex:none;width:78px}.ratio-amount{width:100%;padding-right:20px}.ratio-unit{position:absolute;right:8px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:.8rem;pointer-events:none}.ratio-pct{width:52px;text-align:right;color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums}.ratio-slider{width:100%;accent-color:var(--primary);height:28px}.ratio-footer{display:flex;align-items:center;justify-content:space-between;margin-top:4px}.mix-clip{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;padding-top:10px;border-top:1px dashed var(--border)}.mix-tool{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;font-size:.85rem;font-weight:500;border-radius:var(--radius-pill);border:1px solid var(--border-strong);background:var(--surface);color:var(--muted)}.mix-tool:active{background:var(--surface-2)}.step-row input{flex:1}.step-row.head{color:var(--muted);font-size:.8rem}.step-row.head span{flex:1}.step-editor .secondary{margin-top:4px}.login{display:grid;place-items:center;min-height:100%;padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:28px}.brand{display:flex;align-items:center;gap:10px}.brand h1{margin:0}.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:13px;background:var(--primary-soft);color:var(--primary)}.login-card button[type=submit],.passkey-btn{width:100%;margin-top:8px}.or-divider{display:flex;align-items:center;gap:10px;margin:16px 0 4px;color:var(--muted);font-size:.8rem}.or-divider:before,.or-divider:after{content:"";flex:1;height:1px;background:var(--border)}.linklike{background:none;border:none;color:var(--primary);padding:0;font:inherit;text-decoration:underline;cursor:pointer;width:auto}.exp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.exp-card{position:relative;aspect-ratio:3 / 4;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:inherit;display:block;transition:transform .12s ease,box-shadow .15s ease}.exp-card:active{transform:scale(.98);box-shadow:var(--shadow)}.exp-thumb{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--surface-2);display:grid;place-items:center}.exp-thumb img{width:100%;height:100%;object-fit:cover}.exp-thumb .placeholder{display:grid;place-items:center;color:var(--muted);opacity:.5}.exp-body{position:absolute;inset:auto 0 0 0;padding:28px 12px 12px;display:flex;flex-direction:column;gap:4px;color:#fff;background:linear-gradient(to top,#000000c7,#0000008c 45%,#0000)}.exp-body strong{text-shadow:0 1px 3px rgba(0,0,0,.5)}.exp-sub{font-size:.8rem;color:#ffffffd1;text-shadow:0 1px 3px rgba(0,0,0,.5)}.exp-body .chip.static{background:#ffffff2e;border-color:#ffffff40;color:#fff}.exp-edit-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}.exp-code-label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.exp-code{font-size:1.9rem;font-weight:700;line-height:1.1;letter-spacing:.02em}.exp-edit-actions{display:flex;align-items:center;gap:10px}.save-status{font-size:.8rem;color:var(--muted);min-width:60px;text-align:right}.save-status.saved{color:#16a34a}.save-status.error{color:var(--danger, #dc2626)}.disclosure{background:none;border:none;color:var(--muted);padding:6px 0;font:inherit;cursor:pointer;width:auto;text-align:left}.exp-more{border-top:1px solid var(--border);padding-top:8px}.exp-title-label{color:var(--muted);font-weight:400}.meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.meta-label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.notes{white-space:pre-wrap;background:var(--surface-2);padding:12px;border-radius:var(--radius)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px;margin-top:14px}.card h3{margin:0 0 8px;font-size:1rem}.recipe-table{width:100%;border-collapse:collapse}.recipe-table td,.recipe-table th{padding:5px 4px;border-bottom:1px solid var(--border);text-align:left}.recipe-table th{font-size:.72rem;text-transform:uppercase;color:var(--muted)}.recipe-table .num{text-align:right;font-variant-numeric:tabular-nums}.photo-capture{margin-top:16px}.photo-head{display:flex;align-items:center;gap:10px}.photo-head h3{margin:0;font-size:1rem;flex:1}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-top:8px}.photo-thumb{position:relative;aspect-ratio:1;border-radius:10px;overflow:hidden;background:var(--surface-2)}.photo-thumb img{width:100%;height:100%;object-fit:cover}.thumb-del,.thumb-star{position:absolute;top:4px;width:28px;height:28px;padding:0;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:#0000008c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;border:none;line-height:1}.thumb-del{right:4px}.thumb-star{left:4px}.thumb-star.on{color:#ffd15c}.photo-thumb.primary{outline:2px solid var(--primary);outline-offset:-2px}code{background:var(--surface-2);padding:1px 5px;border-radius:5px;font-size:.9em}
