:root{--brand: #2f7d52;--brand-dark: #1f5637;--brand-soft: #eaf5ee;--accent: #e8b04b;--bg: #f6f8f5;--card: #ffffff;--text: #1f2a24;--muted: #667a70;--border: #dfe8e2;--green: #14532d;--red: #c0392b;--radius: 14px;--shadow: 0 1px 3px rgba(31, 58, 44, .07), 0 1px 2px rgba(31, 58, 44, .04);--spring: cubic-bezier(.34, 1.56, .64, 1)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.45}button{font:inherit;cursor:pointer}input,select{font:inherit}.app{max-width:1200px;margin:0 auto;padding:0 20px 80px}.header{position:sticky;top:0;z-index:40;background:linear-gradient(135deg,#3a8f60 0%,var(--brand) 45%,var(--brand-dark) 100%);color:#fff;margin:0 -20px 20px;padding:0 20px;box-shadow:var(--shadow)}.header-inner{max-width:1160px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:12px 0}.logo{font-size:20px;font-weight:800;letter-spacing:-.3px;display:flex;align-items:center;gap:8px}.logo .spark{color:var(--accent)}.nav{display:flex;gap:4px;flex:1;flex-wrap:wrap}.nav button{background:transparent;border:none;color:#ffffffd9;padding:8px 14px;border-radius:99px;font-weight:600;font-size:14px;transition:background .12s,color .12s,transform .12s var(--spring)}.nav button:hover{background:#ffffff26;color:#fff;transform:translateY(-1px)}.nav button.active{background:#fff;color:var(--brand-dark);font-weight:750}.nav button .badge{background:var(--accent);color:#3d2c06;border-radius:99px;font-size:11px;font-weight:800;padding:1px 7px;margin-left:6px}.nav button.active .badge{background:var(--brand);color:#fff}.family-control{display:flex;align-items:center;gap:8px;background:#ffffff24;border-radius:99px;padding:5px 10px}.family-control .fc-label{font-size:12px;font-weight:600;opacity:.9}.family-control button{width:26px;height:26px;border-radius:50%;border:none;background:#fff;color:var(--brand);font-weight:800;font-size:15px;display:flex;align-items:center;justify-content:center}.family-control button:disabled{opacity:.4;cursor:default}.family-control .fc-num{font-weight:800;font-size:16px;min-width:20px;text-align:center}.family-control .fc-label-short{display:none}@media (max-width: 640px){.header{margin-bottom:14px}.header-inner{padding:8px 0 7px;gap:8px;row-gap:7px}.logo{font-size:15.5px;gap:5px;flex:1;min-width:0}.nav{order:3;flex-basis:100%;flex-wrap:nowrap;gap:3px}.nav button{flex:1;padding:6px 2px;font-size:12px;white-space:nowrap}.nav button .badge{font-size:10px;padding:0 5px;margin-left:3px}.family-control{padding:3px 7px;gap:6px}.family-control .fc-label{display:none}.family-control .fc-label-short{display:inline;font-size:13px}.family-control button{width:23px;height:23px;font-size:14px}.family-control .fc-num{font-size:14px;min-width:15px}}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.section-title{font-size:18px;font-weight:800;margin:22px 0 12px}.muted{color:var(--muted)}.small{font-size:13px}.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:16px}.filters input[type=search]{flex:1;min-width:200px;padding:9px 14px;border:1px solid var(--border);border-radius:99px;background:#fff;outline:none}.filters input[type=search]:focus{border-color:var(--brand)}.filters select{padding:8px 12px;border:1px solid var(--border);border-radius:99px;background:#fff}.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.chip{border:1px solid var(--border);background:#fff;color:var(--text);padding:6px 14px;border-radius:99px;font-size:13px;font-weight:600;transition:background .12s,border-color .12s,color .12s,transform .14s var(--spring)}.chip:hover{border-color:var(--brand);color:var(--brand-dark);transform:translateY(-1px)}.chip.active{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 3px 10px #2f7d5247}.chip.active:hover{color:#fff}.chip .count{opacity:.65;font-weight:500;margin-left:4px}.recipe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:14px}.recipe-card{display:flex;flex-direction:column;overflow:hidden;transition:transform .18s var(--spring),box-shadow .18s;position:relative}.fav-btn{position:absolute;top:12px;right:12px;z-index:2;border:none;background:none;padding:0;color:#b9c5bd;font-size:16px;line-height:1;transition:transform .1s,color .1s}.fav-btn:hover{transform:scale(1.15);color:var(--red)}.fav-btn.on{color:var(--red)}.fav-btn.inline{position:static;vertical-align:middle;font-size:17px;margin-left:2px}.pi-heart{color:var(--red)}.recipe-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px #1f563726}.rc-top{padding:14px 16px 6px;cursor:pointer;flex:1}.rc-cuisine{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--brand)}.rc-name{font-size:16px;font-weight:700;margin:3px 0 8px}.rc-meta{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.rc-bottom{display:flex;align-items:center;justify-content:space-between;padding:10px 16px 14px;gap:8px}.rc-price{display:flex;flex-direction:column}.rc-price .total{font-size:17px;font-weight:800;color:var(--green)}.rc-price .per{font-size:11.5px;color:var(--muted)}.btn{border:none;border-radius:11px;padding:8px 14px;font-weight:700;font-size:13.5px;background:var(--brand);color:#fff;transition:background .12s,transform .14s var(--spring),box-shadow .14s}.btn:hover{background:var(--brand-dark);transform:translateY(-1.5px);box-shadow:0 6px 14px #1f563738}.btn:active{transform:translateY(0) scale(.97);box-shadow:none}.btn.secondary{background:#edf2ee;color:var(--text)}.btn.secondary:hover{background:#e1eae3}.btn.ghost{background:transparent;color:var(--brand)}.btn.small{padding:5px 10px;font-size:12.5px}.btn.danger{background:#fdecea;color:var(--red)}.pill{border-radius:99px;padding:2px 9px;font-size:11.5px;font-weight:700}.pill.h5{background:#d7f2e0;color:#14683a}.pill.h4{background:#e2f4d9;color:#3a7418}.pill.h3{background:#fdf3d0;color:#8a6d0d}.pill.h2{background:#ffe4cc;color:#a4511a}.pill.h1{background:#fdd9d5;color:#a3271b}.pill.time{background:#e9f0ec;color:#3c5b4b}.pill.tag{background:#f1f2ef;color:#5a6560;font-weight:600}.pill.five{background:#e6e0f8;color:#4d3a99}.stars{color:#cdd8d0;font-size:13px;letter-spacing:1px}.stars .on{color:var(--green)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}.modal{background:#fff;border-radius:16px;max-width:660px;width:100%;padding:26px 28px;position:relative;margin-bottom:40px}.modal-close{position:absolute;top:14px;right:14px;border:none;background:#edf2ee;width:32px;height:32px;border-radius:50%;font-size:16px;font-weight:700}.modal h2{font-size:22px;margin:2px 0 4px}.detail-meta{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 14px}.detail-cols{display:grid;grid-template-columns:1fr 1.2fr;gap:22px}@media (max-width: 640px){.detail-cols{grid-template-columns:1fr}}.detail-cols h3{font-size:14px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:8px}.ing-list{list-style:none}.ing-list li{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px dashed var(--border);font-size:13.5px}.ing-list li .cost{color:var(--muted);white-space:nowrap}.steps-list{padding-left:20px}.steps-list li{margin-bottom:8px;font-size:13.5px}.detail-pricebar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;background:var(--brand-soft);border:1px solid #c9e2d3;border-radius:10px;padding:12px 16px;margin:16px 0}.detail-pricebar .big{font-size:20px;font-weight:800;color:var(--green)}.planner-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:16px}.budget-box{padding:14px 18px;margin-bottom:18px}.budget-row{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:8px}.budget-row .amount{font-size:22px;font-weight:800}.budget-row .amount.over{color:var(--red)}.budget-row .amount.under{color:var(--green)}.budget-bar{height:10px;background:#e6ede8;border-radius:99px;overflow:hidden}.budget-bar .fill{height:100%;border-radius:99px;background:var(--green);transition:width .3s}.budget-bar .fill.warn{background:#e8a213}.budget-bar .fill.over{background:var(--red)}.week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:10px}@media (max-width: 1000px){.week-grid{grid-template-columns:repeat(4,1fr)}}@media (max-width: 700px){.week-grid{grid-template-columns:repeat(2,1fr)}}.day-col{padding:10px;display:flex;flex-direction:column;gap:8px;min-height:180px}.dinner-grid .day-col{min-height:150px}.dinner-slot{flex:1}.side-slot{background:#fbfcfa}.side-slot .slot-label{color:#8b7bc2}.day-col h4{font-size:13px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);text-align:center}.slot{border:1px dashed var(--border);border-radius:8px;padding:7px 8px;font-size:12px}.slot .slot-label{font-size:10px;text-transform:uppercase;color:var(--muted);font-weight:700;letter-spacing:.5px}.slot.filled{border-style:solid;background:#f4faf6;border-color:#c9e2d3}.slot .meal-name{font-weight:700;font-size:12.5px;margin:2px 0;cursor:pointer;color:var(--brand-dark)}.slot .meal-cost{color:var(--green);font-weight:700;font-size:11.5px}.slot .add-btn{width:100%;border:none;background:transparent;color:var(--muted);font-size:12px;padding:4px;font-weight:600}.slot .add-btn:hover{color:var(--brand)}.slot .remove{border:none;background:transparent;color:var(--red);font-size:11px;padding:0;font-weight:600}.picker-list{max-height:420px;overflow-y:auto;margin-top:12px}.picker-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 6px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:6px}.picker-item:hover{background:var(--brand-soft)}.picker-item .pi-name{font-weight:600;font-size:14px}.picker-item .pi-price{color:var(--green);font-weight:700;white-space:nowrap}.grocery-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:16px}.grocery-totals{padding:16px 20px;margin-bottom:18px;display:flex;gap:30px;flex-wrap:wrap}@media (max-width: 640px){.grocery-totals{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px;padding:14px 16px}.gt-item .gt-value{font-size:19px}.gt-item .gt-label{font-size:11px}}.gt-item .gt-label{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.4px}.gt-item .gt-value{font-size:22px;font-weight:800}.gt-item .gt-value.green{color:var(--green)}.grocery-section{margin-bottom:20px}.grocery-section h3{font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:var(--brand-dark);margin-bottom:8px;padding-left:4px}.grocery-item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border)}.grocery-item:last-child{border-bottom:none}.grocery-item input[type=checkbox]{width:17px;height:17px;accent-color:var(--green);flex-shrink:0}.grocery-item.checked .gi-name{text-decoration:line-through;opacity:.5}.gi-main{flex:1;min-width:0}.gi-name{font-weight:600;font-size:14px}.gi-detail{font-size:12px;color:var(--muted)}.gi-price{font-weight:700;color:var(--text);white-space:nowrap}.side-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-top:14px;max-height:420px;overflow-y:auto}.side-card{border:1px solid var(--border);border-radius:10px;background:#fff;padding:10px 12px;text-align:left;display:flex;flex-direction:column;gap:6px}.side-card:hover{border-color:var(--brand);background:var(--brand-soft)}.side-card .sc-name{font-weight:700;font-size:13.5px}.side-card .sc-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.side-card .sc-price{color:var(--green);font-weight:800;font-size:14px}.empty-state{text-align:center;padding:60px 20px;color:var(--muted)}.empty-state .big-emoji{font-size:42px;margin-bottom:12px}.onboard-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:linear-gradient(135deg,var(--brand) 0%,var(--brand-dark) 100%);display:flex;align-items:center;justify-content:center;padding:20px;overflow-y:auto}.onboard-card{background:#fff;border-radius:18px;max-width:520px;width:100%;padding:32px 34px;box-shadow:0 20px 60px #0000004d;margin:auto}.onboard-card h1{font-size:24px;margin-bottom:4px}.onboard-card .step-dots{display:flex;gap:6px;margin:14px 0 22px}.step-dots span{width:28px;height:5px;border-radius:99px;background:var(--border)}.step-dots span.on{background:var(--accent)}.form-group{margin-bottom:18px}.form-group label{display:block;font-weight:700;font-size:14px;margin-bottom:6px}.form-group .hint{font-size:12.5px;color:var(--muted);margin-bottom:8px}.form-group input[type=text],.form-group input[type=number]{width:100%;padding:10px 14px;border:1.5px solid var(--border);border-radius:10px;outline:none}.form-group input:focus{border-color:var(--brand)}.size-picker{display:flex;gap:8px;flex-wrap:wrap}.size-picker button{width:44px;height:44px;border-radius:10px;border:1.5px solid var(--border);background:#fff;font-weight:800;font-size:16px}.size-picker button.active{background:var(--brand);border-color:var(--brand);color:#fff}.option-cards{display:grid;gap:10px}.option-card{border:1.5px solid var(--border);border-radius:10px;padding:12px 14px;background:#fff;text-align:left;display:flex;gap:10px;align-items:center}.option-card.active{border-color:var(--brand);background:var(--brand-soft)}.option-card .oc-title{font-weight:700;font-size:14px}.option-card .oc-sub{font-size:12.5px;color:var(--muted)}.check-row{display:flex;align-items:center;gap:10px;padding:8px 2px;font-size:14px;font-weight:600}.check-row input{width:17px;height:17px;accent-color:var(--brand)}.onboard-nav{display:flex;justify-content:space-between;margin-top:26px}.onboard-nav .btn{padding:11px 22px;font-size:15px}.profile-card{max-width:560px;padding:24px 28px}.profile-card h3{margin:18px 0 10px;font-size:15px}.budget-input-row{display:flex;align-items:center;gap:8px}.budget-input-row input{width:120px;padding:9px 12px;border:1.5px solid var(--border);border-radius:10px}.portal-card{max-width:480px}.portal-tile{display:flex;align-items:center;gap:14px;text-decoration:none;color:var(--text);border:1.5px solid var(--border);border-radius:12px;padding:14px 16px;margin-bottom:10px;transition:border-color .1s,background .1s}.portal-tile:hover{border-color:var(--brand);background:var(--brand-soft)}.portal-tile .pt-emoji{font-size:26px}.portal-tile .pt-name{display:block;font-weight:800;font-size:15px}.portal-tile .pt-desc{display:block;font-size:12.5px;color:var(--muted)}.portal-tile .pt-arrow{margin-left:auto;color:var(--brand);font-weight:800;font-size:18px}.auth-loading{min-height:100vh;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;color:var(--muted)}.auth-main{width:100%;padding:12px;font-size:15px;margin-top:4px}.auth-links{display:flex;justify-content:space-between;margin-top:14px;flex-wrap:wrap;gap:8px}.linklike{background:none;border:none;color:var(--brand);font-weight:600;font-size:13.5px;padding:0}.linklike:hover{text-decoration:underline}.auth-error{background:#fdecea;color:var(--red);border-radius:10px;padding:10px 14px;font-size:13.5px;font-weight:600;margin-bottom:14px}.auth-notice{background:#e9f7ee;color:var(--green);border-radius:10px;padding:10px 14px;font-size:13.5px;font-weight:600;margin-bottom:14px}.form-group input[type=password]{width:100%;padding:10px 14px;border:1.5px solid var(--border);border-radius:10px;outline:none}.form-group input[type=password]:focus{border-color:var(--brand)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--text);color:#fff;padding:11px 22px;border-radius:99px;font-weight:600;font-size:14px;z-index:300;box-shadow:0 6px 20px #00000040;animation:toast-in .2s ease}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.landing{max-width:1080px;margin:0 auto;padding:0 20px 70px}.lp-nav{display:flex;align-items:center;justify-content:space-between;padding:20px 2px 0}.lp-logo{font-size:19px;font-weight:800;letter-spacing:-.3px;color:var(--brand-dark)}.lp-signin{font-size:14.5px}.lp-hero{text-align:center;padding:52px 0 44px}.lp-hero h1{font-size:46px;line-height:1.08;font-weight:800;letter-spacing:-1.1px;margin-bottom:16px}.lp-hero h1 em{font-style:normal;color:var(--brand)}.lp-sub{font-size:17.5px;line-height:1.55;color:var(--muted);max-width:560px;margin:0 auto 28px}.lp-cta{padding:14px 30px;font-size:16px;border-radius:99px}.lp-note{font-size:13px;color:var(--muted);margin-top:14px}.lp-steps{display:flex;flex-direction:column;gap:60px;padding:20px 0 10px}.lp-step{display:grid;grid-template-columns:300px 1fr;gap:46px;align-items:center}.lp-step:nth-child(2n){grid-template-columns:1fr 300px}.lp-step:nth-child(2n) .lp-shot{order:2}.lp-shot{position:relative;max-width:300px;width:100%;border-radius:26px;overflow:hidden;background:var(--card);border:1px solid var(--border);box-shadow:0 18px 40px #1f563724}.lp-shot:after{content:"";position:absolute;left:0;right:0;bottom:0;height:84px;background:linear-gradient(to bottom,#fff0,#fff 88%);pointer-events:none}.lp-shot img{display:block;width:100%;height:auto}.lp-num{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--accent);color:#3d2c06;font-weight:800;font-size:16px;margin-bottom:12px}.lp-copy h2{font-size:27px;font-weight:800;letter-spacing:-.5px;margin-bottom:8px}.lp-copy p{font-size:16.5px;line-height:1.55;color:var(--muted);max-width:430px}.lp-end{text-align:center;margin-top:70px;padding:46px 24px;border-radius:24px;color:#fff;background:linear-gradient(135deg,#3a8f60 0%,var(--brand) 45%,var(--brand-dark) 100%)}.lp-end h2{font-size:27px;font-weight:800;letter-spacing:-.5px;margin-bottom:20px}.lp-end .lp-cta{background:#fff;color:var(--brand-dark)}.lp-end .lp-cta:hover{background:#f3fbf6}.lp-alt{display:block;margin:16px auto 0;color:#ffffffe6}@media (max-width: 760px){.lp-hero{padding:36px 0 32px}.lp-hero h1{font-size:33px;letter-spacing:-.7px}.lp-sub{font-size:16px;margin-bottom:22px}.lp-steps{gap:44px}.lp-step{grid-template-columns:1fr;gap:20px;justify-items:center;text-align:center}.lp-step:nth-child(2n) .lp-shot{order:0}.lp-shot{max-width:265px}.lp-copy p{margin:0 auto}.lp-copy h2{font-size:23px}.lp-end{margin-top:54px;padding:38px 20px}.lp-end h2{font-size:23px}}.lp-counter{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px 4px;margin-top:30px;font-size:13.5px;color:var(--muted);animation:counter-in .45s ease both}.lp-stat{display:inline-flex;align-items:center;white-space:nowrap}.lp-counter .odo{display:inline-flex;gap:3px;margin:0 7px;vertical-align:middle}.lp-counter .digit{background:linear-gradient(180deg,#2a6f49 0%,var(--brand-dark) 100%);color:#fff;font-weight:800;font-size:15px;font-variant-numeric:tabular-nums;border-radius:5px;padding:3px 7px;box-shadow:inset 0 -1.5px #00000047,0 1px 2px #1f563740}@keyframes counter-in{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.lp-counter-sep{margin:0 4px;opacity:.5}.share-banner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;background:linear-gradient(135deg,#3a8f60 0%,var(--brand) 50%,var(--brand-dark) 100%);color:#fff;border-radius:var(--radius);padding:15px 18px;margin-bottom:18px;box-shadow:0 6px 18px #1f563738;animation:counter-in .4s ease both}.sb-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.sb-copy strong{font-size:15.5px;font-weight:800}.sb-copy span{font-size:13.5px;color:#ffffffe6}.sb-actions{display:flex;align-items:center;gap:8px}.sb-x{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--brand-dark);text-decoration:none;border-radius:99px;padding:9px 17px;font-weight:750}.sb-x:hover{background:#f3fbf6;color:var(--brand-dark)}.sb-x svg{width:14px;height:14px;fill:currentColor}.sb-close{border:none;background:#ffffff2e;color:#fff;width:30px;height:30px;border-radius:50%;font-size:13px;font-weight:700;flex-shrink:0}.sb-close:hover{background:#ffffff4d}@media (max-width: 560px){.share-banner{flex-direction:column;align-items:stretch}.sb-actions{justify-content:space-between}}
