:root{--paper: #f6f1e7;--paper-deep: #efe7d8;--card: #fffdf8;--ink: #2a2419;--ink-soft: #6b6252;--ink-faint: #9a9080;--line: #e3d9c6;--ember: #c0522b;--ember-deep: #9c3f1e;--olive: #6b7a4b;--olive-soft: #eef0e3;--amber: #e9b44c;--amber-soft: #f9edd2;--danger: #a33a2a;--radius: 14px;--shadow: 0 1px 2px rgba(42, 36, 25, .06), 0 6px 24px -8px rgba(42, 36, 25, .12);--shadow-lift: 0 2px 4px rgba(42, 36, 25, .08), 0 14px 40px -10px rgba(42, 36, 25, .22);--font-display: "Fraunces", Georgia, serif;--font-body: "Karla", "Segoe UI", system-ui, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);background-image:radial-gradient(ellipse 80% 50% at 50% -10%,#fdf8ee 0%,transparent 60%);color:var(--ink);font-family:var(--font-body);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-display);font-weight:550;line-height:1.15;margin:0;letter-spacing:-.01em}button{font-family:var(--font-body);font-size:.92rem;cursor:pointer;border:none;background:none;color:inherit}input,textarea,select{font-family:var(--font-body);font-size:.95rem;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:10px;padding:.55rem .75rem;outline:none;transition:border-color .15s,box-shadow .15s}input:focus,textarea:focus{border-color:var(--ember);box-shadow:0 0 0 3px #c0522b1f}textarea{resize:vertical;line-height:1.5}::selection{background:#e9b44c73}.app{max-width:1060px;margin:0 auto;padding:0 1.25rem 9rem}.topbar{display:flex;align-items:baseline;gap:.9rem;padding:1.6rem 0 1.2rem}.brand{font-family:var(--font-display);font-size:1.7rem;font-weight:650;font-style:italic;color:var(--ember-deep);cursor:pointer;-webkit-user-select:none;user-select:none}.brand span{color:var(--ink);font-style:normal;font-weight:400}.topbar .tagline{color:var(--ink-faint);font-size:.9rem}.topbar .spacer{flex:1}.ai-badge{font-size:.75rem;padding:.2rem .6rem;border-radius:99px;border:1px solid var(--line);color:var(--ink-soft);background:var(--card)}.ai-badge.on{border-color:#6b7a4b80;color:var(--olive);background:var(--olive-soft)}.sync-badge{display:inline-flex;align-items:center;gap:.35rem;font-size:.75rem;font-weight:600;padding:.2rem .6rem;border-radius:99px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);white-space:nowrap}.sync-badge.saved{border-color:#6b7a4b80;color:var(--olive);background:var(--olive-soft)}.sync-badge.saving,.sync-badge.loading{color:var(--ink-soft)}.sync-badge.offline{border-color:#a33a2a8c;color:var(--danger);background:#f8e7e2;cursor:pointer}.sync-badge.offline:hover{background:#f4d8d0}.btn{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem 1.05rem;border-radius:10px;font-weight:600;border:1px solid transparent;transition:transform .08s ease,box-shadow .15s,background .15s;white-space:nowrap}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--ember);color:#fff8f2;box-shadow:var(--shadow)}.btn-primary:hover:not(:disabled){background:var(--ember-deep)}.btn-ghost{border-color:var(--line);background:var(--card);color:var(--ink-soft)}.btn-ghost:hover:not(:disabled){border-color:var(--ink-faint);color:var(--ink)}.btn-olive{background:var(--olive);color:#f6f8ef}.btn-olive:hover:not(:disabled){background:#57633c}.btn-sm{padding:.3rem .7rem;font-size:.82rem;border-radius:8px}.btn-danger-ghost{color:var(--danger);border:1px solid transparent}.btn-danger-ghost:hover{border-color:#a33a2a66;background:#a33a2a0f}.library-head{display:flex;flex-wrap:wrap;align-items:center;gap:.8rem;margin:.5rem 0 1.4rem}.library-head h1{font-size:2.3rem;flex:1 1 auto}.search{min-width:220px}.recipe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.1rem}.recipe-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.15rem 1.25rem 1.05rem;box-shadow:var(--shadow);cursor:pointer;display:flex;flex-direction:column;gap:.5rem;transition:transform .12s ease,box-shadow .2s ease;position:relative;overflow:hidden}.recipe-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lift)}.recipe-card:before{content:"";position:absolute;inset:0 0 auto 0;height:4px;background:linear-gradient(90deg,var(--ember),var(--amber));opacity:0;transition:opacity .15s}.recipe-card:hover:before{opacity:1}.recipe-card h3{font-size:1.25rem}.recipe-card .desc{color:var(--ink-soft);font-size:.9rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.recipe-card .meta{margin-top:auto;display:flex;gap:.6rem;align-items:center;font-size:.78rem;color:var(--ink-faint);padding-top:.4rem}.pill{font-size:.72rem;font-weight:700;letter-spacing:.03em;padding:.14rem .55rem;border-radius:99px;background:var(--amber-soft);color:#8a6414}.pill.pinned{background:var(--olive-soft);color:var(--olive)}.empty-state{text-align:center;color:var(--ink-faint);padding:4rem 1rem;border:2px dashed var(--line);border-radius:var(--radius)}.detail-head{margin:.4rem 0 1rem}.detail-head .crumb{color:var(--ink-faint);font-size:.85rem;cursor:pointer;margin-bottom:.55rem;display:inline-block}.detail-head .crumb:hover{color:var(--ember)}.detail-head h1{font-size:2.2rem}.detail-head .sub{margin-top:.4rem;color:var(--ink-soft);font-size:.92rem;display:flex;flex-wrap:wrap;gap:.4rem 1rem;align-items:center}.detail-head a{color:var(--olive);text-decoration:none;border-bottom:1px dotted currentColor}.version-chip{display:inline-flex;align-items:center;gap:.35rem;background:var(--paper-deep);border:1px solid var(--line);padding:.18rem .65rem;border-radius:99px;font-size:.8rem;color:var(--ink-soft)}.version-chip b{color:var(--ember-deep);font-weight:700}.tabs{display:flex;gap:.25rem;border-bottom:2px solid var(--line);margin:1.2rem 0 1.4rem;overflow-x:auto}.tab{padding:.55rem 1rem;font-weight:600;color:var(--ink-faint);border-bottom:2px solid transparent;margin-bottom:-2px;white-space:nowrap}.tab:hover{color:var(--ink)}.tab.active{color:var(--ember-deep);border-bottom-color:var(--ember)}.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.3rem 1.4rem;box-shadow:var(--shadow);margin-bottom:1.2rem}.panel>h2{font-size:1.3rem;margin-bottom:.8rem}.panel .panel-sub{color:var(--ink-faint);font-size:.85rem;margin:-.5rem 0 .9rem}.two-col{display:grid;grid-template-columns:minmax(260px,2fr) 3fr;gap:1.2rem;align-items:start}@media(max-width:760px){.two-col{grid-template-columns:1fr}}.ing-list{list-style:none;margin:0;padding:0}.ing-list li{padding:.42rem 0;border-bottom:1px dashed var(--line);font-size:.95rem;display:flex;gap:.5rem}.ing-list li:before{content:"•";color:var(--amber);font-weight:900}.ing-list li:last-child{border-bottom:none}.step-list{list-style:none;margin:0;padding:0;counter-reset:step}.step-list li{counter-increment:step;display:flex;gap:.9rem;padding:.7rem 0;border-bottom:1px dashed var(--line)}.step-list li:last-child{border-bottom:none}.step-list .step-num{font-family:var(--font-display);font-style:italic;font-size:1.15rem;color:var(--ember);min-width:1.4rem;text-align:right}.step-list .step-body{flex:1}.timer-inline{display:inline-flex;align-items:center;gap:.3rem;background:var(--amber-soft);border:1px solid rgba(233,180,76,.7);color:#7a5a10;font-size:.78rem;font-weight:700;padding:.1rem .55rem;border-radius:99px;margin-left:.5rem;transition:background .15s,transform .08s;vertical-align:1px}.timer-inline:hover{background:#f3dfae}.timer-inline:active{transform:translateY(1px)}.mise-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.mise-group h3{font-size:1.02rem;color:var(--olive);border-bottom:2px solid var(--olive-soft);padding-bottom:.3rem;margin-bottom:.5rem}.mise-task{display:flex;gap:.6rem;align-items:flex-start;padding:.32rem .3rem;border-radius:8px;cursor:pointer;font-size:.92rem;transition:background .12s}.mise-task:hover{background:var(--paper-deep)}.mise-task input[type=checkbox]{width:1.05rem;height:1.05rem;margin-top:.15rem;accent-color:var(--olive);cursor:pointer}.mise-task.done span{text-decoration:line-through;color:var(--ink-faint)}.mise-meta{margin-top:1rem;padding-top:.9rem;border-top:1px dashed var(--line);font-size:.88rem;color:var(--ink-soft);display:flex;flex-direction:column;gap:.4rem}.mise-tip{background:var(--amber-soft);border-left:3px solid var(--amber);padding:.6rem .8rem;border-radius:0 8px 8px 0;font-style:italic}.mise-progress{height:6px;border-radius:99px;background:var(--paper-deep);overflow:hidden;margin:.6rem 0 1rem}.mise-progress>div{height:100%;background:linear-gradient(90deg,var(--olive),#8ba064);border-radius:99px;transition:width .3s ease}.swap-form{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem}.swap-form input{flex:1 1 180px}.swap-option{border:1px solid var(--line);border-radius:12px;padding:.9rem 1.05rem;margin-bottom:.7rem;background:linear-gradient(180deg,#fffefb,#fdf9f0);transition:border-color .15s,box-shadow .15s}.swap-option:hover{border-color:var(--amber);box-shadow:var(--shadow)}.swap-option h4{font-size:1.05rem;margin-bottom:.2rem}.swap-option .effort{float:right;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);border:1px solid var(--line);border-radius:99px;padding:.1rem .5rem}.swap-option p{margin:.25rem 0;font-size:.9rem;color:var(--ink-soft)}.swap-option .tradeoffs{font-size:.83rem;color:var(--ink-faint);font-style:italic}.swap-option .actions{margin-top:.55rem}.cook-stage{background:linear-gradient(180deg,#fffdf8,#fbf5e9);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-lift);padding:2rem 2.2rem 1.6rem;min-height:320px;display:flex;flex-direction:column}.cook-progress{display:flex;gap:.35rem;margin-bottom:1.4rem}.cook-progress .seg{flex:1;height:5px;border-radius:99px;background:var(--paper-deep);border:none;padding:0;cursor:pointer;transition:background .2s}.cook-progress .seg.doney{background:var(--amber)}.cook-progress .seg.now{background:var(--ember)}.cook-step-label{font-size:.8rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ember);margin-bottom:.7rem}.cook-step-text{font-family:var(--font-display);font-size:clamp(1.35rem,2.6vw,1.85rem);font-weight:450;line-height:1.45;flex:1}.cook-timers{margin:1.2rem 0 .4rem;display:flex;flex-wrap:wrap;gap:.5rem}.cook-timer-btn{display:inline-flex;align-items:center;gap:.45rem;background:var(--amber-soft);border:1px solid rgba(233,180,76,.8);color:#6d500e;font-weight:700;font-size:.95rem;padding:.5rem 1rem;border-radius:99px;transition:transform .08s,background .15s}.cook-timer-btn:hover{background:#f3dfae}.cook-timer-btn:active{transform:translateY(1px)}.cook-nav{display:flex;align-items:center;gap:.7rem;margin-top:1.4rem;padding-top:1.1rem;border-top:1px dashed var(--line)}.cook-nav .spacer{flex:1}.cook-ings{margin-top:1rem}.cook-ings summary{cursor:pointer;font-weight:700;color:var(--ink-soft);font-size:.9rem}.cook-ings ul{columns:2;margin:.6rem 0 0;padding-left:1.1rem;font-size:.9rem;color:var(--ink-soft)}@media(max-width:600px){.cook-ings ul{columns:1}}.cook-done{text-align:center;padding:2rem 0 1rem}.cook-done h2{font-size:1.9rem;margin-bottom:.5rem}.cook-done p{color:var(--ink-soft)}.note-form{display:flex;flex-direction:column;gap:.6rem;margin-bottom:1.2rem}.rating-row{display:flex;align-items:center;gap:.15rem}.rating-row .flame{font-size:1.35rem;filter:grayscale(1) opacity(.4);transition:filter .12s,transform .1s;padding:0 .1rem}.rating-row .flame.lit{filter:none}.rating-row .flame:hover{transform:scale(1.15)}.note{border-left:3px solid var(--amber);background:#fffdf6;padding:.7rem 1rem;border-radius:0 10px 10px 0;margin-bottom:.7rem}.note .note-meta{font-size:.78rem;color:var(--ink-faint);margin-bottom:.2rem;display:flex;gap:.6rem}.note p{margin:0;font-size:.93rem;white-space:pre-wrap}.version-row{display:flex;gap:.9rem;padding:.85rem .4rem;border-bottom:1px dashed var(--line);align-items:flex-start}.version-row:last-child{border-bottom:none}.version-dot{width:12px;height:12px;border-radius:50%;background:var(--paper-deep);border:2px solid var(--ink-faint);margin-top:.35rem;flex-shrink:0}.version-row.current .version-dot{background:var(--ember);border-color:var(--ember-deep)}.version-row.origin .version-dot{border-color:var(--olive)}.version-info{flex:1}.version-info .vname{font-weight:700;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.version-info .vsummary{font-size:.88rem;color:var(--ink-soft);margin-top:.15rem}.version-info .vdate{font-size:.76rem;color:var(--ink-faint);margin-top:.15rem}.version-actions{display:flex;gap:.4rem;flex-wrap:wrap}.diff-cols{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;margin-top:.8rem}@media(max-width:700px){.diff-cols{grid-template-columns:1fr}}.diff-cols h4{font-size:.95rem;color:var(--ink-soft);margin-bottom:.4rem}.diff-item{font-size:.88rem;padding:.2rem .45rem;border-radius:6px}.diff-item.added{background:var(--olive-soft);color:#465231}.diff-item.removed{background:#f8e3de;color:#83301c;text-decoration:line-through}.timer-dock{position:fixed;right:1.2rem;bottom:1.2rem;display:flex;flex-direction:column;gap:.6rem;z-index:60;max-width:min(340px,calc(100vw - 2rem))}.timer-card{background:#2d2620;color:#f3ead9;border-radius:14px;padding:.75rem .95rem;box-shadow:0 8px 30px -6px #1e180f80;border:1px solid #453a2e}.timer-card.done{background:var(--ember-deep);border-color:var(--ember);animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 8px 30px -6px #9c3f1e8c}50%{box-shadow:0 8px 42px -2px #c0522bf2}}.timer-card .t-head{display:flex;align-items:baseline;gap:.6rem}.timer-card .t-label{font-size:.8rem;color:#cbbfa8;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timer-card .t-time{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:1.5rem;font-weight:600}.timer-card .t-bar{height:4px;background:#4a3f31;border-radius:99px;margin:.45rem 0;overflow:hidden}.timer-card .t-bar>div{height:100%;background:var(--amber);border-radius:99px;transition:width .25s linear}.timer-card.done .t-bar>div{background:#ffd9c4}.timer-card .t-actions{display:flex;gap:.35rem}.timer-card .t-actions button{font-size:.75rem;font-weight:700;color:#e8dcc4;background:#ffffff14;border-radius:7px;padding:.22rem .55rem;transition:background .12s}.timer-card .t-actions button:hover{background:#ffffff2e}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#2a241973;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:flex-start;justify-content:center;padding:4rem 1rem 2rem;z-index:100;overflow-y:auto}.modal{background:var(--card);border-radius:16px;box-shadow:var(--shadow-lift);width:100%;max-width:620px;padding:1.6rem 1.7rem}.modal h2{font-size:1.45rem;margin-bottom:1rem}.modal .field{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.9rem}.modal .field label{font-size:.83rem;font-weight:700;color:var(--ink-soft)}.modal .field .hint{font-size:.76rem;color:var(--ink-faint);font-weight:400}.modal .modal-actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:1.2rem}.error-text{color:var(--danger);font-size:.87rem;margin:.4rem 0}.muted{color:var(--ink-faint);font-size:.87rem}.spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-.15em}@keyframes spin{to{transform:rotate(360deg)}}.section-row{display:flex;align-items:center;gap:.7rem;margin-bottom:.8rem;flex-wrap:wrap}.section-row h2{flex:1;font-size:1.3rem}.card-photo{margin:-1.15rem -1.25rem .35rem;height:150px;overflow:hidden;border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0;background:var(--olive-soft)}.card-photo img{width:100%;height:100%;object-fit:cover;display:block}.detail-photo{margin-top:.9rem}.detail-photo img{display:block;width:100%;max-width:34rem;max-height:260px;object-fit:cover;border-radius:var(--radius);border:1px solid var(--line);box-shadow:var(--shadow)}.photo-edit{display:flex;align-items:flex-start;gap:.75rem}.photo-edit img{width:130px;height:96px;object-fit:cover;border-radius:10px;border:1px solid var(--line);display:block}.photo-edit-actions{display:flex;flex-direction:column;gap:.4rem;align-items:flex-start}.photo-error{color:var(--danger);font-size:.85rem;margin-top:.35rem}
