/* ===== 改稿 2（10/27 Owner 确认）共用样式：菜谱交换 + 厨味地图所有页面 / 弹层都用这一套，别每页各写一套 =====
   按钮只留两种：页面主操作 .u-btn-main（44 高 / 16 号 / 圆角 22）、卡片里的小按钮 .u-btn-sm（32 高 / 14 号 / 圆角 16），都加粗；
   颜色三种：橙色实心（默认）、白底紫边紫字（.is-ghost）、紫色实心（.is-purple，「我的交换」里的「去看看」）。
   字号：卡片标题 .u-card-title 15 加粗、卡片说明 .u-card-sub 12 灰、页面大标题 .u-page-title 18。
   头图 .u-hero：所有头图同一高度 128px、圆角 20px，图片铺满（人物偏右），左边米色渐变，文字在左。
   hometown-web.css 不再自己写按钮 / 标题尺寸，直接用这里的类（这个文件在 index.html 里先引入）。 */
.u-btn-main, .u-btn-sm { display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; margin: 0; border: 0; background: linear-gradient(90deg, #f39548, #ec6b3a); color: #fff; font-family: inherit; font-weight: 700; line-height: 1; white-space: nowrap; text-decoration: none; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.u-btn-main { flex: 1 1 0; min-width: 0; height: 44px; padding: 0 18px; border-radius: 22px; font-size: 16px; }
.u-btn-sm { flex: none; height: 32px; padding: 0 14px; border-radius: 16px; font-size: 14px; }
.u-btn-main.is-ghost, .u-btn-sm.is-ghost { border: 1.5px solid #d9d0fb; background: #fff; color: #6b4ce6; }
.u-btn-sm.is-purple { border: 0; background: #6c4cf1; color: #fff; }
.u-btn-main:disabled, .u-btn-sm:disabled { border: 0; background: #e6e1ea; color: #9c96a8; opacity: 1; cursor: default; }
.u-btn-main:active:not(:disabled), .u-btn-sm:active:not(:disabled) { opacity: .88; }
.u-card-title { display: block; margin: 0; color: #29243a; font-size: 15px; font-weight: 700; line-height: 1.4; }
.u-card-sub { display: block; margin: 0; color: #8a8496; font-size: 12px; font-weight: 400; line-height: 1.5; }
.u-page-title { margin: 0; color: #29243a; font-size: 18px; font-weight: 800; line-height: 1.35; }

.u-hero { position: relative; flex: none; height: 128px; overflow: hidden; border-radius: 20px; background: linear-gradient(135deg, #fff1e2, #ffe3cf 60%, #fdd7c4); }
.u-hero-img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover; object-position: 62% 40%; }
.u-hero::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(255, 244, 232, .97) 0%, rgba(255, 244, 232, .9) 34%, rgba(255, 244, 232, .45) 56%, rgba(255, 244, 232, 0) 74%); }
.u-hero-tx { position: relative; z-index: 1; display: flex; flex-direction: column; box-sizing: border-box; width: 64%; height: 100%; padding: 14px 0 0 16px; }
/* 头图文字只用两个类（Owner 10/27 11:20，两张头图同一套）：标题 .u-hero-title 20px / 900 / 行高 1.3 / #3b2a1e；
   正文 .u-hero-text（地图三步、活动页一句话）13px / 常规 / 行高 1.6 / #7a5a43；三步前的数字圆点 .u-hero-no 直径 16px。页面默认字体、不斜体，各页不再单写字号。 */
.u-hero-title { margin: 0; color: #3b2a1e; font-family: inherit; font-size: 20px; font-style: normal; font-weight: 900; line-height: 1.3; white-space: pre-line; }
.u-hero-text { display: flex; align-items: center; margin: 0; color: #7a5a43; font-family: inherit; font-size: 13px; font-style: normal; font-weight: 400; line-height: 1.6; white-space: nowrap; }
.u-hero-title + .u-hero-text { margin-top: 4px; }
.u-hero-no { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 16px; height: 16px; margin-right: 5px; border-radius: 50%; background: #ec6b3a; color: #fff; font-size: 10px; font-style: normal; font-weight: 800; line-height: 1; }

/* 不像进了另一个 App（Owner 10/27）：换菜各页叠在发现页上，底部浮层导航一直露在最上面（叠层不盖住它），
   页面底下留出导航的位置，固定在底部的两个主按钮放在导航上面；弹出的小浮层（规则 / 邀请 / 选菜）照旧盖住导航。 */
body:has(.exw-page) .bottom-nav.bottom-nav-four { z-index: 125; }
body:has(.bottom-nav.bottom-nav-four) .exw-page { padding-bottom: calc(74px + env(safe-area-inset-bottom)); }
body:has(.bottom-nav.bottom-nav-four) .exw-page .exw-bar { padding-bottom: 8px; box-shadow: none; }
/* 上传私房菜不显示底部浮层导航（Owner 10/27 20:47：两个按钮和导航叠着不好看，要走点右上角 ✕） */
body:has(.exw-page.is-no-nav) .bottom-nav.bottom-nav-four { display: none; }
body:has(.bottom-nav.bottom-nav-four) .exw-page.is-no-nav { padding-bottom: 0; }
body:has(.bottom-nav.bottom-nav-four) .exw-page.is-no-nav .exw-bar { padding-bottom: calc(12px + env(safe-area-inset-bottom)); box-shadow: 0 -3px 10px rgba(41, 36, 58, .05); }

/* 菜谱交换 E1 · 上传私房菜（网页版，效果图 A②）：整页弹层，网页上居中最多 480px */
.exw-backdrop { position: fixed; inset: 0; z-index: 120; background: rgba(41, 36, 58, .38); }
.exw-page { position: fixed; top: 0; bottom: 0; left: 50%; z-index: 121; display: flex; flex-direction: column; width: min(100%, 480px); transform: translateX(-50%); background: #fff9f3; color: #29243a; }
body:has(.exw-page) .toast { z-index: 140; }
.exw-head { position: relative; flex: none; display: flex; align-items: center; justify-content: center; height: 52px; padding: 0 56px; }
.exw-scroll { flex: 1; min-height: 0; overflow-y: auto; padding: 2px 16px 20px; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }
.exw-state { margin: 40px 0; color: #8a8496; font-size: 14px; text-align: center; }
.exw-empty { display: flex; flex-direction: column; align-items: center; gap: 18px; padding: 70px 20px; text-align: center; }
.exw-empty .u-btn-main { flex: none; width: 200px; }
/* 单独一个按钮（Owner 10/27 18:35：不要通栏）：按字宽、居中，最少 180px */
.u-btn-main.u-solo, .exw-new, .exs-sheet > .u-btn-main, .exr-again, .exw-bar.is-col .u-btn-main { display: flex; flex: none; width: fit-content; min-width: 180px; margin-left: auto; margin-right: auto; padding: 0 32px; }
.exw-muted { color: #8a8496; font-weight: 500; }
.exw-card { margin-top: 10px; padding: 14px; border: 1px solid #f1ebe4; border-radius: 18px; background: #fff; }

/* 底部两个主按钮（按钮本身用 .u-btn-main） */
.exw-bar { flex: none; display: flex; gap: 12px; padding: 10px 16px calc(12px + env(safe-area-inset-bottom)); background: #fff9f3; box-shadow: 0 -3px 10px rgba(41, 36, 58, .05); }
.exw-bar .u-btn-main.is-ghost { flex: .55 1 0; }

/* 第一步：选菜 */
.exw-step > .u-card-title { margin: 6px 0 10px; }
.exw-mine > .u-card-title { margin-bottom: 4px; }
.exw-picks { display: flex; flex-direction: column; gap: 8px; }
.exw-pick { position: relative; display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 12px; border: 1.5px solid #f1ebe4; border-radius: 16px; background: #fff; color: inherit; text-align: left; cursor: pointer; }
.exw-pick.is-on { border-color: #f0843a; background: #fffaf5; }
.exw-pick.is-off { opacity: .55; cursor: default; }
.exw-pick-img { flex: none; width: 56px; height: 56px; border-radius: 12px; object-fit: cover; background: #f3ece6; }
.exw-pick-img.is-empty, .exw-cover-img.is-empty { display: flex; align-items: center; justify-content: center; color: #c9a58c; font-size: 22px; font-weight: 900; }
.exw-pick-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.exw-pick-tx b { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }
.exw-pick-tx small { color: #8a8496; font-size: 12.5px; }
.exw-pick-tx .exw-pick-why { color: #c95a1c; }
.exw-pick-tag { flex: none; padding: 3px 8px; border-radius: 11px; background: #e6f5ec; color: #2b7c4d; font-size: 12px; font-style: normal; font-weight: 600; }
.exw-new { margin-top: 12px; }

/* 第二步：大图 + 三行 */
.exw-cover { position: relative; height: 178px; overflow: hidden; border-radius: 18px; background: #f3ece6; }
.exw-cover-img { display: block; width: 100%; height: 100%; object-fit: cover; }
.exw-swap { position: absolute; right: 10px; bottom: 10px; }
.exw-fields { padding: 2px 14px; }
.exw-fld { display: flex; align-items: center; gap: 8px; padding: 11px 0; border-bottom: 1px solid #efe9e2; font-size: 15px; }
.exw-fld:last-child { border-bottom: 0; }
.exw-fld-from { align-items: flex-start; }
.exw-k { flex: none; width: 48px; color: #8a8496; }
.exw-v { flex: 1; min-width: 0; font-weight: 600; }
.exw-fld-from .exw-v { display: flex; flex-direction: column; gap: 8px; }
.exw-region { display: flex; gap: 6px; }
.exw-select { flex: 1; min-width: 0; height: 36px; padding: 0 6px; border: 1px solid #e7dfd6; border-radius: 10px; background: #fffaf4; color: #29243a; font-size: 14px; }
.exw-town { width: 100%; height: 36px; padding: 0 10px; border: 1px solid #e7dfd6; border-radius: 10px; background: #fff; color: #29243a; font-size: 14px; font-weight: 500; }

/* 菜谱来历 */
.exw-row { display: flex; align-items: center; justify-content: space-between; }
.exw-prompts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.exw-chip { height: 30px; padding: 0 11px; border: 0; border-radius: 15px; background: #efeafd; color: #4a33b8; font-size: 13px; font-weight: 600; cursor: pointer; }
.exw-chip.is-used { background: #f4f1f7; color: #9c96a8; }
.exw-story { display: block; width: 100%; min-height: 104px; margin-top: 10px; padding: 10px 12px; border: 1px solid #f6e3cf; border-radius: 12px; background: #fffaf4; color: #4a3b30; font: inherit; font-size: 14px; line-height: 1.7; resize: vertical; box-sizing: border-box; }
.exw-count { margin-top: 4px; color: #a39cae; font-size: 12px; text-align: right; }

/* 检查标签 + 同意 */
.exw-checks { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.exw-check { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 12px; font-size: 12.5px; font-weight: 600; }
.exw-check.is-ok { background: #e6f5ec; color: #2b7c4d; }
.exw-check.is-no { background: #fdecea; color: #c2412d; }
.exw-check-note { margin: 6px 2px 0; color: #c2412d; font-size: 12.5px; }
.exw-agree { display: flex; align-items: flex-start; gap: 9px; margin-top: 12px; padding: 0 2px; color: #5d566c; font-size: 12.5px; line-height: 1.6; cursor: pointer; }
.exw-agree input { flex: none; width: 18px; height: 18px; margin: 2px 0 0; accent-color: #6b4ce6; }
.exw-error { margin: 10px 2px 0; padding: 9px 12px; border-radius: 12px; background: #fdecea; color: #b4321f; font-size: 13px; }

/* 我上传的私房菜 */
.exw-mine { margin-top: 16px; }
.exw-mine-row { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-top: 1px solid #efe9e2; }
.exw-mine-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.exw-mine-tx b { font-size: 15px; }
.exw-mine-tx small { color: #8a8496; font-size: 12.5px; }
.exw-mine-tx .exw-reject { color: #c2412d; }
.exw-pill { flex: none; padding: 3px 9px; border-radius: 11px; background: #efeafd; color: #4a33b8; font-size: 12px; font-style: normal; font-weight: 600; }
.exw-pill.is-approved { background: #e6f5ec; color: #2b7c4d; }
.exw-pill.is-manual { background: #fff1e4; color: #c95a1c; }
.exw-pill.is-rejected { background: #fdecea; color: #c2412d; }

/* ===== 菜谱交换 E2（10/26）：活动页 ①、落地页 ④、交换详情 ⑤、弹层 ===== */

/* ① 活动页 */
/* 头图用共用 .u-hero；下面几张卡：邀请好友来换、厨味地图征集令（图标块 + 标题 + 说明 + 小按钮）、我的交换（最近一笔 + 四段进度条） */
.exh-row { display: flex; align-items: center; gap: 12px; }
.exh-row > span { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.exh-ico { display: flex; flex: none; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 14px; background: #eef8f0; font-size: 22px; font-style: normal; line-height: 1; }
.exh-ico.is-map { background: #efeafd; }
.exh-invite-card { border-color: #f8d9bf; }
.exh-mine-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.exh-tag { flex: none; padding: 3px 9px; border-radius: 11px; background: #efeafd; color: #5b3ed6; font-size: 12px; font-style: normal; font-weight: 700; }
.exh-latest { margin-top: 10px; }
.exh-more { margin-top: 8px; border-top: 1px solid #efe9e2; }
.exh-rewards { display: flex; align-items: center; gap: 6px; margin-top: 10px; padding: 10px; border: 1px solid #ffd9bd; border-radius: 18px; background: #fff3e8; }
.exh-cell { position: relative; flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 9px 4px; border-radius: 14px; background: #fff; text-align: center; }
.exh-cell small { color: #8a8496; font-size: 12px; }
.exh-cell b { color: #e2622b; font-size: 16px; font-weight: 800; }
.exh-cell.is-done b { color: #9c96a8; }
.exh-got { position: absolute; top: -6px; right: -4px; padding: 1px 7px; border-radius: 9px; background: #2b7c4d; color: #fff; font-size: 11px; font-style: normal; font-weight: 700; }
.exh-plus { flex: none; color: #f0843a; font-weight: 800; }
.exh-list > .u-card-title { margin-bottom: 4px; }
.exh-none { margin: 8px 0 2px; color: #8a8496; font-size: 13px; }
.exh-recipe { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 11px 0; border-top: 1px solid #efe9e2; }
.exh-recipe:first-of-type, .exh-pair:first-of-type { border-top: 0; }
.exh-img { flex: none; width: 52px; height: 52px; border-radius: 12px; object-fit: cover; background: #f3ece6; }
.exh-img.is-empty, .exp-img.is-empty, .exj-thumb.is-empty, .exj-dish-img.is-empty, .exj-seat-img.is-empty { display: flex; align-items: center; justify-content: center; color: #c9a58c; font-size: 22px; font-weight: 900; }
.exh-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.exh-tx b { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }
.exh-tx small { color: #8a8496; font-size: 12.5px; }
.exh-tx .exh-status { color: #6b4ce6; }
.exh-invite { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 8px 10px 8px 12px; border-radius: 14px; background: #fff6ee; }
.exh-invite small { color: #c95a1c; font-size: 13px; font-weight: 600; }
.exh-invite small.is-full { color: #8a8496; }
.exh-pair { padding: 11px 0; border-top: 1px solid #efe9e2; }
.exh-pair-top { display: flex; align-items: center; gap: 10px; }
.exh-bar { display: flex; gap: 4px; margin-top: 10px; }
.exh-seg { flex: 1; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.exh-seg i { display: block; height: 5px; border-radius: 3px; background: #ece6f0; }
.exh-seg.is-on i { background: linear-gradient(90deg, #f39548, #ec6b3a); }
.exh-seg small { overflow: hidden; color: #9c96a8; font-size: 11.5px; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
.exh-seg.is-on small { color: #e2622b; font-weight: 600; }

/* ④ 落地页 */

/* ⑤ 交换详情 */
.exp-top { padding: 6px 0 2px; text-align: center; }
.exp-top p { margin: 6px 0 0; color: #8a8496; font-size: 13px; line-height: 1.6; }
.exp-top p b { color: #2b7c4d; }
.exp-dishes { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 12px; }
.exp-dish { overflow: hidden; border: 1px solid #f1ebe4; border-radius: 16px; background: #fff; }
.exp-dish.is-theirs { border-color: #f6c9a6; }
.exp-img { display: block; width: 100%; aspect-ratio: 1 / .8; object-fit: cover; background: #f3ece6; }
.exp-dish-tx { display: flex; flex-direction: column; gap: 3px; padding: 9px 10px 10px; }
.exp-dish-tx b { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }
.exp-dish-tx small { color: #8a8496; font-size: 12.5px; }
.exp-swap { position: absolute; top: calc(50% - 40px); left: 50%; display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; border: 3px solid #fff9f3; border-radius: 50%; background: #f0843a; color: #fff; font-size: 18px; font-weight: 800; transform: translateX(-50%); }
.exp-story { color: #4a3b30; font-size: 14px; line-height: 1.75; }
.exp-story b { color: #2b2140; }
.exp-compare > .u-card-title { margin-bottom: 6px; }
.exp-compare ul { margin: 0; padding-left: 18px; color: #4a4360; font-size: 13.5px; line-height: 1.8; }
.exp-todos { padding: 4px 14px; }
.exp-todo { display: flex; align-items: flex-start; gap: 12px; padding: 12px 0; border-top: 1px solid #efe9e2; }
.exp-todo:first-child { border-top: 0; }
.exp-todo i { display: flex; align-items: center; justify-content: center; flex: none; width: 28px; height: 28px; border: 1.5px solid #c9bdf6; border-radius: 50%; color: #6b4ce6; font-size: 13px; font-style: normal; font-weight: 700; }
.exp-todo.is-done i { border: 0; background: #2f9e5f; color: #fff; }
.exp-todo span { display: flex; flex-direction: column; gap: 2px; }
.exp-todo b { font-size: 15px; font-weight: 600; }
.exp-todo small { color: #8a8496; font-size: 12.5px; }
.exp-todo.is-later b { color: #6b6480; }
.exp-recipe { scroll-margin-top: 8px; }
.exp-recipe-head { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; width: 100%; padding: 0; border: 0; background: none; color: inherit; text-align: left; cursor: pointer; }
.exp-recipe-head b { flex: 1 1 70%; }
.exp-recipe-head small { order: 3; flex-basis: 100%; }
.exp-recipe-head em { font-style: normal; }
.exp-recipe h4 { margin: 14px 0 6px; font-size: 14px; }
.exp-ings { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; margin: 0; padding: 0; list-style: none; }
.exp-ings li { display: flex; justify-content: space-between; gap: 6px; padding: 6px 0; border-bottom: 1px dashed #efe9e2; font-size: 13.5px; }
.exp-ings em { color: #8a8496; font-style: normal; }
.exp-steps { margin: 0; padding: 0; list-style: none; }
.exp-steps li { display: flex; gap: 10px; padding: 7px 0; font-size: 14px; line-height: 1.7; }
.exp-steps li i { display: flex; align-items: center; justify-content: center; flex: none; width: 22px; height: 22px; margin-top: 2px; border-radius: 50%; background: #fff1e4; color: #e2622b; font-size: 12px; font-style: normal; font-weight: 700; }
.exp-see { overflow: hidden; text-overflow: ellipsis; }

/* 弹层：规则 / 邀请 / 选菜（底部弹出），同菜（居中） */
.exs-backdrop { position: fixed; inset: 0; z-index: 130; background: rgba(41, 36, 58, .45); }
.exs-sheet { position: fixed; bottom: 0; left: 50%; z-index: 131; width: min(100%, 480px); max-height: 82vh; overflow-y: auto; padding: 20px 16px calc(16px + env(safe-area-inset-bottom)); border-radius: 22px 22px 0 0; background: #fff9f3; color: #29243a; transform: translateX(-50%); box-sizing: border-box; }
.exs-sheet > .u-page-title, .exs-dialog > .u-page-title { margin: 0 44px 12px 0; }
.exs-sheet > .u-btn-main { margin-top: 14px; }
.exs-rule-list { margin: 0; padding-left: 20px; color: #3b3340; font-size: 14.5px; line-height: 1.8; }
.exs-rule-list li + li { margin-top: 6px; }
.exs-tip { margin: 10px 0 0; color: #8a8496; font-size: 12.5px; text-align: center; }
.exw-pick-tag.is-same { background: #fff1e4; color: #c95a1c; }
.exs-dialog { position: fixed; top: 50%; left: 50%; z-index: 131; width: min(calc(100% - 40px), 360px); padding: 22px 18px 18px; border-radius: 22px; background: #fff; color: #29243a; text-align: center; transform: translate(-50%, -50%); box-sizing: border-box; }
.exs-dialog > .u-page-title { margin: 10px 0 8px; }
.exs-dialog p { margin: 0; color: #4a4360; font-size: 14.5px; line-height: 1.7; }
.exs-same-icon { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px; margin: 4px auto 0; border-radius: 50%; background: #fff1e4; color: #e2622b; font-size: 24px; font-weight: 800; }
.exs-actions { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }
.exs-actions .u-btn-main { flex: none; width: 100%; }

/* ===== 菜谱交换 E3 / E4 / E5（10/27）：晒饭桌 ⑥、到账 ⑦、问问 TA、成果卡、海报页、征集现金 ===== */
.exw-bar.is-col { flex-direction: column; gap: 8px; }
.exs-actions.is-row { flex-direction: row; }
.exs-actions.is-row .u-btn-sm { flex: 1 1 0; }

/* 活动页：发朋友圈 + 邀请；征集卡；现金状态 */
.exh-acts { display: inline-flex; flex: none; gap: 8px; }
.exb-card { display: flex; align-items: center; gap: 12px; margin-top: 10px; padding: 12px 14px; border: 1px solid #f6d7b9; border-radius: 18px; background: #fffaf3; }
.exb-card > i { display: flex; align-items: center; justify-content: center; flex: none; width: 38px; height: 38px; border-radius: 50%; background: linear-gradient(135deg, #f39548, #ec6b3a); color: #fff; font-size: 18px; font-style: normal; font-weight: 900; }
.exb-card span { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.exb-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 7px 10px 7px 12px; border-radius: 14px; background: #f3fbf6; }
.exb-row span { display: flex; flex-direction: column; gap: 2px; }
.exb-row small { color: #2b7c4d; font-size: 13px; font-weight: 600; }
.exb-text { color: #2b7c4d !important; font-weight: 600; }

/* ⑤ 第 3 步按钮、我的晒饭桌、对方打分 */
.exp-todo > span:not(.exp-todo-act) { flex: 1; min-width: 0; }
.exp-todo-act { display: flex !important; flex-direction: row !important; flex: none; align-items: center; gap: 6px; align-self: center; }
.exr-head { display: flex; align-items: center; gap: 8px; }
.exr-head .exw-pill { margin-left: auto; }
.exr-strip { display: flex; gap: 8px; margin-top: 10px; overflow-x: auto; }
.exr-thumb { flex: none; width: 76px; height: 76px; border-radius: 12px; object-fit: cover; background: #f3ece6; }
.exr-mine-note { margin: 10px 0 0; color: #5d566c; font-size: 13.5px; }
.exr-mine-note.is-bad { padding: 9px 12px; border-radius: 12px; background: #fdecea; color: #b4321f; }
.exr-again { margin-top: 10px; }
.exr-hint { margin: 10px 2px 0; color: #6b6480; font-size: 13px; }
.exr-theirs > .u-card-title, .exc-section > .u-card-title { margin-bottom: 4px; }
.exr-theirs h4 { margin: 12px 0 0; font-size: 14px; }
.exr-quote { margin: 10px 0 0; padding: 10px 12px; border-radius: 12px; background: #fff6ee; color: #4a3b30; font-size: 14px; line-height: 1.7; }
.exr-stars-read { color: #f5a623; font-size: 18px; letter-spacing: 2px; }

/* 问问 TA */
.exk-head { display: flex; align-items: center; gap: 10px; }
.exk-head > i { flex: none; font-size: 24px; font-style: normal; }
.exk-head > span { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.exk-list { display: flex; flex-direction: column; gap: 8px; margin: 12px 0 0; padding: 0; list-style: none; }
.exk-list li { max-width: 86%; padding: 8px 12px; border-radius: 14px 14px 14px 4px; background: #f6f2fb; }
.exk-list li.is-mine { align-self: flex-end; border-radius: 14px 14px 4px 14px; background: #fff1e4; }
.exk-list b { font-size: 12.5px; color: #6b4ce6; }
.exk-list li.is-mine b { color: #c95a1c; }
.exk-list p { margin: 2px 0; color: #2b2140; font-size: 14px; line-height: 1.6; word-break: break-word; }
.exk-list small { color: #9c96a8; font-size: 11.5px; }
.exk-pending { margin-left: 6px; padding: 1px 6px; border-radius: 8px; background: #fff1e4; color: #c95a1c; font-style: normal; font-weight: 600; }
.exk-form { display: flex; align-items: flex-end; gap: 8px; margin-top: 12px; }
.exk-input { flex: 1; min-width: 0; min-height: 44px; padding: 10px 12px; border: 1px solid #e7dfd6; border-radius: 12px; background: #fffaf4; color: #29243a; font: inherit; font-size: 14px; line-height: 1.5; resize: vertical; box-sizing: border-box; }
.exk-send.u-btn-main { flex: none; width: 76px; padding: 0; }

/* 成果卡（⑤ 通过后、⑦） */
.exc-card { margin-top: 10px; padding: 10px; border: 1px solid #f6d7b9; border-radius: 18px; background: #fff8f0; }
.exc-pics { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.exc-pic { position: relative; overflow: hidden; border-radius: 12px; }
.exc-img { display: block; width: 100%; aspect-ratio: 1 / .78; object-fit: cover; background: #f3ece6; }
.exc-img.is-empty { display: flex; align-items: center; justify-content: center; color: #c9a58c; font-size: 22px; font-weight: 900; }
.exc-pic em { position: absolute; left: 6px; bottom: 6px; max-width: calc(100% - 12px); overflow: hidden; padding: 2px 8px; border-radius: 10px; background: rgba(255, 255, 255, .92); color: #2b2140; font-size: 11.5px; font-style: normal; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.exc-swap { position: absolute; top: 50%; left: 50%; z-index: 2; display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: 3px solid #fff8f0; border-radius: 50%; background: #f0843a; color: #fff; font-size: 15px; font-style: normal; font-weight: 800; transform: translate(-50%, -50%); }
.exc-line { margin: 10px 2px 2px; color: #2b2140; font-size: 14.5px; font-weight: 700; line-height: 1.6; text-align: left; }
.exc-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 10px; }
.exc-tag { padding: 4px 11px; border-radius: 12px; background: #efeafd; color: #4a33b8; font-size: 12.5px; font-weight: 700; }
.exc-tag.is-light { background: #fff1e4; color: #e2622b; }
.exc-section .exs-actions { margin-top: 12px; }

/* ⑦ 到账弹层 */
.exr-reward { width: min(calc(100% - 32px), 380px); max-height: 88vh; overflow-y: auto; }
.exr-gift { font-size: 44px; line-height: 1; }
.exr-reward > .u-page-title { margin: 8px 0 4px; }
.exr-reward > p { font-size: 13px; color: #8a8496; }

/* ⑥ 晒饭桌页 */
.exr-photos { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.exr-photo { position: relative; width: 88px; height: 88px; }
.exr-photo img { display: block; width: 100%; height: 100%; border-radius: 12px; object-fit: cover; background: #f3ece6; }
.exr-photo-x { position: absolute; top: -6px; right: -6px; display: flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 2px solid #fff; border-radius: 50%; background: rgba(41, 36, 58, .78); color: #fff; font-size: 12px; cursor: pointer; }
.exr-add { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; width: 88px; height: 88px; border: 1.5px dashed #c9bdf6; border-radius: 12px; background: #faf8ff; color: #6b4ce6; cursor: pointer; }
.exr-add b { font-size: 24px; line-height: 1; }
.exr-add small { font-size: 12.5px; font-weight: 700; }
.exr-add:disabled { opacity: .7; cursor: default; }
.exr-scores { padding: 2px 14px; }
.exr-score { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 0; border-top: 1px solid #efe9e2; }
.exr-score:first-child { border-top: 0; }
.exr-score.is-read { padding: 8px 0; }
.exr-score > span:first-child { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.exr-score b { font-size: 15px; font-weight: 600; }
.exr-score small { color: #8a8496; font-size: 12px; }
.exr-stars { display: flex; flex: none; }
.exr-star { width: 34px; height: 36px; padding: 0; border: 0; background: none; color: #e3dde8; font-size: 26px; line-height: 1; cursor: pointer; }
.exr-star.is-on { color: #f5a623; }
.exr-diffs { display: flex; flex: none; gap: 6px; }
.exr-diff { height: 32px; padding: 0 12px; border: 1.5px solid #ece6f0; border-radius: 16px; background: #f7f4f9; color: #6b6480; font-size: 13.5px; font-style: normal; font-weight: 700; cursor: pointer; }
.exr-diff.is-on { border-color: #6b4ce6; background: #efeafd; color: #4a33b8; }
em.exr-diff { display: inline-flex; align-items: center; height: 26px; cursor: default; }
.exr-note { display: block; width: 100%; min-height: 64px; margin-top: 10px; padding: 10px 12px; border: 1px solid #e7dfd6; border-radius: 12px; background: #fffaf4; color: #29243a; font: inherit; font-size: 14px; line-height: 1.6; resize: vertical; box-sizing: border-box; }
.exr-circle { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.exr-circle > span { display: flex; flex-direction: column; gap: 2px; }
.exr-switch { position: relative; flex: none; width: 54px; height: 32px; padding: 0; border: 0; border-radius: 16px; background: #d9d4e0; cursor: pointer; transition: background .2s; }
.exr-switch i { position: absolute; top: 3px; left: 3px; width: 26px; height: 26px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, .2); transition: left .2s; }
.exr-switch.is-on { background: #6b4ce6; }
.exr-switch.is-on i { left: 25px; }
.exr-tip { color: #8a8496; font-size: 12.5px; text-align: center; }

/* E4 海报页 */
.exq-tabs { flex: none; display: flex; gap: 6px; padding: 0 16px 8px; overflow-x: auto; }
.exq-tab { flex: 1 0 auto; height: 34px; padding: 0 12px; border: 1.5px solid #ece6f0; border-radius: 17px; background: #fff; color: #5d566c; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.exq-tab.is-on { border-color: #6b4ce6; background: #efeafd; color: #4a33b8; }
.exq-stage { display: flex; justify-content: center; padding: 4px 0 2px; touch-action: pan-y; }
.exq-img { display: block; width: auto; height: min(52vh, 460px); max-width: 100%; aspect-ratio: 750 / 1334; border-radius: 14px; box-shadow: 0 6px 18px rgba(41, 36, 58, .14); background: #fff7ee; }
.exq-wait { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; height: min(52vh, 460px); aspect-ratio: 750 / 1334; max-width: 100%; border-radius: 14px; background: #fff3e8; color: #8a7a6c; font-size: 14px; text-align: center; }
.exq-copies-head { display: flex; align-items: center; justify-content: space-between; }
.exq-copy-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.exq-copy { display: flex; align-items: center; gap: 10px; width: 100%; padding: 10px 12px; border: 1.5px solid #f1ebe4; border-radius: 14px; background: #fff; color: inherit; text-align: left; cursor: pointer; }
.exq-copy.is-on { border-color: #6b4ce6; background: #faf8ff; }
.exq-copy > span { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.exq-copy small { color: #6b4ce6; font-size: 12px; font-weight: 700; }
.exq-copy-tx { color: #2b2140; font-size: 14px; line-height: 1.6; }
.exq-copy em { flex: none; padding: 4px 11px; border: 1.5px solid #d9d0fb; border-radius: 13px; color: #6b4ce6; font-size: 12.5px; font-style: normal; font-weight: 700; }
.exq-copy.is-on em { border-color: #6b4ce6; background: #6b4ce6; color: #fff; }
.exq-copy-wait { margin: 16px 0 8px; }
.exq-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 4px 0 0; padding: 0; list-style: none; }
.exq-steps li { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 12px 6px; border-radius: 14px; background: #fff; text-align: center; }
.exq-steps i { display: flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: #6b4ce6; color: #fff; font-size: 13px; font-style: normal; font-weight: 800; }
.exq-steps span { color: #3b3340; font-size: 13px; line-height: 1.5; }

/* 10/27 交换详情「我的足迹」（拉新）：8×8 小方块，颜色同厨味地图的我的足迹 */
.exp-foot-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.exp-fgrid { display: grid; grid-template-columns: repeat(8, 20px); grid-auto-rows: 20px; gap: 3px; justify-content: center; margin-top: 12px; }
.exp-ftile { display: flex; align-items: center; justify-content: center; border-radius: 5px; font-size: 10px; font-style: normal; font-weight: 800; line-height: 1; }
.exp-ftile.is-home { background: #6b4ce6; color: #fff; }
.exp-ftile.is-swapped { background: #fde0c7; color: #c0652b; }
.exp-ftile.is-checked { background: #f39548; color: #fff; }
.exp-ftile.is-off { background: #f0edf3; color: #b3adbd; }
.exp-flegend { display: flex; align-items: center; justify-content: center; gap: 5px; margin-top: 8px; color: #8a8496; font-size: 11px; }
.exp-flegend i { width: 11px; height: 11px; margin-left: 6px; border-radius: 3px; }
.exp-flegend i.is-home { background: #6b4ce6; }
.exp-flegend i.is-swapped { background: #fde0c7; }
.exp-flegend i.is-checked { background: #f39548; }
.exp-flight { margin: 8px 0 0; color: #4a33b8; font-size: 13px; font-weight: 700; text-align: center; }
.exp-fask { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 10px; padding: 9px 10px 9px 12px; border-radius: 12px; background: #fff6ee; }
.exp-fask small { flex: 1; min-width: 0; }

/* ---- 活动页「我的换菜局」（10/27） ---- */
.exh-rounds { display: flex; flex-direction: column; }
.exh-round { display: flex; align-items: center; gap: 10px; width: 100%; padding: 11px 0; border: 0; border-top: 1px solid #efe9e2; background: none; color: inherit; text-align: left; cursor: pointer; }
.exh-round:first-of-type { border-top: 0; }
.exw-pill.is-p { background: #efeafd; color: #4a33b8; }
.exw-pill.is-wait { background: #fff1e4; color: #c95a1c; }
.exw-pill.is-ok { background: #e6f5ec; color: #2b7c4d; }
.exw-pill.is-bad { background: #fdecea; color: #c2412d; }

/* ---- 换菜局页（10/27，效果图 11） ---- */
.exj-body { padding: 4px 16px 20px; }
.exj-host { margin: 4px 2px 0; color: #29243a; font-size: 15px; font-weight: 800; line-height: 1.5; }
.exj-steps { display: flex; gap: 4px; margin-top: 10px; }
.exj-step { flex: 1; padding: 6px 2px; border-radius: 8px; background: #f1edf4; color: #7d7690; font-size: 11.5px; font-weight: 700; line-height: 1.35; text-align: center; }
.exj-step.is-on { background: #6b4ce6; color: #fff; }
.exj-step.is-done { background: #efeafd; color: #4a33b8; }
.exj-seats { display: flex; gap: 6px; margin-top: 12px; }
.exj-seat { flex: 1; min-width: 0; padding: 8px 4px; border: 1.5px solid #f1ebe4; border-radius: 14px; background: #fff; text-align: center; }
.exj-seat-img { display: block; width: 52px; height: 52px; margin: 0 auto; border-radius: 12px; object-fit: cover; background: #f4efe9; }
.exj-seat-img.is-none { display: flex; align-items: center; justify-content: center; color: #a99ae6; font-size: 20px; }
.exj-seat b { display: block; margin-top: 5px; overflow: hidden; color: #29243a; font-size: 12.5px; text-overflow: ellipsis; white-space: nowrap; }
.exj-seat small { display: block; margin-top: 1px; color: #8a8496; font-size: 11px; }
.exj-seat.is-ok small { color: #2b7c4d; font-weight: 700; }
.exj-seat.is-wait { border-color: #f6c49c; background: #fff8f0; }
.exj-seat.is-wait .exj-seat-img.is-none { background: #fde4cf; color: #c0652b; }
.exj-seat.is-wait small { color: #c0652b; font-weight: 700; }
.exj-seat.is-fail { border-color: #f3c0a6; background: #fff1ea; }
.exj-seat.is-fail small { color: #c0441c; font-weight: 700; }
.exj-seat.is-empty { border-style: dashed; border-color: #d9d0fb; background: #faf8ff; }
.exj-seat.is-empty .exj-seat-img.is-none { background: #f1edfb; }
.exj-note { margin: 10px 0 0; padding: 8px 12px; border-radius: 12px; background: #efeafd; color: #4a33b8; font-size: 13px; font-weight: 700; line-height: 1.55; }
.exj-note.is-bad { background: #fff1ea; color: #c0441c; }
.exj-clock { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding: 10px 12px; border-radius: 14px; background: #29243a; color: #fff; }
.exj-clock.is-hot { background: linear-gradient(90deg, #f39548, #ec6b3a); }
.exj-clock-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.exj-clock-tx b { font-size: 13.5px; }
.exj-clock-tx small { margin-top: 1px; font-size: 11px; opacity: .75; }
.exj-clock-v { flex: none; font-size: 20px; font-style: normal; font-weight: 900; letter-spacing: 1px; font-variant-numeric: tabular-nums; }
.exj-card, .exj-dish { margin-top: 12px; }
.exj-row, .exj-pick { display: flex; align-items: center; gap: 10px; width: 100%; padding: 10px 0; border: 0; border-bottom: 1px solid #efe9e2; background: none; color: inherit; text-align: left; }
.exj-row:last-child { border-bottom: 0; }
.exj-pick { cursor: pointer; }
.exj-pick.is-off { opacity: .5; cursor: default; }
.exj-thumb { flex: none; width: 48px; height: 48px; border-radius: 12px; object-fit: cover; background: #f4efe9; }
.exj-thumb.is-none { display: flex; align-items: center; justify-content: center; font-size: 20px; }
.exj-row-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.exj-row-tx b { overflow: hidden; font-size: 14.5px; text-overflow: ellipsis; white-space: nowrap; }
.exj-radio { flex: none; width: 20px; height: 20px; border: 1.5px solid #d9d0fb; border-radius: 50%; box-sizing: border-box; }
.exj-radio.is-on { border: 6px solid #6b4ce6; }
.exj-remind { display: flex; align-items: center; gap: 8px; margin-top: 8px; padding: 0; border: 0; background: none; color: #5d566c; font-size: 13px; cursor: pointer; }
.exj-check { display: flex; align-items: center; justify-content: center; width: 18px; height: 18px; border: 1.5px solid #d9d0fb; border-radius: 5px; box-sizing: border-box; color: #fff; font-size: 12px; font-style: normal; }
.exj-check.is-on { border-color: #6b4ce6; background: #6b4ce6; }
.exj-dish-top { display: flex; align-items: center; gap: 12px; }
.exj-dish-img { flex: none; width: 72px; height: 72px; border-radius: 14px; object-fit: cover; background: #f4efe9; }
.exj-story { margin: 10px 0 0; color: #4a3b30; font-size: 14px; line-height: 1.7; }
.exj-lock { margin: 10px 0 0; padding: 8px 12px; border-radius: 12px; background: linear-gradient(135deg, #2f2850, #4a33b8); color: #fff; font-size: 13px; font-weight: 700; }
.exj-rules { margin: 14px 0 0; padding: 0 4px 0 18px; color: #8a8496; font-size: 12.5px; line-height: 1.7; }

/* ---------- v3（10/27）：我家的独门做法、私藏 / 公开（效果图 10 ① ①b；和小程序 upload/index.wxss 一样） ---------- */
.exw-secret { margin-top: 10px; }
.exw-secret-h { display: flex; align-items: center; gap: 6px; }
.exw-must { padding: 1px 6px; border-radius: 5px; background: #ec6b3a; color: #fff; font-size: 11px; font-style: normal; font-weight: 700; }
.exw-must.is-opt { background: #efeafd; color: #4a33b8; }
.exw-secret-ta { display: block; width: 100%; min-height: 64px; margin-top: 9px; padding: 10px 12px; border: 1px solid #d9d0fb; border-radius: 12px; background: #fff; box-sizing: border-box; color: #29243a; font: inherit; font-size: 14px; line-height: 1.7; resize: vertical; }
.exw-secret-ta.is-common { border-color: #f6c49c; }
.exw-secret-ta:focus { outline: none; border-color: #6b4ce6; }
.exw-eg { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.exw-eg-i { padding: 4px 9px; border: 0; border-radius: 6px; background: #f4f1f7; color: #7d7690; font: inherit; font-size: 12px; cursor: pointer; }
.exw-secret-wait { display: block; margin-top: 7px; color: #8a8496; font-size: 12px; }
.exw-secret-res { display: flex; flex-direction: column; gap: 3px; margin-top: 9px; padding: 10px 12px; border-radius: 10px; font-size: 12.5px; line-height: 1.6; }
.exw-secret-res b { font-size: 13px; font-weight: 800; }
.exw-secret-res.is-ok { background: #e8f6ee; color: #2b7c4d; }
.exw-secret-res.is-bad { background: #fff3e6; color: #b85a1c; }
.exw-secret-rename { font-weight: 700; }
.exw-fix-h { display: block; margin-top: 12px; }
.exw-vis { display: flex; gap: 8px; margin-top: 10px; }
.exw-vis-i { flex: 1; min-width: 0; padding: 10px 11px; border: 1.5px solid #ece6f3; border-radius: 12px; background: #fff; font: inherit; text-align: left; cursor: pointer; }
.exw-vis-i.is-on { border-color: #6b4ce6; background: #f7f4ff; }
.exw-vis-top { display: flex; align-items: center; gap: 6px; color: #29243a; font-size: 14px; }
.exw-vis-top b { font-weight: 800; }
.exw-vis-i small { display: block; margin-top: 4px; color: #7d7690; font-size: 11px; line-height: 1.5; }
.exw-radio { flex: none; width: 16px; height: 16px; border: 1.5px solid #d9d0fb; border-radius: 50%; box-sizing: border-box; }
.exw-radio.is-on { border: 5px solid #6b4ce6; }
.exw-mine-teaser { color: #4a33b8 !important; font-weight: 600; }
.exw-mine-side { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex: none; }
.exw-pill.is-vis { background: #f4f1f7; color: #5d566c; }
.exw-badge { display: inline-block; max-width: 100%; margin-top: 4px; padding: 2px 8px; border: 1px solid #f6c49c; border-radius: 7px; background: #fff6e8; color: #b8621c; font-size: 11px; font-style: normal; font-weight: 700; line-height: 1.5; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: top; }
/* 换菜局页 v3：独门做法题目、三格（效果图 10 ②） */
.exj-teaser { margin-top: 10px; padding: 11px 14px; border-radius: 14px; background: linear-gradient(135deg, #2f2850, #4a33b8); color: #fff; }
.exj-teaser small { display: block; font-size: 11px; font-weight: 700; opacity: .85; letter-spacing: 1px; }
.exj-teaser b { display: block; margin-top: 3px; font-size: 15px; font-weight: 800; line-height: 1.45; }
.exj-teaser span { display: block; margin-top: 3px; font-size: 11px; opacity: .75; }
.exj-stats { display: flex; gap: 6px; margin-top: 9px; }
.exj-stat { flex: 1; padding: 7px 0; border: 1px solid #efe9e2; border-radius: 10px; text-align: center; }
.exj-stat b { display: block; color: #29243a; font-size: 15px; font-weight: 800; }
.exj-stat small { display: block; margin-top: 1px; color: #8a8496; font-size: 10.5px; }
/* 初评 / 本局结果（v3，效果图 12 ⑥⑦；和小程序 rate / result 页一样） */
.exv-steps { margin: 2px 0 4px; }
.exv-card { margin-top: 10px; padding: 12px; cursor: pointer; }
.exv-card.is-focus { border: 1.5px solid #f6c49c; background: #fffaf4; }
.exv-top { display: flex; align-items: center; gap: 10px; }
.exv-img { flex: none; width: 68px; height: 68px; border-radius: 12px; object-fit: cover; background: #f4efe9; }
.exv-img.is-empty, .exv-row-img.is-empty { display: flex; align-items: center; justify-content: center; color: #b8621c; font-weight: 800; }
.exv-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; }
.exv-tx b { max-width: 100%; overflow: hidden; color: #29243a; font-size: 16px; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; }
.exv-secret { display: block; width: 100%; margin-top: 9px; padding: 9px 11px; border: 0; border-radius: 10px; background: #fff3e6; color: #7a4b2a; font: inherit; font-size: 13px; line-height: 1.6; text-align: left; cursor: pointer; }
.exv-secret small { color: #b0896a; font-size: 11.5px; }
.exv-ranks { display: flex; gap: 7px; margin-top: 10px; }
.exv-rank { flex: 1; height: 38px; border: 1.5px dashed #e2dcf4; border-radius: 11px; background: #fff; color: #c9c2d4; font: inherit; font-size: 14px; font-weight: 800; cursor: pointer; }
.exv-rank.is-on { border: 0; background: #6b4ce6; color: #fff; }
.exv-rank.is-taken { opacity: .55; }
.exv-rank:disabled { cursor: default; }
.exv-flags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.exv-flag, .exv-reason { padding: 5px 10px; border: 1px solid #f3c3a3; border-radius: 9px; background: #fff; color: #b8621c; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; }
.exv-flag.is-on { border-color: #ec6b3a; background: #ec6b3a; color: #fff; }
.exv-reason { border-color: #e2dcf4; color: #5d566c; }
.exv-reason.is-on { border-color: #6b4ce6; background: #6b4ce6; color: #fff; }
.exv-note { display: block; width: 100%; height: 36px; margin-top: 7px; padding: 0 10px; border: 1px solid #efe9e2; border-radius: 8px; background: #fff; box-sizing: border-box; font: inherit; font-size: 13px; }
.exv-hint { margin: 12px 3px 0; color: #8a8496; font-size: 11.5px; line-height: 1.7; }
.exv-hero { margin-top: 10px; padding: 18px 16px; border-radius: 18px; background: linear-gradient(135deg, #f6a24e, #ec6b3a); color: #fff; text-align: center; }
.exv-hero.is-plain { background: linear-gradient(135deg, #6b4ce6, #4a33b8); }
.exv-hero small { display: block; font-size: 14px; font-weight: 800; opacity: .95; }
.exv-hero b { display: block; margin-top: 5px; font-size: 36px; font-weight: 900; line-height: 1.15; }
.exv-hero span { display: block; margin-top: 5px; font-size: 13.5px; font-weight: 700; }
.exv-wait { margin-top: 10px; padding: 16px; }
.exv-wait small { display: block; margin-top: 4px; }
.exv-list { padding: 2px 14px; }
.exv-row { display: flex; align-items: center; gap: 10px; padding: 11px 0; border-bottom: 1px solid #efe9e2; }
.exv-row:last-child { border-bottom: 0; }
.exv-row-img { flex: none; width: 48px; height: 48px; border-radius: 10px; object-fit: cover; background: #f4efe9; }
.exv-row .exv-tx b { font-size: 14.5px; }
.exv-money { flex: none; color: #c0652b; font-size: 15px; font-style: normal; font-weight: 900; }
.exv-money.is-off { color: #9a94a6; font-size: 13px; font-weight: 700; }
.exv-due { margin: 10px 0 0; padding: 10px 13px; border-radius: 12px; background: #efeafd; color: #4a33b8; font-size: 13px; font-weight: 800; }
.exv-member { margin: 8px 0 0; padding: 10px 13px; border-radius: 12px; background: #e6f5ec; color: #2b7c4d; font-size: 13px; font-weight: 800; }
/* 交换详情 v3：对方的独门做法、这一局 / 投诉、打卡城市；活动页私房菜的题目、私藏 / 公开 */
.exp-secret { margin-top: 10px; padding: 11px 13px; border: 1px solid #f6c49c; border-radius: 14px; background: #fff6e8; }
.exp-secret small { display: block; color: #b8621c; font-size: 11.5px; font-weight: 800; }
.exp-secret b { display: block; margin-top: 4px; color: #3b2a1e; font-size: 14.5px; font-weight: 800; line-height: 1.6; }
.exp-secret span { display: block; margin-top: 3px; color: #8a7a6c; font-size: 11.5px; }
.exp-more { padding: 4px 14px; }
.exp-more-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 0; border-bottom: 1px solid #efe9e2; color: #5d566c; font-size: 13px; }
.exp-more-row:last-child { border-bottom: 0; }
.exp-reasons { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 11px; }
.exp-reason { padding: 6px 11px; border: 1px solid #f3c3a3; border-radius: 9px; background: #fff; color: #b8621c; font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; }
.exp-reason.is-on { border-color: #ec6b3a; background: #ec6b3a; color: #fff; }
.exp-cnote { display: block; width: 100%; height: 40px; margin-top: 10px; padding: 0 11px; border: 1px solid #efe9e2; border-radius: 9px; background: #fff; box-sizing: border-box; font: inherit; font-size: 13px; }
.exp-cinfo { margin: 8px 0 12px; color: #8a8496; font-size: 11px; line-height: 1.6; }
.exp-fcities { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px; margin-top: 8px; }
.exp-fcity { padding: 3px 9px; border-radius: 7px; background: #f39548; color: #fff; font-size: 11.5px; font-weight: 700; }
.exp-fcity.is-home { border: 1px solid #f6c49c; background: #fff6e8; color: #b8621c; }
.exh-teaser { color: #4a33b8 !important; font-weight: 600; }
.exh-vis { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; margin-top: 6px; padding: 6px 8px 6px 10px; border-radius: 10px; background: #f7f4ff; }
.exh-vis small { flex: 1; min-width: 0; color: #4a33b8; font-size: 12px; font-weight: 600; }
.exp-ftile.is-next { border: 1.5px solid #e0582a; background: #f39548; color: #fff; box-sizing: border-box; }
/* 晒饭桌 · 终评（v3，效果图 11 ⑤） */
.exr-dish { display: flex; align-items: center; gap: 11px; margin-top: 4px; }
.exr-dish-img { flex: none; width: 64px; height: 64px; border-radius: 12px; object-fit: cover; background: #f4efe9; }
.exr-dish-img.is-empty { display: flex; align-items: center; justify-content: center; color: #b8621c; font-weight: 800; }
.exr-dish-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; }
.exr-verdicts .exr-vlist { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.exr-verdict { padding: 7px 12px; border: 1.5px solid #e2dcf4; border-radius: 11px; background: #fff; color: #4a33b8; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.exr-verdict.is-on { border-color: #6b4ce6; background: #6b4ce6; color: #fff; }
.exr-verdict.is-warn { border-color: #f3c3a3; color: #b8621c; }
.exr-verdict.is-warn.is-on { border-color: #ec6b3a; background: #ec6b3a; color: #fff; }
.exr-sub-h { display: block; margin-top: 10px; color: #8a8496; font-size: 12px; }
.exr-verdicts .exr-diffs { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 6px; }
.exr-cnote { display: block; width: 100%; height: 38px; margin-top: 8px; padding: 0 10px; border: 1px solid #efe9e2; border-radius: 9px; background: #fff; box-sizing: border-box; font: inherit; font-size: 13px; }
/* 换菜步骤图（Owner 10/27 21:02，效果图 13）：上传菜 → 开局 → 等到齐 → 初评 → 晒饭桌；样式照点餐页的步骤图 */
.exf { display: flex; align-items: flex-start; margin-top: 8px; padding: 11px 6px 9px; border: 1px solid #f1ebe4; border-radius: 16px; background: #fff; }
.exf.is-plain { margin-top: 0; padding: 10px 0 5px; border: 0; background: transparent; }
.exf-s { flex: none; width: 52px; display: flex; flex-direction: column; align-items: center; gap: 5px; }
.exf-c { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: 2px solid #d9d4e2; border-radius: 50%; background: #fff; box-sizing: border-box; color: #fff; font-size: 12px; font-weight: 900; }
.exf-s.is-done .exf-c { border-color: #6b4ce6; background: #6b4ce6; }
.exf-s.is-on .exf-c { border: 3px solid #6b4ce6; box-shadow: 0 0 0 5px #efeafd; }
.exf-t { color: #7d7690; font-size: 11.5px; white-space: nowrap; }
.exf-s.is-on .exf-t { color: #6b4ce6; font-weight: 800; }
.exf-ln { flex: 1; min-width: 0; height: 2px; margin-top: 11px; background: #e4e0ea; }
.exf-ln.is-done { background: #6b4ce6; }
.exf.is-sm .exf-s { width: 44px; gap: 3px; }
.exf.is-sm .exf-c { width: 19px; height: 19px; font-size: 10px; }
.exf.is-sm .exf-t { font-size: 10.5px; }
.exf.is-sm .exf-ln { margin-top: 8.5px; }
.exf-guide { margin-top: 8px; padding: 11px 13px; border: 1px solid #e4dcfb; border-radius: 14px; background: #f7f4ff; }
.exf-guide b { display: block; color: #4a33b8; font-size: 14.5px; font-weight: 800; }
.exf-guide span { display: block; margin-top: 3px; color: #5d566c; font-size: 12.5px; line-height: 1.6; }
.exf-guide.is-ok { border-color: #cdebd9; background: #e8f6ee; }
.exf-guide.is-ok b { color: #2b7c4d; }
.exf-guide.is-bad { border-color: #f6c49c; background: #fff3e6; }
.exf-guide.is-bad b { color: #b85a1c; }
.exh-prog { margin-top: 4px; text-align: center; }
.exh-prog > .u-card-title { display: block; text-align: left; }
.exh-prog-t { display: block; margin-top: 2px; color: #29243a; font-size: 14px; font-weight: 800; }
.exh-prog-l { display: block; margin-top: 2px; color: #5d566c; font-size: 13px; line-height: 1.6; }
.exh-prog .u-btn-main { margin-top: 11px; }
.exh-bounty-line { margin: 0; padding: 8px 10px; border-radius: 10px; background: #fff6e8; color: #b8621c; font-size: 12.5px; font-weight: 700; line-height: 1.6; }
.exh-call-card { flex-wrap: wrap; }
.exh-call-card .exh-bounty-line { flex: 1 0 100%; }

/* ---------- 我的换菜：五步滑页（Owner 10/27 21:55 / 22:24，效果图 14 / 14b / 14c）---------- */
/* 我的换菜这页：步骤图固定在上，下面五页并排横向滚动吸附（scroll-snap），每页自己上下滚 */
.exh-page .exw-scroll { display: flex; flex-direction: column; overflow: hidden; padding: 0; }
.exm-track { flex: 1; min-height: 0; display: flex; overflow-x: auto; overflow-y: hidden; scroll-snap-type: x mandatory; scroll-behavior: smooth; overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.exm-track::-webkit-scrollbar { display: none; }
.exm-pane { flex: 0 0 100%; min-width: 0; box-sizing: border-box; overflow-y: auto; padding: 14px 16px 20px; scroll-snap-align: start; scroll-snap-stop: always; overscroll-behavior-y: contain; }
.exm-bar { flex: none; display: flex; align-items: flex-start; padding: 4px 12px 0; border-bottom: 1px solid #ece6de; background: #fff9f3; }
.exm-s { position: relative; flex: none; display: flex; flex-direction: column; align-items: center; gap: 3px; width: 56px; padding: 7px 0 9px; border: 0; background: none; color: inherit; font: inherit; cursor: pointer; }
.exm-c { width: 23px; height: 23px; border: 2px solid #d9d4e2; border-radius: 50%; background: #fff; box-sizing: border-box; color: #fff; font-size: 12px; font-weight: 900; line-height: 19px; text-align: center; }
.exm-s.is-done .exm-c { border-color: #6b4ce6; background: #6b4ce6; }
.exm-s.is-on .exm-c { border: 3px solid #6b4ce6; box-shadow: 0 0 0 4px #efeafd; }
.exm-t { color: #7d7690; font-size: 12px; white-space: nowrap; }
.exm-s.is-on .exm-t { color: #6b4ce6; font-weight: 800; }
.exm-rw { height: 14px; margin-top: -2px; color: #d0611f; font-size: 10.5px; font-style: normal; font-weight: 800; line-height: 14px; }
.exm-s.is-view::after { content: ""; position: absolute; left: 14px; right: 14px; bottom: 0; height: 3px; border-radius: 2px; background: #29243a; }
.exm-ln { flex: 1; min-width: 0; height: 2px; margin-top: 18px; background: #e4e0ea; }
.exm-ln.is-done { background: #6b4ce6; }
.exm-say h3 { margin: 0; color: #29243a; font-size: 19px; font-weight: 800; line-height: 1.4; }
.exm-say p { margin: 4px 0 0; color: #7d7690; font-size: 13.5px; line-height: 1.5; }
.exm-pane > .exw-card, .exm-pane > .exm-note, .exm-pane > .exm-samples { margin-top: 12px; }
.exm-note { text-align: center; }
.exm-sec { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; }
.exm-more { border: 0; background: none; color: #6b4ce6; font: inherit; font-size: 13px; font-style: normal; font-weight: 700; cursor: pointer; }
.exm-samples { display: flex; gap: 8px; }
.exm-sample { flex: 1; min-width: 0; overflow: hidden; border: 1px solid #f1ebe4; border-radius: 12px; background: #fff; }
.exm-sample-img { display: block; width: 100%; height: 70px; object-fit: cover; }
.exm-sample b, .exm-sample small { display: block; overflow: hidden; padding: 0 8px; text-overflow: ellipsis; white-space: nowrap; }
.exm-sample b { padding-top: 6px; font-size: 13px; }
.exm-sample small { padding-bottom: 7px; color: #8a8496; font-size: 11.5px; }
.exm-lock { display: flex; align-items: center; gap: 10px; border: 1.5px dashed #ddd6ea; }
.exm-lock i { font-size: 24px; font-style: normal; }
.exm-lock span { display: flex; flex-direction: column; gap: 2px; }
.exm-lock small { color: #8a8496; font-size: 13px; }
.exm-lock b { font-size: 14px; }
.exm-empty { display: flex; flex-direction: column; gap: 6px; }
.exm-round { display: block; width: 100%; text-align: left; font: inherit; color: inherit; cursor: pointer; }
.exm-round-h, .exm-round-f { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.exm-round-f { margin-top: 10px; }
.exm-seats { display: flex; gap: 6px; margin-top: 10px; }
.exm-seat { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; }
.exm-seat small { color: #6d6780; font-size: 12px; }
.exm-seat-img { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: 14px; object-fit: cover; font-size: 20px; font-style: normal; font-weight: 800; }
.exm-seat-img.is-on { background: #6b4ce6; color: #fff; }
.exm-seat-img.is-off { border: 1.5px dashed #d3cbe8; background: #f4f1fa; color: #a397d6; }
.exm-gets { display: flex; gap: 8px; margin-top: 10px; }
.exm-get { position: relative; flex: 1; height: 74px; overflow: hidden; border-radius: 12px; background: linear-gradient(135deg, #d8cbb8, #b8a48c); }
.exm-get img { width: 100%; height: 100%; object-fit: cover; filter: blur(5px) saturate(.8); transform: scale(1.15); }
.exm-get i { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; background: rgba(40, 30, 70, .28); color: #fff; font-size: 18px; font-style: normal; }
.exm-get i small { font-size: 12px; font-weight: 700; }
.exm-gets-l { margin: 10px 0 0; color: #d0611f; font-size: 13px; font-weight: 800; text-align: center; }
.exm-poster > span { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.exm-demo-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.exm-rk { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.exm-rk-img { flex: none; width: 44px; height: 44px; border-radius: 10px; object-fit: cover; }
.exm-chip { flex: none; height: 28px; padding: 0 10px; border: 1.5px solid #e1dbf3; border-radius: 14px; color: #7d7690; font-size: 12.5px; font-style: normal; font-weight: 800; line-height: 25px; }
.exm-chip.is-on { border-color: #6b4ce6; background: #6b4ce6; color: #fff; }
.exm-table { display: flex; gap: 12px; margin-top: 10px; }
.exm-table-img { flex: none; width: 110px; height: 90px; border-radius: 12px; object-fit: cover; }
.exm-scores { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 6px; }
.exm-scores span { display: flex; align-items: center; gap: 8px; }
.exm-scores small { color: #6d6780; font-size: 13px; }
.exm-scores b { color: #f6c453; font-size: 15px; letter-spacing: 2px; }
.exm-hint { margin: 16px 0 0; color: #aaa3b8; font-size: 12px; text-align: center; }
.exw-bar .u-btn-main.is-off { background: #ece9f0; color: #9a94a6; box-shadow: none; }
.exm-rk-img.is-empty, .exm-table-img.is-empty, .exm-sample-img.is-empty, .exm-seat-img.is-empty { display: flex; align-items: center; justify-content: center; background: #f4f1fa; color: #a397d6; font-size: 18px; font-weight: 800; }
