:root{--paper:#f8f6f0;--green:#254f3d;--orange:#e98550;--ink:#263f32;--muted:#60685d;--line:#dedfd3;--line-strong:#939d8c;--white:#fffefa;--cream:#fff9ed;--tint:#eef1e5;--tint-line:#c9d3bd;--hover:#f0f2e9;--moss:#b8c2ab;--moss-2:#a8b19d;--sage:#6f8a78;--accent:#ad4b20;--danger:#983923;color-scheme:light;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--paper)}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer;min-height:44px}button:disabled{cursor:not-allowed;opacity:.6}a{color:var(--green);text-underline-offset:4px}/* Focus (Cody, 2026-10-10 late: "all these orange boxes suck"). Text fields: on focus the border turns green with a 1px green shadow (a 1.5px feel) and a soft 3px halo in the tint line; no outline. Everything else is keyboard-only: a 2px green ring at 2px offset that follows the control's radius; a mouse click paints nothing. The accent orange is left to the pantry hairline and real emphasis. :where() keeps these at pseudo-class specificity so a component rule can override with one class. */:where(input:not([type=checkbox],[type=radio]),textarea,select):focus{outline:none;border-color:var(--green);box-shadow:0 0 0 1px var(--green),0 0 0 4px #c9d3bd99}:where(button,a,summary,[tabindex],input[type=checkbox],input[type=radio]):focus-visible{outline:2px solid var(--green);outline-offset:2px}:where(button,a,summary,[tabindex]):focus:not(:focus-visible){outline:none}.sidebar :focus-visible{outline-color:var(--cream)}[hidden]{display:none!important}.skip-link{position:fixed;top:-80px;left:16px;z-index:10;background:var(--white);padding:12px;min-height:44px;display:inline-flex;align-items:center}.skip-link:focus{top:12px}.wordmark{font:70px/.95 Georgia,serif;letter-spacing:-5px;text-decoration:none;color:inherit;display:inline-block;min-height:44px}.wordmark span{color:var(--orange)}h1,h2,h3,p{margin-top:0}h1{font:46px/1.12 Georgia,serif;letter-spacing:-1.3px;margin-bottom:18px}h2{font:28px/1.2 Georgia,serif;letter-spacing:-.4px}h3{font-size:17px}p{line-height:1.6}.eyebrow{font-size:11px;letter-spacing:1.5px;font-weight:700;margin-bottom:20px}.lede{color:var(--muted);font-size:16px;margin-bottom:32px;max-width:640px}.auth-layout{min-height:100dvh;display:grid;grid-template-columns:minmax(290px,.85fr) 1.15fr}.auth-aside{background:var(--green);color:var(--cream);padding:48px 60px;display:flex;flex-direction:column;justify-content:space-between;gap:64px}.auth-aside>div{max-width:365px}.auth-aside .eyebrow{color:#e6b896}.aside-title{font:clamp(38px,4.2vw,64px)/1.08 Georgia,serif;letter-spacing:-1.5px}.auth-aside p:not(.aside-title){color:#e0e6d9}.aside-footer{font-size:11px;letter-spacing:1.5px}.auth-main{padding:60px 48px;display:grid;place-items:center}.auth-card{max-width:440px;width:100%;margin:auto}.auth-card form{display:grid;gap:20px}label{display:grid;gap:8px;font-size:13px;font-weight:600;color:var(--ink)}input,select,textarea{width:100%;min-width:0;min-height:46px;background:var(--white);border:1px solid var(--line-strong);border-radius:5px;color:var(--ink);padding:12px}textarea{min-height:90px;resize:vertical}.hint,.footnote{font-size:12px;color:var(--muted);line-height:1.6}.hint{margin:0}.footnote{margin:28px 0 0}.primary,.secondary,.danger{border:1px solid transparent;border-radius:5px;padding:12px 20px;font-size:14px;font-weight:600;min-height:46px}.primary{background:var(--green);color:var(--cream)}.primary:hover{background:#193c2c}.secondary{background:var(--white);border-color:var(--line-strong);color:var(--green)}.danger{background:#fff2ea;color:var(--danger);border-color:#cfb3a9}.text-button{background:none;border:none;color:var(--green);text-decoration:underline;text-underline-offset:4px;padding:8px}.auth-switch{display:flex;gap:8px;align-items:center;margin-top:20px;font-size:13px;flex-wrap:wrap}.notice{font-size:14px;line-height:1.5;margin:20px 0;overflow-wrap:anywhere}.error{padding:14px 18px;border:1px solid #c99a83;border-radius:5px;background:#fff0e7;color:#82341f}.workspace{padding:48px;width:100%;flex:1}.app-layout{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:100dvh}.sidebar{padding:36px 24px;background:var(--green);color:var(--cream);display:flex;flex-direction:column;gap:20px;position:sticky;top:0;align-self:start;height:100dvh;overflow-y:auto}.sidebar .wordmark{font-size:66px}.house-label{font-size:12px;color:#d6e1cf;margin:0;padding-bottom:12px;overflow-wrap:anywhere}.sidebar nav{display:grid;gap:4px}.sidebar nav a{display:flex;align-items:center;color:#e7eddf;text-decoration:none;padding:12px 14px;border-radius:5px;font-size:14px;min-height:44px}.sidebar nav a:hover{background:#355f49}.sidebar nav a[aria-current]{background:#e98550;color:#233c2f;font-weight:700}.nav-label{font-size:11px;letter-spacing:1.5px;color:#cbd8c3;margin:20px 14px -8px}.sidebar-bottom{margin-top:auto;display:grid;padding-top:24px;border-top:1px solid #607960;gap:8px;font-size:11px;overflow-wrap:anywhere}.sidebar-bottom button{color:var(--cream);background:transparent;border:1px solid #80917b;border-radius:5px}.page{display:flex;flex-direction:column;min-width:0}.topbar{min-height:64px;padding:10px 48px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:16px;font-size:14px}.badge{font-size:11px;letter-spacing:0;border:1px solid var(--moss);background:var(--tint);padding:6px 10px;border-radius:30px;white-space:nowrap}.panel{padding:30px;background:var(--white);border:1px solid var(--line);border-radius:8px}.form-stack{display:grid;gap:22px;max-width:760px}.form-stack h2{margin:16px 0 0}.form-stack h2:first-child{margin:0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.form-actions{display:flex;gap:12px;justify-content:flex-end;border-top:1px solid var(--line);padding-top:22px;flex-wrap:wrap}.form-actions .primary{margin-left:auto}fieldset{border:0;padding:0;margin:0;min-width:0}legend{font-size:13px;font-weight:600;margin-bottom:12px}.day-picker{display:flex;gap:8px;flex-wrap:wrap}.check{display:flex;align-items:center;gap:8px;font-size:13px;min-height:44px;font-weight:400}.check input{width:18px;height:18px;min-height:18px;accent-color:var(--green);flex-shrink:0}.day-picker .check{padding:4px 10px;border:1px solid var(--line);border-radius:5px}.steps{display:flex;justify-content:space-between;gap:10px;padding:0;margin:0 0 48px;list-style:none;max-width:740px}.steps li{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted)}.steps li span{display:grid;place-items:center;width:28px;height:28px;border:1px solid var(--moss-2);border-radius:50%;font-size:11px}.steps li[aria-current]{color:var(--green);font-weight:700}.steps li[aria-current] span{background:var(--green);color:white;border-color:var(--green)}.details{margin:0 0 22px;display:grid;gap:0}.details>div{display:grid;grid-template-columns:minmax(105px,1fr) 1.4fr;gap:16px;border-bottom:1px solid var(--line);padding:13px 0;font-size:13px}.details dt{color:var(--muted)}.details dd{margin:0;overflow-wrap:anywhere}.home-layout{display:grid;gap:40px}.today h2{font-size:35px}.home-layout .hint{margin-top:18px}.home-layout p{font-size:14px}.summary{padding-top:6px}.summary>a{font-size:13px}.section-note{border-top:1px solid var(--line);margin-top:40px;padding-top:26px;max-width:760px}.section-note h2{font-size:23px}.section-note p,.section-note a{font-size:13px}.page-footer{padding:24px 48px;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:11px;color:var(--muted)}.page-footer a{display:inline-flex;align-items:center;min-height:44px}@media(max-width:1000px){.app-layout{grid-template-columns:200px minmax(0,1fr)}.workspace{padding:36px 28px}.topbar,.page-footer{padding:20px 28px}.home-layout{gap:28px}}@media(max-width:700px){.app-layout{display:block}.sidebar{padding:20px;gap:14px;position:static;height:auto;overflow:visible}.sidebar .wordmark{font-size:46px}.house-label{padding:0}.sidebar nav{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.sidebar nav a{font-size:12px;padding:10px}.sidebar nav a>span+span{display:none}.nav-label{margin:10px 10px 0}.sidebar-bottom{margin:0;padding-top:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.sidebar-bottom button{padding:8px 12px;flex-shrink:0}.topbar{padding:8px 20px;min-height:56px}.form-grid{grid-template-columns:1fr}.panel{padding:22px}.steps{gap:6px;margin-bottom:30px}.steps li{gap:6px;flex-direction:column;font-size:11px}.steps li span{width:25px;height:25px}.page-footer{padding:24px 20px;flex-direction:column;align-items:flex-start;gap:8px}.details>div{grid-template-columns:1fr 1.15fr}.today h2{font-size:30px}}@media(max-width:700px){.auth-layout{display:block}.auth-aside{padding:22px 24px;gap:0}.auth-aside>div,.aside-footer{display:none}.wordmark{font-size:48px;letter-spacing:-3px}.auth-main{padding:36px 24px}h1{font-size:36px}.workspace{padding:24px 18px}}
/* Pantry group colour tokens (Cody, 2026-10-10 late: the food groups as heroes). Named per group, used for the group label and nothing else. Five shades sit darker than the brief's values to clear AA on paper at 11px bold (condiments, dried goods, canned, oils, snacks). */
:root{--g-produce:#2f6b3a;--g-meat:#9a4b4b;--g-dairy:#8a6a3a;--g-condiments:#96611a;--g-leftovers:#5c6f8a;--g-drinks:#4a6f8a;--g-vegfruit:#3f6f6a;--g-prepared:#5c6f8a;--g-dried:#86693c;--g-canned:#5d7465;--g-baking:#7a6a5a;--g-spices:#ad4b20;--g-oils:#737027;--g-snacks:#9a612a;--g-misc:#60685d}
/* Shared account sign-in control; Google's identity mark keeps its own colors. */
.google-signin{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;min-height:48px;padding:12px 20px;border:1px solid var(--line-strong);border-radius:5px;background:var(--white);color:var(--ink);font-size:14px;font-weight:600}
.google-signin:hover{background:var(--hover)}
.google-signin img{flex-shrink:0}
.signin-divider{display:flex;align-items:center;gap:14px;margin:22px 0;color:var(--muted);font-size:12px}
.signin-divider::before,.signin-divider::after{content:'';height:1px;background:var(--line);flex:1}
.google-signin-slot:empty{display:none}

/* Account links stay available without pushing dinner off the phone screen. */
.account-menu{border:0;padding:0;margin:0}.account-menu>summary{font-size:11px;letter-spacing:1.5px;color:#cbd8c3;padding:12px 14px;cursor:pointer;min-height:44px}.account-menu>summary::marker{color:#cbd8c3}.cook-note .note-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.cook-note .note-form label,.cook-note .note-saved{grid-column:1/-1}.grocery-budget{margin:12px 0}.grocery-stocked{font-size:13px;color:var(--green)}
@media(max-width:700px){.sidebar{gap:8px}.account-menu>summary{padding:8px 10px}.sidebar-bottom{padding-top:6px}.sidebar .wordmark{font-size:38px}.house-label{font-size:11px}}
.pantry-item-note{display:none;font:13px/1.4 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--muted);margin:4px 0;white-space:normal;overflow-wrap:anywhere}.row.open .pantry-item-note{display:block}
@media(max-width:700px){.page:has(.pantry-foot){padding-bottom:84px}.workspace .pantry-foot{position:fixed;left:0;right:0;bottom:0;margin:0;z-index:10}}

/* Consumer follow-up: keep long preferences and save feedback in the same scroll. */
#settings-form textarea[name=preferences]{min-height:160px;overflow-y:hidden}
#settings-form .settings-save{position:sticky;bottom:12px;z-index:2;background:var(--white);padding:12px;border:1px solid var(--line);border-radius:5px;box-shadow:0 3px 12px #263f3212}
.settings-save-status{align-self:center;font-size:13px;line-height:1.4;flex:1 1 120px}
.pantry-note-label{font-weight:600}.pantry-edit-help{margin:0 0 18px}.cookbook-guide{margin:12px 0}
.orders .hint{margin-top:12px}.orders code,.orders .forward-address{overflow-wrap:anywhere}
@media(max-width:700px){#settings-form .settings-save{bottom:12px;margin-right:48px;gap:8px}.pantry-table .row.open .c-actions{padding-right:64px}.workspace{padding-bottom:96px}}

.shopping-group h2{font-size:1rem;margin:1.2rem 0 .5rem}.shopping-item{display:flex;align-items:flex-start;gap:.6rem;min-height:44px;cursor:pointer}.shopping-item input{width:20px;height:20px;flex:0 0 20px;margin:.2rem 0}.shopping-item input:checked+span{text-decoration:line-through;opacity:.65}.shopping-checklist .ingredients{list-style:none;padding-left:0}.saved-mark-notes{flex-basis:100%;max-width:36rem;text-align:left}.marks{flex-wrap:wrap}.saved-mark-notes:empty{display:none}

@media(max-width:700px){.shopping-item{padding-right:52px}}
