
/* ===============================
   基础主题变量（统一配色/圆角/阴影）
   =============================== */
:root{
  --bg:#f7f7fb;
  --card:#ffffff;
  --text:#1f2328;
  --muted:#6b7280;
  --border:#e5e7eb;
  --shadow:0 6px 20px rgba(0,0,0,0.06);
  --radius:14px;
  --accent:#eef2ff;
  --accent-border:#c7d2fe;
  --danger:#fff1f2;
  --danger-border:#fecaca;
}

/* ===============================
   全局基础样式
   作用：让页面干净、可读、统一字体
   =============================== */
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,"PingFang SC","Noto Sans CJK SC","Microsoft YaHei",sans-serif;
  background:var(--bg);
  color:var(--text);
  line-height:1.45;
}
a{color:inherit; text-decoration:none;}
.container{
  max-width:1100px;
  margin:24px auto;
  padding:0 16px;
}
header{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  margin-bottom:14px;
}
h1{margin:0; font-size:24px;}
.subtitle{margin:6px 0 0; color:var(--muted); font-size:14px;}

/* ===============================
   步骤条（顶部导航）
   作用：让用户知道当前在哪一步
   =============================== */
.steps{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
}
.step-pill{
  font-size:12px;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid var(--border);
  background:#fff;
  color:var(--muted);
}
.step-pill.active{
  background:var(--accent);
  border-color:var(--accent-border);
  color:#1e3a8a;
  font-weight:650;
}

/* ===============================
   网格布局
   作用：左侧控制，右侧内容（大屏两栏，小屏一栏）
   =============================== */
.grid{
  display:grid;
  grid-template-columns:360px 1fr;
  gap:16px;
  align-items:start;
}
@media (max-width: 920px){
  .grid{grid-template-columns:1fr;}
}

/* ===============================
   卡片组件
   作用：把内容分块，视觉不草率
   =============================== */
.card{
  background:var(--card);
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:14px;
}
.section-title{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  margin-bottom:10px;
}
.section-title h2{
  margin:0;
  font-size:16px;
}
.badge{
  font-size:12px;
  padding:4px 8px;
  border-radius:999px;
  background:var(--accent);
  border:1px solid var(--accent-border);
  color:#1e3a8a;
}

/* ===============================
   表单与工具选择
   =============================== */
.controls{display:grid; gap:10px;}
.row{display:flex; gap:10px; align-items:center; flex-wrap:wrap;}
input[type="number"]{
  width:92px;
  padding:8px 10px;
  border:1px solid var(--border);
  border-radius:10px;
  outline:none;
  background:#fff;
}
body[data-page="constraints"] .freq-stepper{
  display:flex;
  align-items:center;
  gap:8px;
  max-width:220px;
}
body[data-page="constraints"] .freq-stepper #freq{
  width:84px;
  min-height:42px;
  text-align:center;
  padding:8px 10px;
  border:1px solid var(--border);
  border-radius:10px;
  font-size:16px;
  background:#fff;
}
body[data-page="constraints"] .freq-stepper__btn{
  min-width:44px;
  min-height:44px;
  padding:0;
  font-size:20px;
  line-height:1;
  border-radius:12px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}
body[data-page="constraints"] .meal-intent-toggle,
body[data-page="single-meal"] .meal-intent-toggle{
  display:grid;
  grid-template-columns:1fr;
  gap:8px;
}
body[data-page="constraints"] .meal-intent-toggle label,
body[data-page="single-meal"] .meal-intent-toggle label{
  display:flex;
  align-items:flex-start;
  gap:10px;
  border:1px solid var(--border);
  border-radius:12px;
  padding:10px 12px;
  background:#fff;
  cursor:pointer;
}
body[data-page="single-meal"] .single-meal-intent-fieldset{
  border:none;
  padding:0;
  margin:12px 0 0;
}
body[data-page="single-meal"] .single-meal-intent-fieldset .single-meal-intent-toggle label .note{
  display:block;
  margin-left:0;
  margin-top:2px;
}
.tools{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px 10px;
}
.tool-item{
  display:flex;
  gap:8px;
  align-items:center;
  padding:8px 10px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fff;
}
small.help{color:var(--muted); font-size:12px;}

/* ===============================
   按钮
   =============================== */
