:root{font-family:Inter,system-ui,sans-serif;background:#0b0b0c;color:#f3f0e9;--red:#c62026;--red2:#8d1016;--steel:#d9d7cf;--panel:#171719;--panel2:#202023;--muted:#aaa69e}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 50% -10%,#351516 0,#111 35%,#09090a 75%);min-height:100vh}header{position:relative;overflow:hidden;background:linear-gradient(100deg,#070708 0%,#171111 65%,#25090b 100%);color:white;padding:18px max(20px,calc((100% - 1100px)/2));display:flex;justify-content:space-between;align-items:center;border-bottom:3px solid var(--red);box-shadow:0 6px 24px #0008}header:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 28px,#ffffff06 28px 31px);pointer-events:none}.brand{display:flex;align-items:center;gap:16px;position:relative;z-index:1}.brand img{width:78px;height:78px;object-fit:cover;object-position:center 43%;border-radius:14px;border:2px solid #d6d1c7;filter:contrast(1.08);box-shadow:0 0 0 3px #000,0 0 18px #c6202644}.eyebrow{font-size:11px;letter-spacing:2.5px;font-weight:900;color:#e34b4f}.brand h1{font-family:Impact,Haettenschweiler,'Arial Narrow Bold',sans-serif;text-transform:uppercase;letter-spacing:1.2px;font-size:34px;line-height:1;color:#f3f0e9;text-shadow:2px 2px 0 #000}h1,h2,p{margin:0}h2{font-family:Impact,Haettenschweiler,'Arial Narrow Bold',sans-serif;text-transform:uppercase;letter-spacing:.8px}header p{color:#bbb5ad;margin-top:6px;font-size:13px}button{border:1px solid #3d3d40;border-radius:8px;padding:11px 16px;font-weight:800;cursor:pointer;background:#2a2a2d;color:#eee;text-transform:uppercase;letter-spacing:.3px}button:hover{border-color:#777}.primary{background:linear-gradient(#d82b31,#a91319);border-color:#ef4c51;color:white;box-shadow:0 3px 0 #65080c}header>button{position:relative;z-index:1;background:#e7e3da;color:#111;border-color:white}main{max-width:1100px;margin:auto;padding:20px}.card{background:linear-gradient(145deg,#1b1b1e,#121214);border:1px solid #323236;border-radius:12px;padding:18px;box-shadow:0 8px 24px #0005}.targets{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;text-align:center;margin-top:-5px;border-top:3px solid var(--red)}.targets div+div{border-left:1px solid #38383b}.targets b{font-size:25px;display:block;color:#fff}.targets span{font-size:11px;color:#aaa59d;text-transform:uppercase;letter-spacing:1px;font-weight:800}.actions{display:flex;gap:10px;margin:18px 0 30px}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:14px 0 30px}.meal{position:relative;background:linear-gradient(150deg,#1d1d20,#121214);border-radius:11px;padding:16px;border:1px solid #36363a;box-shadow:0 6px 18px #0004;overflow:hidden}.meal:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#555}.meal h3{margin:5px 0 9px;color:#f5f2eb}.meal .type{text-transform:uppercase;font-size:10px;color:#d24a4e;font-weight:900;letter-spacing:1.2px}.macros{display:flex;gap:6px;flex-wrap:wrap;font-size:11px}.macros span{background:#29292c;border:1px solid #3c3c40;padding:5px 7px;border-radius:5px;color:#d9d6cf}.meal .buttons{display:flex;gap:7px;margin-top:13px}.meal .buttons button{padding:7px 9px;font-size:11px}.locked{outline:2px solid var(--red);box-shadow:0 0 18px #c6202638}.locked:before,.todayRecipe:before{background:var(--red)}.todayRecipe{border-color:#7b272a;background:linear-gradient(150deg,#25191a,#131315);padding-top:38px}.todayBadge{position:absolute;top:0;right:0;background:var(--red);color:white;font-size:10px;font-weight:1000;letter-spacing:1.5px;padding:7px 12px;border-radius:0 0 0 8px;box-shadow:0 3px 10px #0006}.totals{margin-bottom:30px;border-left:3px solid var(--red)}.totals h2{margin-bottom:14px}.bar{height:9px;background:#303034;border-radius:2px;overflow:hidden;margin:6px 0 12px}.bar i{display:block;height:100%;background:linear-gradient(90deg,#941016,#d52a30)}.remain{font-weight:800;margin-top:12px;color:#e3dfd7}.sectionHead{display:flex;justify-content:space-between;gap:15px;align-items:end}.sectionNote{font-size:12px;color:var(--muted);margin-top:5px}.sectionHead input,dialog input{padding:11px 12px;border:1px solid #444449;background:#171719;color:white;border-radius:7px;min-width:220px;outline:none}.sectionHead input:focus,dialog input:focus{border-color:var(--red)}dialog{border:1px solid #4a4a4f;border-top:3px solid var(--red);border-radius:12px;padding:22px;width:min(420px,90vw);background:#171719;color:#eee;box-shadow:0 20px 80px #000b}dialog::backdrop{background:#000b}dialog label{display:block;margin:12px 0;font-weight:800}dialog input{width:100%;margin-top:5px;min-width:0}menu{display:flex;justify-content:flex-end;gap:8px;padding:0;margin-top:18px}@media(max-width:800px){.grid{grid-template-columns:repeat(2,1fr)}.targets{grid-template-columns:repeat(2,1fr)}.targets div+div{border-left:0}.targets div:nth-child(even){border-left:1px solid #38383b}}@media(max-width:520px){header{padding:14px}.brand img{width:58px;height:58px}.brand h1{font-size:27px}.eyebrow{font-size:9px}.brand p{display:none}header>button{padding:9px 11px;font-size:11px}main{padding:14px}.grid{grid-template-columns:1fr}.sectionHead{align-items:stretch;flex-direction:column}.sectionHead input{min-width:0}.actions button{flex:1}.targets b{font-size:22px}}
.clickable{cursor:pointer;transition:transform .15s ease,border-color .15s ease}.clickable:hover{transform:translateY(-2px);border-color:#c82b2b}.viewRecipe{margin-top:12px;font-size:.78rem;text-transform:uppercase;letter-spacing:.08em;color:#ddd}.recipeDialog{max-width:760px;width:calc(100% - 28px);background:#101010;color:#f4f1e8;border:1px solid #5b5b5b;border-top:4px solid #c82b2b;border-radius:12px}.recipeDialog form{position:relative}.closeX{position:absolute;right:0;top:-6px;border:0;background:transparent;color:#fff;font-size:30px;cursor:pointer}.recipeMacros{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0}.recipeMacros span{background:#1c1c1c;border:1px solid #444;padding:8px 10px;border-radius:8px}.recipeCols{display:grid;grid-template-columns:1fr 1.25fr;gap:28px;margin-top:22px}.recipeCols li{margin:8px 0;line-height:1.4}.tags{display:flex;gap:7px;flex-wrap:wrap}.tag{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;background:#351010;border:1px solid #8f2727;padding:5px 8px;border-radius:999px}.recipeNote{opacity:.6;font-size:.78rem;margin-top:22px}@media(max-width:650px){.recipeCols{grid-template-columns:1fr}}
.portionCtl{margin-top:18px;padding-top:14px;border-top:1px solid #3a3a3a;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.portionCtl button{background:#171717;border:1px solid #555;color:#fff;border-radius:7px;padding:7px 10px;cursor:pointer}.portionCtl button:hover{border-color:#d12626;color:#fff}
.categoryChips{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}.categoryChips button{border:1px solid #6b6b6b;background:#181818;color:#f2f2f2;border-radius:999px;padding:8px 14px;cursor:pointer}.categoryChips button:hover{border-color:#c81f2b;color:#fff}.meal .type{text-transform:uppercase;letter-spacing:.08em}
.portionBar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:16px 0;padding:12px;border:1px solid #333;background:#101010}.portionBar #portionButtons{display:flex;gap:7px}.portionBar button.active{outline:2px solid #fff;background:#b20d18}.portionBadge{display:inline-block;margin-left:6px;padding:2px 7px;border-radius:999px;background:#b20d18;color:#fff;font-weight:800}.recipeCols li{margin:.55rem 0}.recipeCols #recipeIngredients li{display:grid;grid-template-columns:minmax(78px,auto) 1fr;gap:10px;align-items:baseline}.recipeCols #recipeIngredients li b{color:#fff}.recipeCols #recipeIngredients li span{color:#d5d5d5}
.library-count{margin:.55rem 0 1rem;color:#aaa;font-size:.9rem;font-weight:700;letter-spacing:.04em}

.filterPanel{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin:14px 0;padding:12px 14px}.filterPanel label{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.05em}.filterPanel select{margin-left:6px;background:#171719;color:#fff;border:1px solid #4a4a4f;border-radius:6px;padding:7px}.favBtn,.excludeBtn{position:absolute;top:8px;z-index:3;padding:5px 8px;font-size:14px;line-height:1}.favBtn{left:10px}.excludeBtn{left:48px}.favBtn.on{color:#ffd75e;border-color:#ffd75e}.excludeBtn.on{color:#fff;background:#8d1016}.todayRecipe .favBtn,.todayRecipe .excludeBtn{top:7px}.recipeActions{display:flex;gap:8px;margin:12px 0}.recipeActions button.on{background:#8d1016;border-color:#e34b4f}.weekSection{margin:0 0 30px}.weekDay{padding:14px 0;border-bottom:1px solid #333}.weekDay:last-child{border-bottom:0}.weekMeals{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px}.weekMeal{background:#202023;border:1px solid #36363a;padding:9px;border-radius:7px;font-size:12px}.weekTotals{color:#bbb;margin-top:8px;font-size:12px}.groceryList{columns:3;column-gap:28px;margin-top:14px}.groceryItem{break-inside:avoid;padding:6px 0;border-bottom:1px solid #29292c;font-size:13px}.historyDay{padding:10px 0;border-bottom:1px solid #303034}.historyMeals{color:#bbb;font-size:12px;margin-top:4px}.emptyState{color:#999;padding:12px 0}.excludedCard{opacity:.5}.actions{flex-wrap:wrap}@media(max-width:800px){.weekMeals{grid-template-columns:repeat(2,1fr)}.groceryList{columns:2}}@media(max-width:520px){.weekMeals{grid-template-columns:1fr}.groceryList{columns:1}.filterPanel{align-items:flex-start;flex-direction:column}}
.customGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:14px 0}.customGrid label,.recipeDialog>form>label{display:flex;flex-direction:column;gap:6px}.recipeDialog textarea{width:100%;box-sizing:border-box;resize:vertical}.recipeDialog small{opacity:.7;font-weight:400}.sectionButtons{display:flex;gap:10px;align-items:center;flex-wrap:wrap}@media(max-width:650px){.customGrid{grid-template-columns:1fr}.sectionButtons input{width:100%}}

/* v14 authenticated shell */
.auth-gate{position:fixed;inset:0;z-index:9999;background:#080808;display:grid;place-items:center;padding:24px}.auth-gate[hidden]{display:none}.auth-card{width:min(460px,100%);background:#141414;border:1px solid #343434;border-top:4px solid #c51f26;border-radius:16px;padding:28px;box-shadow:0 24px 80px #000}.auth-brand{display:flex;gap:16px;align-items:center;margin-bottom:20px}.auth-brand img{width:78px;height:78px;object-fit:cover;border-radius:12px}.auth-brand h1{margin:2px 0}.auth-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:18px 0}.auth-tabs button.active{background:#c51f26;color:white;border-color:#c51f26}.auth-form{display:grid;gap:12px}.auth-form label{display:grid;gap:6px}.auth-form input{width:100%;box-sizing:border-box}.auth-actions{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-top:6px}.auth-status{min-height:22px;color:#ddd;margin-top:12px}.auth-status.error{color:#ff7777}.auth-status.ok{color:#8ed69b}.auth-config{margin-top:18px;padding-top:14px;border-top:1px solid #333;font-size:.9rem;color:#aaa}.userbar{display:flex;align-items:center;gap:10px}.user-email{font-size:.85rem;color:#bbb;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-shell.auth-pending{visibility:hidden}
/* v15 approval/admin */
.approval-panel{margin-top:18px;padding:18px;border:1px solid #633;border-left:4px solid var(--red);background:#1b1112;border-radius:10px}.approval-panel h2{margin:5px 0 8px}.approval-panel p{color:#c8c2ba;line-height:1.45;margin-bottom:14px}.adminFilters{display:flex;gap:8px;margin:16px 0}.adminUsers{display:grid;gap:10px;max-height:60vh;overflow:auto}.adminUser{border:1px solid #38383c;background:#19191b;border-radius:9px;padding:13px}.adminUserTop{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.adminUserEmail{font-weight:900;word-break:break-word}.adminMeta{font-size:11px;color:#aaa;margin-top:5px;text-transform:uppercase}.adminActions{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.adminActions button{font-size:10px;padding:7px 9px}.statusPill{font-size:10px;font-weight:900;padding:5px 8px;border:1px solid #555;border-radius:999px;text-transform:uppercase}.statusPill.active{border-color:#4f9b60;color:#8ed69b}.statusPill.pending{border-color:#9d7c31;color:#e9c86f}.statusPill.suspended,.statusPill.denied{border-color:#9b3d42;color:#ff8589}
.sync-status{font-size:.78rem;opacity:.75;white-space:nowrap}.sync-status.ok{color:#b8d9bd}.sync-status.error{color:#ff7777}

/* Auth mode visibility: Confirm Password is signup-only. */
.auth-form #confirmWrap[hidden]{display:none!important}
