:root{--bg:#f6f7f5;--card:#fff;--ink:#1a1c19;--muted:#6b7280;--line:#e3e6e1;--green:#16a34a;--green-d:#15803d;--amber:#f59e0b;--red:#dc2626;--blue:#2563eb;--radius:12px}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h1,h2,h3{margin:0 0 8px}button{font:inherit;cursor:pointer}a{color:var(--blue)}.topbar{background:var(--card);border-bottom:1px solid var(--line);z-index:10;align-items:center;gap:18px;padding:12px 20px;display:flex;position:sticky;top:0}.brand{font-size:18px;font-weight:800}.brand span{color:var(--green)}.tabs{gap:4px;display:flex}.tab{color:var(--muted);background:0 0;border:none;border-radius:999px;padding:8px 14px;font-weight:600}.tab.active{color:var(--green-d);background:#eaf6ee}.wrap{max-width:1080px;margin:0 auto;padding:20px}.row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.spacer{flex:1}.btn{background:var(--green);color:#fff;border:none;border-radius:10px;padding:10px 18px;font-weight:700}.btn:hover{background:var(--green-d)}.btn.secondary{color:var(--ink);border:1px solid var(--line);background:#fff}.btn:disabled{opacity:.55;cursor:default}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.muted{color:var(--muted)}.small{font-size:13px}.banner{border-radius:var(--radius);border:1px solid;margin-bottom:16px;padding:14px 16px}.banner.OK{color:var(--green-d);background:#eaf6ee;border-color:#bfe6c9}.banner.DEGRADED{color:#9a6700;background:#fff7e6;border-color:#fde0a3}.banner.INFEASIBLE{color:var(--red);background:#fdecec;border-color:#f6c2c2}.req{border:1px solid var(--line);border-left:3px solid var(--amber);background:#fff;border-radius:8px;margin-top:8px;padding:10px 12px}.req ul{margin:6px 0 0;padding-left:18px}.proposal-tabs{gap:8px;margin:8px 0 16px;display:flex}.proposal-tab{border:1px solid var(--line);text-align:left;background:#fff;border-radius:10px;padding:8px 12px}.proposal-tab.active{border-color:var(--green);box-shadow:0 0 0 2px #eaf6ee}.proposal-tab b{display:block}.day{margin-bottom:14px}.day-head{align-items:baseline;gap:10px;margin-bottom:6px;display:flex}.day-head .date{font-weight:700}.slot{border-top:1px solid var(--line);grid-template-columns:64px 1fr auto;align-items:center;gap:12px;padding:10px 12px;display:grid}.slot:first-child{border-top:none}.slot .time{color:var(--muted);font-variant-numeric:tabular-nums}.slot .title{font-weight:600}.slot .why{color:var(--muted);font-size:12px}.slot .kcal{white-space:nowrap;font-weight:700}.slot.missing{background:#fdecec}.slot.missing .title{color:var(--red)}.slot-label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px}.totals{color:var(--muted);flex-wrap:wrap;gap:14px;padding:8px 12px;font-size:13px;display:flex}.totals b{color:var(--ink)}.badge{border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700;display:inline-block}.badge.train{color:var(--blue);background:#e7effe}.badge.gf{color:#b45309;background:#fff3e0}.badge.lf{color:#6d28d9;background:#ede9fe}.badge.veg{color:var(--green-d);background:#eaf6ee}.badge.cat{color:#495244;background:#f1f3ef}.grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;display:grid}.recipe-card{cursor:pointer}.recipe-card:hover{border-color:var(--green)}.variant-count{color:var(--green-d);font-size:12px;font-weight:700}.shop-item{border-top:1px dashed var(--line);grid-template-columns:1fr auto auto;gap:10px;padding:6px 0;display:grid}.shop-item:first-child{border-top:none}label.field{margin-bottom:10px;display:block}label.field span{color:var(--muted);margin-bottom:4px;font-size:12px;display:block}input,select{font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;width:100%;padding:8px 10px}.check{align-items:center;gap:8px;display:flex}.check input{width:auto}.modal-bg{z-index:50;background:#00000059;justify-content:center;align-items:flex-start;padding:40px 16px;display:flex;position:fixed;inset:0;overflow:auto}.modal{border-radius:var(--radius);background:#fff;width:100%;max-width:640px;padding:20px}.toast{color:#fff;z-index:60;background:#1a1c19;border-radius:10px;padding:10px 16px;position:fixed;bottom:18px;left:50%;transform:translate(-50%)}.err{color:var(--red)}.recipe-card{flex-direction:column;gap:6px;display:flex}.rtitle{min-height:38px;font-size:15px;font-weight:700;line-height:1.25}.rphoto{aspect-ratio:16/9;border-radius:8px;justify-content:center;align-items:center;font-size:42px;display:flex;position:relative}.rdiet{flex-wrap:wrap;gap:4px;min-height:20px;display:flex}.rmeta{margin-top:2px}.badge.lc{color:#0369a1;background:#e0f2fe}.badge.keto{color:#a21caf;background:#fae8ff}.badge.raw{color:#4d7c0f;background:#ecfccb}.badge.gap-missing{color:#dc2626;background:#fdecec}.badge.gap-low{color:#9a6700;background:#fff7e6}.gap-row{border-top:1px dashed var(--line);flex-wrap:wrap;align-items:baseline;gap:8px;padding:6px 0;display:flex}.gap-row:first-of-type{border-top:none}.day-totals{color:var(--muted);border-bottom:1px solid var(--line);padding:7px 12px;font-size:13px}.day-totals b{color:var(--ink)}.badge.daytype{color:#5b6358;background:#eef0ee}.slot.clickable{cursor:pointer}.slot.clickable:hover{background:#fafbf9}.macro-line{color:var(--muted);margin-top:3px;font-size:12px;display:block}.prep-ahead{color:#8a5a00;background:#fff7e6;border:1px solid #fde0a3;border-radius:8px;margin:8px 0;padding:8px 10px;font-size:13px}.prep-flag{background:#fff;border-radius:50%;padding:1px 4px;font-size:15px;position:absolute;top:6px;right:8px;box-shadow:0 1px 3px #0000002e}.nutri-grid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:6px;display:grid}.nutri{background:#f6f7f5;border-radius:7px;justify-content:space-between;gap:8px;padding:5px 9px;font-size:12.5px;display:flex}.nutri span{color:var(--muted)}.nutri.macro{background:#eaf2e8}.day.today{outline:2px solid var(--green);outline-offset:0}.badge.today-badge{background:var(--green);color:#fff}.limit-row{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0}.day-foot{border-top:1px solid var(--line);background:#fcfdfb;padding:8px 12px}.extra-row{padding:2px 0}.shop-day{border-left:4px solid var(--amber);cursor:grab;background:#fffdf7;margin-bottom:14px}.shop-day.dragging{opacity:.5;cursor:grabbing}.shop-day.urg-URGENT{border-left-color:var(--red);background:#fffbfa}.shop-day.urg-SOON{border-left-color:var(--amber)}.shop-day.urg-OK{border-left-color:var(--green)}.shop-day-head{align-items:center;gap:8px;margin-bottom:6px;display:flex}.shop-icon{font-size:18px}.drag-grip{color:var(--muted);cursor:grab;-webkit-user-select:none;user-select:none;font-size:16px}.hour-hint{border:1px solid;border-radius:8px;margin:4px 0 8px;padding:7px 10px}.hour-hint.ok{color:var(--green-d);background:#eaf6ee;border-color:#bfe6c9}.hour-hint.soon{color:#8a5a00;background:#fff7e6;border-color:#fde0a3}.hour-hint.urgent{color:var(--red);background:#fdecec;border-color:#f6c2c2}.day.drop-target{outline:2px dashed var(--blue);outline-offset:2px}.authWrap{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.authCard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);width:100%;max-width:380px;padding:28px}.authTitle{text-align:center;margin-bottom:20px}.authTabs{background:var(--bg);border-radius:10px;gap:4px;margin-bottom:16px;padding:4px;display:flex}.authTab{color:var(--muted);background:0 0;border:none;border-radius:8px;flex:1;padding:8px;font-weight:600}.authTab--on{color:var(--ink);background:#fff;box-shadow:0 1px 2px #00000014}.authForm{flex-direction:column;gap:10px;display:flex}.authInput{font:inherit;border:1px solid var(--line);border-radius:8px;padding:10px 12px}.authBtn{background:var(--green);color:#fff;border:none;border-radius:10px;padding:11px;font-weight:700}.authBtn:disabled{opacity:.55}.authLink{color:var(--blue);text-align:center;background:0 0;border:none;margin-top:10px;font-size:13px}.authErr{color:var(--red);margin-top:8px;font-size:13px}.authMsg{color:var(--green-d);margin-top:8px;font-size:13px}.authLead{color:var(--muted);margin:0 0 4px;font-size:14px}.authGoogle{width:100%;color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:10px;justify-content:center;align-items:center;gap:10px;margin-bottom:14px;padding:10px;font-weight:600;display:flex}.authGoogle:hover{background:#fafbf9}.authOr{color:var(--muted);align-items:center;gap:10px;margin-bottom:14px;font-size:12px;display:flex}.authOr:before,.authOr:after{content:"";background:var(--line);flex:1;height:1px}