.btn{
  appearance:none;
  border:1px solid var(--border);
  background:#fff;
  color:var(--text);
  padding:10px 12px;
  border-radius:12px;
  cursor:pointer;
  font-size:14px;
  transition:transform .04s ease, box-shadow .12s ease;
}
.btn:hover{box-shadow:0 8px 22px rgba(0,0,0,0.08);}
.btn:active{transform:translateY(1px);}
.btn.primary{
  background:var(--accent);
  border-color:var(--accent-border);
  color:#1e3a8a;
  font-weight:650;
}
.btn.danger{
  background:var(--danger);
  border-color:var(--danger-border);
  color:#9f1239;
}
.btn.small{
  padding:7px 10px;
  border-radius:10px;
  font-size:13px;
}
.btn.full{width:100%;}

/* ===============================
   菜单列表（第二页）
   =============================== */
.menu-list{display:grid; gap:10px;}
.menu-item{
  border:1px solid var(--border);
  border-radius:14px;
  padding:12px;
  background:#fff;
}
.menu-top{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}
.menu-name{font-weight:700; font-size:15px;}
.menu-actions{display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end;}
.meta{margin-top:6px; color:var(--muted); font-size:12px;}
.details,.options{
  margin-top:10px;
  padding-top:10px;
  border-top:1px dashed var(--border);
  display:grid;
  gap:8px;
}
.details h4,.options h4{margin:0; font-size:13px; color:var(--muted); font-weight:650;}
.details ul{margin:0; padding-left:18px;}
.option-row{display:flex; gap:8px; flex-wrap:wrap;}

/* ===============================
   采购清单（第三页）
   =============================== */
.grocery-actions{display:flex; gap:10px; flex-wrap:wrap;}
.grocery-list{display:grid; gap:8px; margin-top:10px;}
.grocery-item{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  border:1px solid var(--border);
  border-radius:12px;
  padding:10px 12px;
  background:#fff;
}
.grocery-left{
  display:flex;
  flex-direction:column;
  gap:2px;
}
.grocery-name{font-weight:650;}
.grocery-sub{font-size:12px; color:var(--muted);}
.grocery-sub--qty{margin-top:2px; line-height:1.4;}
.grocery-item.already-have-item{
  opacity:0.55;
  background:#f3f4f6 !important;
  border-color:#d1d5db !important;
  color:#6b7280 !important;
}
.grocery-item.already-have-item .grocery-name{
  color:#6b7280 !important;
  text-decoration:line-through;
}
.grocery-item.already-have-item .grocery-sub,
.grocery-item.already-have-item .help{
  color:#9ca3af !important;
}
.list-restore-hidden{
  margin:8px 0 10px;
}
.list-hidden-toast{
  position:fixed;
  left:50%;
  bottom:22px;
  transform:translateX(-50%);
  display:flex;
  align-items:center;
  gap:10px;
  padding:10px 12px;
  border-radius:999px;
  border:1px solid var(--border);
  background:#111827;
  color:#fff;
  box-shadow:0 8px 24px rgba(0,0,0,0.2);
  z-index:2200;
}
.list-hidden-toast[hidden]{display:none !important;}
.list-hidden-toast__text{font-size:13px;}
.list-hidden-toast__undo{
  appearance:none;
  border:0;
  background:transparent;
  color:#93c5fd;
  font-size:13px;
  font-weight:650;
  cursor:pointer;
  padding:0;
}

