/* ==========================================================================
   Widget 11 — Menu（套餐）
   客户只有一个套餐，所以不做多套餐切换，做成「包含什么 + 蛋白质选择 + 加购」
   三段。价格全部走 repeater，客户随时能改。
   控件：小标题 / 标题 / 套餐名 / 单价 / 单位说明 / 包含项(repeater) /
        蛋白质(repeater: 名称+图片+是否加价+加价金额) / 加购(repeater: 名称+价格) /
        列数 / 是否显示图片 / 脚注
   ========================================================================== */

/* --------------------------------------------------------------------------
   套餐主卡：左边包含内容，右边价格
   -------------------------------------------------------------------------- */
.hpb-plan {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  border: 1px solid var(--hpb-line);
}

.hpb-plan__body { padding: clamp(2rem, 4vw, 3.25rem); }

.hpb-plan__name { font-size: clamp(1.9rem, 3.2vw, 2.6rem); }

.hpb-plan__desc { margin-top: 1.1rem; max-width: 44ch; }

.hpb-plan__list { margin-top: 2rem; display: grid; gap: 0.9rem; }
.hpb-plan__list li {
  display: flex;
  align-items: flex-start;
  gap: 0.9rem;
  font-size: 1rem;
  color: var(--hpb-text);
}
.hpb-plan__list svg { flex: none; width: 15px; height: 15px; margin-top: 0.45em; color: var(--hpb-brass); }

/* 价格侧：深一层的底 + 左边一条金线 */
.hpb-plan__price {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: clamp(2rem, 4vw, 3.25rem);
  background: var(--hpb-surface);
  border-left: 1px solid var(--hpb-line);
}

.hpb-price {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
}
.hpb-price b {
  font-family: var(--hpb-font-display);
  font-variant-numeric: lining-nums;
  font-size: clamp(3rem, 6vw, 4.25rem);
  font-weight: 500;
  color: var(--hpb-champagne);
  line-height: 1;
}
.hpb-price span {
  font-size: var(--hpb-fs-2xs);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--hpb-text-faint);
}

.hpb-price__rows { margin-top: 2rem; display: grid; gap: 0.85rem; }
.hpb-price__rows li {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
  padding-bottom: 0.85rem;
  border-bottom: 1px solid var(--hpb-line-soft);
  font-size: 0.9375rem;
  color: var(--hpb-text-dim);
}
.hpb-price__rows b {
  font-family: var(--hpb-font-display);
  font-variant-numeric: lining-nums;
  font-size: 1.25rem;
  font-weight: 500;
  color: var(--hpb-text);
}

.hpb-plan__note {
  margin-top: 1.5rem;
  font-size: var(--hpb-fs-2xs);
  color: var(--hpb-text-faint);
}
.hpb-plan__cta { margin-top: 2rem; }

@media (max-width: 860px) {
  .hpb-plan { grid-template-columns: 1fr; }
  .hpb-plan__price { border-left: 0; border-top: 1px solid var(--hpb-line); }
}

/* --------------------------------------------------------------------------
   蛋白质选择
   -------------------------------------------------------------------------- */
/* ★ 列数必须定义在 CSS 里，不能写成 HTML 行内 style="--hpb-cols:6"。
   行内样式优先级高于媒体查询，会把下面的响应式列数全部盖掉。
   转 Elementor 时同理：列数控件要输出到 <style> 里，不要输出行内。 */
.hpb-proteins {
  --hpb-cols: 6;
  display: grid;
  grid-template-columns: repeat(var(--hpb-cols), 1fr);
  gap: clamp(0.6rem, 1.2vw, 1rem);
}

.hpb-protein {
  position: relative;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  border: 1px solid var(--hpb-line);
  display: flex;
  align-items: flex-end;
}
/* 不要用 z-index:-1 —— .hpb-protein 没有独立层叠上下文，
   图会掉到分区背景后面直接看不见。绝对定位 + 后面的 label 自然压在上面就够了。 */
.hpb-protein img {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  /* 食材照片本身就暗，压到 0.6 会几乎全黑 */
  filter: saturate(0.85) brightness(0.82);
  transition: transform 1.1s var(--hpb-ease), filter var(--hpb-dur) var(--hpb-ease);
}
.hpb-protein:hover img { transform: scale(1.06); filter: saturate(1) brightness(0.8); }

.hpb-protein__label {
  position: relative;
  width: 100%;
  padding: 2.5rem 1rem 1rem;
  background: linear-gradient(180deg, transparent, rgba(15, 13, 10, 0.9));
}
.hpb-protein__name {
  font-family: var(--hpb-font-display);
  font-size: 1.25rem;
  font-weight: 500;
  color: var(--hpb-text);
  line-height: 1.2;
}
.hpb-protein__up {
  display: block;
  margin-top: 0.25rem;
  font-variant-numeric: lining-nums;
  font-size: var(--hpb-fs-2xs);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--hpb-brass);
}

@media (max-width: 1100px) { .hpb-proteins { --hpb-cols: 4; } }
@media (max-width: 760px)  { .hpb-proteins { --hpb-cols: 3; } }
@media (max-width: 480px)  { .hpb-proteins { --hpb-cols: 2; } }

/* --------------------------------------------------------------------------
   加购 / 配菜：两栏价目表
   -------------------------------------------------------------------------- */
.hpb-addons {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: clamp(2rem, 5vw, 4.5rem);
}

.hpb-addons__title {
  font-size: var(--hpb-fs-2xs);
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--hpb-brass);
  padding-bottom: 1.1rem;
  border-bottom: 1px solid var(--hpb-line);
}

.hpb-addons__list { margin-top: 1.35rem; display: grid; gap: 1rem; }
.hpb-addons__list li {
  display: flex;
  align-items: baseline;
  gap: 1rem;
  font-size: 1rem;
}
/* 中间的点线，菜单排版的经典手法 */
.hpb-addons__list i {
  flex: 1;
  height: 1px;
  align-self: center;
  border-bottom: 1px dotted var(--hpb-line-strong);
}
.hpb-addons__list b {
  font-family: var(--hpb-font-display);
  font-variant-numeric: lining-nums;
  font-size: 1.2rem;
  font-weight: 500;
  color: var(--hpb-champagne);
}
