:root{font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif;color:#253d34;background:#f7f6f1;font-synthesis:none;--green:#31594b;--muted:#7a837b;--line:#e4e7df;--orange:#be6844}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer;border:0;border-radius:12px;padding:12px 18px;background:#eaf0e8;color:var(--green);font-weight:650}button:hover{filter:brightness(.96)}button:disabled{opacity:.45;cursor:wait}a{color:var(--green)}input,select{border:1px solid #d9dfd4;background:white;border-radius:9px;padding:11px;max-width:100%;min-width:0;color:#253d34}input[type=checkbox]{accent-color:var(--green);width:18px;height:18px}h1,h2,h3,p{margin:0}h1{font-size:36px;font-weight:700;letter-spacing:-1px}h2{font-size:23px}h3{font-size:17px}small,.muted{color:var(--muted)}small{font-size:12px}.shell{display:grid;grid-template-columns:230px 1fr;min-height:100vh}.sidebar{padding:34px 22px;background:#fff;border-right:1px solid var(--line);position:sticky;top:0;height:100vh;display:flex;flex-direction:column}.brand{font-weight:750;font-size:22px;display:flex;align-items:center;gap:12px;margin-bottom:48px}.brand-icon{width:42px;height:42px;background:var(--green);color:#fff;border-radius:14px;display:grid;place-items:center;font-size:25px}.brand small{display:block;font-weight:400;font-size:10px;letter-spacing:3px;margin-top:5px}.nav{display:grid;gap:9px}.nav button{text-align:left;background:transparent;color:#727e73;padding:16px}.nav button.active{background:#edf2eb;color:var(--green)}.nav span{font-size:18px;margin-right:12px}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding-top:20px;font-size:12px;line-height:1.8;color:var(--muted)}main{padding:40px 4vw 60px;max-width:1450px;width:100%}.topline{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--muted);margin-bottom:35px}.pill{display:inline-flex;align-items:center;gap:6px;padding:7px 10px;border-radius:99px;background:#eaf0e6;color:var(--green);font-size:12px}.hero{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:28px}.hero p{margin-top:12px;color:var(--muted);font-size:14px;line-height:1.8}.primary{background:var(--green);color:white}.outline{background:transparent;border:1px solid #ced7ca}.danger{color:#a64530;background:#faeee8}.tiny{padding:8px 11px;font-size:12px;border-radius:8px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:28px}.stat{border:1px solid var(--line);border-radius:16px;padding:18px 22px;background:#fff}.stat strong{font-size:24px;display:block;margin-bottom:5px}.stat small{font-size:12px}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin:22px 0}.week button{display:grid;gap:7px;justify-items:center;padding:13px 4px;background:#fff;border:1px solid var(--line);font-size:12px;font-weight:400}.week button strong{font-size:19px}.week button.active{background:var(--green);color:#fff;border-color:var(--green)}.section-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:24px 0 16px}.section-row p{margin-top:5px;font-size:12px;color:var(--muted)}.meal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.meal{background:white;border:1px solid var(--line);border-radius:18px;overflow:hidden}.meal-head{padding:20px 20px 16px;border-bottom:1px solid #f0f1eb;display:flex;justify-content:space-between;align-items:center}.meal-head h3{font-size:16px;margin-bottom:6px}.meal-head small{font-size:11px}.meal-symbol{font-size:24px;color:#c29262}.dish{padding:18px 20px;border-bottom:1px solid #f0f1eb}.dish:last-child{border:0}.dish-main{display:flex;gap:12px;align-items:center;margin-bottom:14px}.food-icon{background:#f4f2e8;width:54px;height:54px;border-radius:15px;display:grid;place-items:center;font-size:29px;flex-shrink:0}.dish h3{line-height:1.5;font-size:15px}.dish small{font-size:11px}.actions{display:flex;gap:8px;flex-wrap:wrap}.actions button{flex:1;white-space:nowrap}.meal-note{padding:14px 20px;font-size:11px;line-height:1.8;background:#fafbf7;color:var(--muted)}.banner{padding:19px 22px;background:#ecefe4;border-radius:14px;display:flex;gap:16px;align-items:center;margin-top:22px;font-size:13px;line-height:1.8}.banner strong{display:block;color:var(--green)}.banner-icon{font-size:27px}.panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:24px;margin-bottom:18px}.panel>p{color:var(--muted);font-size:13px;line-height:1.8;margin-top:8px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:20px}label.field{display:grid;gap:8px;font-size:13px}fieldset{border:0;border-top:1px solid var(--line);padding:20px 0 0;margin:24px 0}legend{font-weight:650;padding-right:12px;font-size:14px}.checks{display:flex;flex-wrap:wrap;gap:10px}.check{display:flex;align-items:center;gap:7px;font-size:13px;padding:9px 12px;background:#f7f8f3;border-radius:9px}.hint{font-size:12px;color:var(--muted);line-height:1.8;margin:12px 0}.list{display:grid;gap:10px;margin-top:18px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;border-bottom:1px solid var(--line)}.row:last-child{border:0}.row strong{font-size:14px}.row small{display:block;margin-top:6px}.amount{text-align:right;font-size:15px;white-space:nowrap}.amount small{font-size:11px}.two-col{display:grid;grid-template-columns:1.1fr 1fr;gap:20px}.empty{text-align:center;padding:60px 20px;line-height:2;color:var(--muted)}.empty .big{font-size:50px}.empty h2{color:var(--green);margin:16px 0}.tag{font-size:11px;background:#f3f0e6;color:#91784c;padding:4px 7px;border-radius:6px;display:inline-block;margin-top:5px}.expired{color:#b05839}.login{max-width:420px;margin:15vh auto;padding:28px}.login .brand{margin-bottom:24px}.login form{display:grid;gap:16px;margin-top:24px}.loading{text-align:center;margin:25vh 0;color:var(--muted)}dialog{border:0;border-radius:20px;padding:28px;width:min(580px,calc(100% - 28px));max-height:85vh;box-shadow:0 25px 80px #233a3333;color:#253d34}dialog::backdrop{background:#20332977;backdrop-filter:blur(3px)}.modal-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.source{display:block;padding:14px;background:#f3f6ef;border-radius:10px;margin:10px 0;text-decoration:none;font-size:14px}.source small{display:block;margin-top:6px}.recipe-ingredients{line-height:2;font-size:13px}.candidate{display:flex;align-items:center;text-align:left;width:100%;gap:14px;margin:10px 0;padding:15px}.candidate small{display:block;margin-top:5px}#toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);max-width:90%;padding:14px 22px;border-radius:13px;background:#253d34;color:white;font-size:14px;z-index:10;display:none;box-shadow:0 8px 30px #0002}#toast.show{display:block}.offline{background:#fff0d8;color:#91632c;padding:10px;text-align:center;font-size:13px}.saved{font-size:12px;color:var(--muted);margin-left:12px}.full{grid-column:1/-1}.subheading{font-size:11px;letter-spacing:2px;color:#a0a78d;text-transform:uppercase;margin-bottom:10px}.link-button{background:none;padding:0;text-decoration:underline}.warning{color:#a55d36}.shopping-columns{display:grid;grid-template-columns:1fr auto;gap:20px}.view-footer{font-size:11px;color:#8c958b;line-height:1.8;margin-top:24px}.mobile-only{display:none}
@media(min-width:1450px){main{padding-left:65px;padding-right:65px}}@media(max-width:1000px){.shell{grid-template-columns:190px 1fr}.sidebar{padding:28px 15px}.meal-grid{grid-template-columns:1fr}.meal{display:grid;grid-template-columns:150px 1fr}.meal-head{border-bottom:0;align-items:flex-start}.meal-note{grid-column:1/-1}.meal .dish{grid-column:2}.meal .dish:nth-child(2){grid-row:1}.two-col{grid-template-columns:1fr}h1{font-size:30px}.stats{gap:8px}.stat{padding:15px}.stat strong{font-size:21px}}@media(max-width:640px){.shell{display:block}.sidebar{position:fixed;bottom:0;top:auto;left:0;right:0;height:auto;z-index:5;padding:7px 8px max(8px,env(safe-area-inset-bottom));border:0;border-top:1px solid var(--line)}.sidebar .brand,.sidebar-foot{display:none}.nav{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}.nav button{padding:8px 3px;font-size:11px;text-align:center;border-radius:9px}.nav span{display:block;margin:0 0 5px;font-size:19px}.nav button.active{background:transparent}.nav button.active span{color:var(--orange)}main{padding:24px 18px 100px}.topline{margin-bottom:26px;font-size:11px}.hero{align-items:flex-start;gap:12px}.hero h1{font-size:28px}.hero p{font-size:12px;max-width:220px}.hero>button{padding:11px 12px;font-size:12px;white-space:nowrap}.stats{gap:7px;margin-bottom:22px}.stat{padding:13px 10px}.stat strong{font-size:20px}.stat small{font-size:10px}.week{gap:5px}.week button{font-size:10px;padding:12px 2px}.week button strong{font-size:17px}.meal{display:block}.meal-head{border-bottom:1px solid var(--line);align-items:center;padding:17px}.dish{padding:16px 17px}.meal-grid{gap:16px}.form-grid{grid-template-columns:1fr}.panel{padding:19px}.banner{padding:16px;font-size:12px}.section-row h2{font-size:20px}.row{gap:8px}.two-col{gap:0}.check{font-size:12px;padding:8px}.login{margin:12vh 18px}.shopping-columns{grid-template-columns:1fr}.mobile-only{display:block}.saved{display:block;margin:10px 0 0}}
.banner button{flex-shrink:0;white-space:nowrap}

.library-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.recipe-card{margin:0}.tags{display:flex;flex-wrap:wrap;gap:6px;min-height:28px}.rating{display:flex;align-items:center;gap:3px;margin-top:12px;flex-wrap:wrap}.star{background:transparent;color:#d2d7ca;padding:3px;font-size:25px}.star.selected{color:#be8644}.rating small{margin-left:8px}.filter-row{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:10px;margin:18px 0}.editor-row{display:grid;grid-template-columns:1.3fr 1fr auto;gap:8px;margin:10px 0}.editor-source{grid-template-columns:1fr 1.7fr auto}.history-day{padding:16px 0;border-bottom:1px solid var(--line)}.history-day p{font-size:13px;line-height:1.9;margin-top:6px}.history-day strong{margin-right:10px}.recipe-card .actions{margin-top:12px}.filter-row input{width:100%}@media(max-width:850px){.library-grid{grid-template-columns:1fr}.filter-row{grid-template-columns:1fr 1fr}.filter-row input{grid-column:1/-1}}@media(max-width:640px){.nav{grid-template-columns:repeat(6,1fr)}.nav button{font-size:10px}.editor-row{grid-template-columns:1.4fr 1fr auto}.editor-row input,.editor-row select{padding:9px 6px;font-size:12px}.editor-source{grid-template-columns:1fr auto}.editor-source input[name=sourceUrl]{grid-row:2;grid-column:1/-1}.editor-source button{grid-column:2;grid-row:1}.library-grid .actions button{font-size:11px}.filter-row{gap:8px}}

.ingredient-preferences{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.editor-ingredient{grid-template-columns:1.2fr .7fr 1fr auto}@media(max-width:640px){.ingredient-preferences{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.ingredient-preferences select{font-size:12px;padding:10px 4px}.editor-ingredient{grid-template-columns:1.2fr 1fr}.editor-ingredient button{justify-self:end}}

textarea{width:100%;font:inherit;border:1px solid #d8ded5;border-radius:12px;padding:12px;resize:vertical}.import-text{white-space:pre-wrap;overflow-wrap:anywhere}

.app-tools{display:flex;justify-content:flex-end;gap:8px;margin:-12px 0 22px}.install-guide{display:grid;gap:18px;line-height:1.8}.install-guide img{border-radius:20px}@media(max-width:640px){main{padding-top:max(22px,env(safe-area-inset-top));padding-bottom:calc(110px + env(safe-area-inset-bottom))}input,select,textarea{font-size:16px}.editor-row input,.editor-row select{font-size:16px}dialog{max-height:85dvh}.topline{gap:8px}.app-tools button{min-height:44px}.nav button{min-height:52px}}

.apk-link{display:inline-block;text-decoration:none;border-radius:12px;padding:12px 18px}

.android-header{display:grid;grid-template-columns:64px minmax(0,1fr) 64px;align-items:center;gap:12px;padding:10px 18px;background:#f7f6f1;border-bottom:1px solid var(--line);min-height:64px}.android-header strong{text-align:center;font-size:20px;line-height:1.5;white-space:nowrap}.android-header button{min-height:44px;padding:8px;font-size:14px;border-radius:12px}.android-header button:disabled{cursor:default;opacity:.35}.app-tools:empty{display:none}

.history-card .section-row{flex-wrap:wrap;gap:10px}.history-card .section-row>div{flex-basis:100%}.history-card .section-row button{white-space:nowrap;flex-shrink:0}.history-card h2{font-size:20px}

.meal-controls{padding:12px 20px}.meal-controls button{width:100%}.meal .empty{padding:28px 20px}

/* Meal staple picker */
.staple-form{display:grid;gap:20px}.staple-intro{font-size:14px;color:var(--green);font-weight:650}.staple-intro span{display:block;font-size:12px;font-weight:400;color:var(--muted);margin-top:6px}.staple-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;border:0;padding:2px;margin:0;max-height:36vh;overflow:auto;overscroll-behavior:contain}.staple-choice{position:relative;cursor:pointer}.staple-choice input{position:absolute;opacity:0;width:1px;height:1px}.staple-choice>span{display:grid;gap:5px;padding:14px 10px;border:1px solid var(--line);border-radius:14px;background:#fafbf7;min-height:96px;text-align:center;transition:background .15s,border-color .15s}.staple-choice b{font-size:23px;font-weight:400}.staple-choice strong{font-size:13px}.staple-choice small{font-size:10px}.staple-choice input:checked+span{border-color:var(--green);background:#eaf2e8;box-shadow:inset 0 0 0 1px var(--green)}.staple-choice input:focus-visible+span{outline:3px solid #a4beaa;outline-offset:2px}.staple-amount{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:end;background:#f4f5ee;border-radius:14px;padding:16px}.staple-input{display:flex;align-items:center;gap:8px}.staple-input input{width:100%;background:white}.staple-input span{font-size:13px;color:var(--muted)}.staple-total{display:grid;gap:9px;text-align:right;padding-bottom:10px}.staple-total strong{font-size:22px}.staple-help{font-size:12px;line-height:1.7;color:var(--muted)}.staple-save{width:100%;padding:14px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@media(max-width:420px){.staple-options{grid-template-columns:repeat(2,minmax(0,1fr))}.staple-amount{gap:14px}.staple-total strong{font-size:20px}}

dialog:has(.staple-form){padding:24px;max-height:calc(100dvh - 48px)}