.mp-loading-overlay{
  position:fixed;
  inset:0;
  z-index:3000;
  background:rgba(17, 24, 39, 0.42);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:16px;
}
.mp-loading-overlay[hidden]{display:none !important;}
.mp-loading-overlay__card{
  width:min(100%, 420px);
  background:#fff;
  border:1px solid #e5e7eb;
  border-radius:14px;
  box-shadow:0 20px 50px rgba(15, 23, 42, 0.22);
  padding:18px 16px;
  text-align:center;
}
.mp-loading-overlay__spinner{
  width:34px;
  height:34px;
  border-radius:50%;
  border:3px solid #dbeafe;
  border-top-color:#2563eb;
  margin:0 auto 12px;
  animation:mp-loading-spin .9s linear infinite;
}
.mp-loading-overlay__title{
  margin:0;
  font-size:16px;
  font-weight:700;
  color:#111827;
  line-height:1.45;
}
.mp-loading-overlay__subtitle{
  margin:8px 0 0;
  font-size:13px;
  line-height:1.5;
  color:#6b7280;
}
@keyframes mp-loading-spin{
  to{transform:rotate(360deg);}
}
/* 清单页 PMF：固定铺满视口 + flex 居中，避免被误认为底部抽屉 */
.list-pmf-modal{
  position:fixed; inset:0; z-index:2000;
  display:flex; align-items:center; justify-content:center;
  padding:max(20px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));
  box-sizing:border-box;
}
.list-pmf-modal[hidden]{display:none !important;}
.list-pmf-modal__backdrop{
  position:absolute; inset:0; z-index:0;
  background:rgba(15,23,42,0.5);
  cursor:pointer;
}
.list-pmf-modal__panel{
  position:relative; z-index:1;
  width:min(100%, 440px);
  max-height:min(calc(100vh - 40px), 600px);
  overflow:auto;
  margin:0;
  align-self:center;
  background:#fff;
  border:1px solid var(--border);
  border-radius:16px;
  padding:20px 20px 18px;
  box-shadow:0 20px 50px rgba(15,23,42,0.18);
}
.list-pmf-modal__title{
  margin:0 0 10px;
  font-size:17px;
  font-weight:700;
  line-height:1.45;
  color:var(--text);
}
.list-pmf-modal__note{
  margin:0 0 16px;
  font-size:13px;
  line-height:1.55;
  color:var(--muted);
}
.list-pmf-modal__form{display:flex; flex-direction:column; gap:0;}
.list-pmf-modal__options{
  display:flex;
  flex-direction:column;
  gap:10px;
  margin-bottom:4px;
}
.list-pmf-option{
  display:flex;
  align-items:flex-start;
  gap:10px;
  width:100%;
  box-sizing:border-box;
  margin:0;
  padding:12px 12px;
  font-size:14px;
  line-height:1.5;
  cursor:pointer;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fafafa;
}
.list-pmf-option:hover{background:#f3f4f6;}
.list-pmf-option input{
  margin-top:4px;
  flex-shrink:0;
}
.list-pmf-modal__optional{
  display:grid;
  gap:8px;
  margin-top:14px;
}
.list-pmf-modal__optional-label{font-size:13px; color:var(--text); font-weight:600;}
.list-pmf-modal__optional textarea{
  width:100%; box-sizing:border-box;
  border:1px solid var(--border);
  border-radius:10px;
  padding:10px 12px;
  font-size:14px;
  font-family:inherit;
  resize:vertical;
  min-height:76px;
  background:#fff;
}
.list-pmf-contact-capture{
  margin-top:14px;
  padding:12px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fafafa;
}
.list-pmf-contact-capture__title{
  font-size:14px;
  font-weight:650;
  color:var(--text);
  margin:0 0 6px;
}
.list-pmf-contact-capture__note{
  margin:0 0 10px;
  font-size:12px;
}
.list-pmf-contact-capture__row{
  display:block;
}
.list-pmf-contact-capture__row input{
  width:100%;
  box-sizing:border-box;
  border:1px solid var(--border);
  border-radius:10px;
  padding:10px 12px;
  font-size:14px;
  background:#fff;
}
.list-pmf-contact-capture__msg{
  margin-top:8px;
  min-height:1.25em;
}
.list-pmf-modal__actions{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
  justify-content:flex-end;
  align-items:center;
  margin-top:18px;
  padding-top:16px;
  border-top:1px solid var(--border);
}
.list-pmf-modal__btn-dismiss{flex:0 0 auto;}
.list-pmf-modal__btn-submit{
  flex:1 1 auto;
  min-width:min(160px, 100%);
  max-width:220px;
}
.pantry-pill{
  display:inline-block;
  font-size:11px;
  padding:2px 6px;
  border-radius:999px;
  border:1px solid var(--accent-border);
  background:var(--accent);
  color:#1e3a8a;
  margin-left:6px;
}
.note{color:var(--muted); font-size:13px; margin:0;}
.error{color:#b91c1c; font-size:13px; margin:0;}


/* ===============================
   蛋白采购建议（第三页顶部）
   作用：让“按克计算、按磅显示”更直观
   =============================== */
.protein-summary{
  display:grid;
  gap:10px;
  margin-top:10px;
}
.protein-box{
  border:1px solid var(--border);
  border-radius:12px;
  padding:10px 12px;
  background:#fff;
}
.protein-box h3{
  margin:0 0 6px;
  font-size:14px;
}
.protein-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:6px;
}
.protein-row{
  display:flex;
  justify-content:space-between;
  gap:10px;
  flex-wrap:wrap;
  font-size:13px;
}
.protein-row .muted{color:var(--muted); font-size:12px;}

/* ===============================
   单顿页（本顿吃什么）——仅当 data-page="single-meal" 时生效
   作用：整理轻量表单排版，不改 weekly 三页结构
   =============================== */
/* 中文注释：单顿页顶——略增呼吸感，不抢表单 */
body[data-page="single-meal"] .single-page-header{
  margin-bottom:4px;
}
body[data-page="single-meal"] .single-page-subtitle{
  max-width:34em;
}
body[data-page="single-meal"] .single-page-lead{
  max-width:40em;
  line-height:1.55;
}
body[data-page="single-meal"] .single-meal-card-title{
  margin:0 0 8px;
  font-size:18px;
}
body[data-page="single-meal"] .single-section-title{
  margin:18px 0 10px;
  font-size:15px;
  font-weight:650;
}
body[data-page="single-meal"] .field label{
  display:block;
  font-weight:650;
  margin-bottom:6px;
  font-size:14px;
}
body[data-page="single-meal"] .single-textarea{
  width:100%;
  max-width:640px;
  padding:10px 12px;
  border:1px solid var(--border);
  border-radius:12px;
  font:inherit;
  resize:vertical;
  min-height:96px;
  background:#fff;
}
body[data-page="single-meal"] .single-text-input{
  width:100%;
  max-width:640px;
  padding:8px 10px;
  border:1px solid var(--border);
  border-radius:10px;
  font:inherit;
  background:#fff;
}
body[data-page="single-meal"] .single-quick-tools{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  margin-bottom:10px;
}
body[data-page="single-meal"] .single-allergens{
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(168px, 1fr));
  gap:8px;
}
body[data-page="single-meal"] .single-allergens label{
  display:flex;
  gap:8px;
  align-items:flex-start;
  padding:8px 10px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fff;
  cursor:pointer;
  font-size:14px;
}
body[data-page="single-meal"] .single-mood-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(200px, 1fr));
  gap:8px;
}
body[data-page="single-meal"] .single-submit-row{
  margin-top:20px;
}
body[data-page="single-meal"] .single-submit-hint{
  margin-top:10px;
  max-width:40em;
}
body[data-page="single-meal"] .single-feedback-line{
  min-height:1.35em;
}
body[data-page="single-meal"] .single-footer-nav{
  margin-top:18px;
}
/* 中文注释：次要出口——视觉弱于主按钮，避免与「生成」抢层级 */
body[data-page="single-meal"] .ghost-link{
  background:transparent;
  border:1px dashed var(--border);
  color:var(--muted);
  font-weight:450;
}
body[data-page="single-meal"] .ghost-link:hover{
  color:var(--text);
  border-color:#d1d5db;
}
body[data-page="single-meal"] .mode-toggle label{
  display:flex;
  gap:10px;
  align-items:flex-start;
  cursor:pointer;
}
body[data-page="single-meal"] .single-result-wrap{
  margin-top:20px;
}
body[data-page="single-meal"] .single-streak-box{
  margin:12px 0 14px;
  padding:12px 14px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fafaff;
}
body[data-page="single-meal"] .single-streak-kicker{
  margin:0 0 6px;
  font-size:12px;
  letter-spacing:0.02em;
  color:var(--muted);
  text-transform:none;
}
body[data-page="single-meal"] .single-streak-title{
  margin:0;
  font-size:15px;
  font-weight:650;
}
body[data-page="single-meal"] .single-streak-today{
  margin:6px 0 4px;
  font-size:13px;
  color:#374151;
}
body[data-page="single-meal"] .single-streak-note{
  margin-top:2px;
}
body[data-page="single-meal"] .single-streak-actions{
  margin-top:8px;
}
body[data-page="single-meal"] .single-result-first-detail{
  margin-top:4px;
}
body[data-page="single-meal"] .single-api-warning{
  padding:8px 10px;
  border-radius:10px;
  background:#fffbeb;
  border:1px solid #fde68a;
  color:#78350f;
}
body[data-page="single-meal"] .single-result-strong{
  margin:0;
  font-size:17px;
  font-weight:700;
}
body[data-page="single-meal"] .single-result-list{
  margin:8px 0 0;
  padding-left:20px;
  max-width:720px;
}
body[data-page="single-meal"] .single-result-list li{
  margin-bottom:6px;
}
body[data-page="single-meal"] .single-result-actions{
  margin:12px 0 2px;
  display:flex;
  gap:8px;
  flex-wrap:wrap;
}
body[data-page="single-meal"] .single-btn-secondary{
  background:#fff;
  border:1px solid var(--border);
  color:var(--text);
  font-weight:500;
}

