/* ===== 基础 ===== */
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}

/* ===== 图标（内联 SVG sprite）=====
 * 选择器限定到 svg.ico，避免影响仍用 .ico 承载文字/emoji 的旧标记；
 * 线宽写在 CSS 而非 symbol 属性上，才能被"选中态加粗"覆盖 */
svg.ico{width:22px;height:22px;display:block;flex:0 0 auto;stroke-width:1.8;}
.tab-item.on svg.ico{stroke-width:2.15;}
.cate svg.ico{width:25px;height:25px;}
.search-card svg.ico{width:17px;height:17px;color:var(--brand-primary);stroke-width:2.05;}
html,body{margin:0;padding:0;}
body{
  font-family:var(--font);color:var(--text-1);background:#EDEEF2;
  background-image:radial-gradient(1200px 600px at 50% -10%,rgba(230,0,18,.10),transparent 60%);
  min-height:100vh;
}
img{display:block;max-width:100%;}
button{font-family:var(--font);border:none;background:none;cursor:pointer;color:inherit;}
input,textarea,select{font-family:var(--font);}
a{text-decoration:none;color:inherit;}
::-webkit-scrollbar{width:0;height:0;}

/* ===== 页面容器：手机与电脑访问都只显示纯 H5 页面 ===== */
.app-page{width:100%;max-width:430px;height:100vh;height:100dvh;margin:0 auto;position:relative;
  background:var(--bg-page);display:flex;flex-direction:column;overflow:hidden;}

/* 顶部状态栏由设备系统渲染，H5 内不再模拟 */
.statusbar{display:none;}

/* 页面滚动主体 */
.phone-body{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch;}

/* ===== 顶部导航 ===== */
.navbar{height:calc(46px + var(--safe-top));display:flex;align-items:center;padding:var(--safe-top) 12px 0;gap:8px;flex:0 0 auto;
  background:#fff;border-bottom:1px solid var(--line);position:relative;z-index:40;}
.navbar.plain{background:transparent;border:none;position:absolute;top:40px;left:0;right:0;}
.navbar .nav-title{flex:1;text-align:center;font-size:16px;font-weight:600;}
.nav-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:19px;color:inherit;}
.nav-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:17px;}

/* ===== 按钮 ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:var(--radius-md);
  font-size:15px;font-weight:600;padding:0 18px;height:46px;transition:.16s;}
.btn-block{display:flex;width:100%;}
.btn-primary{background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));color:#fff;box-shadow:var(--shadow-cta);}
.btn-primary:active{transform:translateY(1px);filter:brightness(.96);}
.btn-outline{background:#fff;color:var(--brand-primary);border:1px solid var(--brand-red-line);}
.btn-outline:active{background:var(--brand-red-soft);}
.btn-ghost{background:var(--bg-gray);color:var(--text-2);}
.btn-disabled{background:#F0DCDD;color:#fff;box-shadow:none;}
.btn-sm{height:34px;font-size:13px;padding:0 14px;border-radius:var(--radius-sm);}
.btn-lg{height:50px;font-size:16px;}

/* ===== 卡片 / 标签 / 价格 ===== */
.card{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);}
.tag{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:var(--radius-sm);
  font-size:11px;background:var(--brand-red-soft);color:var(--brand-primary);border:1px solid var(--brand-red-line);}
.tag.plain{background:var(--bg-gray);color:var(--text-2);border-color:transparent;}
.tag.gold{background:#FBF4E6;color:#9A7B37;border-color:#EEDFB8;}
.tag.green{background:#EAF9F1;color:var(--success);border-color:#C9EFDB;}
.tag.blue{background:#EAF2FF;color:var(--info);border-color:#D2E2FF;}
.price{color:var(--brand-primary);font-weight:800;font-family:var(--font);}
.price .sym{font-size:12px;font-weight:700;margin-right:1px;}
.price .num{font-size:20px;letter-spacing:-.5px;}
.price .unit{font-size:12px;color:var(--text-3);font-weight:500;margin-left:2px;}
.price.sm .num{font-size:16px;}
.muted{color:var(--text-3);}

/* ===== 首页（新布局：红底头部 + 大图轮播 + 悬浮搜索 + 金刚区） ===== */
.hp-topbar{background:var(--brand-primary);
  padding:calc(8px + var(--safe-top)) 16px 30px;position:relative;flex:0 0 auto;}
.hp-topbar-row{display:flex;align-items:center;gap:10px;padding:2px 0 0;}
.hp-body{position:relative;z-index:3;margin-top:-18px;
  padding-bottom:calc(64px + var(--safe-bottom));}   /* 为底部导航留白 */

/* 通屏轮播：图片为 1000×563（16:9）成品设计稿，容器锁同比例，保证不裁切图内文字 */
.banner{position:relative;margin:0;border-radius:0;overflow:hidden;}
.banner-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;}
.banner-slide{flex:0 0 100%;position:relative;scroll-snap-align:start;background:#2b2b2b;
  aspect-ratio:1000 / 563;min-height:200px;}
.banner-slide img{width:100%;height:100%;object-fit:cover;}
.banner-dots{position:absolute;right:18px;bottom:16px;display:flex;gap:6px;z-index:2;}
.banner-dots i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.55);transition:.2s;
  box-shadow:0 0 5px rgba(0,0,0,.45);}
.banner-dots i.on{width:18px;border-radius:4px;background:#fff;}

.search-card{position:relative;z-index:4;margin:-24px 16px 0;height:48px;background:#fff;border-radius:15px;
  display:flex;align-items:center;gap:9px;padding:0 6px 0 15px;box-shadow:0 8px 22px rgba(26,26,26,.12);}

.search-card .ph{flex:1;color:var(--text-4);font-size:13.5px;}
.search-card .btn-go{height:36px;padding:0 17px;border-radius:11px;display:flex;align-items:center;
  background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));color:#fff;font-size:13px;font-weight:700;
  box-shadow:0 4px 12px rgba(230,0,18,.3);}

