:root{
 --bg:#f5f3ec;--surface:#fff;--surface2:#fbfaf5;--surface3:#eff3eb;--ink:#14231b;--ink2:#30443a;--muted:#718078;--line:#e2ded1;--line2:#cec8b7;
 --green:#14543c;--green2:#1f7a54;--green3:#46a67c;--deep:#0d3325;--lime:#cbe97a;--lime2:#aeda52;--red:#b8453a;--amber:#cc881d;--blue:#3e7296;
 --r1:10px;--r2:14px;--r3:20px;--r4:28px;--shadow:0 10px 30px rgba(20,48,35,.09);--shadow2:0 24px 70px rgba(20,48,35,.16);--ease:cubic-bezier(.22,.68,.35,1);
}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);background:radial-gradient(900px 500px at 100% 0,rgba(203,233,122,.25),transparent 65%),radial-gradient(800px 500px at -5% 10%,rgba(70,166,124,.12),transparent 60%),var(--bg);font:15px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit;color:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:var(--green2);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{line-height:1.15;letter-spacing:-.025em}::selection{background:var(--lime);color:var(--deep)}
body:before{content:"";position:fixed;width:18px;height:34px;border-radius:55% 45% 55% 45%;background:rgba(70,166,124,.07);left:5vw;top:70vh;transform:rotate(-28deg);pointer-events:none;box-shadow:88vw -50vh 0 rgba(203,233,122,.08),42vw -64vh 0 rgba(70,166,124,.07),73vw 12vh 0 rgba(20,84,60,.05)}
.brand{display:flex;align-items:center;gap:11px;color:inherit;text-decoration:none}.brand:hover{text-decoration:none}.brand img{width:46px;height:46px;border-radius:14px;box-shadow:0 7px 20px rgba(13,51,37,.18)}.brand span{display:grid;min-width:0}.brand b{font-size:1.08rem;letter-spacing:-.02em}.brand small{font-size:.72rem;color:var(--muted);white-space:nowrap}.btn{border:0;border-radius:12px;padding:10px 15px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:800;cursor:pointer;transition:.18s var(--ease);text-decoration:none}.btn:hover{text-decoration:none;transform:translateY(-1px)}.btn:active{transform:translateY(1px)}.btn.primary{background:linear-gradient(160deg,var(--green2),var(--green));color:#fff;box-shadow:0 7px 20px rgba(20,84,60,.2)}.btn.secondary{background:#e3f2e9;color:var(--green)}.btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink2)}.btn.glass{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.3);color:#fff}.btn.danger{background:#fff0ed;color:var(--red);border:1px solid #f0c8c1}.btn.small{min-height:34px;padding:7px 11px;font-size:.84rem}.btn.big{min-height:50px;padding:13px 22px;font-size:1rem}.btn:disabled{opacity:.58;cursor:not-allowed;transform:none}.icon-btn{width:42px;height:42px;border-radius:13px;border:1px solid var(--line);background:#fff;cursor:pointer;position:relative}.text-btn{border:0;background:transparent;color:var(--muted);font-weight:700;cursor:pointer;padding:8px}.text-btn.danger{color:var(--red)}
.kicker{font-size:.69rem;font-weight:900;letter-spacing:.14em;color:var(--green2)}.pill{display:inline-flex;align-items:center;padding:4px 9px;border-radius:99px;background:#eef5ec;color:var(--green);font-size:.72rem;font-weight:800;text-transform:capitalize}.muted{color:var(--muted)}.good{color:var(--green2)}.bad{color:var(--red)}
/* landing */
.landing-shell{min-height:100vh}.landing-nav{max-width:1240px;margin:auto;padding:18px 24px;display:flex;align-items:center;justify-content:space-between;gap:20px}.landing-nav nav{display:flex;align-items:center;gap:16px}.landing-nav nav>a{color:var(--ink2);font-weight:700}.landing-hero{max-width:1240px;margin:20px auto 0;padding:70px 24px 80px;display:grid;grid-template-columns:1.2fr .8fr;gap:60px;align-items:center}.hero-copy h1{font-size:clamp(3rem,7vw,6.5rem);margin:12px 0 22px;max-width:850px}.hero-copy h1 em{font-style:normal;color:var(--green2);position:relative}.hero-copy h1 em:after{content:"";position:absolute;height:10px;border-radius:99px;background:var(--lime);left:0;right:0;bottom:-2px;z-index:-1}.hero-copy>p{font-size:1.18rem;color:#45584d;max-width:760px}.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin:30px 0}.trust-row{display:flex;gap:14px;flex-wrap:wrap;color:#56695e;font-size:.86rem;font-weight:700}.hero-art{min-height:500px;position:relative;display:grid;place-items:center}.hero-art>img{width:min(300px,65%);border-radius:74px;box-shadow:0 40px 90px rgba(13,51,37,.26);animation:float 6s ease-in-out infinite}.bean-orbit{position:absolute;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow);border-radius:20px;padding:10px 14px;font-size:1.6rem;display:flex;align-items:center;gap:8px;animation:orbitfloat 5s ease-in-out infinite}.bean-orbit small{font-size:.77rem;font-weight:800;color:var(--green)}.b1{top:8%;left:0}.b2{top:22%;right:0;animation-delay:-1.2s}.b3{bottom:18%;left:4%;animation-delay:-2.4s}.b4{bottom:5%;right:4%;animation-delay:-3.6s}@keyframes float{50%{transform:translateY(-12px) rotate(1deg)}}@keyframes orbitfloat{50%{transform:translateY(-8px) rotate(-2deg)}}.feature-grid{max-width:1240px;margin:auto;padding:20px 24px 90px;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.feature-grid article{background:rgba(255,255,255,.82);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:22px;padding:24px;box-shadow:var(--shadow)}.feature-grid article>span{font-size:1.8rem}.feature-grid h3{margin:12px 0 7px}.feature-grid p{margin:0;color:var(--muted)}.site-footer{background:var(--deep);color:#d9e7df;display:grid;grid-template-columns:2fr repeat(3,1fr);gap:34px;padding:54px max(24px,calc((100vw - 1200px)/2));}.site-footer>div{display:grid;align-content:start;gap:8px}.site-footer b{color:#fff}.site-footer a{color:#c9ddd2}.footer-brand{grid-template-columns:auto 1fr!important}.footer-brand img{width:52px;height:52px}.footer-brand p{margin:4px 0;color:#9eb5a8}
/* auth */
.modal-backdrop{position:fixed;inset:0;background:rgba(9,30,22,.58);display:grid;place-items:center;padding:20px;z-index:1000;backdrop-filter:blur(8px)}.modal-backdrop[hidden]{display:none}.auth-card{position:relative;width:min(460px,100%);background:#fff;border-radius:26px;padding:28px;box-shadow:var(--shadow2)}.auth-card>img{width:64px;height:64px;border-radius:18px;display:block;margin:0 auto 18px}.modal-x{position:absolute;right:14px;top:14px;width:36px;height:36px;border-radius:50%;border:0;background:#f2f1eb;font-size:1.3rem;cursor:pointer}.auth-tabs{display:grid;grid-template-columns:1fr 1fr;background:#f2f1eb;border-radius:12px;padding:4px;margin-bottom:18px}.auth-tabs button{border:0;background:transparent;border-radius:9px;padding:9px;font-weight:800;cursor:pointer}.auth-tabs button.active{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.07)}.auth-title{text-align:center;margin:0 0 14px;font-size:1.28rem}.auth-form{display:grid;gap:12px}.auth-form[hidden]{display:none!important}.auth-form label{display:grid;gap:5px;font-weight:750;color:var(--ink2)}input,textarea,select{width:100%;border:1px solid var(--line);background:#fff;border-radius:12px;padding:10px 12px;min-height:42px;outline:none;transition:.16s}input:focus,textarea:focus,select:focus{border-color:var(--green3);box-shadow:0 0 0 3px rgba(70,166,124,.16)}textarea{resize:vertical}.auth-submit{width:100%;margin-top:5px}.spinner{width:17px;height:17px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.form-status{min-height:24px;text-align:center;margin:12px 0 0;font-weight:700}.form-status.good{color:var(--green2)}.form-status.bad{color:var(--red)}
/* app shell */
.app-shell{min-height:100vh}.app-topbar{height:76px;position:sticky;top:0;z-index:90;background:rgba(245,243,236,.88);backdrop-filter:blur(18px);border-bottom:1px solid rgba(226,222,209,.8);display:flex;align-items:center;gap:18px;padding:11px 20px}.app-topbar .brand{min-width:230px}.top-search{flex:1;display:flex;justify-content:center}.command-button{width:min(560px,100%);height:44px;border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.85);color:var(--muted);display:flex;align-items:center;gap:9px;padding:0 12px;cursor:pointer}.command-button span{flex:1;text-align:left}.command-button kbd{font:700 .72rem system-ui;background:#f1f0ea;border:1px solid var(--line);border-bottom-width:2px;border-radius:6px;padding:3px 6px}.top-actions{display:flex;gap:8px;align-items:center}.queue-pill{border:1px solid #cfe1d4;background:#ecf8ee;color:var(--green);border-radius:99px;padding:8px 12px;font-size:.77rem;font-weight:800;cursor:pointer}.profile-chip{border:1px solid var(--line);background:#fff;border-radius:13px;height:42px;padding:0 10px;display:flex;align-items:center;gap:7px;font-weight:800;cursor:pointer}.mini-bean{font-size:1rem}#notifBadge:not(:empty){position:absolute;right:-4px;top:-4px;min-width:18px;height:18px;border-radius:99px;background:var(--red);color:#fff;font-size:.66rem;display:grid;place-items:center;font-weight:900}.app-body{display:grid;grid-template-columns:232px minmax(0,1fr);min-height:calc(100vh - 76px)}.side-nav{position:sticky;top:76px;height:calc(100vh - 76px);border-right:1px solid var(--line);padding:14px 11px;display:flex;flex-direction:column;background:rgba(250,249,244,.8);backdrop-filter:blur(8px);overflow:auto}.side-nav nav{display:grid;gap:3px}.side-nav nav button{border:0;background:transparent;border-radius:12px;padding:10px 11px;display:flex;align-items:center;gap:10px;text-align:left;color:#4d5d54;font-weight:760;cursor:pointer}.side-nav nav button>span{width:22px;text-align:center;color:var(--green2)}.side-nav nav button:hover{background:#edf2e9}.side-nav nav button.active{background:#e3f1e7;color:var(--green);box-shadow:inset 3px 0 var(--green2)}.side-bottom{margin-top:auto;border-top:1px solid var(--line);padding-top:12px;display:grid}.bridge-mini{display:flex;gap:8px;align-items:center;padding:8px}.bridge-mini div{display:grid}.bridge-mini b{font-size:.78rem}.bridge-mini small{font-size:.69rem;color:var(--muted)}.pulse-dot{width:9px;height:9px;border-radius:50%;background:var(--amber);box-shadow:0 0 0 0 rgba(204,136,29,.3);animation:pulse 2s infinite}.pulse-dot.on{background:var(--green3)}@keyframes pulse{70%{box-shadow:0 0 0 8px transparent}}.main-view{padding:24px;min-width:0;outline:0}.view-shell{max-width:1440px;margin:auto;animation:viewin .22s var(--ease)}@keyframes viewin{from{opacity:.2;transform:translateY(6px)}}.view-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:18px}.view-head h1{margin:5px 0 0;font-size:clamp(1.7rem,3vw,2.5rem)}.view-head p{margin:6px 0 0;color:var(--muted)}.view-actions{display:flex;gap:8px;flex-wrap:wrap}.loading-stage{min-height:55vh;display:grid;place-items:center;text-align:center}.big-bean{font-size:4rem;animation:float 3s ease-in-out infinite}.mobile-only,.mobile-dock{display:none}
/* cards */
.card{background:rgba(255,255,255,.92);border:1px solid var(--line);border-radius:var(--r3);box-shadow:0 4px 16px rgba(20,48,35,.045)}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:15px 17px;border-bottom:1px solid var(--line)}.card-head h2,.card-head h3{margin:0}.card-body{padding:17px}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat-card{padding:18px}.stat-card b{display:block;font-size:2rem;color:var(--green);letter-spacing:-.04em}.stat-card span{color:var(--muted);font-weight:700}.two-col{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(330px,.75fr);gap:18px}.three-col{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.grid-auto{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.stack{display:grid;gap:12px}.row{display:flex;align-items:center;gap:9px}.row.wrap{flex-wrap:wrap}.space{justify-content:space-between}.section-gap{margin-top:18px}
/* home */
.welcome-card{background:linear-gradient(135deg,var(--deep),var(--green2));color:#fff;border-radius:28px;padding:28px;position:relative;overflow:hidden;box-shadow:var(--shadow2)}.welcome-card:after{content:"🌱";position:absolute;font-size:14rem;right:-20px;bottom:-80px;opacity:.08;transform:rotate(-18deg)}.welcome-card h2{font-size:2.2rem;margin:5px 0 8px}.welcome-card p{color:#d8ebe0;max-width:700px}.welcome-card .btn.ghost{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.25);color:#fff}.feed-list{display:grid;gap:10px}.feed-item{padding:13px;border:1px solid var(--line);border-radius:14px;background:var(--surface2)}.feed-item h4{margin:0 0 4px}.feed-item p{margin:0;color:var(--muted);font-size:.88rem}.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.quick-action{border:1px solid var(--line);background:#fff;border-radius:15px;padding:14px;text-align:left;cursor:pointer}.quick-action b{display:block;margin-top:7px}.quick-action span{font-size:1.35rem}
/* session */
.session-layout{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(340px,.8fr);gap:18px}.chat-card{min-height:720px;display:flex;flex-direction:column}.chat-messages{padding:16px;display:flex;flex-direction:column;gap:11px;overflow:auto;max-height:570px;min-height:420px}.message{max-width:86%;border-radius:18px;padding:11px 13px;position:relative}.message.user{align-self:flex-end;background:var(--green);color:#fff;border-bottom-right-radius:6px}.message.assistant{align-self:flex-start;background:#f0f4ec;border:1px solid #dce6d8;border-bottom-left-radius:6px}.message small{display:block;margin-top:6px;opacity:.65;font-size:.67rem}.message-actions{display:flex;gap:5px;margin-top:7px}.message-actions button{font-size:.7rem}.composer{margin-top:auto;padding:14px;border-top:1px solid var(--line);background:var(--surface2)}.composer textarea{min-height:86px}.composer-footer{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-top:8px}.composer-hint{font-size:.72rem;color:var(--muted)}.grocery-sidebar{display:flex;flex-direction:column;max-height:calc(100vh - 145px);position:sticky;top:94px;overflow:hidden}.grocery-tools{padding:12px;border-bottom:1px solid var(--line)}.quick-add{display:grid;grid-template-columns:1.5fr 1fr auto;gap:7px}.grocery-list{overflow:auto;padding:8px 10px 16px;display:grid;gap:8px}.grocery-row{border:1px solid var(--line);border-radius:14px;background:#fff;padding:10px;display:grid;gap:9px}.grocery-row.done{opacity:.62}.grocery-main{display:flex;align-items:flex-start;gap:10px;min-width:0}.grocery-check{width:21px;height:21px;border:2px solid #b7c3bb;border-radius:7px;flex:0 0 auto;margin-top:1px;display:grid;place-items:center;cursor:pointer}.grocery-row.done .grocery-check{background:var(--green2);border-color:var(--green2);color:#fff}.grocery-copy{min-width:0;flex:1}.grocery-name{font-weight:820;overflow-wrap:anywhere}.grocery-meta{font-size:.75rem;color:var(--muted)}.grocery-controls{display:flex;align-items:center;justify-content:space-between;gap:7px;flex-wrap:wrap}.qty-control{display:flex;align-items:center;border:1px solid var(--line);border-radius:10px;overflow:hidden}.qty-control button{width:31px;height:31px;border:0;background:#f6f6f1;cursor:pointer}.qty-control b{width:34px;text-align:center}.row-actions{display:flex;gap:5px;flex-wrap:wrap}.mini-action{border:1px solid var(--line);background:#fff;border-radius:9px;min-width:31px;height:31px;cursor:pointer;font-size:.75rem}.mini-action:hover{background:#f2f6ef}.proposal-bar{background:#fff9e8;border:1px solid #ead7a0;border-radius:16px;padding:12px;margin-bottom:12px}.proposal-grid{display:flex;gap:8px;overflow:auto;padding:8px 0}.proposal{min-width:210px;padding:10px;background:#fff;border:1px solid #ead7a0;border-radius:11px}.proposal h4{margin:0 0 4px}.proposal p{font-size:.76rem;color:var(--muted);margin:0}
/* plan */
.plan-toolbar{background:linear-gradient(135deg,var(--green),var(--deep));color:#fff;border-radius:24px;padding:18px;display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.plan-toolbar p{margin:3px 0 0;color:#dcebe2}.plan-toolbar .btn.ghost{background:rgba(255,255,255,.11);border-color:rgba(255,255,255,.28);color:#fff}.meal-section{margin:18px 0}.meal-section-title{display:flex;align-items:center;gap:10px;margin-bottom:10px}.meal-section-title h2{margin:0}.count-dot{background:var(--lime);color:var(--deep);border-radius:99px;padding:2px 8px;font-size:.72rem;font-weight:900}.meal-card{padding:16px;position:relative}.meal-card h3{margin:0 0 7px}.ingredient-chips{display:flex;gap:6px;flex-wrap:wrap}.ingredient-chips span,.chip-cloud span{background:#edf5ea;border:1px solid #d7e6d3;border-radius:99px;padding:4px 8px;font-size:.72rem;color:#355243}.simple-plan-card{border-left:4px solid var(--lime2)}
/* recipes */
.recipe-card{padding:16px;display:grid;gap:10px}.recipe-card h3{margin:0}.recipe-meta{display:flex;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:.75rem}.recipe-detail{display:grid;grid-template-columns:.8fr 1.2fr;gap:18px}.recipe-steps{counter-reset:steps;display:grid;gap:10px}.recipe-step{display:flex;gap:10px}.recipe-step:before{counter-increment:steps;content:counter(steps);width:26px;height:26px;border-radius:50%;background:var(--green);color:#fff;display:grid;place-items:center;flex:0 0 auto;font-size:.72rem;font-weight:900}.recipe-studio{padding:16px;background:linear-gradient(135deg,#eef8ef,#f8faee)}
/* history */
.history-search{position:sticky;top:90px;z-index:5;background:rgba(245,243,236,.94);backdrop-filter:blur(12px);padding:8px 0 13px}.search-box{position:relative}.search-box input{padding-left:40px}.search-box:before{content:"⌕";position:absolute;left:13px;top:9px;color:var(--muted);z-index:1;font-size:1.1rem}.discovery-row{display:flex;gap:10px;overflow-x:auto;padding:5px 0 14px}.suggest-card{min-width:220px;border:1px solid var(--line);background:#fff;border-radius:15px;padding:12px}.suggest-card h4{margin:0 0 6px}.session-card{padding:15px;display:flex;justify-content:space-between;gap:12px;align-items:center}.session-card .meta{color:var(--muted);font-size:.77rem}
/* vault */
.vault-layout{display:grid;grid-template-columns:220px 1fr;gap:16px}.vault-shelves{position:sticky;top:94px;align-self:start;padding:10px}.vault-shelves button{width:100%;border:0;background:transparent;border-radius:10px;padding:9px;text-align:left;cursor:pointer;font-weight:750}.vault-shelves button.active{background:#e3f1e7;color:var(--green)}.vault-item{padding:14px}.vault-item h3{margin:0 0 4px}.occurrence-badge{background:#f1f3eb;border-radius:99px;padding:3px 8px;font-size:.68rem;font-weight:850}.aliases{font-size:.72rem;color:var(--muted)}
/* social */
.scope-tabs{display:flex;gap:5px;background:#efeee8;border-radius:12px;padding:4px;width:max-content;max-width:100%;overflow:auto}.scope-tabs button{border:0;background:transparent;border-radius:9px;padding:7px 11px;font-weight:800;white-space:nowrap;cursor:pointer}.scope-tabs button.active{background:#fff;box-shadow:0 1px 6px rgba(0,0,0,.07);color:var(--green)}.social-card{padding:15px}.social-card h3{margin:8px 0 5px}.social-card p{color:var(--muted);margin:0 0 9px}.reaction-row{display:flex;gap:6px;align-items:center}.reaction-row button{border:1px solid var(--line);background:#fff;border-radius:99px;padding:5px 9px;cursor:pointer}.user-card{padding:14px;display:flex;gap:11px;align-items:center}.avatar-bean{width:48px;height:48px;border-radius:16px;background:#e3f1d5;display:grid;place-items:center;font-size:1.4rem}.user-card .copy{flex:1;min-width:0}.user-card h3{margin:0}.user-card p{margin:2px 0;color:var(--muted);font-size:.78rem}.chat-layout{display:grid;grid-template-columns:300px 1fr;gap:15px;min-height:650px}.room-list{padding:8px}.room-list button{width:100%;border:0;background:transparent;border-radius:11px;padding:10px;text-align:left;cursor:pointer}.room-list button.active{background:#e9f3e8}.room-messages{padding:15px;display:flex;flex-direction:column;gap:8px;max-height:540px;overflow:auto}.room-compose{border-top:1px solid var(--line);padding:12px;display:flex;gap:7px}.room-compose input{flex:1}
/* analytics */
.bar-list{display:grid;gap:8px}.bar-row{display:grid;grid-template-columns:minmax(120px,1.2fr) 3fr 50px;gap:9px;align-items:center}.bar{height:9px;border-radius:99px;background:#eceee8;overflow:hidden}.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--green3),var(--lime2));border-radius:inherit}.leader-row{display:grid;grid-template-columns:42px 1fr repeat(3,90px);gap:10px;align-items:center;padding:10px;border-bottom:1px solid var(--line)}.rank{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#edf3e9;font-weight:900;color:var(--green)}
/* settings/admin */
.settings-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:15px}.settings-card{padding:17px}.settings-card h3{margin-top:0}.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0}.toggle{width:46px;height:26px;border-radius:99px;background:#c9cec8;border:0;position:relative;cursor:pointer}.toggle:after{content:"";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:3px;left:3px;box-shadow:0 2px 6px #0002;transition:.2s}.toggle.on{background:var(--green2)}.toggle.on:after{left:23px}.debug-box{background:#10251b;color:#c8edca;border-radius:13px;padding:13px;overflow:auto;max-height:380px;font:12px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace}.pair-code{font:900 1.5rem ui-monospace,monospace;letter-spacing:.12em;background:#edf6e7;padding:12px;border-radius:12px;display:inline-block}
/* overlays */
.toast-stack{position:fixed;right:18px;bottom:18px;z-index:2000;display:grid;gap:8px;width:min(390px,calc(100vw - 36px))}.toast{background:#122c20;color:#fff;border-radius:14px;padding:12px 14px;box-shadow:var(--shadow2);display:flex;align-items:center;gap:9px;animation:toastin .2s var(--ease)}.toast.error{background:#71342e}.toast.success{background:#185d42}@keyframes toastin{from{opacity:0;transform:translateY(8px)}}.dialog{width:min(560px,100%);background:#fff;border-radius:23px;padding:20px;box-shadow:var(--shadow2)}.dialog h2{margin:0 0 8px}.dialog p{color:var(--muted)}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;flex-wrap:wrap}.drawer{position:fixed;right:0;top:0;bottom:0;width:min(440px,100vw);background:#fff;z-index:1000;box-shadow:-20px 0 60px #0002;padding:18px;overflow:auto;animation:drawer .2s var(--ease)}@keyframes drawer{from{transform:translateX(100%)}}.drawer-head{display:flex;justify-content:space-between;align-items:center}.notif{padding:11px;border-bottom:1px solid var(--line)}.notif.unread{background:#f2f8ef}.notif h4{margin:0}.notif p{margin:4px 0;color:var(--muted)}.command-palette{position:fixed;top:90px;left:50%;transform:translateX(-50%);width:min(680px,calc(100vw - 28px));background:#fff;border-radius:20px;box-shadow:0 30px 100px #0c24195c;z-index:1600;overflow:hidden}.command-palette input{border:0;border-radius:0;font-size:1.08rem;padding:16px}.command-results{max-height:60vh;overflow:auto;padding:6px}.command-item{width:100%;border:0;background:#fff;border-radius:11px;padding:10px;display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer}.command-item:hover{background:#f1f6ee}.guide-overlay{position:fixed;inset:0;background:rgba(8,30,21,.78);z-index:1800;display:grid;place-items:center;padding:18px}.guide-card{width:min(720px,100%);background:#fff;border-radius:26px;padding:24px;box-shadow:var(--shadow2)}.guide-visual{height:180px;border-radius:18px;background:linear-gradient(135deg,#e9f4e5,#f8f8e9);display:grid;place-items:center;font-size:4rem;margin:13px 0}
/* share/public */
.share-page,.public-profile,.legal{max-width:1000px;margin:0 auto;padding:30px 20px 70px}.center-brand{justify-content:center;margin-bottom:24px}.share-card{background:#fff;border:1px solid var(--line);border-radius:28px;padding:28px;text-align:center;box-shadow:var(--shadow2)}.share-confetti{font-size:1.7rem;letter-spacing:.3em;margin-bottom:12px}.share-card h1{font-size:clamp(2rem,6vw,3.8rem);margin:10px auto;max-width:800px}.share-summary{font-size:1.1rem;color:var(--muted)}.share-by{display:inline-block;background:#eef5e9;border-radius:99px;padding:6px 12px}.share-preview{margin:20px auto;text-align:left;max-width:720px;background:#fafaf6;border:1px solid var(--line);border-radius:18px;padding:17px}.chip-cloud{display:flex;gap:7px;flex-wrap:wrap}.preview-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px}.preview-stats>div,.preview-stat{text-align:center;padding:18px;background:#fff;border:1px solid var(--line);border-radius:14px}.preview-stats b,.preview-stat b{display:block;font-size:2rem;color:var(--green)}.preview-json{white-space:pre-wrap;overflow-wrap:anywhere;font-size:.75rem}.share-actions{display:flex;justify-content:center;gap:9px;flex-wrap:wrap}.profile-hero{background:linear-gradient(135deg,var(--green),var(--deep));color:#fff;border-radius:27px;padding:26px;display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center}.profile-hero p{color:#d5e8dd}.public-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-top:18px}.legal article{background:#fff;border:1px solid var(--line);border-radius:24px;padding:28px;box-shadow:var(--shadow)}.legal h1{font-size:2.4rem}
/* responsive */

/* v26 resilient connection status */
.connection-banner{position:sticky;top:76px;z-index:85;display:flex;align-items:center;justify-content:center;gap:10px;padding:9px 14px;background:#fff1cf;color:#76500d;border-bottom:1px solid #e8cd8b;font-size:.8rem}.connection-banner[hidden]{display:none}.connection-banner .btn{padding:5px 9px;min-height:0}.connection-banner>span{font-size:1rem}
@media(max-width:1100px){.feature-grid{grid-template-columns:repeat(2,1fr)}.site-footer{grid-template-columns:2fr repeat(2,1fr)}.app-topbar .brand{min-width:auto}.top-search{display:none}.two-col,.session-layout{grid-template-columns:1fr}.grocery-sidebar{position:relative;top:0;max-height:none}.stat-grid{grid-template-columns:repeat(2,1fr)}.quick-grid{grid-template-columns:repeat(2,1fr)}.three-col{grid-template-columns:1fr 1fr}.settings-grid{grid-template-columns:1fr}.chat-layout{grid-template-columns:240px 1fr}}
@media(max-width:760px){body{padding-bottom:66px}.landing-nav{padding:13px 15px}.landing-nav nav>a{display:none}.landing-nav nav .ghost{display:none}.landing-hero{grid-template-columns:1fr;padding:44px 17px 40px;gap:20px}.hero-copy h1{font-size:clamp(2.7rem,14vw,4.8rem)}.hero-art{min-height:340px}.hero-art>img{width:190px}.bean-orbit{font-size:1.1rem;padding:7px 9px}.feature-grid{grid-template-columns:1fr;padding:10px 15px 55px}.site-footer{grid-template-columns:1fr 1fr;padding:35px 20px}.footer-brand{grid-column:1/-1}.app-topbar{height:64px;padding:8px 10px;gap:8px}.app-topbar .brand img{width:39px;height:39px}.app-topbar .brand small,.profile-chip span:last-child,.queue-pill{display:none}.top-actions{margin-left:auto}.mobile-only{display:inline-grid;place-items:center}.app-body{display:block}.side-nav{position:fixed;top:64px;bottom:0;left:0;height:auto;width:min(290px,86vw);z-index:110;transform:translateX(-105%);transition:.22s var(--ease);box-shadow:20px 0 60px #0002}.side-nav.open{transform:translateX(0)}.main-view{padding:14px 12px}.mobile-dock{position:fixed;z-index:100;left:7px;right:7px;bottom:7px;height:58px;background:rgba(15,51,37,.96);border-radius:18px;display:grid;grid-template-columns:repeat(6,1fr);box-shadow:0 14px 40px #0d2c1f55;overflow:hidden}.mobile-dock button{border:0;background:transparent;color:#d6e8df;display:grid;place-items:center;padding:5px 1px;font-size:1rem}.mobile-dock button small{font-size:.58rem}.mobile-dock button.active{background:rgba(203,233,122,.15);color:var(--lime)}.view-head{align-items:flex-start;flex-direction:column}.view-actions{width:100%}.view-actions .btn{flex:1}.stat-grid{grid-template-columns:1fr 1fr}.stat-card{padding:14px}.stat-card b{font-size:1.6rem}.quick-grid{grid-template-columns:1fr 1fr}.three-col,.recipe-detail{grid-template-columns:1fr}.chat-card{min-height:620px}.chat-messages{max-height:460px;min-height:330px;padding:10px}.message{max-width:94%}.quick-add{grid-template-columns:1fr 1fr}.quick-add .btn{grid-column:1/-1}.plan-toolbar{align-items:flex-start;flex-direction:column}.vault-layout{grid-template-columns:1fr}.vault-shelves{position:static;display:flex;overflow:auto;padding:5px}.vault-shelves button{width:auto;white-space:nowrap}.history-search{top:67px}.chat-layout{grid-template-columns:1fr;min-height:0}.room-list{display:flex;overflow:auto}.room-list button{min-width:160px}.leader-row{grid-template-columns:35px 1fr 70px}.leader-row>*:nth-child(n+4){display:none}.profile-hero{grid-template-columns:auto 1fr}.profile-hero .btn{grid-column:1/-1}.toast-stack{bottom:75px}.command-palette{top:70px}.share-page,.public-profile,.legal{padding:18px 12px 80px}.share-card{padding:20px 15px;border-radius:22px}}
@media(max-width:420px){.site-footer{grid-template-columns:1fr}.quick-grid{grid-template-columns:1fr}.stat-grid{grid-template-columns:1fr 1fr}.grocery-controls{align-items:stretch}.row-actions{width:100%}.row-actions .mini-action{flex:1}.landing-nav .brand small{display:none}.landing-nav .btn.primary{padding:9px 11px}.hero-copy>p{font-size:1rem}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}

/* v26 Scale: sharing, signup privacy, independent coaching */
.signup-privacy-note{display:grid;gap:3px;padding:11px 12px;border:1px solid #cfe1bd;border-radius:12px;background:#f2f8e9;color:var(--ink2);font-size:.82rem}.signup-privacy-note b{color:var(--green)}.signup-privacy-note span{color:var(--muted);line-height:1.4}
.coach-tip{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start;margin:0 0 16px;padding:14px 15px;border:1px solid #cfe0bd;border-radius:16px;background:linear-gradient(135deg,#f3f9ec,#fff);box-shadow:0 8px 26px rgba(20,84,60,.06)}.coach-tip-icon{width:40px;height:40px;border-radius:13px;background:#e2f1d3;display:grid;place-items:center;font-size:1.25rem}.coach-tip-copy b{display:block;color:var(--green);font-size:.92rem}.coach-tip-copy p{margin:3px 0 0;color:var(--ink2);font-size:.82rem}.coach-tip-action{margin-top:9px}.coach-tip-x{width:30px;height:30px;border:0;border-radius:50%;background:#fff;color:var(--muted);font-size:1.1rem;cursor:pointer;box-shadow:0 2px 8px #0001}.coach-tip-x:hover{color:var(--red);background:#fff5f3}
.share-label{display:grid;gap:6px;margin-top:12px;font-weight:800;color:var(--ink2)}.share-label textarea{min-height:98px;font-weight:500;line-height:1.45}.share-label input{font:600 .8rem/1.3 ui-monospace,SFMono-Regular,Consolas,monospace}.share-choice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:14px}.share-note{font-size:.78rem;margin:9px 0 0}.referral-card{background:linear-gradient(145deg,#fff,#f2f8e9)}
@media(max-width:760px){.share-choice-grid{grid-template-columns:1fr}.coach-tip{grid-template-columns:auto minmax(0,1fr)}.coach-tip-x{grid-column:2;grid-row:1;justify-self:end}.coach-tip-copy{grid-column:1/-1}.coach-tip-icon{grid-row:1}}

@media(max-width:760px){.connection-banner{top:64px;padding:8px 10px;justify-content:flex-start}.connection-banner b{flex:1}}

/* ========================================================================
   GREEN BEANS v28 — production hardening + social knowledge
   ======================================================================== */
.session-action-bar{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.btn.danger,.btn.danger.ghost{border-color:rgba(184,69,58,.35);color:#a33730}.btn.danger:not(.ghost){background:#a93f36;color:#fff}.card-head h2{margin:3px 0 0}.message-actions{display:flex;gap:7px;margin-top:8px;flex-wrap:wrap}.refine-original,.refine-candidate{padding:14px;border:1px solid var(--line,#e4e1d6);border-radius:14px;background:var(--surface-2,#fbfaf5);margin:12px 0}.refine-candidate{border-color:rgba(30,122,84,.3);background:rgba(221,240,229,.55)}.refine-thread{max-height:260px;overflow:auto;display:grid;gap:8px;margin:12px 0}.refine-thread .message{padding:10px 12px;border-radius:12px}.friend-filter{margin:12px 0;padding:10px 12px;border:1px solid var(--line,#e4e1d6);border-radius:14px;background:var(--surface,#fff)}.friend-filter summary{cursor:pointer;font-weight:700}.friend-filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin-top:10px}.friend-filter-grid label{display:flex;align-items:center;gap:8px;padding:8px;border-radius:10px;background:var(--surface-2,#fbfaf5)}.bean-avatar-svg{display:block;border-radius:24%;flex:0 0 auto;box-shadow:0 1px 4px rgba(18,33,26,.12)}.profile-chip .mini-bean{display:grid;place-items:center}.profile-chip .mini-bean svg{width:30px;height:30px}.research-targets{display:grid;gap:18px}.research-chip-list button{border:1px solid var(--line,#e4e1d6);background:var(--surface,#fff);border-radius:999px;padding:7px 10px;cursor:pointer}.research-chip-list button:hover{border-color:var(--green-2,#1e7a54);background:var(--green-50,#eef8f1)}.research-stack{margin-bottom:14px}.research-entry{padding:12px 0;border-top:1px solid var(--line,#e4e1d6)}.research-entry:first-child{border-top:0}.meal-recipe-stack{margin-top:22px}.meal-recipe-stack>.meal-section-title{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:10px}.fork-pill{margin-left:6px;background:#edf0ff!important}.legacy-recipes{opacity:.88}.global-vault-item details{margin:12px 0}.global-vault-item summary{cursor:pointer;font-weight:700}.contribution-history{display:grid;gap:6px;margin-top:8px}.contribution-row{display:flex;width:100%;align-items:center;gap:9px;text-align:left;border:0;background:var(--surface-2,#fbfaf5);padding:8px;border-radius:11px;cursor:pointer}.contribution-row span{display:grid;gap:1px}.contribution-row small{color:var(--muted,#7d8a82)}.social-stack .avatar-stack{display:flex;align-items:center;margin:8px 0}.avatar-stack button{border:0;background:none;padding:0;margin-right:-7px;cursor:pointer}.avatar-stack .bean-avatar-svg{border:2px solid #fff}.social-object-button{display:block;width:100%;text-align:left;border:1px solid var(--line,#e4e1d6);cursor:pointer}.avatar-editor-head{display:flex;align-items:center;gap:14px;margin:12px 0}.avatar-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:12px 0}.avatar-controls label{display:grid;gap:4px}.vault-category-toggles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:12px 0}.vault-category-toggles label{display:flex;gap:7px;align-items:center;padding:8px;border-radius:10px;background:var(--surface-2,#fbfaf5)}.warning-note{padding:10px 12px;border-radius:12px;background:#fff6dc;border:1px solid #ead49a;font-size:.92rem}.global-vault-settings{border-color:rgba(30,122,84,.25)}
@media(max-width:760px){.session-action-bar{justify-content:flex-start}.session-action-bar .btn{flex:1 1 calc(50% - 8px)}.avatar-controls,.vault-category-toggles{grid-template-columns:1fr}.research-entry .row.space{align-items:flex-start}.friend-filter-grid{grid-template-columns:1fr}.mobile-dock{overflow-x:auto;justify-content:flex-start}.mobile-dock button{min-width:64px}}

/* Global Vault knowledge preview */
.global-vault-preview{margin:10px 0 12px;padding:10px 12px;border:1px solid var(--line,#dcd8ca);border-radius:12px;background:rgba(255,255,255,.54);color:var(--ink-2,#314239);line-height:1.5;white-space:pre-wrap}

/* ============================================================================
   GREEN BEANS v28 — structured social previews + admin model ownership
   ========================================================================== */
.research-preview{display:grid;gap:9px;margin:12px 0;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:rgba(245,248,238,.72)}
.research-preview.compact{margin:8px 0;padding:10px 12px;font-size:.94rem}
.research-preview p{margin:0}.research-summary{line-height:1.55;color:var(--ink)}
.research-detail{display:grid;grid-template-columns:minmax(84px,110px) 1fr;gap:10px;align-items:start}.research-detail b{color:var(--green-900)}.research-detail span{color:var(--ink-2);line-height:1.5}
.source-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px}.source-links a{display:inline-flex;padding:7px 10px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--green-800);font-weight:700;text-decoration:none}.source-links a:hover{border-color:var(--green-400)}
.object-research-head{display:flex;gap:10px;align-items:center;margin-top:12px}.profile-object-preview,.profile-share-preview{display:flex;gap:18px;align-items:center;text-align:left;padding:18px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(135deg,var(--green-50),#fff)}
.profile-object-preview h3,.profile-share-preview h2{margin:3px 0}.profile-share-avatar{width:72px;height:72px;display:grid;place-items:center;border-radius:50%;background:var(--green-100);font-size:2.2rem;flex:0 0 auto}
.shared-chat-preview{margin:14px 0;padding:16px 18px;border-left:4px solid var(--green-2);background:var(--green-50);border-radius:0 14px 14px 0;white-space:pre-wrap;line-height:1.55}
.friendly-object-preview{margin:12px 0}.friendly-object-preview p{line-height:1.55}.friendly-share-preview{text-align:left;padding:12px 4px}.preview-detail{display:flex;gap:7px;align-items:center;margin-top:9px}
.admin-managed-setting{display:grid;gap:3px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.admin-ai-model input{max-width:460px}.global-vault-preview .research-preview{background:transparent;border:0;padding:0;margin:8px 0}
@media(max-width:640px){.research-detail{grid-template-columns:1fr;gap:2px}.profile-object-preview,.profile-share-preview{align-items:flex-start}.source-links a{width:100%;justify-content:center}}
.profile-share-avatar svg{width:72px;height:72px;display:block}

/* ============================================================================
   GREEN BEANS v28 — managed chats, Food Lens, internal sharing, recipe catalog
   ========================================================================== */
.food-icon{width:48px;height:48px;display:inline-grid;place-items:center;flex:0 0 auto;border:1px solid #dbe4d5;border-radius:15px;background:linear-gradient(145deg,#f2f8e9,#fff);box-shadow:0 5px 14px rgba(20,84,60,.08);font-size:1.65rem;line-height:1}.food-icon.mini{width:36px;height:36px;border-radius:11px;font-size:1.2rem}.food-icon.tiny{width:22px;height:22px;border-radius:7px;font-size:.9rem;box-shadow:none;margin-right:4px;vertical-align:middle}.object-preview-hero{display:flex;align-items:flex-start;gap:12px;margin:12px 0}.object-preview-hero>div:not(.preview-stat){min-width:0;flex:1}.object-preview-hero h3{margin:3px 0 0}.object-preview-hero p{margin:5px 0 0;color:var(--muted)}.pretty-ingredients{display:flex;gap:7px;flex-wrap:wrap;margin:10px 0}.pretty-ingredients>span{display:inline-flex;align-items:center;gap:3px;padding:6px 9px;border-radius:999px;background:#f3f6ef;border:1px solid var(--line);font-size:.82rem}.pretty-field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:12px 0}.pretty-field{display:grid;gap:2px;padding:9px 10px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.pretty-field b{font-size:.73rem;color:var(--green);text-transform:none}.pretty-field span{font-size:.87rem;color:var(--ink2)}.recipe-step-preview{display:flex;gap:7px;align-items:center;padding:8px 10px;border-radius:10px;background:#eef5ec;width:max-content}.recipe-step-preview b{font-size:1.05rem}
.social-v28 .view-head{margin-bottom:16px}.social-control-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:12px 14px;background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:16px}.social-search-controls{display:flex;gap:8px;min-width:min(560px,100%);flex:1;justify-content:flex-end}.social-search-controls input{max-width:360px}.social-search-controls select{max-width:180px}.community-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:22px;align-items:start}.community-main{min-width:0}.community-heading{padding:4px 3px 0}.community-heading h2{margin:4px 0}.community-heading p{max-width:760px}.community-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px;margin-top:14px}.community-side{position:sticky;top:92px}.social-stack-v28{padding:18px;overflow:hidden}.stack-title-row{display:flex;gap:12px;align-items:flex-start}.stack-title-copy{flex:1;min-width:0}.stack-title-copy h3{margin:7px 0 3px;overflow-wrap:anywhere}.community-preview{margin:12px -2px;padding:12px;border:1px solid #e6e3d7;border-radius:14px;background:linear-gradient(145deg,#fcfcf8,#f4f7ef)}.community-preview .research-preview{margin:6px 0 0;padding:9px 10px}.community-preview .object-preview-hero{margin:0}.social-stack-footer{display:flex;justify-content:space-between;gap:12px;align-items:flex-end;margin-top:11px}.object-modal-heading{display:flex;gap:14px;align-items:flex-start}.object-modal-heading h2{margin:5px 0}.object-modal-heading p{margin:4px 0;color:var(--muted)}.discussion-block{margin-top:18px;padding-top:4px;border-top:1px solid var(--line)}.comment-compose{margin-top:10px}
.retail-pulse .card-head{align-items:flex-start}.feed-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.retailer-feed{height:100%;padding:14px;border:1px solid var(--line);border-radius:14px;background:#fff}.retailer-feed h4{margin:10px 0 6px}.retailer-feed p{color:var(--ink2)}.retailer-pill{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;background:#e3f2e9;color:var(--green);font-size:.73rem;font-weight:900}.pulse-warn{background:#fff1d9;color:#8c5c13}
.chat-layout-v28{grid-template-columns:280px minmax(0,1fr);gap:14px;min-height:650px}.room-list-v28{padding:8px;align-content:start}.room-list-v28>button{width:100%;display:block;text-align:left;padding:12px;border:0;border-bottom:1px solid #eee;background:transparent;border-radius:11px;cursor:pointer}.room-list-v28>button:hover{background:#f4f7ef}.room-list-v28>button.active{background:#e5f2e8;box-shadow:inset 3px 0 var(--green2)}.room-list-v28 small{display:block;margin-top:3px;color:var(--muted)}.room-list-empty{padding:18px;color:var(--muted)}.room-panel-v28{overflow:hidden;display:flex;flex-direction:column}.room-head-v28{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px;border-bottom:1px solid var(--line);background:linear-gradient(145deg,#fff,#f6f8f2)}.room-head-v28 h2{margin:5px 0}.room-head-v28 p{margin:5px 0}.room-toolbar{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.room-member-strip{display:flex;gap:6px;align-items:center;overflow:auto;padding:9px 14px;border-bottom:1px solid var(--line);background:#fbfbf7}.room-member-strip button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:4px 8px 4px 4px;display:flex;align-items:center;gap:5px;white-space:nowrap;cursor:pointer;font-size:.76rem}.chat-invite-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:12px 14px 0;padding:12px 14px;border-radius:13px;background:#eef7df;border:1px solid #d4e5b7}.chat-invite-banner p{margin:3px 0 0;color:var(--muted)}.room-panel-v28 .room-messages{flex:1;min-height:420px;padding:16px}.room-panel-v28 .room-compose{padding:12px 14px;border-top:1px solid var(--line);background:#fff}.chat-message-author{display:flex;align-items:center;gap:7px;margin-bottom:7px}.chat-message-author small{margin-left:auto;color:var(--muted)}.chat-rich-message{max-width:min(760px,92%)}.chat-note{margin:5px 0 10px}.chat-share-card{background:#fff;border:1px solid #cfdccc;border-radius:16px;padding:13px;color:var(--ink);box-shadow:0 5px 16px rgba(13,51,37,.07)}.chat-share-card h4{margin:8px 0 4px}.chat-share-card p{margin:5px 0}.chat-share-card .friendly-object-preview,.chat-share-card .research-preview{margin:7px 0}.friend-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:9px 0;max-height:280px;overflow:auto}.friend-picker label{display:flex;align-items:center;gap:8px;padding:8px 9px;border:1px solid var(--line);border-radius:11px;background:#fff;cursor:pointer}.friend-picker input{width:auto;min-height:0}.friend-picker label>span:last-child{display:grid}.friend-picker small{color:var(--muted)}.chat-permission-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.chat-permission-grid label{display:flex;align-items:center;gap:8px;padding:9px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.chat-permission-grid input{width:auto;min-height:0}.manage-members{margin:16px 0;padding-top:10px;border-top:1px solid var(--line)}.manage-member-row{display:grid;grid-template-columns:auto minmax(130px,1fr) minmax(105px,140px) auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #eee}.manage-member-row>div{display:grid}.manage-member-row small{color:var(--muted)}.manage-member-row select{min-height:36px;padding:6px 8px}.manage-invite-box{margin-top:16px;padding:13px;border:1px solid var(--line);border-radius:13px;background:var(--surface2)}.manage-invite-box p{margin:4px 0 10px}
.share-object-mini{display:flex;align-items:center;gap:10px;padding:10px 12px;margin:12px 0;border:1px solid var(--line);border-radius:13px;background:var(--surface2)}.share-object-mini>div{display:grid;gap:2px}.share-object-mini small{color:var(--muted);max-width:540px}.internal-share-hero{width:100%;min-height:48px;margin:4px 0 10px}.internal-share-layout{display:grid;grid-template-columns:1fr 1.15fr;gap:16px;margin-top:12px}.internal-share-layout>section{border:1px solid var(--line);border-radius:15px;padding:13px;background:#fbfbf7}.internal-share-layout h3{margin:0 0 10px}.internal-room-list{display:grid;gap:7px;max-height:360px;overflow:auto}.internal-room-list>button{display:grid;grid-template-columns:auto 1fr auto;gap:9px;align-items:center;border:1px solid var(--line);border-radius:11px;background:#fff;padding:10px;text-align:left;cursor:pointer}.internal-room-list>button:hover{border-color:var(--green3);background:#f3f8ee}.internal-room-list>button div{display:grid}.internal-room-list small{color:var(--muted)}.new-share-room{display:grid;gap:9px}
.recipe-garden-v28 .recipe-studio{margin-bottom:18px}.recipe-catalog{display:grid;gap:28px}.recipe-type-group{display:grid;gap:12px}.recipe-type-heading{display:flex;align-items:center;gap:11px;padding:0 3px}.recipe-type-heading>span:first-child{width:44px;height:44px;display:grid;place-items:center;border-radius:14px;background:#e8f3e4;font-size:1.5rem}.recipe-type-heading>div{flex:1}.recipe-type-heading h2{margin:2px 0}.recipe-meal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px}.recipe-meal-card{padding:16px}.recipe-meal-card.hidden-meal{opacity:.82;background:#faf9f4}.recipe-meal-head{display:flex;gap:12px;align-items:flex-start}.recipe-meal-head>div{min-width:0}.recipe-meal-head h3{margin:5px 0}.recipe-meal-head p{margin:4px 0}.recipe-meal-actions{margin:11px 0}.recipe-card-strip{display:grid;gap:10px;margin-top:12px}.recipe-card-strip>.recipe-card{box-shadow:none;background:#fbfcf8;border-radius:14px}.recipe-empty-inline{margin-top:10px;padding:13px;border:1px dashed var(--line2);border-radius:12px;color:var(--muted);text-align:center}
@media(max-width:1000px){.community-layout{grid-template-columns:1fr}.community-side{position:static;display:grid;grid-template-columns:1fr 1fr;gap:14px}.chat-layout-v28{grid-template-columns:230px minmax(0,1fr)}.internal-share-layout{grid-template-columns:1fr}.recipe-meal-grid{grid-template-columns:1fr}}
@media(max-width:760px){.pretty-field-grid{grid-template-columns:1fr}.social-search-controls{min-width:100%;display:grid;grid-template-columns:1fr}.social-search-controls input,.social-search-controls select{max-width:none}.community-grid{grid-template-columns:1fr}.community-side{grid-template-columns:1fr}.social-stack-footer{align-items:flex-start;flex-direction:column}.chat-layout-v28{grid-template-columns:1fr;min-height:0}.room-list-v28{display:flex;overflow:auto}.room-list-v28>button{min-width:210px;border-bottom:0}.room-head-v28{flex-direction:column}.room-toolbar{justify-content:flex-start}.friend-picker,.chat-permission-grid{grid-template-columns:1fr}.manage-member-row{grid-template-columns:auto 1fr}.manage-member-row select,.manage-member-row .btn{grid-column:2}.room-panel-v28 .room-messages{min-height:380px}.recipe-meal-grid{grid-template-columns:1fr}.feed-grid{grid-template-columns:1fr}}
.grocery-main>.food-icon{margin-right:2px}.meal-card-v28{padding:16px}.meal-card-title-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:start}.meal-card-title-row h3{margin:5px 0 0}.meal-card-tools{align-self:start}.pretty-meal-chips span{display:inline-flex;align-items:center}.grocery-row .food-icon.mini{width:32px;height:32px;font-size:1.05rem;border-radius:10px;box-shadow:none}
@media(max-width:620px){.meal-card-title-row{grid-template-columns:auto 1fr}.meal-card-tools{grid-column:1/-1;justify-content:flex-end}}

/* v28 — prettified Personal/Global Vault cards */
.vault-grid-v28{align-items:start}
.vault-item-v28{display:grid;gap:12px;min-width:0}
.vault-card-title-row{display:flex;align-items:flex-start;gap:12px;min-width:0}
.vault-card-title-row .food-icon{flex:0 0 auto}
.vault-card-title-row>div{min-width:0}
.vault-card-title-row h3{margin:2px 0 0;overflow-wrap:anywhere}
.vault-pretty-preview{min-width:0}
.vault-pretty-preview .pretty-object{margin:0}
.vault-item-v28 details{border-top:1px solid var(--line);padding-top:10px}
.vault-item-v28 details summary{cursor:pointer;font-weight:800;color:var(--green)}
@media(max-width:680px){.vault-card-title-row{gap:9px}.vault-item-v28{gap:9px}}
.chat-danger-zone{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:16px;padding:14px;border:1px solid color-mix(in srgb,var(--danger,#b94a43) 38%,var(--line));border-radius:14px;background:color-mix(in srgb,var(--danger,#b94a43) 5%,var(--surface,#fff))}
.chat-danger-zone p{margin:3px 0 0}
@media(max-width:620px){.chat-danger-zone{align-items:stretch;flex-direction:column}}

/* GREEN BEANS v28.0.2 — patch polish: share reliability, bean identity, tactile UX */
html{scrollbar-gutter:stable}button,.btn,.icon-btn,.profile-chip{touch-action:manipulation}.card,.share-preview,.community-preview,.recipe-meal-card,.chat-share-card{transition:border-color .16s var(--ease),box-shadow .16s var(--ease),transform .16s var(--ease)}@media(hover:hover){.community-grid>.card:hover,.recipe-meal-card:hover,.vault-item-v28:hover{border-color:#cdddcf;box-shadow:0 10px 30px rgba(13,51,37,.08)}}details>summary{min-height:38px;display:flex;align-items:center;border-radius:9px}details>summary:focus-visible{outline:2px solid var(--green2);outline-offset:2px}.share-card{overflow:hidden;position:relative}.share-card:before{content:"";position:absolute;width:240px;height:240px;border-radius:50%;right:-135px;top:-145px;background:rgba(203,233,122,.18);pointer-events:none}.share-preview{box-shadow:inset 0 1px rgba(255,255,255,.75)}.share-copy-status{min-height:22px;margin:10px auto 0;color:var(--green2);font-size:.86rem;font-weight:800}.share-copy-status.bad{color:var(--red)}.share-actions .btn{min-width:150px}.brand img{object-fit:contain}.mini-bean svg,.bean-avatar-svg{filter:drop-shadow(0 2px 2px rgba(13,51,37,.08))}.profile-share-avatar{overflow:hidden}.community-preview,.vault-pretty-preview{overflow-wrap:anywhere}.room-toolbar .btn,.view-actions .btn{white-space:nowrap}@media(max-width:620px){.share-page{padding:18px 10px 84px}.share-card{padding:22px 15px;border-radius:22px}.share-actions{display:grid;grid-template-columns:1fr}.share-actions .btn{width:100%}.center-brand{margin-bottom:16px}.social-control-bar{padding:10px}.community-grid{gap:12px}.room-toolbar{width:100%}.room-toolbar .btn{flex:1 1 auto}}


/* Green Beans v29 — Current Session planning depth + Pulse resilience */
.session-plan-detail{margin-top:18px;overflow:hidden}
.session-plan-head{align-items:flex-start;gap:16px}
.session-plan-head h2{margin:3px 0 3px}
.session-plan-body{padding:4px 18px 22px;display:grid;gap:18px}
.session-plan-group{min-width:0}
.session-plan-group .meal-section-title{margin:0 0 10px}
.session-plan-group.is-empty{padding:10px 12px;border:1px dashed var(--line);border-radius:14px;background:var(--surface-2)}
.session-plan-group.is-empty .meal-section-title{margin:0}
.compact-empty{margin:5px 0 0}
.pulse-health{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.pulse-store-loop{display:flex;gap:7px;overflow-x:auto;padding:2px 0 8px;scrollbar-width:thin}
.pulse-store-loop .retailer-pill{white-space:nowrap}
.pulse-store-loop .is-covered{background:var(--green-100);border-color:rgba(30,122,84,.25)}
.pulse-store-loop .is-waiting{opacity:.62}
@media(max-width:900px){.session-plan-head{flex-direction:column}.session-plan-head .row{width:100%}.session-plan-body{padding:4px 12px 16px}}


/* Green Beans v30 — focused AI shortcuts + live Pulse watch */
.chat-quick-prompts{display:flex;gap:7px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line);background:var(--surface-2)}
.chat-quick-prompts button{border:1px solid var(--line);background:var(--surface);color:var(--green);border-radius:999px;padding:7px 10px;font-weight:750;cursor:pointer}
.chat-quick-prompts button:hover{border-color:var(--green-400);background:var(--green-50)}
#pulsePanelV30{display:grid;gap:12px}
#pulsePanelV30 .feed-grid{margin-top:0}
.pulse-health .pulse-warn{background:var(--amber-soft);color:#79500e}
@media(max-width:680px){.chat-quick-prompts{overflow-x:auto;flex-wrap:nowrap}.chat-quick-prompts button{white-space:nowrap}.pulse-health{align-items:flex-start;flex-direction:column}}

/* ========================================================================
   GREEN BEANS v31 — mobile-first hardening, Guide Library, chat archive,
   tooltips and dense-screen QOL. Additive only.
   ======================================================================== */
.chat-reset-note{display:flex;gap:10px;align-items:flex-start;padding:9px 14px;background:#fff8dc;border-top:1px solid #ead7a0;border-bottom:1px solid #ead7a0;color:#6e5620;font-size:.78rem}.chat-reset-note b{white-space:nowrap}.chat-reset-note span{color:#806d3f}.archive-privacy-note{display:flex;gap:8px;align-items:flex-start;padding:11px 12px;margin:10px 0 14px;border-radius:12px;background:#edf6e9;border:1px solid #cfe1d4}.archive-privacy-note span{color:var(--muted)}.chat-archive-list{display:grid;gap:10px;max-height:min(62vh,680px);overflow:auto;padding-right:3px}.chat-archive-segment{border:1px solid var(--line);border-radius:14px;background:#fbfbf7;overflow:hidden}.chat-archive-segment>summary{cursor:pointer;padding:11px 12px;justify-content:space-between;gap:12px;background:#f3f6ef}.chat-archive-segment>summary>span:first-child{display:grid}.chat-archive-segment>summary small{color:var(--muted);font-size:.72rem}.chat-archive-events{display:grid;gap:8px;padding:10px}.chat-archive-message{max-width:92%;padding:9px 11px;border-radius:13px;border:1px solid var(--line);background:#fff}.chat-archive-message.user{justify-self:end;background:#eaf4ec;border-color:#cfe1d4}.chat-archive-message.assistant{justify-self:start}.chat-archive-message header{display:flex;gap:9px;align-items:center;margin-bottom:5px}.chat-archive-message header small{color:var(--muted);font-size:.7rem}.chat-archive-boundary{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:12px;border:1px dashed #d9bd76;background:#fff8dc}.chat-archive-boundary>span{font-size:1.15rem}.chat-archive-boundary>div{display:grid}.chat-archive-boundary small{color:#806d3f}

.guide-library{width:min(1040px,100%);max-height:calc(100dvh - 28px);overflow:auto;background:#fff;border-radius:26px;padding:22px;box-shadow:var(--shadow2)}.guide-library>header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:16px}.guide-library>header h2{margin:3px 0}.guide-library>header p{margin:5px 0;color:var(--muted)}.guide-library-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.guide-library-card{border:1px solid var(--line);background:#fff;border-radius:15px;padding:13px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;text-align:left;cursor:pointer}.guide-library-card:hover{border-color:var(--green3);background:#f6faf4;box-shadow:0 8px 24px rgba(20,84,60,.08)}.guide-library-card.starter{grid-column:1/-1;background:linear-gradient(135deg,#eef8e9,#fffbea);border-color:#cfe1b7}.guide-library-card>span{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#eef5ec;font-size:1.35rem}.guide-library-card>div{display:grid;min-width:0}.guide-library-card small{color:var(--muted);line-height:1.35;margin-top:2px}.guide-library-card em{font-style:normal;color:var(--green2);font-weight:850;font-size:.78rem}.guide-topic-card{width:min(820px,100%);max-height:calc(100dvh - 28px);overflow:auto}.guide-topic-hero{display:flex;gap:16px;align-items:center;padding:16px;margin:12px 0;border-radius:16px;background:linear-gradient(135deg,#edf6e9,#fbfaef)}.guide-topic-hero>span{font-size:3.1rem}.guide-topic-hero h2{margin:0 0 4px}.guide-topic-hero p{margin:0;color:var(--muted)}.guide-topic-sections{display:grid;grid-template-columns:1fr 1fr;gap:10px}.guide-topic-sections article{display:grid;grid-template-columns:auto 1fr;gap:10px;padding:12px;border:1px solid var(--line);border-radius:13px;background:#fff}.guide-topic-sections article>span{width:29px;height:29px;border-radius:9px;background:#e5f2e8;color:var(--green);display:grid;place-items:center;font-weight:900}.guide-topic-sections h3{margin:2px 0 5px;font-size:.96rem}.guide-topic-sections p{margin:0;color:var(--muted);font-size:.84rem}

[data-tooltip]{position:relative}[data-tooltip]:hover:after,[data-tooltip]:focus-visible:after{content:attr(data-tooltip);position:absolute;z-index:4000;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);width:max-content;max-width:260px;padding:7px 9px;border-radius:9px;background:#10251b;color:#fff;font-size:.7rem;line-height:1.3;font-weight:650;white-space:normal;box-shadow:0 8px 24px #0003;pointer-events:none}[data-tooltip]:hover:before,[data-tooltip]:focus-visible:before{content:"";position:absolute;z-index:4001;bottom:calc(100% + 3px);left:50%;margin-left:-5px;border:5px solid transparent;border-top-color:#10251b;pointer-events:none}

/* General overflow resilience before individual mobile rules. */
.view-shell,.card,.card-body,.dialog,.guide-card,.guide-library,.drawer,.community-preview,.friendly-object-preview{min-width:0}.row{min-width:0}.row.space{flex-wrap:wrap}.card-head{gap:10px;flex-wrap:wrap}.card-head>*{min-width:0}.table-wrap,table{max-width:100%}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}pre,code,.debug-box{max-width:100%;overflow:auto;overflow-wrap:anywhere}.ingredient-chips,.chip-cloud,.pretty-ingredients{min-width:0}.ingredient-chips>*{max-width:100%}.view-head h1,.card h2,.card h3,.message,.feed-item,.social-stack{overflow-wrap:anywhere}

@media(max-width:760px){
 html{scrollbar-gutter:auto;overflow-x:hidden}body{overflow-x:hidden;padding-bottom:72px}.modal-backdrop{padding:8px;overflow-y:auto;place-items:start center}.auth-card,.dialog{width:100%;max-width:560px;max-height:calc(100dvh - 16px);overflow:auto;border-radius:18px;padding:17px;margin:auto}.auth-card>img{width:54px;height:54px;margin-bottom:12px}.auth-tabs{position:sticky;top:-17px;z-index:3;margin-left:-2px;margin-right:-2px}.auth-form{gap:10px}.signup-privacy-note{font-size:.82rem}.auth-card input,.auth-card textarea,.auth-card select,.dialog input,.dialog textarea,.dialog select{font-size:16px}.dialog-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.dialog-actions .btn{width:100%;min-width:0}.dialog-actions .btn:last-child:nth-child(odd){grid-column:1/-1}.guide-overlay{padding:7px;overflow:auto;align-items:flex-start}.guide-card,.guide-library{max-height:calc(100dvh - 14px);border-radius:18px;padding:15px;margin:auto}.guide-library>header{position:sticky;top:-15px;z-index:4;background:#fff;padding:4px 0 10px}.guide-library-grid{grid-template-columns:1fr}.guide-library-card.starter{grid-column:auto}.guide-library-card{grid-template-columns:auto minmax(0,1fr);padding:11px}.guide-library-card em{grid-column:2}.guide-topic-sections{grid-template-columns:1fr}.guide-topic-hero{align-items:flex-start;padding:12px}.guide-topic-hero>span{font-size:2.35rem}.guide-visual{height:130px;font-size:3rem}.drawer{width:100vw;padding:14px 12px 82px}.command-palette{top:66px;width:calc(100vw - 12px);border-radius:15px;max-height:calc(100dvh - 76px)}.command-results{max-height:calc(100dvh - 145px)}
 .main-view{padding:12px 9px}.view-shell{width:100%}.view-head{gap:10px;margin-bottom:12px}.view-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.view-actions>*{min-width:0}.session-action-bar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:7px}.session-action-bar .btn{width:100%;min-width:0;padding-left:8px;padding-right:8px}.session-layout{gap:12px}.chat-card{min-height:0}.chat-messages{min-height:300px;max-height:52dvh}.composer{padding:10px}.composer textarea{min-height:78px}.composer-footer{align-items:stretch;flex-direction:column}.composer-footer .btn{width:100%}.chat-reset-note{flex-direction:column;gap:3px}.chat-reset-note b{white-space:normal}.chat-archive-list{max-height:55dvh}.chat-archive-message{max-width:97%}.grocery-sidebar{max-height:none}.grocery-tools>.row{display:grid;grid-template-columns:minmax(0,1fr) 112px;width:100%}.grocery-tools>.row input,.grocery-tools>.row select{min-width:0}.grocery-controls{align-items:stretch}.qty-control{flex:0 0 auto}.row-actions{flex:1 1 100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.row-actions .mini-action{width:100%;min-width:0}.meal-card-tools{width:100%;display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))}.meal-card-tools .mini-action{width:100%}.session-plan-body{padding-left:9px;padding-right:9px}.grid-auto{grid-template-columns:1fr!important}.two-col,.three-col,.settings-grid,.internal-share-layout,.community-layout,.recipe-detail{grid-template-columns:1fr!important}.scope-tabs{max-width:100%;overflow-x:auto;justify-content:flex-start}.scope-tabs button{flex:0 0 auto;white-space:nowrap}.social-control-bar{overflow:hidden}.social-search-controls,.history-search-controls{width:100%;grid-template-columns:1fr!important}.friend-picker{max-height:42dvh}.manage-members{overflow:hidden}.manage-member-row{grid-template-columns:auto minmax(0,1fr)!important}.manage-member-row select,.manage-member-row .btn{grid-column:2!important;width:100%}.room-toolbar{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.room-toolbar .btn{min-width:0;width:100%}.internal-room-list{max-height:42dvh}.recipe-type-heading{align-items:flex-start;flex-wrap:wrap}.recipe-type-heading .pill{margin-left:auto}.recipe-meal-card{padding:12px}.research-targets{display:grid!important;grid-template-columns:1fr!important}.research-chip-list{max-height:220px;overflow:auto}.profile-hero{padding:17px;grid-template-columns:auto minmax(0,1fr)}.profile-hero h1{font-size:1.7rem}.public-grid{grid-template-columns:1fr}.legal article{padding:18px;border-radius:18px}.legal h1{font-size:2rem}.site-footer{grid-template-columns:1fr!important}.landing-nav{gap:8px}.landing-nav .brand span{display:none}.landing-nav nav{gap:6px}.landing-nav nav .btn{padding:8px 10px;min-height:38px}.landing-hero{padding-top:30px}.hero-copy h1{font-size:clamp(2.5rem,13vw,4.3rem)}
 [data-tooltip]:hover:after,[data-tooltip]:focus-visible:after,[data-tooltip]:hover:before,[data-tooltip]:focus-visible:before{display:none}
}
@media(max-width:420px){
 .app-topbar{padding-left:6px;padding-right:6px}.app-topbar .brand b{font-size:.92rem}.top-actions{gap:5px}.icon-btn,.profile-chip{width:38px;height:38px}.profile-chip{padding:0 5px}.mobile-dock{left:4px;right:4px;bottom:4px}.main-view{padding-left:7px;padding-right:7px}.view-actions,.session-action-bar,.dialog-actions{grid-template-columns:1fr}.dialog-actions .btn:last-child:nth-child(odd){grid-column:auto}.auth-card,.dialog{padding:14px}.quick-add{grid-template-columns:1fr}.quick-add .btn{grid-column:auto}.grocery-tools>.row{grid-template-columns:1fr}.row-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.meal-card-tools{grid-template-columns:repeat(2,minmax(0,1fr))}.guide-library-card>span{width:36px;height:36px}.chat-quick-prompts{margin-left:-1px;margin-right:-1px}.share-confetti{letter-spacing:.12em}.share-card h1{font-size:clamp(1.8rem,11vw,2.7rem)}
}

/* v31 token aliases repair older component names and keep new presentation consistent. */
:root{--surface-2:var(--surface2);--green-100:#ddf0e5;--green-50:#eef8f1;--green-400:var(--green3);--amber-soft:#fbf0d9}
.recipe-title-with-icon{display:flex;align-items:center;gap:10px}.recipe-title-with-icon h3{margin:0}.recipe-title-with-icon .food-icon{flex:0 0 auto}


/* v32 production-facing polish */
body.auth-open{overflow:hidden}
.auth-tabs button[aria-selected="true"]{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.07);color:var(--green)}
.auth-tabs button:focus-visible{outline:2px solid var(--green3);outline-offset:2px}
.auth-card{overscroll-behavior:contain}
.public-safe-error{display:grid;gap:10px;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff}.public-safe-error p{margin:0;color:var(--muted)}
@media(max-width:760px){
 .landing-nav{padding:12px 10px;position:relative}.landing-nav nav>a{display:none}.landing-nav nav{margin-left:auto}.landing-nav .btn{font-size:.86rem}.landing-hero{padding-left:14px;padding-right:14px}.hero-copy>p{font-size:1rem}.trust-row{gap:8px}.trust-row span{font-size:.78rem}.auth-card{max-height:calc(100svh - 12px);padding:15px}.auth-title{font-size:1.12rem;margin-bottom:10px}.auth-tabs{top:-15px}.auth-tabs button{padding:10px 6px}.auth-form[hidden]{display:none!important}.site-footer{padding-left:18px;padding-right:18px;gap:22px}.site-footer>div{gap:7px}
}
@media(max-width:380px){.landing-nav .brand img{width:40px;height:40px}.landing-nav nav .btn{padding:7px 8px;font-size:.8rem}.auth-card{padding:12px}.auth-tabs button{font-size:.86rem}}

/* ========================================================================
   Green Beans v33 — readable entity detection + Plan/Vault layout repair
   ======================================================================== */
.chat-detected-card{margin:10px 0 4px;border:1px solid #c7ddc9;background:linear-gradient(135deg,#f2f8ef,#fbfff8);border-radius:16px;padding:12px;box-shadow:0 4px 18px rgba(18,82,55,.06)}
.chat-detected-head{display:flex;gap:10px;align-items:flex-start}.chat-detected-head>div{min-width:0}.chat-detected-head h4{margin:2px 0 1px;font-size:1rem;line-height:1.2;overflow-wrap:break-word}.chat-detected-head small{color:var(--muted)}
.detected-badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:3px 8px;background:#dff2dc;color:#15563e;font-size:.67rem;font-weight:900;letter-spacing:.02em;text-transform:uppercase}
.chat-detected-ingredients{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.chat-detected-ingredients>span{display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:5px 8px;border:1px solid #d8e6d5;background:white;border-radius:999px;font-size:.71rem}.chat-detected-ingredients b{overflow-wrap:break-word}.chat-detected-ingredients em{font-style:normal;color:var(--muted);font-size:.64rem}
.chat-detected-grocery{display:inline-flex;vertical-align:middle;align-items:center;gap:6px;margin:3px 3px 3px 0;padding:4px 7px;border:1px solid #d6e5d4;border-radius:11px;background:#f4f9f1;max-width:100%}.chat-detected-grocery>span{display:grid;line-height:1.05}.chat-detected-grocery b{font-size:.72rem}.chat-detected-grocery small{font-size:.62rem;color:var(--muted)}.chat-detected-grocery i{font-style:normal;text-transform:uppercase;font-size:.58rem;font-weight:900;color:var(--green2);background:#e0f1df;border-radius:99px;padding:2px 5px}
.chat-paragraph-gap{height:9px}.message h4,.message h5{margin:7px 0 3px;line-height:1.2}.message h4{font-size:.98rem}.message h5{font-size:.9rem}

.meal-card-v33{display:grid;gap:12px;min-width:0}.meal-card-v33 .meal-card-title-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start}.meal-card-v33 .meal-title-copy{min-width:0}.meal-card-v33 .meal-title-copy h3{margin:5px 0 0;line-height:1.18;word-break:normal;overflow-wrap:break-word;hyphens:auto}.meal-card-v33 .meal-card-tools{grid-column:1/-1;display:flex!important;justify-content:flex-end;width:100%;gap:6px}.meal-card-v33 .meal-card-tools .mini-action{flex:0 0 34px}.meal-card-v33 .meal-description{margin:0;color:var(--muted);line-height:1.45}.meal-ingredient-summary{display:grid;gap:7px}.meal-card-v33 .pretty-meal-chips>span{display:inline-flex;gap:5px;align-items:center;max-width:100%;padding:5px 8px}.meal-card-v33 .pretty-meal-chips b{font-size:.72rem;overflow-wrap:break-word}.meal-card-v33 .pretty-meal-chips small{font-size:.62rem;color:var(--muted)}
.session-plan-detail .grid-auto{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:14px}.session-plan-group{overflow:hidden}.session-plan-body{min-width:0}.session-plan-group .meal-section-title h3{font-size:1rem}

.vault-grid-v33{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))}.vault-item-v33{display:grid;gap:11px;padding:15px;min-width:0}.vault-topline{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.vault-item-v33 .vault-card-title-row h3{line-height:1.18;word-break:normal;overflow-wrap:break-word}.vault-item-v33 .vault-pretty-preview{padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.vault-facts{display:flex;flex-wrap:wrap;gap:7px}.vault-facts>span{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:5px 8px;background:#f3f6ef;border:1px solid #e0e6da;font-size:.7rem}.vault-child-preview{display:grid;gap:8px}.vault-child-preview p{margin:0;color:var(--muted)}.recipe-parent-line{display:flex;flex-wrap:wrap;align-items:center;gap:7px;font-size:.78rem}.vault-actions{display:flex;gap:7px;flex-wrap:wrap}.vault-aliases{border:0!important;padding:0!important}.vault-aliases summary{font-size:.72rem;color:var(--muted);min-height:30px}.vault-aliases>div{display:flex;gap:5px;flex-wrap:wrap;padding-top:5px}.vault-aliases span{font-size:.67rem;border-radius:999px;background:#f3f3ed;padding:3px 7px;color:var(--muted)}.vault-chat-excerpt{margin:0;padding:9px 11px;border-left:3px solid var(--lime2);background:#f6f8f3;border-radius:0 10px 10px 0;font-size:.78rem;line-height:1.45}

@media(max-width:900px){.session-plan-detail .grid-auto{grid-template-columns:1fr}.meal-card-v33 .meal-card-tools{justify-content:flex-start}.vault-grid-v33{grid-template-columns:1fr}}
@media(max-width:620px){.chat-detected-head{align-items:center}.chat-detected-ingredients>span{border-radius:10px}.chat-detected-grocery{width:100%;margin-right:0}.chat-detected-grocery i{margin-left:auto}.meal-card-v33{padding:13px}.meal-card-v33 .meal-card-tools{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.meal-card-v33 .meal-card-tools .mini-action{width:100%;min-width:0}.vault-actions{display:grid;grid-template-columns:1fr;width:100%}.vault-actions .btn{width:100%}}
/* v33 detected Approval Inbox + anti-collapse text hardening */
.proposal-v33{display:grid;gap:7px;min-width:250px}.proposal-detected-row{display:flex;align-items:center;gap:6px}.proposal-v33 h4{font-size:.9rem;line-height:1.2;overflow-wrap:break-word;word-break:normal}.proposal-v33 p{margin:0}.proposal-mini-ingredients{display:flex;flex-wrap:wrap;gap:4px}.proposal-mini-ingredients>span{display:inline-flex;align-items:center;gap:3px;padding:3px 6px;border:1px solid #e0e6d8;border-radius:999px;background:#fff;font-size:.64rem}.proposal-actions{margin-top:2px}.meal-card-v33 .meal-title-copy h3,.vault-item-v33 .vault-card-title-row h3{overflow-wrap:break-word!important;word-break:normal!important}
@media(max-width:620px){.proposal-v33{min-width:min(260px,82vw)}}
/* v33 typography guard: human-readable headings should wrap by words, never by individual letters. */
.view-head h1,.card h2,.card h3,.feed-item h3,.social-stack h3{overflow-wrap:break-word!important;word-break:normal!important;hyphens:auto}


/* v34 · forgiving live account requirements -------------------------------- */
.signup-requirements{display:grid;gap:4px;padding:12px 13px;border:1px solid #cfe3d3;border-radius:14px;background:#f2faef;color:var(--ink);font-size:.84rem}
.signup-requirements span{color:var(--muted);line-height:1.45}.field-rule{display:block;margin-top:2px;color:var(--muted);font-weight:550;line-height:1.35}.field-live{display:block;min-height:1.2em;margin-top:2px;font-size:.78rem;font-weight:700;color:var(--muted)}.field-live.good{color:#167447}.field-live.bad{color:#a33a32}.field-live.checking{color:#775f18}.password-live-wrap{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px;align-items:stretch}.password-peek{border:1px solid var(--line);border-radius:11px;background:#fff;padding:0 11px;color:var(--green-900);font:inherit;font-size:.78rem;font-weight:800;cursor:pointer}.password-peek:hover{background:#f2f7ef}
.admin-user-row{display:grid;grid-template-columns:auto minmax(160px,1fr) auto auto auto;gap:9px;align-items:center}.admin-user-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.admin-danger-note{padding:10px 12px;border:1px solid #efc4bd;border-radius:12px;background:#fff6f4;color:#7f3029;font-size:.82rem}.hard-delete-copy{padding:12px;border:1px solid #efc4bd;border-radius:14px;background:#fff7f5}.hard-delete-copy code{font-weight:850;color:#7f3029}
@media(max-width:720px){.admin-user-row{grid-template-columns:auto minmax(0,1fr)}.admin-user-row>span:not(.rank){justify-self:start}.admin-user-actions{grid-column:1/-1;justify-content:stretch}.admin-user-actions .btn{flex:1}.signup-requirements{font-size:.8rem}}

/* ========================================================================
   Green Beans v35.0.0 — scroll-safe authentication shell
   Fields scroll independently; the active Log in/Create Account action stays
   visible at the bottom of the dialog even on short mobile viewports.
   ======================================================================== */
.auth-card{
 display:grid;
 grid-template-rows:auto minmax(0,1fr);
 width:min(460px,100%);
 max-height:min(760px,calc(100dvh - 40px));
 overflow:hidden;
 overscroll-behavior:contain;
}
.auth-card-head{display:grid;gap:10px;flex:0 0 auto;min-width:0}
.auth-card-head>img{width:64px;height:64px;border-radius:18px;display:block;margin:0 auto 2px}
.auth-card-head .auth-title{margin:0;text-align:center}
.auth-card-head .auth-tabs{margin:0 0 10px;position:relative;top:auto}
.auth-panels{min-height:0;display:grid;overflow:hidden}
.auth-form{
 min-height:0;
 overflow:hidden;
 display:grid;
 grid-template-rows:minmax(0,1fr) auto;
 gap:0;
}
.auth-form[hidden]{display:none!important}
.auth-form-scroll{
 min-height:0;
 overflow-y:auto;
 overflow-x:hidden;
 overscroll-behavior:contain;
 scrollbar-gutter:stable;
 -webkit-overflow-scrolling:touch;
 display:grid;
 align-content:start;
 gap:12px;
 padding:2px 4px 8px 0;
}
.auth-form-footer{
 position:relative;
 z-index:4;
 flex:0 0 auto;
 padding:10px 0 0;
 margin-top:8px;
 border-top:1px solid var(--line);
 background:#fff;
 box-shadow:0 -12px 22px rgba(20,48,35,.045);
}
.auth-form-footer .form-status{min-height:20px;margin:0 0 7px;font-size:.82rem;line-height:1.3}
.auth-form-footer .auth-submit{width:100%;margin:0;min-height:48px}
.auth-form-scroll .signup-requirements{margin:0}

@media(max-width:760px){
 .modal-backdrop{padding:6px;place-items:center;overflow:hidden}
 .auth-card{
  height:calc(100dvh - 12px);
  max-height:calc(100dvh - 12px);
  padding:14px;
  border-radius:18px;
 }
 .auth-card-head{gap:7px}
 .auth-card-head>img{width:48px;height:48px;border-radius:14px;margin-bottom:0}
 .auth-card-head .auth-title{font-size:1.08rem}
 .auth-card-head .auth-tabs{margin-bottom:7px}
 .auth-form-scroll{gap:10px;padding-right:2px;padding-bottom:10px}
 .auth-form-footer{margin-left:-2px;margin-right:-2px;padding:9px 2px 0}
 .signup-requirements,.signup-privacy-note{padding:9px 10px}
}
@media(max-width:380px){
 .auth-card{padding:11px;height:calc(100dvh - 8px);max-height:calc(100dvh - 8px)}
 .auth-card-head>img{width:42px;height:42px}
 .auth-card-head .auth-tabs button{padding:8px 5px}
 .auth-form-footer .auth-submit{min-height:46px}
}
.auth-form-footer{padding-bottom:max(0px,env(safe-area-inset-bottom))}


/* Green Beans v36 — Advanced Engine framing */
.ezgb-switch{white-space:nowrap;text-decoration:none}
@media(max-width:760px){.ezgb-switch{display:none}}
.scope-tabs{margin-bottom:10px}
[data-shopmode]{min-width:100px}

/* Green Beans v36.0.0 — Advanced Engine controls */
.target-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.target-grid label{display:grid;gap:5px;font-weight:750}.target-grid input{width:100%}@media(max-width:700px){.target-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* =========================================================================
   Green Beans Engine v37 additions
   Explore, Schedule, Consumption, Feed, object cards and human-readable
   controls. Written to sit on top of the existing v36 tokens rather than
   replace them, so nothing that already looked right changes.
   ========================================================================= */

.mode-tag{font-style:normal;font-size:.68em;opacity:.65;letter-spacing:.04em}

/* --- Human-readable action buttons (v36 shipped icon-only controls) ----- */
.action-button{display:inline-flex;align-items:center;gap:.45rem;padding:.4rem .7rem;border-radius:.6rem;
  border:1px solid var(--line,rgba(0,0,0,.12));background:var(--surface,#fff);color:inherit;
  font-size:.82rem;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s,transform .05s}
.action-button:hover{background:var(--surface-2,rgba(0,0,0,.04));border-color:var(--lime,#8fbf55)}
.action-button:active{transform:translateY(1px)}
.action-button:focus-visible{outline:2px solid var(--lime,#8fbf55);outline-offset:2px}
.action-button.subtle{border-style:dashed;opacity:.85}
.action-button.danger{color:#b3261e;border-color:rgba(179,38,30,.35)}
.action-button.danger:hover{background:rgba(179,38,30,.08)}
.action-button [aria-hidden="true"]{font-size:1rem;line-height:1}

/* --- Chips and filters -------------------------------------------------- */
.chip{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border-radius:999px;
  border:1px solid var(--line,rgba(0,0,0,.12));background:var(--surface,#fff);font-size:.8rem;cursor:pointer}
.chip.active{background:var(--deep,#16543c);color:#fff;border-color:var(--deep,#16543c)}
.chip.subtle{opacity:.7;cursor:default}
.chip-count{opacity:.6;font-variant-numeric:tabular-nums}
.chip-row{display:flex;flex-wrap:wrap;gap:.4rem;margin:.4rem 0}
.chip-x{border:0;background:transparent;cursor:pointer;font-size:1rem;line-height:1;opacity:.6;padding:0 .1rem}
.chip-x:hover{opacity:1;color:#b3261e}
.filter-row{display:flex;flex-wrap:wrap;gap:.4rem;margin:.8rem 0}
.pill.warn{background:rgba(214,158,46,.18);color:#8a5b00}

/* --- Object cards ------------------------------------------------------- */
.object-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.75rem}
.object-card{display:flex;flex-direction:column;justify-content:space-between;gap:.6rem;padding:.8rem;
  border:1px solid var(--line,rgba(0,0,0,.12));border-radius:.8rem;background:var(--surface,#fff)}
.object-card-head{display:flex;gap:.6rem;align-items:flex-start}
.object-glyph{font-size:1.3rem;line-height:1.2}
.object-glyph.big{font-size:2.2rem}
.object-card-title b{display:block;line-height:1.25}
.object-card-meta{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;margin-top:.25rem;font-size:.75rem}
.object-card-actions{display:flex;flex-wrap:wrap;gap:.35rem}

.object-sheet{max-width:640px}
.object-sheet-head{display:flex;gap:.8rem;align-items:flex-start;margin-bottom:.8rem}
.object-sheet-head h2{margin:.1rem 0}
.object-sheet-body h4{margin:1rem 0 .3rem;font-size:.85rem;text-transform:uppercase;letter-spacing:.05em;opacity:.7}
.object-sheet-actions{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:1rem;padding-top:.8rem;border-top:1px solid var(--line,rgba(0,0,0,.12))}
.evidence-list{margin:.3rem 0;padding-left:1.1rem}
.evidence-list li{margin:.2rem 0;font-size:.88rem}

/* --- Explore ------------------------------------------------------------ */
.explore-bar{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.explore-bar input[type=search]{flex:1 1 260px;min-width:0}
.scope-row{display:flex;gap:.3rem}
.facet-row{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.7rem}
.trail-tier{margin:.6rem 0}
.trail-tier-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;opacity:.6}

/* --- Schedule ----------------------------------------------------------- */
.schedule-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.5rem;margin-top:1rem}
.schedule-day{border:1px solid var(--line,rgba(0,0,0,.12));border-radius:.7rem;background:var(--surface,#fff);
  display:flex;flex-direction:column;min-height:170px;padding:.5rem}
.schedule-day.is-today{border-color:var(--lime,#8fbf55);box-shadow:0 0 0 2px rgba(143,191,85,.25)}
.schedule-day.drop-target,.card.drop-target{background:rgba(143,191,85,.12);border-color:var(--lime,#8fbf55)}
.schedule-day header{display:flex;flex-direction:column;font-size:.78rem;margin-bottom:.4rem}
.schedule-day header b{font-size:.9rem}
.schedule-day-body{flex:1;display:flex;flex-direction:column;gap:.35rem}
.drop-hint{font-size:.75rem;opacity:.5;text-align:center;padding:.8rem 0;border:1px dashed var(--line,rgba(0,0,0,.15));border-radius:.5rem}
.schedule-card{border:1px solid var(--line,rgba(0,0,0,.12));border-radius:.5rem;padding:.45rem;background:var(--surface-2,#fafafa);cursor:grab}
.schedule-card.dragging{opacity:.5}
.schedule-card[data-status="completed"]{opacity:.65}
.schedule-card[data-status="skipped"]{opacity:.45;text-decoration:line-through}
.schedule-card-title{display:flex;flex-direction:column;gap:.2rem;font-size:.82rem}
.schedule-card-actions{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.35rem}
.schedule-card-actions .action-button{padding:.2rem .4rem;font-size:.7rem}
@media (max-width:900px){.schedule-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.schedule-grid{grid-template-columns:1fr}}

/* --- Consumption timeline ---------------------------------------------- */
.timeline-row{display:flex;gap:.7rem;align-items:center;padding:.6rem 0;border-bottom:1px solid var(--line,rgba(0,0,0,.08))}
.timeline-row:last-child{border-bottom:0}
.timeline-row.is-waste{opacity:.85}
.timeline-glyph{font-size:1.2rem}
.timeline-body{flex:1;min-width:0}
.timeline-actions{display:flex;gap:.3rem;flex-wrap:wrap}

/* --- Feed --------------------------------------------------------------- */
.feed-card{border:1px solid var(--line,rgba(0,0,0,.12));border-radius:.8rem;padding:.8rem;margin-bottom:.6rem;background:var(--surface,#fff)}
.feed-card-head{display:flex;gap:.6rem;align-items:flex-start}
.feed-card-actions{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.6rem}

/* --- Library ------------------------------------------------------------ */
.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.6rem}
.library-item{display:flex;flex-direction:column;gap:.5rem;padding:.7rem;border:1px solid var(--line,rgba(0,0,0,.12));border-radius:.7rem;background:var(--surface,#fff)}
.library-item-main{display:flex;gap:.5rem;align-items:center}
.library-item-actions{display:flex;flex-wrap:wrap;gap:.3rem}
.library-item-actions .action-button{padding:.25rem .5rem;font-size:.72rem}
.pill[data-stock-status="gone"]{opacity:.55}
.pill[data-stock-status="maybe_present"]{background:rgba(214,158,46,.18);color:#8a5b00}

/* --- Misc --------------------------------------------------------------- */
.pad-card{padding:.2rem}
.pad-card label{display:block;margin:.6rem 0}
.public-safe-error{display:flex;flex-direction:column;gap:.6rem;align-items:flex-start}
.section-gap{margin-top:1rem}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:820px){.two-col{grid-template-columns:1fr}}

@media (prefers-reduced-motion:reduce){
  .action-button{transition:none}
  .schedule-card.dragging{opacity:1}
}

/* =========================================================================
   v37.0.1 — height, clipping and the v37 card family
   -------------------------------------------------------------------------
   Three separate faults were producing the same symptom ("the screen is cut
   off"), so they are fixed together and the rules are stated rather than
   discovered again later:

   1. .dialog had no max-height and no overflow outside the mobile media
      query, while .modal-backdrop centred it. A dialog taller than the
      viewport therefore overflowed BOTH edges, and the top edge is not
      scrollable, so the heading and often the primary button were simply
      unreachable. Every modal in the app uses .dialog.
   2. Panels were sized in fixed pixels (chat 720/570, rooms 540). On a
      1366x768 laptop the chat card alone is taller than the content area.
      Panels are now viewport-relative with a pixel ceiling, never a floor
      taller than the screen.
   3. .social-stack-v28 carried overflow:hidden, which clipped any post whose
      preview ran past the card instead of letting the card grow.

   The house rule: a container may scroll or it may grow, but it may never
   silently clip.
   ========================================================================= */

/* --- 1. Modals ---------------------------------------------------------- */
.modal-backdrop{
  overflow-y:auto;
  place-items:start center;
  padding:clamp(12px,4vh,40px) 20px;
  overscroll-behavior:contain;
}
.dialog{
  max-height:calc(100dvh - clamp(24px,8vh,80px));
  overflow:auto;
  overscroll-behavior:contain;
  margin:auto;
}
/* Actions stay reachable while a long body scrolls under them. */
.dialog-actions{
  position:sticky;
  bottom:calc(-1 * var(--dialog-pad,20px));
  background:linear-gradient(180deg,rgba(255,255,255,0),#fff 38%);
  padding-top:14px;
  padding-bottom:4px;
  margin-bottom:-4px;
}
.drawer{overscroll-behavior:contain}

/* --- 2. Panels sized to the window, not to a guess ---------------------- */
.chat-card{min-height:min(720px,calc(100dvh - 210px))}
.chat-messages{
  max-height:min(56dvh,570px);
  min-height:min(420px,38dvh);
  overscroll-behavior:contain;
}
.room-messages{max-height:min(54dvh,540px);overscroll-behavior:contain}
.debug-box{max-height:min(46dvh,380px)}
.friend-picker,.internal-room-list,.refine-thread,.research-chip-list{max-height:min(40dvh,360px)}
.app-body{min-height:calc(100dvh - 76px)}
.side-nav{height:calc(100dvh - 76px);overscroll-behavior:contain}
.landing-shell,.app-shell{min-height:100dvh}

/* --- 3. Nothing clips ---------------------------------------------------- */
.social-stack-v28{overflow:visible;min-width:0}
.social-control-bar{overflow:visible}
.community-preview{overflow-wrap:anywhere}
.community-preview pre,.community-preview code{white-space:pre-wrap;word-break:break-word}
.card,.social-stack,.feed-card,.object-card{min-width:0}

/* --- 4. The v37 card family, in the house style -------------------------
   The v37 tabs shipped with their own borders, radii and spacing scale, so
   Feed, Explore, Schedule and Consumption looked like a different product
   bolted onto Green Beans. They now use the same tokens as every v27-v36
   surface: --line, --r2/--r3, the card shadow, and the 800+ weight type.
   ------------------------------------------------------------------------ */
.feed-card{
  background:rgba(255,255,255,.92);
  border:1px solid var(--line);
  border-radius:var(--r3);
  box-shadow:0 4px 16px rgba(20,48,35,.045);
  padding:16px 17px;
  margin-bottom:14px;
  overflow-wrap:anywhere;
}
.feed-card:last-child{margin-bottom:0}
.feed-card-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:4px}
.feed-card-head>div{min-width:0;flex:1}
.feed-card-head h3,.feed-card-head h4{margin:0 0 3px;font-size:1rem;letter-spacing:-.02em}
.feed-card-head small{color:var(--muted);font-size:.72rem}
.feed-card-body{margin:9px 0 0;line-height:1.55}
.feed-card-actions{
  display:flex;gap:7px;flex-wrap:wrap;
  margin-top:13px;padding-top:12px;border-top:1px solid var(--line);
}
.object-glyph{
  width:40px;height:40px;flex:0 0 40px;border-radius:var(--r2);
  display:grid;place-items:center;background:var(--surface3);font-size:1.2rem;
}

.object-card{
  background:rgba(255,255,255,.92);
  border:1px solid var(--line);
  border-radius:var(--r3);
  box-shadow:0 4px 16px rgba(20,48,35,.045);
  padding:15px;
  transition:.18s var(--ease);
}
.object-card:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--line2)}
.object-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}

.object-sheet{max-width:640px}
.object-sheet-head{gap:13px;margin-bottom:13px}
.object-sheet-actions{
  gap:7px;margin-top:16px;padding-top:13px;border-top:1px solid var(--line);
}

.action-button{
  border:1px solid var(--line);
  background:#fff;
  color:var(--ink2);
  border-radius:var(--r1);
  padding:8px 12px;
  font-size:.79rem;
  font-weight:800;
  cursor:pointer;
  transition:.16s var(--ease);
}
.action-button:hover{border-color:var(--green3);background:var(--surface3);color:var(--green)}
.action-button.primary{background:var(--green2);border-color:var(--green2);color:#fff}
.action-button.primary:hover{background:var(--green);border-color:var(--green)}
.action-button:disabled{opacity:.5;cursor:default;transform:none}

.schedule-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.schedule-day{
  background:var(--surface2);border:1px solid var(--line);border-radius:var(--r2);
  padding:12px;min-height:140px;min-width:0;
}
.schedule-day>h4{margin:0 0 9px;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.schedule-card{
  background:#fff;border:1px solid var(--line);border-radius:var(--r1);
  padding:9px 10px;margin-bottom:7px;font-size:.84rem;overflow-wrap:anywhere;
}
.timeline-row{
  display:flex;gap:12px;align-items:flex-start;
  padding:11px 0;border-bottom:1px solid var(--line);
}
.timeline-row:last-child{border-bottom:0}

.explore-bar{
  display:flex;gap:8px;flex-wrap:wrap;align-items:center;
  padding:12px 14px;background:rgba(255,255,255,.72);
  border:1px solid var(--line);border-radius:var(--r2);
}
.facet-row{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.trail-tier{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;padding:7px 0}

.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:13px}
.library-item{
  background:#fff;border:1px solid var(--line);border-radius:var(--r2);
  padding:13px;min-width:0;
}

/* --- 5. Short windows ---------------------------------------------------- */
@media (max-height:760px){
  .chat-card{min-height:0}
  .chat-messages{min-height:220px;max-height:44dvh}
  .room-messages{max-height:42dvh}
  .modal-backdrop{padding:10px}
}

/* The chat column had a 650px floor and the card a 720px one, so on a 768px
   laptop the chat alone was taller than the content area before the composer
   was drawn. Floors now yield to the window. */
.chat-layout,.chat-layout-v28{min-height:min(650px,calc(100dvh - 190px))}

/* --- 6. Feed post bodies and attachments ---------------------------------
   v37.0.0 rendered a post as a headline and two buttons: the text the person
   actually wrote was never fetched and never had a style. Both are fixed —
   see gb_feed_query() for the query half.
   ------------------------------------------------------------------------ */
.feed-card-body{margin:10px 0 0;line-height:1.6;overflow-wrap:anywhere}
.feed-card-body p{margin:0 0 9px}
.feed-card-body p:last-child{margin-bottom:0}
.feed-attachments{display:grid;gap:7px;margin-top:12px}
.feed-attachment{
  display:flex;gap:10px;align-items:center;text-align:left;
  border:1px solid var(--line);border-radius:var(--r2);background:var(--surface2);
  padding:9px 11px;cursor:pointer;min-width:0;transition:.16s var(--ease);
}
.feed-attachment:hover{border-color:var(--green3);background:#fff}
.feed-attachment>span:last-child{display:grid;min-width:0}
.feed-attachment b{overflow-wrap:anywhere;font-size:.88rem}
.feed-attachment small{color:var(--muted);font-size:.7rem}
.object-glyph.small{width:30px;height:30px;flex-basis:30px;font-size:.95rem;border-radius:var(--r1)}

/* --- 7. The People rail --------------------------------------------------
   A 310px rail holding an avatar, a display name, a handle and two buttons on
   one line broke long names character by character ("Dana Whitfiel d-Marche
   tti"). The name gets the full width; the actions drop to their own row.
   ------------------------------------------------------------------------ */
.community-layout{grid-template-columns:minmax(0,1fr) minmax(280px,340px)}
.user-card{
  display:grid;
  grid-template-columns:46px minmax(0,1fr);
  grid-template-areas:"avatar copy" "actions actions";
  gap:8px 11px;
  align-items:center;
  padding:13px;
}
.user-card>:first-child{grid-area:avatar}
.user-card .copy{grid-area:copy;min-width:0}
.user-card h3{font-size:.95rem;overflow-wrap:break-word;hyphens:none;word-break:normal}
.user-card p{overflow-wrap:anywhere}
.user-card-actions{
  grid-area:actions;
  display:flex;gap:7px;flex-wrap:wrap;align-items:center;
}
.user-card-actions .btn,.user-card-actions .pill{white-space:nowrap}
@media (max-width:1180px){
  .community-layout{grid-template-columns:1fr}
}
.preview-facts{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.friendly-object-preview>p:first-child{margin-top:0}

/* =========================================================================
   v37.1 — pills, doors, lineage, steering, nutrition, progress
   ========================================================================= */

/* --- Intelligent typing --------------------------------------------------
   A pill is a piece of the sentence that points at a real object. It has to
   read as part of the text, not as a widget bolted into it, or people stop
   trusting that what they wrote is what they wrote.
   ------------------------------------------------------------------------ */
.gb-pill{
  display:inline-flex;align-items:center;gap:5px;
  padding:1px 9px 2px;margin:0 1px;
  border-radius:999px;
  background:var(--surface3);
  border:1px solid #d3e0cd;
  font-size:.92em;font-weight:800;line-height:1.5;
  white-space:nowrap;vertical-align:baseline;
  user-select:none;
}
.gb-pill i{font-style:normal;font-size:1em}
.gb-pill b{font-weight:800}
.gb-pill em{font-style:normal;font-size:.72em;font-weight:900;letter-spacing:.06em;
  text-transform:uppercase;color:var(--amber);margin-left:2px}
.gb-pill.static{cursor:pointer}
.gb-pill.static:hover{border-color:var(--green3);background:#eaf4e6}
.gb-pill.researching{border-style:dashed;border-color:var(--amber);background:#fdf6e7}
.gb-pill-command{background:var(--green);border-color:var(--green);color:#fff}
.gb-pill-command b{color:#fff}

.detected-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:9px 0 0}
.detected-pills.compact{margin:7px 0 0}
.detected-label{font-size:.63rem;font-weight:900;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted)}

.pill-input{position:relative}
.pill-host{display:block}
.pill-field{
  min-height:44px;padding:11px 13px;
  border:1px solid var(--line);border-radius:var(--r2);
  background:#fff;line-height:1.7;outline:none;
  overflow-wrap:anywhere;
}
.pill-host.tall .pill-field{min-height:120px}
.pill-field:focus{border-color:var(--green3);box-shadow:0 0 0 4px rgba(70,166,124,.13)}
.pill-field:empty:before{content:attr(data-placeholder);color:var(--muted)}

.pill-dropdown{
  z-index:1200;background:#fff;border:1px solid var(--line);
  border-radius:var(--r2);box-shadow:var(--shadow);
  overflow:hidden;max-height:min(46dvh,340px);overflow-y:auto;
}
.pill-option{
  display:flex;width:100%;align-items:center;gap:10px;
  padding:9px 12px;border:0;background:none;text-align:left;cursor:pointer;
}
.pill-option:hover,.pill-option.active{background:var(--surface3)}
.pill-option-emoji{width:22px;text-align:center;font-size:1.05rem}
.pill-option-copy{display:grid;min-width:0;flex:1}
.pill-option-copy b{font-size:.9rem;overflow-wrap:anywhere}
.pill-option-copy small{color:var(--muted);font-size:.72rem}
.pill-option-kind{font-size:.62rem;font-weight:900;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted)}

/* --- The thinking overlay ------------------------------------------------
   Twenty seconds of a disabled button reads as broken. Twenty seconds of a
   calm, moving, honest indicator reads as working.
   ------------------------------------------------------------------------ */
.thinking{
  display:flex;align-items:center;gap:14px;
  margin:10px 0 2px;padding:13px 15px;
  background:linear-gradient(180deg,#fbfff5,#f3f8ee);
  border:1px solid #d8e6d2;border-radius:var(--r3);
}
.thinking-copy{flex:1;min-width:0;display:grid;gap:3px}
.thinking-copy b{font-size:.92rem}
.thinking-bean{display:flex;gap:5px;align-items:flex-end;height:22px}
.thinking-bean i{
  width:9px;height:14px;border-radius:55% 45% 55% 45%;
  background:var(--green3);display:block;
  animation:thinkBean 1.1s var(--ease) infinite;
}
.thinking-bean i:nth-child(2){animation-delay:.16s;background:var(--lime2)}
.thinking-bean i:nth-child(3){animation-delay:.32s;background:var(--green2)}
@keyframes thinkBean{0%,100%{transform:translateY(0) rotate(-18deg);opacity:.55}
  50%{transform:translateY(-7px) rotate(-8deg);opacity:1}}
@media (prefers-reduced-motion:reduce){.thinking-bean i{animation:none;opacity:.8}}

/* --- Explore doors -------------------------------------------------------
   The front page of Explore is the shape of the data, not an empty search box.
   ------------------------------------------------------------------------ */
.door-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:13px}
.door{
  display:flex;align-items:flex-start;gap:13px;text-align:left;
  padding:16px;min-width:0;cursor:pointer;
  background:rgba(255,255,255,.92);border:1px solid var(--line);
  border-radius:var(--r3);box-shadow:0 4px 16px rgba(20,48,35,.045);
  transition:.18s var(--ease);
}
.door:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--green3)}
.door.active{border-color:var(--green2);background:#f3faf2;box-shadow:0 0 0 2px rgba(31,122,84,.16)}
.door-glyph{font-size:1.7rem;line-height:1;flex:0 0 auto}
.door-copy{display:grid;gap:3px;min-width:0;flex:1}
.door-copy b{font-size:1rem;letter-spacing:-.02em}
.door-copy small{color:var(--muted);font-size:.76rem;line-height:1.45}
.door-count{
  flex:0 0 auto;align-self:center;
  background:var(--surface3);border-radius:999px;
  padding:3px 10px;font-size:.78rem;font-weight:900;color:var(--green);
}

.catch-up{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-top:12px;padding:12px 14px;
  background:#fdf6e7;border:1px solid #ecd9a8;border-radius:var(--r2);
}
.catch-up-copy{display:grid;gap:2px;flex:1;min-width:220px}

/* --- Lineage -------------------------------------------------------------
   Cheese › Sliced Cheese › Sliced Muenster Cheese. The chain is the point, so
   it gets its own row rather than being mixed in with other edges.
   ------------------------------------------------------------------------ */
.lineage{
  padding:14px;margin-bottom:16px;
  background:var(--surface2);border:1px solid var(--line);border-radius:var(--r2);
}
.lineage-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px}
.lineage-chain{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.lineage-node{
  display:inline-flex;align-items:center;gap:6px;
  padding:6px 12px;border-radius:999px;cursor:pointer;
  background:#fff;border:1px solid var(--line);font-weight:800;font-size:.86rem;
}
.lineage-node:hover{border-color:var(--green3)}
.lineage-node.current{background:var(--green);border-color:var(--green);color:#fff}
.lineage-node i{font-style:normal}
.lineage-arrow{color:var(--muted);font-weight:900}
.lineage-kids{margin-top:12px;display:grid;gap:6px}
.lineage-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:13px;
  padding-top:12px;border-top:1px solid var(--line)}

/* --- Feed steering ------------------------------------------------------- */
.filter-spacer{flex:1}
.chip.banned{background:#fbeceb;border-color:#e5bcb7;color:#8c3a31}
.pill.boost{background:#e4f4e7;color:#1c6848}
.pill.bury{background:#f1f1ee;color:#6c7a72}
.post-attachments{margin:10px 0 0}
.post-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}
.post-tools select{border:1px solid var(--line);border-radius:var(--r1);padding:7px 9px;background:#fff}

/* --- Plan progress -------------------------------------------------------
   "3" told you nothing. "3/5, two to go" tells you where you are.
   ------------------------------------------------------------------------ */
.plan-progress{display:inline-flex;align-items:center;gap:9px}
.plan-progress svg{flex:0 0 auto;transform:rotate(-90deg)}
.plan-progress .progress-track{fill:none;stroke:var(--line);stroke-width:5}
.plan-progress .progress-value{fill:none;stroke:var(--green3);stroke-width:5;stroke-linecap:round;
  transition:stroke-dasharray .4s var(--ease)}
.plan-progress.met .progress-value{stroke:var(--green2)}
.plan-progress.over .progress-value{stroke:var(--amber)}
.plan-progress-copy{display:grid;line-height:1.15}
.plan-progress-copy b{font-size:1.05rem;letter-spacing:-.03em}
.plan-progress-copy b small{font-size:.72rem;font-weight:800;color:var(--muted)}
.plan-progress-copy em{font-style:normal;font-size:.66rem;font-weight:800;
  letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.plan-progress.met .plan-progress-copy em{color:var(--green2)}
.plan-progress.over .plan-progress-copy em{color:var(--amber)}
.plan-progress.no-target{display:inline-grid;line-height:1.1;text-align:right}

/* --- Nutrition -----------------------------------------------------------
   Coverage is shown at least as prominently as the totals, because a total
   that quietly omits half your week is the lie this tab exists not to tell.
   ------------------------------------------------------------------------ */
.coverage{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.coverage-bar{
  flex:0 0 clamp(140px,28vw,260px);height:12px;border-radius:999px;
  background:var(--surface3);overflow:hidden;
}
.coverage-bar span{display:block;height:100%;border-radius:999px;
  background:linear-gradient(90deg,var(--green3),var(--green2));transition:width .4s var(--ease)}
.coverage-copy{display:grid;gap:3px;flex:1;min-width:220px}
.nutrition-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:11px;margin-bottom:12px}
.nutrition-stat{
  background:var(--surface2);border:1px solid var(--line);border-radius:var(--r2);
  padding:13px;display:grid;gap:2px;
}
.nutrition-stat b{font-size:1.5rem;letter-spacing:-.04em;line-height:1.1}
.nutrition-stat b small{font-size:.72rem;font-weight:800;color:var(--muted);margin-left:2px}
.nutrition-stat span{font-size:.72rem;color:var(--muted);font-weight:700}
.basis-legend{display:grid;gap:8px;margin-bottom:10px}
.basis-row{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.pill.basis-label{background:#dff3de;color:#1c6848}
.pill.basis-retailer{background:#e2eef7;color:#2c5c80}
.pill.basis-research{background:#eee7f7;color:#5b4285}
.pill.basis-derived{background:#f3f1e4;color:#75651f}
.pill.basis-estimate{background:#f7ece4;color:#8a5326}

/* --- Holding area -------------------------------------------------------- */
.holding-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:11px}
.holding-item{
  background:#fff;border:1px solid var(--line);border-radius:var(--r2);
  padding:12px;display:grid;gap:8px;min-width:0;
}
.holding-item-head{display:flex;gap:9px;align-items:flex-start;min-width:0}
.holding-item-head b{overflow-wrap:anywhere}
.holding-actions{display:flex;gap:5px;flex-wrap:wrap}

.field{display:grid;gap:6px;margin:12px 0}
.field>span{font-size:.75rem;font-weight:800;color:var(--ink2)}
.field input{border:1px solid var(--line);border-radius:var(--r2);padding:11px 13px;background:#fff}

@media (max-width:640px){
  .door{padding:13px}
  .door-glyph{font-size:1.4rem}
  .plan-progress svg{width:30px;height:30px}
  .coverage-bar{flex-basis:100%}
}
/* `hidden` must actually hide: a display rule beats the attribute, and the
   catch-up banner was rendering as an empty yellow bar on every Explore load. */
[hidden]{display:none!important}

/* --- Empty states --------------------------------------------------------
   An empty state is a signpost, not a room. The Plan view stacks six of them
   and at 240px each an empty plan was six screens of nothing.
   ------------------------------------------------------------------------ */
.empty-state{
  display:grid;place-items:center;text-align:center;
  padding:38px 24px;min-height:0;
}
.empty-state.compact{padding:20px 16px}
.empty-state .empty-emoji{font-size:2.2rem;line-height:1}
.empty-state.compact .empty-emoji{font-size:1.5rem}
.empty-state h3{margin:9px 0 4px;font-size:1rem}
.empty-state.compact h3{margin:6px 0 2px;font-size:.92rem}
.empty-state p{margin:0;max-width:420px;font-size:.84rem}
.empty-state.compact p{font-size:.78rem}
/* --- Plan toolbar ---------------------------------------------------------
   The toolbar went dark in v37 and the select inside it never followed, so
   "Viewing Plan" and every option in the menu were white text on white.
   ------------------------------------------------------------------------ */
.plan-toolbar{color:#fff}
.plan-source-picker{display:grid;gap:5px}
.plan-source-picker>span{
  font-size:.66rem;font-weight:900;letter-spacing:.12em;
  text-transform:uppercase;color:rgba(255,255,255,.82);
}
.plan-source-picker select{
  background:#fff;color:var(--ink);
  border:1px solid rgba(255,255,255,.35);border-radius:var(--r2);
  padding:9px 12px;font-weight:800;min-width:min(320px,70vw);
}
.plan-source-picker select option{background:#fff;color:var(--ink)}
.plan-toolbar b,.plan-toolbar p{color:#fff}
.plan-toolbar p{opacity:.82}

/* =========================================================================
   v37.2 — reacting, discussing, and a feed that looks like one
   ========================================================================= */

/* --- Reactions -----------------------------------------------------------
   A count next to a thumb, and nothing clever. The number is there because it
   is useful; it is not a score and it does not hide anybody's dinner.
   ------------------------------------------------------------------------ */
.react-bar{
  display:flex;gap:7px;align-items:center;flex-wrap:wrap;
  padding:10px 0 2px;margin-top:10px;border-top:1px solid var(--line);
}
.react-bar.compact{border-top:0;padding-top:0;margin-top:6px}
.react-btn{
  display:inline-flex;align-items:center;gap:6px;
  border:1px solid var(--line);background:#fff;border-radius:999px;
  padding:6px 13px;cursor:pointer;font-weight:800;font-size:.82rem;
  transition:.15s var(--ease);
}
.react-btn:hover{border-color:var(--green3);background:var(--surface3)}
.react-btn.on{background:var(--green2);border-color:var(--green2);color:#fff}
.react-btn.on.down{background:#8c3a31;border-color:#8c3a31}
.react-btn b{font-variant-numeric:tabular-nums}
.react-btn:disabled{opacity:.6;cursor:default}
.engage-note{font-size:.7rem}
.object-sheet-engage{display:grid;gap:4px;margin-top:6px}

/* --- Comments ------------------------------------------------------------ */
.comment-thread{margin-top:10px;display:grid;gap:10px}
.comment-list{display:grid;gap:10px}
.comment{background:var(--surface2);border:1px solid var(--line);border-radius:var(--r2);padding:10px 12px}
.comment-head{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;font-size:.8rem}
.comment-head b{font-size:.86rem}
.comment p{margin:5px 0 0;line-height:1.55;overflow-wrap:anywhere}
.comment-media{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.comment-media img{max-width:180px;border-radius:var(--r1);border:1px solid var(--line)}
.comment-form{display:flex;gap:7px}
.comment-form input{
  flex:1;min-width:0;border:1px solid var(--line);border-radius:var(--r2);
  padding:10px 12px;background:#fff;
}
.comment-form input:focus{border-color:var(--green3);outline:none;box-shadow:0 0 0 3px rgba(70,166,124,.13)}

/* --- Media ---------------------------------------------------------------
   One image gets the room. Several become a tidy grid. Either way the picture
   is the point, which is the whole complaint about the old feed.
   ------------------------------------------------------------------------ */
.media-strip{display:grid;gap:6px;margin:12px 0 0;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
.media-strip.single{grid-template-columns:1fr}
.media-item{margin:0;position:relative;border-radius:var(--r2);overflow:hidden;background:var(--surface3)}
.media-item img{display:block;width:100%;height:100%;object-fit:cover;max-height:520px}
.media-strip:not(.single) .media-item img{aspect-ratio:1/1;max-height:none}
.media-remove{
  position:absolute;top:7px;right:7px;width:28px;height:28px;border-radius:50%;
  border:0;background:rgba(10,30,20,.68);color:#fff;font-size:1.1rem;cursor:pointer;line-height:1;
}

/* --- The composer -------------------------------------------------------- */
.gb-composer{display:grid;gap:9px}
.gb-composer.drop-target{outline:2px dashed var(--green3);outline-offset:6px;border-radius:var(--r2)}
.gb-composer-tools{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.composer-spacer{flex:1}
.gb-composer-search{
  display:grid;gap:7px;padding:11px;
  background:var(--surface2);border:1px solid var(--line);border-radius:var(--r2);
}
.composer-search-input{border:1px solid var(--line);border-radius:var(--r1);padding:9px 11px;background:#fff}
.composer-search-results{display:grid;gap:4px;max-height:min(34dvh,240px);overflow:auto}
.composer-result{
  display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  border:1px solid var(--line);background:#fff;border-radius:var(--r1);
  padding:8px 11px;cursor:pointer;text-align:left;
}
.composer-result:hover{border-color:var(--green3);background:var(--surface3)}
.composer-result small{color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.06em}

/* --- The feed as a feed --------------------------------------------------- */
.feed-card.social{padding:0;overflow:hidden}
.feed-card.social>*{padding-left:17px;padding-right:17px}
.feed-card.social .media-strip{padding:0;margin:12px 0 0;border-radius:0}
.feed-card.social .media-strip .media-item{border-radius:0}
.feed-card.social .feed-card-head{padding-top:15px;gap:11px;align-items:center}
.feed-avatar{
  width:40px;height:40px;flex:0 0 40px;border-radius:50%;
  display:grid;place-items:center;background:var(--surface3);font-size:1.15rem;
}
.feed-card-who{flex:1;min-width:0}
.feed-card-who b{display:block;overflow-wrap:anywhere}
.feed-hero-glyph{
  margin-top:12px;display:grid;place-items:center;cursor:pointer;
  min-height:150px;background:linear-gradient(150deg,var(--surface3),#e7f0e2);
  font-size:3.4rem;
}
.feed-card.social .react-bar{margin-top:0;padding-top:11px}
.feed-card.social .feed-comments{padding-bottom:6px}
.feed-card-secondary{
  display:flex;gap:12px;align-items:center;flex-wrap:wrap;
  padding-top:9px;padding-bottom:13px;margin-top:6px;
  border-top:1px solid var(--line);font-size:.78rem;
}
.feed-steer{display:flex;gap:7px;align-items:center;margin-left:auto}
.feed-steer .text-action.on{color:var(--green);text-decoration:underline}

/* --- Schedule: things you can pick up ------------------------------------
   A draggable thing has to look draggable, and an armed thing has to look
   armed, or tap-to-place is a mystery.
   ------------------------------------------------------------------------ */
.plan-rail{gap:7px}
.plan-pill{cursor:grab;user-select:none;border-style:dashed}
.plan-pill:active{cursor:grabbing}
.plan-pill.dragging{opacity:.45}
.plan-pill.armed{
  border-style:solid;border-color:var(--green2);
  background:var(--green2);color:#fff;
  box-shadow:0 0 0 3px rgba(31,122,84,.18);
}
.schedule-day.drop-ready,.card.drop-ready{outline:2px dashed var(--green3);outline-offset:3px;cursor:pointer}
.schedule-day.drop-target,.card.drop-target{
  outline:2px solid var(--green2);outline-offset:3px;background:#f2faf2;
}
.drop-hint{padding:14px 4px;text-align:center;font-size:.78rem}

/* Basis pills are sentences, not labels. */
.pill.basis-label,.pill.basis-retailer,.pill.basis-research,
.pill.basis-derived,.pill.basis-estimate{text-transform:none;letter-spacing:0}

/* =========================================================================
   v1.0.0 — typing, the meal editor, the thinking chain
   ========================================================================= */

/* The dropdown says what Enter will do, because the previous version quietly
   stole it and that is the kind of thing you should never have to guess. */
.pill-dropdown-hint{
  padding:7px 12px;border-top:1px solid var(--line);
  font-size:.68rem;color:var(--muted);background:var(--surface2);
}
.pill-option.active{background:var(--surface3);box-shadow:inset 3px 0 0 var(--green2)}

/* An icon the resolver is not sure about should not look confident. */
.food-icon.unsure{opacity:.55;filter:grayscale(.35)}

/* Pills inside a chat message: quieter than the ones you are typing. */
.detected-pills.in-message{margin:7px 0 0;gap:5px}
.detected-pills.in-message .gb-pill{font-size:.78rem;padding:1px 8px 2px}
.message.user .detected-pills.in-message .gb-pill{
  background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.28);color:#fff;
}

/* --- The thinking chain --------------------------------------------------
   More reasoning, not less: what the engine is doing, in order, in words, with
   the step it is on marked. It never ticks past the model — waiting on someone
   else's hardware is not progress you can honestly report.
   ------------------------------------------------------------------------ */
.thinking-chain{
  list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px;
  border-left:2px solid var(--line);padding-left:12px;
}
.thinking-chain li{display:grid;gap:1px;opacity:.42;transition:opacity .25s var(--ease)}
.thinking-chain li b{font-size:.78rem;font-weight:800}
.thinking-chain li span{font-size:.72rem;color:var(--muted);line-height:1.45}
.thinking-chain li.done{opacity:.66}
.thinking-chain li.done b:before{content:'✓ ';color:var(--green2)}
.thinking-chain li.now{opacity:1}
.thinking-chain li.now b{color:var(--green)}
.thinking-chain li.now b:before{content:'▸ ';color:var(--green2)}

/* --- The meal editor ------------------------------------------------------ */
.meal-editor{display:grid;gap:4px}
.meal-editor-head{display:grid;gap:4px;margin-bottom:6px}
.meal-editor-parts{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 14px}
.meal-editor-parts .chip{gap:6px}
.meal-editor-parts .chip i{font-style:normal}
.meal-editor .kicker{margin-top:10px}
.chip.add-more{
  border-style:dashed;cursor:pointer;font-weight:800;
  color:var(--green);border-color:var(--green3);background:#fff;
}
.chip.add-more:hover{background:var(--surface3)}
.mini-action[data-edit-meal]{color:var(--green)}