/* 单顿页极简版：轻量主区 + 蛋白质 chip + 弱化工具区 */
body[data-page="single-meal"] .container.single-meal-lite{
  max-width:560px;
}
body[data-page="single-meal"] .single-meal-main{
  padding:4px 0 8px;
}
body[data-page="single-meal"] .single-protein-fieldset{
  border:none;
  margin:0 0 16px;
  padding:0;
}
body[data-page="single-meal"] .single-protein-legend{
  font-size:13px;
  font-weight:650;
  color:var(--text);
  margin:0 0 10px;
  padding:0;
}
body[data-page="single-meal"] .single-protein-chips{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}
body[data-page="single-meal"] .single-protein-chip{
  position:relative;
  cursor:pointer;
  margin:0;
}
body[data-page="single-meal"] .single-protein-chip input{
  position:absolute;
  opacity:0;
  width:1px;
  height:1px;
  margin:0;
}
body[data-page="single-meal"] .single-protein-chip span{
  display:inline-block;
  padding:10px 14px;
  border:1px solid var(--border);
  border-radius:999px;
  background:#fff;
  font-size:14px;
  font-weight:500;
  transition:border-color .15s ease, background .15s ease;
}
body[data-page="single-meal"] .single-protein-chip input:focus-visible + span{
  outline:2px solid #93c5fd;
  outline-offset:2px;
}
body[data-page="single-meal"] .single-protein-chip input:checked + span{
  border-color:#2563eb;
  background:#eff6ff;
  color:#1e3a8a;
}
body[data-page="single-meal"] .single-protein-chip-wide{
  flex:1 1 100%;
}
body[data-page="single-meal"] .single-protein-chip-wide span{
  width:100%;
  text-align:center;
  border-radius:12px;
}
body[data-page="single-meal"] .single-cta-row{
  margin:0 0 10px;
}
body[data-page="single-meal"] .single-cta-primary{
  width:100%;
  padding:12px 16px;
  font-size:16px;
}
body[data-page="single-meal"] .single-textarea-compact{
  min-height:52px;
  max-width:100%;
}
body[data-page="single-meal"] .single-tools-in-more{
  margin-top:8px;
  padding:10px 12px;
  border-radius:12px;
  border:1px dashed #e5e7eb;
  background:#fafafa;
}
body[data-page="single-meal"] .single-tools-in-more .tool-item{
  font-size:13px;
}
body[data-page="single-meal"] .single-meal-more{
  margin-top:16px;
  border:1px solid var(--border);
  border-radius:12px;
  padding:8px 12px;
  background:#fff;
}
body[data-page="single-meal"] .single-meal-more summary{
  cursor:pointer;
  font-size:13px;
  font-weight:650;
  color:var(--muted);
  padding:4px 0;
}
body[data-page="single-meal"] .single-meal-more-inner{
  padding:8px 0 4px;
  border-top:1px solid #f3f4f6;
  margin-top:8px;
}
body[data-page="single-meal"] .single-meal-more-inner .single-section-title{
  margin-top:12px;
}
body[data-page="single-meal"] .single-meal-more-inner > h3.single-section-title:first-of-type{
  margin-top:0;
}
body[data-page="single-meal"] .single-result-wrap{
  margin-top:24px;
  padding:16px 18px;
  border:1px solid var(--border);
  border-radius:14px;
  background:#fff;
}
body[data-page="single-meal"] .single-result-heading{
  margin:0 0 12px;
  font-size:17px;
  font-weight:700;
}
body[data-page="single-meal"] .single-result-actions-min{
  margin:12px 0 8px;
}
body[data-page="single-meal"] .single-feedback-line{
  font-size:13px;
  color:#b45309;
  margin:6px 0 0;
}

/* PMF: lightweight feedback + regenerate reasons */
.pmf-value-feedback{
  margin-top:14px;
  padding:12px 14px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#fafafa;
}
.pmf-value-feedback__q{
  font-size:14px;
  font-weight:650;
  margin:0 0 8px;
  color:var(--text);
}
.pmf-value-feedback__actions{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  align-items:center;
}
.pmf-value-feedback__thanks{
  margin:8px 0 0;
}
body[data-page="list"] .pmf-value-feedback--list{
  margin-top:12px;
}
body[data-page="single-meal"] #single-value-feedback.pmf-value-feedback--single{
  margin-top:16px;
}
.pmf-value-feedback--answered .pmf-value-feedback__yes,
.pmf-value-feedback--answered .pmf-value-feedback__no{
  opacity:0.65;
}

.pmf-regenerate-reasons{
  margin:10px 0 0;
}
.pmf-regenerate-reasons__hint{
  display:block;
  margin-bottom:6px;
  font-size:13px;
}
.pmf-reason-chip-row{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  align-items:center;
}
body[data-page="menu"] .pmf-reason-chip.pmf-reason-chip--selected{
  border-color:#111827;
  background:#eef2ff;
  font-weight:650;
}
