:root{--bg:#faf6f0;--surface:#fff;--text:#2d2a26;--muted:#7a736a;--accent:#b3592e;--accent-soft:#f3e2d7;--border:#e6ddd2;--radius:10px;--star:#d99a2b}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.55}a{color:inherit;text-decoration:none}.site-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:10;position:sticky;top:0}.site-header .inner{align-items:center;gap:1rem;max-width:960px;margin:0 auto;padding:.7rem 1rem;display:flex}.site-title{color:var(--accent);white-space:nowrap;align-items:center;gap:.4rem;font-size:1.15rem;font-weight:700;display:inline-flex}@media (width<=640px){.site-header .inner{flex-wrap:wrap;row-gap:0;padding:.5rem 1rem}.user-nav{flex-wrap:wrap;row-gap:.2rem}}main{max-width:960px;margin:0 auto;padding:1.25rem 1rem 3rem}main.wide{max-width:1440px}h1{margin:.5rem 0 1rem;font-size:1.6rem}.recipe-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1rem;padding:0;list-style:none;display:grid}.recipe-grid li{display:flex}.recipe-grid li>a{flex:1;min-width:0;display:flex}.recipe-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;flex:1;transition:box-shadow .15s;display:flex;position:relative;overflow:hidden}.recipe-card .new-badge{z-index:1;background:var(--accent);color:#fff;border-radius:999px;padding:.15rem .6rem;font-size:.75rem;font-weight:600;position:absolute;top:.5rem;left:.5rem;box-shadow:0 1px 4px #0003}.recipe-card:hover{box-shadow:0 4px 14px #00000014}.recipe-card .thumb{background:var(--accent-soft);flex:1;justify-content:center;align-items:center;min-height:140px;font-size:2.5rem;display:flex}.recipe-card .thumb img{width:100%;height:auto;display:block}.recipe-card .body{flex-direction:column;flex:none;gap:.35rem;padding:.75rem .9rem .9rem;display:flex}.recipe-card .title{font-size:1.02rem;font-weight:600}.meta{color:var(--muted);font-size:.85rem}.rating{color:var(--star);font-size:.9rem}.rating .count{color:var(--muted)}.chips{flex-wrap:wrap;gap:.35rem;margin-top:auto;padding-top:.4rem;display:flex}.chip{background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:.1rem .6rem;font-size:.78rem;font-weight:500}.filter-panel{flex-direction:column;gap:.7rem;margin-bottom:1.2rem;display:flex}.filter-row{align-items:center;gap:.5rem;display:flex}.filter-row input[type=search]{flex:1;width:auto;margin:0}.filter-row .btn{flex:none;padding:.45rem .9rem}@media (width<=480px){.filter-row{flex-wrap:wrap}.filter-row input[type=search]{flex:100%}}.gear-btn{padding:.35rem .55rem;font-size:1rem;line-height:1}.gear-btn[aria-expanded=true]{background:var(--accent-soft);border-color:var(--accent)}.filter-fields{flex-direction:column;gap:1.1rem;padding-top:.2rem;display:flex}.filter-field{flex-direction:column;gap:.5rem;display:flex}.filter-field .chips{margin:0;padding:0}.filter-field .chip{align-items:center;gap:.3rem;padding:.15rem .4rem .15rem .7rem;font-size:.85rem;display:inline-flex}.filter-field select{margin:0;font-size:.9rem}.filter-check{cursor:pointer;align-items:center;gap:.5rem;font-size:.9rem;display:flex}.filter-check input[type=checkbox]{width:auto;accent-color:var(--accent);margin:0;display:inline-block}.filter-label{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-size:.78rem;font-weight:600}.filter-field .hint{margin:0}.load-sentinel{text-align:center;min-height:2.2rem;color:var(--muted);padding:.6rem 0;font-size:.9rem}.filter-panel .hint,.review-form .hint{color:var(--muted);margin:.6rem 0 0;font-size:.8rem}.result-count{color:var(--muted);margin:0 0 .8rem;font-size:.9rem}.recipe-header .meta-line{color:var(--muted);margin:.2rem 0;font-size:.92rem}.detail-photo-button{cursor:zoom-in;background:0 0;border:none;width:100%;margin:.8rem 0;padding:0;display:block}.detail-photo{object-fit:cover;border-radius:var(--radius);border:1px solid var(--border);width:100%;max-height:380px;display:block}.lightbox{z-index:100;background:#000000c7;justify-content:center;align-items:center;padding:2.5rem;display:flex;position:fixed;inset:0}.lightbox img{border-radius:var(--radius);max-width:100%;max-height:100%;box-shadow:0 10px 40px #00000080}.lightbox-close{color:#fff;cursor:pointer;background:0 0;border:none;padding:.2rem .5rem;font-size:2.4rem;line-height:1;position:absolute;top:.5rem;right:.9rem}.lightbox-close:hover{color:var(--accent-soft)}.recipe-columns{grid-template-columns:minmax(240px,320px) 1fr;gap:2rem;margin-top:1.25rem;display:grid}@media (width<=700px){.recipe-columns{grid-template-columns:1fr;gap:1rem}}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);align-self:start;padding:1rem 1.1rem}.panel h2,.steps h2{margin:0 0 .6rem;font-size:1.1rem}.servings-control{align-items:center;gap:.6rem;margin-bottom:.8rem;font-size:.92rem;display:flex}.servings-control button{border:1px solid var(--border);background:var(--surface);cursor:pointer;width:2rem;height:2rem;color:var(--accent);border-radius:50%;font-size:1.1rem}.servings-control button:hover{background:var(--accent-soft)}.ingredient-list{margin:0;padding:0;list-style:none}.ingredient-list li{border-bottom:1px dashed var(--border);padding:.3rem 0;font-size:.95rem}.ingredient-list li:last-child{border-bottom:none}.ingredient-list .qty{color:var(--accent);font-weight:600}.ingredient-list .prep{color:var(--muted)}.tier-label{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:.9rem 0 .2rem;font-size:.78rem;font-weight:600}.steps ol{margin:0;padding-left:1.3rem}.steps li{margin-bottom:.8rem}.notes{background:var(--accent-soft);border-radius:var(--radius);margin-top:1.2rem;padding:.8rem 1rem;font-size:.92rem}.back-link{color:var(--accent);font-size:.9rem}.empty-state{text-align:center;color:var(--muted);padding:3rem 1rem}.user-nav{align-items:center;gap:.9rem;margin-left:auto;font-size:.9rem;display:flex}.user-nav a:hover{color:var(--accent)}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);max-width:420px;margin:1.5rem auto;padding:1.5rem 1.6rem}.auth-card h1,.auth-card h2{margin-top:0}.auth-card h2{margin:1.2rem 0 .4rem;font-size:1.05rem}form label{color:var(--muted);margin:.7rem 0;font-size:.9rem;display:block}form input,form select{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:6px;margin-top:.25rem;padding:.5rem .6rem;display:block}form input:focus,form select:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}button.primary{font:inherit;color:#fff;background:var(--accent);cursor:pointer;border:none;border-radius:6px;margin-top:.8rem;padding:.55rem 1.2rem;font-weight:600}button.primary:hover{filter:brightness(1.08)}.btn{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:.3rem .7rem;font-size:.85rem}.btn:hover{background:var(--accent-soft)}.btn:disabled{opacity:.45;cursor:default;pointer-events:none}.btn-danger{color:#a33;border-color:#d9b0b0}.btn-danger:hover{background:#f7e3e3}.form-error{color:#a33;font-size:.9rem}.rate-form{align-items:center;gap:.15rem;margin-top:.3rem;display:flex}.rate-label{color:var(--muted);margin-right:.3rem;font-size:.85rem}.star-button{font:inherit;color:var(--star);cursor:pointer;background:0 0;border:none;padding:0;font-size:1.25rem;line-height:1}.star-button:hover{transform:scale(1.15)}.recipe-actions{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.8rem;display:flex}a.btn{color:var(--text);text-decoration:none;display:inline-block}.confirm-delete{color:#a33;flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.9rem;display:flex}.form-success{color:#2c7a3f;font-size:.9rem}.users-table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto}.users-table{border-collapse:collapse;width:100%;font-size:.92rem}.users-table th,.users-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.6rem .8rem}.users-table tr:last-child td{border-bottom:none}.users-table th{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:.8rem;font-weight:600}.inline-form{align-items:center;gap:.4rem;margin:.15rem 0;display:flex}.disabled-row td{opacity:.55}.disabled-row td:last-child{opacity:1}.disabled-tag{color:#a33;text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:600}.inline-form input,.inline-form select{width:auto;margin:0;padding:.3rem .5rem;font-size:.85rem;display:inline-block}.user-nav .add-link{font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-weight:600}.user-nav .add-link:hover{filter:brightness(1.15)}.link-button{font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.photo-import-panel{z-index:50;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-align:left;width:min(360px,100vw - 2rem);max-height:60vh;padding:.8rem;font-weight:400;position:fixed;bottom:1rem;right:1rem;overflow-y:auto;box-shadow:0 8px 28px #3c23142e}.photo-import-panel .shot-list{margin-top:0}.photo-import-panel .meta{margin:.6rem 0 0}.photo-import-panel .btn{margin-top:.6rem}.shot-list{flex-direction:column;gap:.5rem;margin:1rem 0 0;padding:0;list-style:none;display:flex}.shot{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:.7rem;padding:.4rem .5rem;font-size:.9rem;display:flex}.shot img{object-fit:cover;border-radius:4px;flex-shrink:0;width:48px;height:48px}.shot span{overflow-wrap:anywhere;min-width:0}.shot .btn{flex-shrink:0;margin-left:auto}.shot-pending{color:var(--muted)}.review-grid{grid-template-columns:minmax(280px,1fr) minmax(0,680px);align-items:start;gap:2rem;margin-top:1rem;display:grid}.review-wrap.no-photo{max-width:720px;margin-inline:auto}.review-wrap.no-photo .review-grid{grid-template-columns:1fr}.review-photo{object-fit:contain;object-position:top;border-radius:var(--radius);border:1px solid var(--border);width:100%;max-height:calc(100vh - 6rem);position:sticky;top:4rem}@media (width<=800px){.review-grid{grid-template-columns:1fr}.review-photo{object-fit:contain;background:var(--surface);max-height:320px;position:static}}.review-form{flex-direction:column;gap:1rem;display:flex}.review-form .panel{align-self:stretch}.review-form .panel h2{font-size:1.25rem}.review-form textarea{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);resize:vertical;border-radius:6px;margin-top:.25rem;padding:.5rem .6rem;line-height:1.5;display:block}.review-form textarea:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.field-pair{grid-template-columns:1fr 2fr;gap:.8rem;display:grid}.ing-rows{flex-direction:column;gap:.45rem;margin-bottom:.7rem;display:flex}.ing-row{grid-template-columns:4.5rem 5.5rem 1.4fr 1fr 6.2rem 2rem;align-items:center;gap:.4rem;display:grid}.ing-row input,.ing-row select{margin:0;padding:.4rem .5rem;font-size:.9rem}.ing-row .row-remove{text-align:center;padding:.25rem 0;line-height:1.2}@media (width<=700px){.field-pair{grid-template-columns:1fr;gap:0}.ing-row{grid-template-columns:4rem 5rem 1fr 2rem}.ing-row input[name=ingPrep]{grid-column:1/3}.ing-row select{grid-column:3/5}}.cat-chips{margin-bottom:.8rem}.cat-chips .chip{align-items:center;gap:.3rem;padding:.2rem .4rem .2rem .7rem;font-size:.9rem;display:inline-flex}.chip-remove{color:inherit;font:inherit;cursor:pointer;opacity:.7;background:0 0;border:none;padding:0;font-size:1.05rem;line-height:1}.chip-remove:hover{opacity:1}.cat-add{gap:.5rem;margin-top:.6rem;display:flex}.cat-add select,.cat-add input{flex:1;width:auto;margin:0;padding:.4rem .5rem;font-size:.9rem}.cat-add .btn{flex:none}.dup-warning{background:#fdf6ec;border-color:#dcb277}.dup-warning h2{color:#9a6b1f}.dup-warning ul{margin:.4rem 0;padding-left:1.2rem}.dup-warning a{color:var(--accent);text-decoration:underline}.data-page{flex-direction:column;gap:1rem;max-width:720px;display:flex}.data-page .panel h2{margin-top:0}.import-report{border-top:1px solid var(--border);margin-top:.8rem;padding-top:.8rem}.dup-pairs{margin:0;padding:0;list-style:none}.dup-pairs li{border-bottom:1px dashed var(--border);padding:.45rem 0;font-size:.95rem}.dup-pairs li:last-child{border-bottom:none}.dup-pairs a{color:var(--accent);text-decoration:underline}