.hot-words{display:flex;gap:8px;padding:11px 16px 0;overflow-x:auto;align-items:center;}
.hot-words .lb{font-size:11px;color:var(--text-3);flex:0 0 auto;}
.hot-word{flex:0 0 auto;font-size:11.5px;color:var(--text-2);background:#fff;border-radius:var(--radius-pill);
  padding:5px 11px;box-shadow:0 2px 8px rgba(26,26,26,.05);}

.cate-card{margin:14px 16px 0;background:#fff;border-radius:18px;padding:16px 6px;box-shadow:var(--shadow-card);display:flex;}
.cate{flex:1;text-align:center;}
.cate .ic{width:48px;height:48px;border-radius:16px;margin:0 auto 7px;display:flex;align-items:center;justify-content:center;
  color:var(--brand-primary);background:linear-gradient(135deg,#FFF7F6,#FFE9E7);
  border:1px solid var(--brand-red-line);transition:background .18s,box-shadow .18s,color .18s;}
.cate .nm{font-size:12.5px;color:var(--text-2);font-weight:600;}

/* 交易方式 chips（列表页二级 tab 复用；首页的交易方式筛选栏已下线） */
.tr-chip{flex:0 0 auto;height:30px;padding:0 15px;border-radius:var(--radius-pill);background:#fff;color:var(--text-2);
  font-size:12.5px;display:flex;align-items:center;border:1px solid var(--line);}
.tr-chip.on{background:var(--brand-red-soft);color:var(--brand-primary);border-color:var(--brand-red-line);font-weight:700;}

.sec-head{display:flex;align-items:center;padding:18px 16px 0;}
.sec-head .st{font-size:15.5px;font-weight:800;letter-spacing:.3px;}
.sec-head .st::before{content:"";display:inline-block;width:3px;height:14px;border-radius:2px;
  background:var(--brand-primary);margin-right:7px;vertical-align:-2px;}
.sec-head .more{margin-left:auto;font-size:11.5px;color:var(--text-3);}

/* 首页头部：品牌 logo 与城市选择 */
.home-logo{width:32px;height:32px;border-radius:9px;display:block;object-fit:cover;flex:0 0 auto;
  border:1.5px solid rgba(255,255,255,.5);background:#B8000E;
  box-shadow:0 2px 8px rgba(0,0,0,.18);}
.home-city{color:#fff;font-size:15px;font-weight:600;display:flex;align-items:center;gap:3px;}
.home-city small{font-weight:400;font-size:10px;opacity:.85;}

/* （首页筛选条已移除，改为列表页 .fchip-row） */

/* ===== 房源卡片 ===== */
.house-list{padding:12px var(--pad-page) 90px;display:flex;flex-direction:column;gap:12px;}
.house-card{background:#fff;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card);display:flex;padding:10px;gap:11px;}
.house-thumb{width:118px;height:92px;border-radius:var(--radius-md);flex:0 0 auto;overflow:hidden;position:relative;background:var(--bg-gray);}
.house-thumb img{width:100%;height:100%;object-fit:cover;}
.house-thumb .pic-count{position:absolute;right:5px;bottom:5px;background:rgba(0,0,0,.5);color:#fff;font-size:10px;
  padding:1px 6px;border-radius:var(--radius-pill);}
.house-main{flex:1;min-width:0;display:flex;flex-direction:column;}
.house-title{font-size:14.5px;font-weight:600;line-height:1.35;color:var(--text-1);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.house-tags{display:flex;gap:5px;margin-top:6px;flex-wrap:wrap;}
.house-meta{font-size:12px;color:var(--text-3);margin-top:6px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.house-meta .dot{width:2px;height:2px;border-radius:50%;background:var(--text-4);}
.house-bottom{margin-top:auto;display:flex;align-items:flex-end;justify-content:space-between;padding-top:8px;}
.house-top-flag{position:absolute;left:0;top:0;background:linear-gradient(135deg,#F3D6A0,#C8A063);color:#6B4E17;
  font-size:10px;font-weight:700;padding:2px 8px;border-radius:0 0 10px 0;}

/* ===== 两列方形卡片（首页精选 / 列表页，瀑布流） ===== */
.house-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px 16px 16px;}
.hcard{background:#fff;border-radius:14px;overflow:hidden;box-shadow:var(--shadow-card);}
.hcard-img{position:relative;width:100%;aspect-ratio:1 / 1;background:var(--bg-gray);overflow:hidden;}
.hcard-img img{width:100%;height:100%;object-fit:cover;}
.hc-top{position:absolute;left:0;top:0;background:linear-gradient(135deg,#F3D6A0,#C8A063);color:#6B4E17;
  font-size:10px;font-weight:700;padding:2px 7px;border-radius:0 0 9px 0;}
.hc-biz{position:absolute;left:0;bottom:0;background:rgba(230,0,18,.9);color:#fff;font-size:10px;
  padding:2px 8px;border-radius:0 9px 0 0;}

.hcard-body{padding:9px 10px 11px;}
.hcard-title{font-size:13px;font-weight:600;line-height:1.35;color:var(--text-1);min-height:35px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.hcard-foot{margin-top:7px;display:flex;align-items:center;justify-content:space-between;gap:4px;}
.hc-price{color:var(--brand-primary);font-weight:800;font-size:15px;letter-spacing:-.3px;white-space:nowrap;}
.hc-price .sym{font-size:11px;margin-right:1px;}
.hc-price .unit{font-size:10.5px;color:var(--text-3);font-weight:500;margin-left:1px;}
/* 卡片标题下方：信息标签行（交易方式 / 景观 / 等级 / 转让费） */
.hcard-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;}
.hcard-tags .tag{height:18px;font-size:10.5px;padding:0 6px;border-radius:5px;}
/* 卡片右下角：近期看房人数 */
.hc-view{font-size:10.5px;color:var(--text-3);white-space:nowrap;flex:0 0 auto;}
/* 卡片底部附加行（浏览记录页的「浏览于 …」，其他列表页不传则不渲染） */
.hc-extra{margin-top:5px;font-size:10.5px;color:var(--text-4);}

/* ===== 列表页顶部搜索条（位于筛选栏最上方，随筛选栏一起吸顶） ===== */
.lsearch{display:flex;align-items:center;gap:8px;margin:10px 10px 0;padding:0 6px 0 12px;height:38px;
  background:var(--bg-gray);border-radius:var(--radius-pill);}
.lsearch svg.ico{width:16px;height:16px;color:var(--text-3);stroke-width:2;}
.lsearch-inp{flex:1;min-width:0;height:100%;border:0;outline:none;background:transparent;
  font-size:13px;color:var(--text-1);font-family:inherit;}
.lsearch-inp::placeholder{color:var(--text-4);}
.lsearch-inp::-webkit-search-cancel-button{-webkit-appearance:none;}   /* 用自绘的 × 清空 */
.lsearch-clear{flex:0 0 auto;width:20px;height:20px;line-height:19px;text-align:center;border-radius:50%;
  background:rgba(26,26,26,.08);color:var(--text-3);font-size:13px;}
.lsearch-btn{flex:0 0 auto;height:28px;line-height:28px;padding:0 12px;border-radius:var(--radius-pill);
  background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));color:#fff;font-size:12.5px;font-weight:700;}

/* ===== 列表页筛选条 ===== */
/* 粘性定位需挂在包裹层上：.fchip-row 自身高度等于内容，sticky 不会生效 */
.fchip-wrap{position:sticky;top:0;z-index:30;background:#fff;}
/* 筛选条：位置/租金/转让费/房间数/景观/排序 六个维度在一行内放下
   —— 缩小内间距(12→6px)、间距(8→5px)、高度(30→28px)，并让按钮可等分撑满整行；
   窄屏(≤360px)或已选筛选项文字变长时仍会优雅换行（不截断、不横向滚动）。 */
.fchip-row{display:flex;flex-wrap:wrap;gap:5px;padding:9px 10px;border-bottom:1px solid var(--line);}
.fchip{flex:1 1 auto;display:flex;align-items:center;justify-content:center;gap:2px;height:28px;padding:0 6px;
  border-radius:var(--radius-pill);background:var(--bg-gray);color:var(--text-2);font-size:12px;
  white-space:nowrap;min-width:0;}
.fchip .caret{font-size:9px;opacity:.7;flex:0 0 auto;}
.fchip.on{background:var(--brand-red-soft);color:var(--brand-primary);border:1px solid var(--brand-red-line);font-weight:700;}
/* 「清空」不参与等分，只在有筛选条件时出现 */
.fchip.reset{background:#fff;border:1px solid var(--line);color:var(--text-3);flex:0 0 auto;}
/* 列表页业务类型 tab（筛选条下方，与筛选条叠加生效） */
.seg-list{margin:10px 12px;}
/* 列表页二级 tab：交易方式（随业务类型变化） */
.trade-tabs{display:flex;flex-wrap:wrap;gap:8px;padding:0 12px 11px;border-bottom:1px solid var(--line);}
.tr-chip.sm{height:26px;padding:0 12px;font-size:12px;}

.load-more{text-align:center;color:var(--text-3);font-size:11.5px;padding:14px 0 44px;}

/* ===== 区间滑块 ===== */
.range-wrap{padding:0 0 20px;}
.range-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;padding:0 2px 18px;}
.range-head .rv{display:flex;flex-direction:column;gap:7px;min-width:0;}
.range-head .rv-r{align-items:flex-end;text-align:right;}
.rv-lab{font-size:11.5px;color:var(--text-3);letter-spacing:.8px;}
.rv-val{display:flex;align-items:baseline;color:var(--brand-primary);font-weight:800;letter-spacing:-.6px;}
.rv-val .num{font-size:24px;line-height:1;}
.rv-val i{font-style:normal;font-size:11.5px;font-weight:600;color:var(--text-3);margin-left:4px;letter-spacing:0;}
.range-dash{flex:0 0 auto;width:28px;height:2px;border-radius:2px;background:var(--line);margin-bottom:11px;}
.range-track{position:relative;height:6px;border-radius:4px;background:#EFF0F2;
  box-shadow:inset 0 1px 2px rgba(26,26,26,.06);margin:0 12px;}
.range-fill{position:absolute;top:0;bottom:0;border-radius:4px;
  background:linear-gradient(90deg,var(--brand-bright),var(--brand-primary));}
.range-input{position:absolute;left:0;top:-10px;width:100%;height:26px;margin:0;background:transparent;
  -webkit-appearance:none;appearance:none;pointer-events:none;outline:none;}
.range-input::-webkit-slider-thumb{-webkit-appearance:none;pointer-events:auto;width:24px;height:24px;border-radius:50%;
  background:#fff;border:5px solid var(--brand-primary);
  box-shadow:0 0 0 1.5px #fff,0 3px 9px rgba(230,0,18,.3);cursor:pointer;}
.range-input::-moz-range-thumb{pointer-events:auto;width:14px;height:14px;border-radius:50%;background:#fff;
  border:5px solid var(--brand-primary);box-shadow:0 0 0 1.5px #fff,0 3px 9px rgba(230,0,18,.3);cursor:pointer;}
.range-foot{display:flex;justify-content:space-between;padding:10px 12px 0;font-size:11px;color:var(--text-4);}

/* ===== 区间快捷选择（三列卡片） ===== */
.preset-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;}
.preset{height:40px;border-radius:11px;background:var(--bg-gray);border:1px solid transparent;color:var(--text-2);
  font-size:12.5px;display:flex;align-items:center;justify-content:center;
  transition:background .15s,border-color .15s,color .15s;}
.preset.on{background:var(--brand-red-soft);border-color:var(--brand-primary);color:var(--brand-primary);font-weight:700;}
.sub-h{font-size:11.5px;color:var(--text-3);margin:9px 0 7px;}

/* 空状态 */
.empty{padding:70px 20px;text-align:center;color:var(--text-3);font-size:13px;}
.empty .emo{font-size:40px;margin-bottom:10px;opacity:.5;}
.empty.plain{padding:44px 20px;}          /* 纯文字提醒，不放占位图标 */

/* ===== 日期选择组件（日历） ===== */
.cal{padding:2px 0 4px;}
.cal-head{display:flex;align-items:center;justify-content:space-between;padding:0 2px 14px;}
.cal-title{font-size:15px;font-weight:800;letter-spacing:.5px;}
.cal-nav{width:32px;height:32px;border-radius:50%;background:var(--bg-gray);color:var(--text-2);
  display:flex;align-items:center;justify-content:center;font-size:16px;}
.cal-nav.dis{opacity:.35;}
.cal-week{display:grid;grid-template-columns:repeat(7,1fr);margin-bottom:4px;}
.cal-week span{text-align:center;font-size:11.5px;color:var(--text-3);}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px 0;}
.cal-day{height:42px;display:flex;align-items:center;justify-content:center;
  font-size:13.5px;color:var(--text-1);border-radius:12px;}
.cal-day.blank{visibility:hidden;}
.cal-day.dis{color:var(--text-4);}
.cal-day.today{color:var(--brand-primary);font-weight:700;}
.cal-day.on{background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));color:#fff;font-weight:700;
  box-shadow:0 6px 14px rgba(230,0,18,.28);}
.cal-tip{text-align:center;font-size:11px;color:var(--text-4);margin-top:14px;}

/* ===== 收费说明弹窗 ===== */
.fee-note{display:flex;flex-direction:column;gap:13px;padding:2px 0 4px;}
.fn-item{display:flex;gap:9px;font-size:13px;line-height:1.7;color:var(--text-2);}
.fn-no{flex:0 0 auto;width:19px;height:19px;border-radius:50%;background:var(--brand-red-soft);color:var(--brand-primary);
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:3px;}
.fn-agree{text-align:center;font-size:11.5px;color:var(--text-3);margin-top:18px;}

/* ===== 我的预约：信息行 ===== */
.ap-line{display:flex;gap:8px;font-size:12.5px;margin-top:9px;}
.ap-line .k{flex:0 0 58px;color:var(--text-3);}
.ap-line .v{flex:1;min-width:0;color:var(--text-1);}

/* ===== 详情 · 顶部媒体（图片轮播 / 视频播放 双面板） ===== */
.gallery{position:relative;height:290px;background:#ddd;flex:0 0 auto;overflow:hidden;}
.gallery-pane{position:absolute;inset:0;opacity:0;visibility:hidden;transition:opacity .18s;}
.gallery-pane.on{opacity:1;visibility:visible;}
.gallery-track{display:flex;height:100%;overflow-x:auto;scroll-snap-type:x mandatory;}
.gallery-track img{width:100%;height:100%;object-fit:cover;flex:0 0 100%;scroll-snap-align:start;}
.gallery-back{position:absolute;left:12px;top:calc(12px + var(--safe-top));width:32px;height:32px;border-radius:50%;background:rgba(0,0,0,.35);
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:17px;z-index:8;}
/* 图片指示点（左下角） */
.gallery-dots{position:absolute;left:14px;bottom:18px;z-index:6;display:flex;gap:5px;}
.gallery-dots i{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.55);
  box-shadow:0 0 5px rgba(0,0,0,.45);transition:.2s;}
.gallery-dots i.on{width:16px;border-radius:3px;background:#fff;}
/* 图片 / 视频 切换（右下角） */
.media-tabs{position:absolute;right:14px;bottom:14px;z-index:8;display:flex;gap:2px;padding:3px;
  background:rgba(0,0,0,.42);border-radius:var(--radius-pill);}
.media-tabs .mt{height:26px;padding:0 13px;border-radius:var(--radius-pill);font-size:12px;
  color:rgba(255,255,255,.82);display:flex;align-items:center;}
.media-tabs .mt.on{background:#fff;color:var(--brand-primary);font-weight:700;}
/* 视频播放（原型用模拟播放器） */
.video-poster{position:absolute;inset:0;}
.video-poster img{width:100%;height:100%;object-fit:cover;}
.video-poster::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.3);}
.video-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:62px;height:62px;border-radius:50%;
  background:rgba(255,255,255,.94);color:var(--brand-primary);display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 24px rgba(0,0,0,.32);z-index:7;transition:opacity .2s,visibility .2s;}
.video-btn.playing{opacity:0;visibility:hidden;}
.video-btn svg.ico{width:26px;height:26px;}
.video-bar-wrap{position:absolute;left:14px;right:14px;bottom:14px;z-index:7;}
.video-meta{display:flex;justify-content:space-between;font-size:10.5px;color:rgba(255,255,255,.9);margin-bottom:7px;}
.video-bar-track{height:3px;border-radius:2px;background:rgba(255,255,255,.35);overflow:hidden;}
.video-bar-fill{height:100%;width:0;border-radius:2px;background:#fff;transition:width .3s linear;}

.detail-body{margin-top:-14px;position:relative;z-index:3;padding:0 var(--pad-page) 96px;}
.detail-card{background:#fff;border-radius:var(--radius-lg);padding:16px;box-shadow:var(--shadow-card);}
.detail-title{font-size:18px;font-weight:700;line-height:1.4;}
/* 核心信息：标签行 / 价格 / 编号与浏览量 */
.tag-wrap{display:flex;flex-wrap:wrap;gap:6px;}
.price-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:14px;}
.price-lg{display:flex;align-items:baseline;color:var(--brand-primary);font-weight:800;letter-spacing:-.6px;}
.price-lg .sym{font-size:16px;margin-right:1px;}
.price-lg .num{font-size:31px;line-height:1;}
.price-lg .unit{font-size:13px;font-weight:600;margin-left:4px;color:var(--brand-primary);opacity:.85;}
.tf-tag{align-self:center;font-size:11.5px;color:#9A7B37;background:#FBF4E6;border:1px solid #EEDFB8;
  border-radius:6px;padding:3px 8px;white-space:nowrap;}
.detail-meta-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);font-size:12px;color:var(--text-3);}
.dh-no{display:flex;align-items:center;gap:8px;}
.copy{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:6px;font-size:11.5px;
  color:var(--brand-primary);background:var(--brand-red-soft);border:1px solid var(--brand-red-line);}
.copy svg.ico{width:12px;height:12px;stroke-width:2;}

/* 简要信息标签 */
.kt-wrap{display:flex;flex-wrap:wrap;gap:8px;padding:0 0 15px;}
.kt{display:inline-flex;align-items:baseline;gap:6px;padding:7px 11px;border-radius:9px;
  background:var(--bg-gray);font-size:13px;font-weight:600;color:var(--text-1);}
.kt i{font-style:normal;font-size:11.5px;font-weight:400;color:var(--text-3);}
.kt.soft{background:var(--brand-red-soft);color:var(--brand-primary);}

/* 房源信息数据格：每个数据「值在第一行、名称在第二行」，均居中；3 列，细线分隔 */
.fact-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;margin:0 0 13px;}
.fact{background:#fff;padding:12px 6px 11px;text-align:center;}
.fact.ghost{background:#fff;}                    /* 末行补齐用的空格子 */
.fact.internal{background:#FFFBF3;}              /* 内部信息（仅员工/管理员可见）淡金底 */
.fact .fv{font-size:14px;font-weight:800;line-height:1.3;color:var(--text-1);word-break:break-all;}
.fact .fv.masked{color:var(--text-3);font-style:italic;font-weight:600;}
.fact .fk{font-size:11.5px;color:var(--text-3);margin-top:5px;line-height:1.2;}

/* 房间设施 / 公共设施：线性图标 + 名称（一行 5 个） */
.fac-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px 2px;padding:4px 0 16px;}
.fac{display:flex;flex-direction:column;align-items:center;gap:8px;font-size:11px;color:var(--text-2);
  text-align:center;line-height:1.25;word-break:break-all;}
.fac svg.ico{width:30px;height:30px;color:var(--brand-primary);stroke-width:1.4;}

.group{margin-top:12px;background:#fff;border-radius:var(--radius-lg);padding:4px 16px;box-shadow:var(--shadow-card);}
.group-head{display:flex;align-items:center;gap:8px;padding:14px 0 10px;font-size:15px;font-weight:700;}
.group-head .bar{width:3px;height:14px;border-radius:2px;background:var(--brand-primary);}
.fv-row{display:flex;padding:11px 0;border-top:1px solid var(--line);font-size:13.5px;gap:12px;}
.fv-row:first-of-type{border-top:none;}
.fv-label{flex:0 0 84px;color:var(--text-3);}
.fv-val{flex:1;color:var(--text-1);text-align:right;word-break:break-all;}
.fv-val.masked{color:var(--text-3);font-style:italic;}
.fv-val.sensitive{color:var(--brand-primary);font-weight:600;}
.fv-row.internal{background:#FFFBF3;margin:0 -16px;padding:11px 16px;}
.fv-chip{display:inline-flex;align-items:center;height:24px;padding:0 9px;border-radius:var(--radius-sm);
  background:var(--bg-gray);color:var(--text-2);font-size:12px;margin:0 6px 6px 0;}
.fv-desc{text-align:left;line-height:1.75;color:var(--text-2);}

.detail-footer{position:absolute;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);
  padding:10px 14px calc(10px + var(--safe-bottom));display:flex;align-items:center;gap:10px;z-index:35;}
.df-icons{display:flex;gap:2px;flex:0 0 auto;}
.df-ic{width:54px;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;color:var(--text-3);}
.df-ic svg.ico{width:22px;height:22px;}
.df-ic.on{color:var(--brand-primary);}

/* ===== 表单 ===== */
.form-body{padding:12px var(--pad-page) 110px;}
.f-group{background:#fff;border-radius:var(--radius-lg);padding:4px 16px;box-shadow:var(--shadow-card);margin-bottom:12px;}
.f-group-head{display:flex;align-items:center;gap:8px;padding:14px 0 4px;font-size:15px;font-weight:700;}
.f-group-head .bar{width:3px;height:14px;border-radius:2px;background:var(--brand-primary);}
.f-item{padding:12px 0;border-top:1px solid var(--line);}
.f-item:first-of-type{border-top:none;}
.f-label{font-size:13.5px;color:var(--text-1);margin-bottom:8px;display:flex;align-items:center;gap:4px;}
.f-label .req{color:var(--brand-primary);}
.f-label .unit-badge{font-size:11px;color:var(--text-3);background:var(--bg-gray);border-radius:4px;padding:1px 6px;margin-left:auto;}
.f-hint{font-size:11.5px;color:var(--text-3);margin-top:6px;}
.f-input,.f-textarea{width:100%;border:none;background:var(--bg-gray);border-radius:var(--radius-md);
  padding:12px;font-size:13.5px;color:var(--text-1);outline:none;}
.f-textarea{min-height:88px;resize:none;line-height:1.6;}
.f-input::placeholder,.f-textarea::placeholder{color:var(--text-4);}
.f-input.err{box-shadow:0 0 0 1.5px var(--brand-primary) inset;}
.f-err{font-size:11.5px;color:var(--brand-primary);margin-top:6px;}
.f-picker{background:var(--bg-gray);border-radius:var(--radius-md);padding:12px;font-size:13.5px;
  display:flex;align-items:center;justify-content:space-between;color:var(--text-1);}
.f-picker.ph{color:var(--text-4);}
.f-picker .arrow{color:var(--text-4);font-size:12px;}
.f-picker svg.ico{width:17px;height:17px;color:var(--brand-primary);stroke-width:1.9;}
/* 字数计数（text / textarea / rich_text） */
.f-count{margin-left:auto;font-size:11.5px;color:var(--text-4);font-weight:400;}
/* 富文本（原型的工具栏为示意，正式版用 editor 组件） */
.rt{background:var(--bg-gray);border-radius:var(--radius-md);overflow:hidden;}
.rt-bar{display:flex;gap:6px;padding:8px 10px;background:#fff;border-bottom:1px solid var(--line);}
.rt-btn{min-width:30px;height:26px;padding:0 8px;border-radius:6px;background:var(--bg-gray);color:var(--text-2);
  font-size:12.5px;display:inline-flex;align-items:center;justify-content:center;}
.rt-area{width:100%;min-height:96px;border:0;background:transparent;padding:11px;font-size:13.5px;
  font-family:var(--font);line-height:1.7;resize:none;color:var(--text-1);}
.rt-area.err{box-shadow:inset 0 0 0 1.5px var(--brand-primary);}
/* 日期区间 */
.f-range{display:flex;align-items:center;gap:8px;}
.f-range .f-picker{flex:1;min-width:0;}
.f-range .tilde{color:var(--text-4);flex:0 0 auto;}
/* 多选「清空」 */
.f-chip.clear{background:#fff;color:var(--text-3);border:1px dashed var(--line);}
.f-chips{display:flex;gap:8px;flex-wrap:wrap;}
.f-chip{height:32px;padding:0 14px;border-radius:var(--radius-sm);background:var(--bg-gray);color:var(--text-2);
  font-size:13px;display:inline-flex;align-items:center;border:1px solid transparent;}
.f-chip.on{background:var(--brand-red-soft);color:var(--brand-primary);border-color:var(--brand-red-line);font-weight:600;}
.f-money{display:flex;align-items:center;background:var(--bg-gray);border-radius:var(--radius-md);padding:0 12px;}
.f-money .unit{color:var(--text-3);font-size:13px;}
.f-money input{flex:1;border:none;background:transparent;outline:none;padding:12px 8px;font-size:13.5px;
  text-align:right;color:var(--brand-primary);font-weight:700;}
.uploader{display:flex;gap:10px;flex-wrap:wrap;}
.up-item{width:76px;height:76px;border-radius:var(--radius-md);overflow:hidden;position:relative;background:var(--bg-gray);}
.up-item img{width:100%;height:100%;object-fit:cover;}
.up-item .del{position:absolute;right:0;top:0;width:20px;height:20px;background:rgba(0,0,0,.55);color:#fff;
  font-size:12px;display:flex;align-items:center;justify-content:center;border-radius:0 0 0 10px;}
.up-add{width:76px;height:76px;border-radius:var(--radius-md);border:1px dashed var(--text-4);color:var(--text-3);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;background:#fff;}
.up-add .plus{font-size:20px;line-height:1;}
.up-video{width:150px;height:84px;border-radius:var(--radius-md);position:relative;overflow:hidden;background:#000;}
.up-video img{width:100%;height:100%;object-fit:cover;opacity:.8;}
.up-video .play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:22px;}
.up-video .dur{position:absolute;right:5px;bottom:5px;color:#fff;font-size:10px;background:rgba(0,0,0,.5);padding:1px 6px;border-radius:4px;}

/* 底部操作条 */
.action-bar{position:absolute;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);
  padding:10px 14px calc(10px + var(--safe-bottom));display:flex;gap:10px;align-items:center;z-index:35;}

/* 步骤条 */
.steps{display:flex;align-items:center;justify-content:center;gap:6px;padding:12px 16px;background:#fff;border-bottom:1px solid var(--line);}
.step{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-3);}
.step .dot{width:18px;height:18px;border-radius:50%;background:var(--bg-gray);color:var(--text-3);font-size:11px;
  display:flex;align-items:center;justify-content:center;font-weight:600;}
.step.on{color:var(--brand-primary);font-weight:700;}
.step.on .dot{background:var(--brand-primary);color:#fff;}
.step.done .dot{background:var(--brand-red-soft);color:var(--brand-primary);}
.step-line{width:22px;height:1px;background:var(--line);}

/* 选择卡片（发布选类型） */
/* 选择卡片：不换行，按选项数量等分一行（3 个选项即一行三列） */
.choice-grid{display:flex;gap:8px;flex-wrap:nowrap;}
.choice{flex:1 1 0;min-width:0;border:1.5px solid var(--line);border-radius:var(--radius-md);padding:12px 8px;
  background:#fff;position:relative;transition:.16s;text-align:center;}
.choice.on{border-color:var(--brand-primary);background:var(--brand-red-soft);}
.choice .ch-ico{width:32px;height:32px;border-radius:10px;margin:0 auto 7px;display:flex;align-items:center;justify-content:center;
  color:var(--brand-primary);background:linear-gradient(135deg,#FFF7F6,#FFE9E7);border:1px solid var(--brand-red-line);}
.choice svg.ico{width:19px;height:19px;}
.choice.on .ch-ico{color:#fff;background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));border-color:var(--brand-primary);}
.choice .nm{font-size:13px;font-weight:700;white-space:nowrap;}
.choice .ds{font-size:10.5px;color:var(--text-3);margin-top:4px;line-height:1.35;}
.choice.on .nm{color:var(--brand-primary);}
.choice .check{position:absolute;right:6px;top:6px;width:15px;height:15px;border-radius:50%;border:1.5px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:9px;color:transparent;background:#fff;}
.choice.on .check{background:var(--brand-primary);border-color:var(--brand-primary);color:#fff;}

/* ===== 我的（个人中心） ===== */
.my-head{background:linear-gradient(160deg,#FF5A5C,var(--brand-primary) 55%,var(--brand-deep));
  padding:calc(16px + var(--safe-top)) 16px 58px;position:relative;overflow:hidden;}
.my-head::after{content:"";position:absolute;right:-40px;top:-56px;width:190px;height:190px;border-radius:50%;
  background:rgba(255,255,255,.08);}
.my-user{display:flex;align-items:center;gap:13px;position:relative;z-index:2;}
.my-avatar{width:58px;height:58px;border-radius:50%;overflow:hidden;flex:0 0 auto;background:#fff;
  border:2px solid rgba(255,255,255,.75);box-shadow:0 6px 16px rgba(120,0,8,.28);}
.my-avatar img{width:100%;height:100%;object-fit:cover;object-position:center 38%;display:block;}
.my-user-main{flex:1;min-width:0;}
.my-name{color:#fff;font-size:17.5px;font-weight:800;display:flex;align-items:center;gap:7px;letter-spacing:.3px;}
.my-sub{color:rgba(255,255,255,.8);font-size:12px;margin-top:5px;}
.my-role{display:inline-flex;height:19px;align-items:center;padding:0 8px;border-radius:var(--radius-pill);
  background:rgba(255,255,255,.2);color:#fff;font-size:10.5px;font-weight:600;border:1px solid rgba(255,255,255,.38);}
.my-login-btn{flex:0 0 auto;height:30px;padding:0 15px;border-radius:var(--radius-pill);font-size:12.5px;font-weight:600;
  border:1px solid rgba(255,255,255,.7);background:rgba(255,255,255,.14);color:#fff;}
/* 四个数据入口：白卡压在红底上 */
.my-stats{margin:18px 0 -34px;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-card);
  display:flex;padding:14px 0;position:relative;z-index:3;}
.my-stats .st{flex:1;text-align:center;position:relative;}
.my-stats .st + .st::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:22px;background:var(--line);}
.my-stats .n{font-size:19px;font-weight:800;color:var(--text-1);letter-spacing:.4px;}
.my-stats .t{font-size:11.5px;color:var(--text-3);margin-top:4px;}
.my-body{padding:14px 16px 90px;}
.my-cells{margin:0 0 12px;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-card);overflow:hidden;}
.cell{display:flex;align-items:center;gap:11px;padding:15px 16px;border-top:1px solid var(--line);font-size:14px;}
.cell:first-child{border-top:none;}
.cell .c-ico{width:30px;height:30px;border-radius:9px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  background:var(--brand-red-soft);color:var(--brand-primary);}
.cell .c-ico svg.ico{width:17px;height:17px;}
.cell .c-txt{flex:1;min-width:0;color:var(--text-1);font-weight:500;}
.cell .c-right{color:var(--text-3);font-size:12.5px;max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cell .c-arrow{color:var(--text-4);display:flex;align-items:center;flex:0 0 auto;}
.cell .c-arrow svg.ico{width:15px;height:15px;}
/* 退出登录 */
.btn-logout{width:100%;height:48px;margin-top:4px;border-radius:var(--radius-lg);background:#fff;border:1px solid var(--line);
  color:var(--brand-primary);font-size:14.5px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:8px;
  box-shadow:var(--shadow-card);}
.btn-logout svg.ico{width:18px;height:18px;}
.my-foot{text-align:center;color:var(--text-4);font-size:11px;padding:22px 0 6px;letter-spacing:.5px;}

/* ===== 登录墙（未登录访问受保护页面） ===== */
.wall{padding:96px 28px 0;text-align:center;display:flex;flex-direction:column;align-items:center;}
.wall-ico{width:74px;height:74px;border-radius:50%;background:var(--brand-red-soft);color:var(--brand-primary);
  display:flex;align-items:center;justify-content:center;margin-bottom:18px;}
.wall-ico svg.ico{width:34px;height:34px;stroke-width:1.6;}
.wall-t{font-size:14px;color:var(--text-2);line-height:1.7;margin-bottom:26px;max-width:260px;}
.nav-txt{font-size:13px;color:var(--brand-primary);}

/* ===== 登录页 ===== */
.login-hero{text-align:center;padding:calc(20px + var(--safe-top)) 24px 22px;}
/* 登录页 logo：图片自带名称（不再用文字重复），居中 + 保留圆角 */
.login-logo{display:block;width:96px;height:96px;margin:0 auto;border-radius:22px;object-fit:cover;
  box-shadow:0 10px 24px rgba(230,0,18,.22);}
.login-slogan{font-size:12px;color:var(--text-3);margin-top:16px;letter-spacing:1px;}
.demo-title{font-size:12px;color:var(--text-3);margin-bottom:10px;}
.demo-list{display:flex;flex-direction:column;gap:10px;}
.login-alt{margin-top:16px;text-align:center;font-size:12.5px;color:var(--text-3);}
.login-alt span{color:var(--brand-primary);font-weight:600;}
/* 注册页：验证码行 + 协议勾选 */
.code-row{display:flex;gap:8px;align-items:center;}
.code-row .f-input{flex:1;min-width:0;}
.code-row .btn{flex:0 0 auto;height:42px;padding:0 14px;}
.agree-row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-3);margin:4px 0 6px;line-height:1.6;}
.agree-box{width:17px;height:17px;border-radius:50%;flex:0 0 auto;border:1.5px solid var(--line);background:#fff;color:transparent;
  display:flex;align-items:center;justify-content:center;font-size:10px;}
.agree-box.on{background:var(--brand-primary);border-color:var(--brand-primary);color:#fff;}

/* ===== Tabbar ===== */
.tabbar{flex:0 0 auto;height:calc(54px + var(--safe-bottom));background:#fff;border-top:1px solid var(--line);
  display:flex;align-items:stretch;z-index:45;padding-bottom:var(--safe-bottom);}
.tab-item{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  color:var(--text-3);overflow:visible;}
.tab-item .ti{display:flex;align-items:center;justify-content:center;height:22px;}
.tab-item .tl{font-size:10.5px;line-height:1.1;}
.tab-item.on{color:var(--brand-primary);font-weight:700;}
.tab-item.mid .ti{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,var(--brand-bright),var(--brand-primary));
  color:#fff;display:flex;align-items:center;justify-content:center;margin-top:-20px;
  box-shadow:var(--shadow-cta);border:3px solid #fff;}
.tab-item.mid svg.ico{width:22px;height:22px;stroke-width:2.3;}
.tab-item.mid{color:var(--text-3);font-weight:400;}
.tab-item.mid.on{color:var(--brand-primary);font-weight:700;}

/* ===== 抽屉 / 弹层 ===== */
.mask{position:absolute;inset:0;background:rgba(0,0,0,.45);z-index:70;display:none;}
.mask.show{display:block;}
.sheet{position:absolute;left:0;right:0;bottom:0;background:#fff;border-radius:18px 18px 0 0;z-index:80;
  transform:translateY(100%);transition:transform .26s cubic-bezier(.4,0,.2,1);max-height:78%;display:flex;flex-direction:column;}
.sheet.show{transform:translateY(0);}
.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:16px;font-size:16px;font-weight:700;border-bottom:1px solid var(--line);}
.sheet-head .close{color:var(--text-3);font-size:18px;}
.sheet-body{padding:16px;overflow-y:auto;}
.sheet-foot{padding:12px 16px;display:flex;gap:10px;border-top:1px solid var(--line);}
.filter-sec{margin-bottom:18px;}
.filter-sec h4{font-size:13.5px;margin:0 0 10px;font-weight:700;}
.filter-sec .opts{display:flex;gap:8px;flex-wrap:wrap;}

/* toast */
.toast{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.8);color:#fff;
  font-size:13px;padding:11px 18px;border-radius:10px;z-index:200;opacity:0;pointer-events:none;transition:.2s;max-width:70%;text-align:center;}
.toast.show{opacity:1;}



/* 分段切换（我的发布状态筛选） */
.seg{display:flex;background:var(--bg-gray);border-radius:var(--radius-md);padding:3px;margin:12px 16px;}
.seg .s{flex:1;text-align:center;padding:8px 0;font-size:13px;color:var(--text-2);border-radius:9px;}
.seg .s.on{background:#fff;color:var(--brand-primary);font-weight:700;box-shadow:0 1px 4px rgba(0,0,0,.06);}

/* 列表行（预约/我的房源） */
.row-card{background:#fff;border-radius:var(--radius-lg);padding:14px;box-shadow:var(--shadow-card);margin-bottom:10px;}
.row-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;}
.row-title{font-size:14.5px;font-weight:700;flex:1;line-height:1.4;}
.row-meta{font-size:12px;color:var(--text-3);margin-top:8px;display:flex;gap:10px;flex-wrap:wrap;}
.row-foot{margin-top:12px;padding-top:11px;border-top:1px dashed var(--line);display:flex;justify-content:space-between;align-items:center;gap:8px;}
.row-btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;}
.row-sub{font-size:12.5px;color:var(--text-2);line-height:1.7;}

/* 联系客服弹层 */
.service-box{padding:4px 0 2px;text-align:center;}
.service-box .qr{width:196px;height:196px;margin:0 auto;border-radius:12px;border:1px solid var(--line);
  box-shadow:0 4px 16px rgba(26,26,26,.07);}
.service-box .qr-tip{font-size:12.5px;color:var(--text-2);margin:12px 0 14px;}
.sv-line{display:flex;align-items:center;justify-content:space-between;padding:12px 2px;
  border-top:1px solid var(--line);font-size:13.5px;}
.sv-line .k{font-size:12.5px;color:var(--text-3);}
.sv-line .v{font-weight:700;color:var(--text-1);}
.sv-line .v.phone{color:var(--brand-primary);font-size:15.5px;letter-spacing:.6px;}

/* 反馈条：块级排版——用 flex 会把内联标签（如 <b>）拆成多个项，
   项间 gap 会在文字中间产生空隙，故这里不用 flex */
.notice{background:var(--brand-red-soft);border:1px solid var(--brand-red-line);
  color:#A80010;font-size:12px;line-height:1.65;border-radius:var(--radius-md);padding:11px 12px;margin-bottom:12px;}
.notice.blue{background:#EAF2FF;border-color:#D2E2FF;color:#0B4CB0;}

/* 窄屏（真机）：铺满、悬浮控件贴顶 */
@media (max-width:430px){
  .app-page{max-width:none;}
  .navbar.plain{top:0;}
  .gallery-back{top:12px;}
}
