/* ================= 设计令牌 · 溪山行 =================
   山系墨绿 · 低饱和：底色改中性暖灰白（去「旧纸」黄），主声墨绿黑 #22322B，
   「我要报名」主按钮改深松绿 #3E5E4C；朱印红只退守 logo 圆标与编号角标。
   照片交给图、配色交给 UI，两者不抢；全站颜色只在这里定义，换肤改这一处即可。 */
:root{
  /* 品牌：山系墨绿 */
  --brand:#22322B;
  --brand-deep:#18221C;
  --brand-soft:#E9EEEA;
  --brand-line:#CDD6D0;
  /* 朱印红：仅 logo 圆标 + 编号角标（品牌记忆点） */
  --seal:#BA182A;
  --seal-deep:#9A1222;
  /* 自然色：主按钮与状态，不抢主色 */
  --moss:#3E5E4C;        /* 松绿：主按钮 / 招募中 / 成功 */
  --moss-soft:#EAF0E9;
  --ochre:#B08958;       /* 哑光铜：满额 / 待办 */
  --ochre-soft:#F7F0E7;
  --rock:#8A8F86;        /* 岩灰：弱化信息 */
  /* 文字：冷墨绿黑 */
  --ink:#1F2622;
  --ink-2:#37413C;
  --gray:#6B756E;
  --gray-2:#98A29C;
  /* 面：中性暖灰白底 + 纯白面板 */
  --white:#FFFFFF;
  --canvas:#F6F5F2;
  --panel:#FFFFFF;
  --line:#DDE3DE;
  /* 语义 */
  --danger:#9E4A36; --danger-soft:#FAECE9;
  --info:#3C5A6B;   --info-soft:#E8EEF1;

  /* ↓ 兼容旧变量名（几百处老样式引用 var(--green)，改名成本大于收益） */
  --green:var(--brand); --green-dark:var(--brand-deep); --green-soft:var(--brand-soft);
  --amber:var(--ochre); --amber-soft:var(--ochre-soft);
  --red:var(--danger); --blue:var(--info); --blue-soft:var(--info-soft);

  /* 圆角四档：小控件 / 按钮输入 / 卡片面板 / 胶囊
     原来 6/8/10/12/999 五种混用，看着像几个人各写各的，这里收敛成一套。 */
  --r-sm:6px; --r-md:10px; --r-lg:16px; --r-pill:999px;
  --radius:var(--r-lg);
  /* 阴影三层：越靠近用户越深，全站只用这三档 */
  --sh-1:0 1px 2px rgba(31,27,24,.05);
  --sh-2:0 8px 24px rgba(31,27,24,.07);
  --sh-3:0 20px 48px rgba(31,27,24,.13);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  background:var(--canvas); color:var(--ink); font-size:14px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none;}
button{font-family:inherit;cursor:pointer;}
::selection{background:var(--brand);color:#fff;}

/* ===== 顶部导航 ===== */
.topbar{background:rgba(255,255,255,.92);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:50;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}
.topbar-inner{max-width:1180px;margin:0 auto;height:64px;display:flex;align-items:center;gap:30px;padding:0 20px;}
.brand{display:flex;align-items:center;gap:10px;cursor:pointer;flex:0 0 auto;}
.brand-mark{width:34px;height:34px;border-radius:50%;display:block;background:var(--seal);
  box-shadow:0 2px 8px rgba(186,24,42,.22);}
.brand-name{font-size:19px;font-weight:800;color:var(--brand);letter-spacing:.06em;}
.nav{display:flex;gap:26px;flex:1;}
.nav-link{color:var(--gray);font-size:14.5px;padding:21px 0;border-bottom:2px solid transparent;transition:.15s;}
.nav-link:hover{color:var(--ink);}
.nav-link.active{color:var(--brand);font-weight:600;border-bottom-color:var(--brand);}
.topbar-right{display:flex;align-items:center;gap:10px;}
.user-chip{font-size:13px;color:var(--gray);}
.ghost-btn{background:var(--white);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:7px 14px;font-size:12.5px;color:var(--gray);transition:.15s;}
.ghost-btn:hover{border-color:var(--brand-line);color:var(--brand);}

/* 首屏静态说明：JS 渲染完成后被整块替换，只有脚本失败或抓取时才看得到。
   存在意义是别让页面在爬虫眼里是个空壳（微信会因此判「无法确认该网页的安全性」）。 */
.boot-intro{max-width:720px;margin:0 auto;padding:32px 20px 56px;color:var(--ink-2);}
.boot-intro h1{font-size:22px;color:var(--brand);margin:0 0 14px;}
.boot-intro h2{font-size:15px;color:var(--brand);margin:26px 0 8px;}
.boot-intro p{font-size:14px;line-height:1.85;color:var(--gray);margin:0 0 10px;}
.boot-intro .boot-icp{font-size:12px;color:var(--gray-2);margin-top:30px;}

/* 容器 */
.wrap{max-width:1180px;margin:0 auto;padding:24px 20px 64px;}
.page-title{font-size:20px;font-weight:700;margin:0 0 4px;}
.page-sub{color:var(--gray);font-size:13px;margin:0 0 20px;}

/* 手机视图模拟 */
body.mobile #app{max-width:430px;margin:0 auto;background:var(--white);min-height:100vh;box-shadow:0 0 0 1px var(--line);}
body.mobile{background:#E5E0D4;}
body.mobile .wrap{padding:16px 14px 48px;}

/* ===== 按钮 ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;
  border-radius:var(--r-md);padding:11px 18px;font-size:14px;font-weight:600;
  background:var(--brand);color:#fff;transition:.15s;}
.btn:hover{background:var(--brand-deep);}
.btn:active{transform:translateY(1px);}
.btn.block{width:100%;}
.btn.outline{background:var(--brand-soft);color:var(--brand);border:1px solid var(--brand-line);}
.btn.outline:hover{background:#ECE6DB;}
.btn.gray{background:#EFF1EF;color:var(--gray);}
.btn.gray:hover{background:#E9E4D8;color:var(--ink-2);}
.btn.blue{background:var(--info);}
.btn.sm{padding:7px 13px;font-size:12.5px;}
.btn.danger{background:var(--danger-soft);color:var(--danger);}
.hero-home{position:relative;margin-bottom:22px;border-radius:20px;overflow:hidden;
  padding:38px 40px;min-height:212px;display:flex;align-items:center;justify-content:space-between;gap:28px;
  background:linear-gradient(135deg,#F7F8F6 0%,#FFFFFF 62%);
  color:var(--ink);box-shadow:var(--sh-2);border:1px solid var(--line);}
.hh-kicker{display:inline-block;font-size:12px;letter-spacing:.22em;color:var(--gray);margin-bottom:10px;}
.hh-title{margin:0 0 8px;font-size:34px;line-height:1.24;font-weight:800;letter-spacing:.01em;}
.hh-sub{margin:0;font-size:13.5px;color:var(--gray);}
/* 数字位数会变（8 期 / 100344 人），min-width:0 让 hh-text 能正常收窄，
   span 加 nowrap 防止「100344」被拆成两行 */
.hh-text{flex:1 1 auto;min-width:0;}
.hh-stats{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;margin-top:18px;font-size:12.5px;color:var(--gray);}
.hh-stats span{white-space:nowrap;}
.hh-stats b{font-size:19px;font-weight:800;color:var(--ink);margin-right:4px;letter-spacing:.01em;}
.hh-stats i{width:1px;height:14px;background:var(--line);}
.hh-logo{width:112px;height:112px;border-radius:50%;flex:0 0 auto;background:var(--seal);
  box-shadow:0 10px 28px rgba(186,24,42,.22),0 0 0 3px rgba(186,24,42,.12);}

/* ===== 筛选 ===== */
.filters{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:20px;}
.tag{border:none;background:var(--white);color:var(--gray);border-radius:var(--r-pill);
  padding:8px 16px;font-size:13.5px;box-shadow:inset 0 0 0 1px var(--line);transition:.15s;}
.tag:hover{color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand-line);}
.tag i{font-style:normal;font-size:11.5px;margin-left:6px;color:var(--gray-2);}
.tag.active{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 6px 16px -8px rgba(34,50,43,.18);}
.tag.active i{color:rgba(255,255,255,.7);}
.search{flex:1;min-width:190px;background:var(--white);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:9px 16px 9px 38px;font-size:13.5px;color:var(--ink);font-family:inherit;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239A958E' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20.5 20.5L17 17'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:14px center;}
.search:focus{outline:none;border-color:var(--brand-line);box-shadow:0 0 0 3px rgba(34,50,43,.07);}

/* ===== 活动卡片 ===== */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(298px,1fr));gap:22px;}
.card{background:var(--white);border-radius:var(--r-lg);overflow:hidden;cursor:pointer;
  box-shadow:var(--sh-1);transition:transform .2s ease,box-shadow .2s ease;}
.card:hover{transform:translateY(-3px);box-shadow:var(--sh-2);}
/* 封面统一 4:3 比例 + cover 裁切，换真实照片后不会再出现比例不齐或拉伸 */
.cover{position:relative;aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;
  overflow:hidden;color:#fff;background:linear-gradient(150deg,#4A5249 0%,#2C352E 60%,#18221C 100%);}
.cover img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .55s ease;}
.card:hover .cover img{transform:scale(1.045);}
/* 底部渐变蒙层：换上真实照片后，白字压在蒙层上才看得清，不再直接叠花图 */
.cover::after{content:'';position:absolute;left:0;right:0;bottom:0;height:56%;z-index:0;pointer-events:none;
  background:linear-gradient(to top,rgba(12,18,15,.74) 0%,rgba(12,18,15,.28) 46%,transparent 100%);}
/* 有图：左下角地点标签直接压蒙层（白字）；无图：分类做大字，像封面而不是占位符 */
.cover-tag{position:absolute;left:12px;bottom:12px;z-index:1;background:none;padding:0 2px;
  font-size:11.5px;letter-spacing:.02em;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.45);}
.cover-big{position:relative;z-index:1;font-size:36px;font-weight:800;letter-spacing:.2em;text-indent:.2em;
  color:rgba(255,255,255,.92);text-shadow:0 2px 16px rgba(0,0,0,.18);}
/* 出发日期角标：白底红字，一眼看到"哪天走" */
.cover-date{position:absolute;right:12px;top:12px;z-index:1;min-width:44px;text-align:center;
  background:rgba(255,255,255,.95);border-radius:var(--r-md);padding:5px 8px;line-height:1.15;
  box-shadow:0 3px 10px rgba(0,0,0,.14);}
.cover-date b{display:block;font-size:15px;font-weight:800;color:var(--brand);letter-spacing:-.02em;}
.cover-date span{display:block;font-size:10.5px;font-weight:500;color:var(--gray);}
.card-body{padding:15px 17px 17px;}
/* 已收队的往期：淡一档，免得跟还能报的抢注意力 */
.card.over{box-shadow:none;background:#FAFBFA;}
.card.over .card-title{color:var(--gray);}
.card.over .cover{filter:grayscale(.45) opacity(.75);}
.card.over .price{color:var(--gray);}
.card-title{font-size:16.5px;font-weight:700;line-height:1.42;margin-bottom:7px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.card-meta{color:var(--gray);font-size:12.5px;line-height:1.5;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.price-row{display:flex;justify-content:space-between;align-items:flex-end;margin-top:12px;
  padding-top:12px;border-top:1px solid #EDEFEC;}
.price{color:var(--brand);font-size:21px;font-weight:800;letter-spacing:-.02em;
  display:inline-flex;align-items:baseline;line-height:1;}
.price em{font-style:normal;font-size:11.5px;font-weight:500;color:var(--gray);margin-left:5px;}
.price i{font-style:normal;font-size:11.5px;font-weight:400;color:var(--gray-2);margin-left:2px;}
/* 排期 chips：把多期出发日期铺在首屏卡片上（参考小程序的清晰排布） */
.card-sched{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px;}
.sch-chip{display:inline-flex;align-items:center;padding:3px 9px;border:1px solid var(--line);
  border-radius:var(--r-pill);font-size:12px;font-weight:600;color:var(--ink-2);background:var(--canvas);
  font-variant-numeric:tabular-nums;}
.sch-more{display:inline-flex;align-items:center;font-size:11.5px;color:var(--gray);padding:3px 2px;}
/* 已报名：大号数字胶囊，干净醒目、不抢红色主操作 */
.joined-pill{display:inline-flex;align-items:baseline;gap:3px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r-pill);padding:5px 11px;white-space:nowrap;
  font-size:11.5px;color:var(--gray);}
.joined-pill b{font-size:16px;font-weight:800;color:var(--ink);letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;}
.card.over .joined-pill{opacity:.7;}
body.mobile .grid{grid-template-columns:1fr;}

/* 窄屏：品牌区挤成竖向，logo 缩到右上角 */
@media (max-width:760px){
  .hero-home{padding:26px 20px;min-height:0;border-radius:16px;}
  .hh-title{font-size:25px;}
  .hh-logo{width:64px;height:64px;position:absolute;right:16px;top:16px;}
  /* 封面比例固定 4:3，宽度随卡片自适应，不再写死高度 */
}

/* ===== 活动详情 ===== */
.detail{display:grid;grid-template-columns:1fr 404px;gap:26px;align-items:start;}
body.mobile .detail{grid-template-columns:1fr;}

/* 标题区：详情页的第一信息 */
.dt-head{margin-bottom:20px;}
.crumb{border:none;background:none;padding:0;color:var(--gray);font-size:13px;
  display:inline-flex;align-items:center;gap:6px;margin-bottom:14px;transition:.15s;}
.crumb::before{content:'←';font-size:14px;line-height:1;}
.crumb:hover{color:var(--brand);}
.dt-title{margin:0 0 11px;font-size:27px;line-height:1.36;font-weight:800;letter-spacing:.01em;}
.dt-meta{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:13px;color:var(--gray);}
.dt-meta i{font-style:normal;color:var(--gray-2);}
.dt-cat{background:var(--panel);color:var(--ink-2);border-radius:var(--r-pill);
  padding:3px 11px;font-size:12.5px;font-weight:600;}
.dt-level{background:var(--moss-soft);color:var(--moss);border-radius:var(--r-pill);
  padding:3px 11px;font-size:12.5px;font-weight:600;}
.dt-open{color:var(--moss);font-weight:600;}

/* 封面 */
.dt-cover{border-radius:var(--r-lg);overflow:hidden;margin-bottom:18px;box-shadow:var(--sh-1);}
.hero{height:320px;position:relative;display:flex;align-items:flex-end;padding:18px;
  color:#fff;font-size:14px;background:linear-gradient(150deg,#4A5249 0%,#2C352E 60%,#18221C 100%);}
/* hero 底部渐变蒙层：白字压蒙层，换摄影图后依旧可读 */
.hero::after{content:'';position:absolute;left:0;right:0;bottom:0;height:62%;z-index:0;pointer-events:none;
  background:linear-gradient(to top,rgba(12,18,15,.78) 0%,rgba(12,18,15,.30) 48%,transparent 100%);}
.hero .cover-tag,.hero .cover-big{position:relative;z-index:1;}
.hero.small{height:200px;}
.hero .cover-big{font-size:52px;}
.hero .cover-tag{font-size:12.5px;}

/* 面板：白卡片 + 红色小竖线标题 */
.panel{background:var(--white);border-radius:var(--r-lg);padding:24px 26px;margin-bottom:18px;box-shadow:var(--sh-1);}
.panel h3{margin:0 0 14px;font-size:16.5px;font-weight:700;display:flex;align-items:center;gap:9px;}
.panel h3::before{content:'';width:3px;height:15px;border-radius:2px;background:var(--rock);flex:0 0 auto;}
.dt-spec{margin:16px 0 0;padding-top:14px;border-top:1px solid #EDEFEC;color:var(--gray-2);font-size:12.5px;}

/* ===== 报名面板 ===== */
.signup{padding:0;overflow:hidden;}
.sg-price{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:20px 22px;background:linear-gradient(135deg,#F4F6F4,#FFFFFF);border-bottom:1px solid #EDEFEC;}
.sg-price-main{display:flex;align-items:baseline;color:var(--brand);}
.sg-cur{font-size:16px;font-weight:700;margin-right:2px;}
.sg-amount{font-size:34px;font-weight:800;letter-spacing:-.03em;line-height:1;}
.sg-unit{font-size:12.5px;color:var(--gray);margin-left:5px;font-weight:400;}
.sg-state{font-size:12.5px;color:var(--moss);background:var(--moss-soft);
  border-radius:var(--r-pill);padding:5px 12px;font-weight:600;white-space:nowrap;}
.sg-state.off{color:var(--gray);background:#EFF1EF;}
.sg-body{padding:20px 22px 22px;}
.sg-h{margin:0 0 12px;font-size:15px;font-weight:700;display:flex;align-items:center;gap:9px;}
.sg-h::before{content:'';width:3px;height:14px;border-radius:2px;background:var(--rock);flex:0 0 auto;}
.sg-h:not(:first-child){margin-top:22px;}
.sg-actions{display:flex;gap:10px;}
.sg-actions .btn{flex:1;}
.sg-foot{margin-top:18px;padding-top:16px;border-top:1px solid #EDEFEC;}
.sg-total{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px;}
.sg-total span{font-size:13px;color:var(--gray);}
.sg-total em{font-style:normal;color:var(--ink);font-weight:600;}
.sg-total b{color:var(--brand);font-size:23px;font-weight:800;letter-spacing:-.02em;}
.sg-submit{padding:14px;font-size:15px;font-weight:700;}
.btn.sg-submit{background:var(--moss);color:#fff;}
.btn.sg-submit:hover{background:var(--brand);}

/* ===== 批次选择器 ===== */
.sess-picker{display:flex;flex-direction:column;gap:9px;margin-bottom:4px;}
.sess{display:flex;justify-content:space-between;align-items:center;gap:10px;text-align:left;width:100%;
  border:1.5px solid var(--line);background:var(--white);border-radius:var(--r-md);
  padding:12px 14px;font-size:13px;color:var(--ink);transition:.15s;}
.sess:hover{border-color:var(--brand-line);background:#F6F5F2;}
.sess.active{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 0 0 3px rgba(34,50,43,.06);}
.sess.active .sess-date{color:var(--brand);}
.sess.dim{background:#FAF8F4;border-style:dashed;color:var(--gray-2);}
.sess-date{display:block;font-weight:600;font-size:13.5px;}
.sess-date em{display:block;font-style:normal;color:var(--gray-2);font-size:11.5px;font-weight:400;margin-top:2px;}
.sess-meta{color:var(--moss);font-weight:600;white-space:nowrap;font-size:12.5px;}
.sess.dim .sess-meta{color:var(--gray-2);font-weight:400;}
.sess.active .sess-meta{color:var(--brand);}
.sess-single{background:#FAF8F4;border-radius:var(--r-md);padding:11px 14px;font-size:13px;
  color:var(--ink-2);margin-bottom:18px;}

/* 批次总览 */
.sess-overview{display:flex;flex-direction:column;}
.sess-ov-row{display:grid;grid-template-columns:1.4fr 1fr auto auto;gap:12px;align-items:center;
  font-size:13px;padding:11px 0;border-bottom:1px solid #EDEFEC;}
.sess-ov-row:last-child{border-bottom:none;}
.sess-ov-date{font-weight:600;}
.sess-ov-note{color:var(--gray);font-size:12.5px;}
.sess-ov-price{color:var(--brand);font-weight:700;}

/* ===== 表单 ===== */
.field{margin-bottom:15px;}
.label{font-size:12.5px;color:var(--gray);font-weight:500;margin-bottom:7px;display:block;}
.input{width:100%;border:1px solid var(--line);border-radius:var(--r-md);padding:11px 13px;
  font-size:14px;background:var(--white);color:var(--ink);font-family:inherit;transition:.15s;}
.input::placeholder{color:var(--gray-2);}
.input:focus{outline:none;border-color:var(--brand-line);box-shadow:0 0 0 3px rgba(34,50,43,.07);}
.input.err{border-color:var(--danger);background:#FFFCFB;}
.err-tip{color:var(--danger);font-size:12px;margin-top:5px;}
.ok-tip{color:var(--moss);font-size:12px;margin-top:5px;}
.seg{display:flex;gap:7px;flex-wrap:wrap;}
.seg-item{border:1px solid transparent;background:#EFF1EF;color:var(--gray);border-radius:var(--r-sm);
  padding:7px 13px;font-size:12.5px;transition:.15s;}
.seg-item:hover{color:var(--brand);}
.seg-item.active{background:var(--brand);color:#fff;font-weight:600;}

/* 提示条 */
.notice{background:var(--brand-soft);border-radius:var(--r-md);padding:13px 15px;font-size:12.5px;
  color:var(--ink-2);margin-bottom:16px;line-height:1.65;}
.notice b{display:block;font-size:13.5px;margin-bottom:3px;color:var(--ink);}

/* ===== 出行人卡片 ===== */
.person{border:1px solid var(--line);border-radius:var(--r-md);padding:16px 16px 4px;
  margin-bottom:12px;background:var(--panel);}
.person-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;}
.person-title{font-size:13.5px;font-weight:700;display:flex;align-items:center;gap:8px;}
.person-title::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--rock);flex:0 0 auto;}
.person-remove{border:none;background:none;color:var(--danger);font-size:12.5px;padding:2px 4px;}

.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px;}
.chip{border:none;background:var(--brand-soft);color:var(--brand);border-radius:var(--r-pill);
  padding:7px 14px;font-size:12.5px;transition:.15s;}
.chip:hover{background:#ECE6DB;}
.chip.gray{background:#EFF1EF;color:var(--gray);}
.checkbox{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--gray);
  cursor:pointer;line-height:1.5;}
.checkbox input{width:15px;height:15px;accent-color:var(--brand);margin-top:2px;flex:0 0 auto;}
/* ===== 我的订单 ===== */
.ord-list{display:flex;flex-direction:column;gap:18px;}
.ord-card{background:var(--white);border-radius:var(--r-lg);padding:22px 24px 18px;box-shadow:var(--sh-1);}
.ord-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:11px;}
.ord-title{margin:0;font-size:17px;font-weight:700;line-height:1.42;}
.ord-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--gray);
  padding-bottom:14px;border-bottom:1px solid #EDEFEC;}
.ord-meta i{font-style:normal;color:var(--gray-2);}
.ord-amt{color:var(--brand);font-weight:700;font-size:13.5px;}
.ord-refunded{color:var(--danger);font-weight:600;}
.ord-active{color:var(--moss);font-weight:600;}
.ord-out{color:var(--gray-2);}
.ord-time{margin-left:auto;color:var(--gray-2);}
.ord-people{display:flex;flex-direction:column;}
.ord-p{display:grid;grid-template-columns:1fr auto auto;gap:16px;align-items:center;
  padding:13px 0;border-bottom:1px solid #F5F1E8;}
.ord-p:last-child{border-bottom:none;padding-bottom:2px;}
.ord-p-id{display:flex;align-items:center;gap:10px;min-width:0;}
.ord-p-names{min-width:0;}
.ord-p-name{font-weight:600;font-size:13.5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.ord-p-sub{color:var(--gray-2);font-size:11.5px;margin-top:2px;}
.ord-p-doc{color:var(--gray);font-size:12.5px;white-space:nowrap;display:flex;align-items:center;gap:6px;}
.ord-doc{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--ink-2);}
.ord-p-tags{display:flex;align-items:center;gap:12px;white-space:nowrap;}
.ord-foot{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid #EDEFEC;}
.ord-card .hint{margin-top:8px;}
body.mobile .ord-card{padding:18px 16px 14px;}
body.mobile .ord-p{grid-template-columns:1fr;gap:7px;}
body.mobile .ord-p-doc,body.mobile .ord-p-tags{justify-content:flex-start;}
body.mobile .ord-time{margin-left:0;}

/* ===== 表格 ===== */
.table{width:100%;border-collapse:collapse;background:var(--white);font-size:13px;}
.table th{text-align:left;color:var(--gray);font-weight:600;padding:12px 10px;border-bottom:1px solid var(--line);white-space:nowrap;}
.table td{padding:12px 10px;border-bottom:1px solid #EFF1EF;vertical-align:middle;}
.badge{display:inline-block;border-radius:999px;padding:3px 10px;font-size:12px;background:#EFF1EF;color:var(--gray);}
.badge.green{background:var(--moss-soft);color:var(--moss);}
.badge.amber{background:var(--amber-soft);color:#96612F;}
.badge.blue{background:var(--blue-soft);color:#2F4C5C;}
.badge.gray{background:#EFF1EF;color:var(--gray);}
.badge.red{background:#FAECE9;color:#A6392F;}
.op{color:var(--green);font-size:13px;background:none;border:none;}
.op.warn{color:#96612F;}
.op.red{color:var(--red);}
.admin{display:grid;grid-template-columns:220px 1fr;gap:24px;align-items:start;}
.admin > *{min-width:0;}
body.mobile .admin{grid-template-columns:1fr;}
.side{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:16px;}
.side-logo{font-size:16px;font-weight:700;color:var(--green);margin-bottom:14px;}
.side-item{display:block;width:100%;text-align:left;border:none;background:none;padding:10px 12px;border-radius:8px;font-size:14px;color:var(--gray);margin-bottom:2px;}
.side-item.active{background:var(--green-soft);color:var(--green-dark);font-weight:500;}
.stat-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:14px;}
.stat{background:var(--white);border:1px solid var(--line);border-radius:10px;padding:12px 18px;min-width:110px;}
.stat b{display:block;font-size:20px;}
.stat span{font-size:12px;color:var(--gray);}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;align-items:center;justify-content:space-between;}

/* 图片占用 / 清理无用图片 */
.btn[hidden]{display:none;}   /* .btn 自己有 display 规则，会压掉 hidden 属性 */
.media-box{display:flex;gap:12px;flex-wrap:wrap;align-items:center;justify-content:space-between;background:#F9F7F2;border:1px solid var(--line);border-radius:10px;padding:12px 16px;margin-bottom:14px;font-size:13px;}
.media-box .mb-left{flex:1 1 auto;min-width:0;line-height:1.7;}
.media-box .mb-left b{margin-right:8px;}
.media-box .mb-right{display:flex;gap:8px;align-items:center;flex:0 0 auto;}
.media-box #mediaStat{display:inline;min-width:0;}
.media-box .mb-seg{display:inline-block;white-space:nowrap;margin-right:8px;}
.media-box .mb-seg.amber{color:#96612F;font-weight:600;}
.media-box .mb-seg.green{color:var(--moss);}
.media-box .mb-seg.muted{color:var(--gray);}
.media-box .muted{color:var(--gray);font-size:12.5px;}
@media (max-width:760px){.media-box{flex-direction:column;align-items:stretch;}.media-box .mb-right{justify-content:flex-end;}}

/* 二维码 */
.qr-box{width:200px;height:200px;background:#fff;border:1px solid var(--line);border-radius:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.qr-box img,.qr-box canvas{width:180px;height:180px;}
.code-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#F8FAF8;border:1px solid var(--line);border-radius:8px;padding:12px 16px;font-weight:700;color:var(--green-dark);}
.empty{text-align:center;color:var(--gray-2);padding:40px 0;font-size:13px;}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
body.mobile .two-col{grid-template-columns:1fr;}
.toast{position:fixed;left:50%;bottom:36px;transform:translateX(-50%);background:rgba(24,25,28,.92);color:#fff;padding:10px 18px;border-radius:8px;font-size:13.5px;z-index:99;}

/* 弹窗 */
.modal-mask[hidden]{display:none;}
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px;}
.modal{background:#fff;border-radius:12px;width:100%;max-width:520px;max-height:86vh;overflow:auto;}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:2;}
.modal-head h3{margin:0;font-size:16px;}
.modal-close{border:none;background:none;font-size:22px;color:var(--gray);line-height:1;}
.modal-body{padding:20px;}
.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;position:sticky;bottom:0;background:#fff;z-index:2;}
textarea.input{min-height:150px;resize:vertical;line-height:1.8;font-size:13px;}
.hint{font-size:12px;color:var(--gray);line-height:1.7;margin-top:8px;}
.lbl{display:block;font-size:13px;font-weight:600;color:var(--ink-2);margin:18px 0 7px;}
.lbl:first-of-type{margin-top:0;}
.counter{font-size:11px;color:var(--gray-2);text-align:right;margin-top:3px;letter-spacing:.02em;}
.sc-preview{margin-top:8px;padding:22px 20px;border-radius:var(--r-lg);background:var(--brand-soft);border:1px solid var(--brand-line);}
.sc-preview .hh-kicker{margin-bottom:8px;color:var(--gray);}
.sc-preview .hh-title{margin:0 0 6px;color:var(--ink);}
.sc-preview .hh-sub{color:var(--gray);}

/* ===== 头像 / 微信名 ===== */
.avatar{border-radius:50%;object-fit:cover;background:#EFF1EF;flex:0 0 auto;display:inline-block;vertical-align:middle;}
.user-chip{display:inline-flex;align-items:center;gap:7px;background:var(--white);border:1px solid var(--line);border-radius:999px;padding:4px 10px 4px 4px;font-size:13px;color:var(--gray);max-width:200px;}
.user-chip:hover{border-color:var(--green);color:var(--green-dark);}
.user-chip.logged{color:var(--ink);font-weight:500;}
.user-chip .me-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:132px;}
.nick-row{display:flex;align-items:center;gap:8px;}
.nick-row .input{flex:1;}
.label-tip{color:var(--gray-2);font-size:11.5px;font-weight:400;margin-left:4px;}
.nick-tag{display:inline-block;background:var(--green-soft);color:var(--green-dark);border-radius:4px;padding:0 6px;font-size:11.5px;line-height:18px;}
.nick-cell{display:inline-flex;align-items:center;gap:6px;}

/* 登录弹窗 */
.login-row{display:flex;gap:14px;align-items:flex-start;}
.login-row .field{margin-bottom:0;}
/* 兜底入口：藏在主按钮下面一行小字，不抢视觉，但点得到 */
.login-alt{text-align:center;margin:12px 0 0;}
.link-mini{border:0;background:none;padding:4px 6px;color:var(--gray);font-size:12.5px;cursor:pointer;
  font-family:inherit;text-decoration:underline;text-decoration-color:rgba(0,0,0,.18);text-underline-offset:3px;}
.link-mini:hover{color:var(--moss);}
#manualBox{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line);}

/* 已报名提示条 */
.notice.ok{background:var(--moss-soft);border:1px solid #CBD8CB;}
.notice-row{display:flex;align-items:center;gap:10px;}
.notice-row > div{flex:1;}
.notice-time{font-size:12px;color:var(--moss);margin-top:2px;}

body.mobile .user-chip .me-name{max-width:96px;}

/* ===== 微信登录（登录即身份） ===== */
.wx-login{background:var(--brand);border-color:var(--brand);color:#fff;}
.wx-login:hover{background:var(--brand-deep);border-color:var(--brand-deep);}
.btn.wx-login{background:var(--brand);color:#fff;}
.user-chip.need-login{border-color:var(--brand);color:var(--brand);font-weight:500;}
.user-chip.need-login:hover{background:var(--green-soft);}
.input.locked{background:#EDEAE1;color:#3A423B;cursor:not-allowed;}
.nick-row .btn.sm{white-space:nowrap;}

/* ===== 页脚备案号 ===== */
.site-foot{max-width:1180px;margin:0 auto;padding:22px 20px 34px;text-align:center;font-size:12px;color:var(--gray-2);}
.site-foot a{color:var(--gray-2);}
.site-foot a:hover{color:var(--green-dark);text-decoration:underline;}
.site-foot .foot-dot{margin:0 8px;}
body.mobile .site-foot{padding:18px 14px 28px;}

/* ===== 封面缩略图（后台活动列表用） ===== */
.thumb{position:relative;overflow:hidden;width:64px;height:44px;border-radius:var(--r-sm);
  background:linear-gradient(150deg,#3E5E4C,#2C4438);display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:10px;text-align:center;line-height:1.2;padding:4px;flex:0 0 auto;}
.thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.thumb .cover-tag{position:relative;z-index:1;background:none;padding:0;font-size:10.5px;}
.hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}

/* ===== 期次徽标（首页卡片用；详情页的批次选择器样式在「活动详情」段） ===== */
.sess-line{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}
.sess-badge{background:var(--brand-soft);color:var(--brand);border-radius:var(--r-pill);
  padding:2px 9px;font-size:11.5px;font-weight:600;}

/* ===== 富文本：前台图文排版（对齐户外公众号阅读体验） ===== */
.rich{color:#4E564D;font-size:14px;line-height:1.9;word-break:break-word;}
.rich > *:first-child{margin-top:0;}
.rich p{margin:0 0 13px;}
.rich p:last-child{margin-bottom:0;}
/* 公众号正文常用 section 分段（不是 p），给点段距才不至于糊成一坨 */
.rich section{margin:0 0 11px;}
.rich section:last-child{margin-bottom:0;}
.rich section > section:last-child{margin-bottom:0;}

.rich h2,.rich h3,.rich h4{color:var(--ink);margin:20px 0 10px;line-height:1.45;}
.rich h2{font-size:18px;}
.rich h3{font-size:16px;padding-left:11px;border-left:3px solid var(--green);}
.rich h4{font-size:14.5px;}
.rich ul,.rich ol{margin:0 0 13px;padding-left:20px;}
.rich li{margin:5px 0;}
.rich blockquote{margin:0 0 13px;padding:11px 14px;background:#F9F7F2;border-left:3px solid var(--brand-line);color:#6E7568;border-radius:0 8px 8px 0;font-size:13.5px;}
.rich img{max-width:100%;height:auto;border-radius:10px;display:block;margin:14px 0;}
/* 装饰性小图（≤200px）：行内跟随文字、保持原比例，不铺满一整行 */
.rich img.rt-sm-img{display:inline-block;margin:0 3px;vertical-align:middle;border-radius:4px;}
.rich figure{margin:14px 0;}
.rich figcaption{font-size:12px;color:var(--gray-2);text-align:center;margin-top:6px;}
.rich hr{border:none;border-top:1px solid var(--line);margin:20px 0;}
.rich a{color:var(--green-dark);text-decoration:underline;}
.rich strong,.rich b{color:#3A423B;font-weight:600;}
.rich table{width:100%;border-collapse:collapse;margin:13px 0;font-size:13px;}
.rich th,.rich td{border:1px solid var(--line);padding:8px 10px;text-align:left;}
.rich th{background:#F9F7F2;color:#3A423B;font-weight:600;}
.detail .panel .rich{margin-top:2px;}

/* ===== 富文本编辑器（后台） ===== */
.rt{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff;}
.rt:focus-within{border-color:var(--green);box-shadow:0 0 0 2px rgba(34,50,43,.08);}
.rt-tool{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:8px;background:#F9F7F2;border-bottom:1px solid var(--line);position:sticky;top:54px;z-index:5;}
.rt-btn{border:1px solid var(--line);background:#fff;border-radius:6px;padding:5px 10px;font-size:12.5px;color:#3A423B;cursor:pointer;}
.rt-btn:hover{border-color:var(--green);color:var(--green-dark);}
.rt-sep{width:1px;height:18px;background:var(--line);margin:0 3px;display:inline-block;flex:0 0 auto;}
.rt-sel{border:1px solid var(--line);background:#fff;border-radius:6px;padding:4px 4px;font-size:12px;color:#3A423B;max-width:84px;cursor:pointer;}
.rt-sel:focus{outline:none;border-color:var(--green);}
.rt-area{min-height:120px;max-height:320px;overflow:auto;padding:12px 14px;font-size:13.5px;line-height:1.85;color:#3A423B;outline:none;}
.rt-area:empty:before{content:attr(data-ph);color:var(--gray-2);}
.rt-area p{margin:0 0 8px;}
.rt-area h3{font-size:15px;margin:10px 0 6px;color:var(--ink);}
.rt-area ul,.rt-area ol{padding-left:20px;margin:6px 0;}
.rt-area blockquote{margin:8px 0;padding:8px 12px;background:#F9F7F2;border-left:3px solid var(--brand-line);color:#6E7568;border-radius:0 6px 6px 0;}
.rt-area img{max-width:100%;border-radius:8px;display:block;margin:10px 0;}
/* 公众号里的装饰性小图（≤200px，清洗时打上 rt-sm-img）：保持原尺寸、跟随文字行内排列，不当大图铺开 */
.rt-area img.rt-sm-img{display:inline-block;margin:0 3px;vertical-align:middle;border-radius:4px;}
.rt-area hr{border:none;border-top:1px solid var(--line);margin:12px 0;}
.rt-area figure{margin:10px 0;}
.rt-area figure img{margin:0 0 6px;}
.rt-area figcaption{font-size:12px;color:#9AA096;text-align:center;margin-top:6px;outline:none;}
.rt-area figcaption:empty:before{content:'图片说明（点此填写）';color:#B9BFB4;}
.rt-hint{font-size:11.5px;color:var(--gray-2);padding:7px 12px;border-top:1px dashed var(--line);background:#FCFAF5;}
/* 正文里检测到 U+FFFD（问号方块）时的告警条 */
.rt-hint.rt-bad{background:#FBF3E8;border-top:1px dashed #E7C79A;color:#8A4A22;font-size:12px;line-height:1.7;padding:9px 12px;}
.rt-hint.rt-bad b{color:#9A4E1E;}
.rt-hint.rt-bad .rt-btn{margin-top:6px;font-size:12px;padding:3px 10px;border-color:#E7C79A;color:#8A4A22;background:#fff;}
.rt-bad-tip{display:block;margin-top:5px;color:#96612F;font-size:11px;}
.rt-src{border-top:1px dashed var(--line);background:#F8FAF8;padding:10px 12px;}
.rt-src-box{width:100%;min-height:150px;max-height:260px;resize:vertical;border:1px solid var(--line);border-radius:8px;
  padding:10px;font:12px/1.65 ui-monospace,Menlo,Consolas,monospace;color:#3A423B;background:#fff;}
.rt-src-box:focus{outline:none;border-color:var(--green);}
.rt-src-foot{display:flex;align-items:center;gap:10px;margin-top:8px;flex-wrap:wrap;}
.rt-src-tip{font-size:11.5px;color:var(--gray-2);line-height:1.5;}

/* 选中文字时就近浮出的快捷格式条 */
.rt-floating{position:fixed;z-index:300;display:none;align-items:center;gap:2px;padding:4px 6px;
  background:#2C352E;border-radius:9px;box-shadow:0 8px 24px rgba(20,28,22,.32);max-width:92vw;}
.rt-floating button{border:none;background:rgba(255,255,255,.1);color:#F3F1EA;border-radius:6px;
  padding:5px 9px;font-size:12.5px;line-height:1;cursor:pointer;min-width:30px;}
.rt-floating button:hover{background:rgba(255,255,255,.22);}
.rt-floating .rt-fsep{width:1px;height:18px;background:rgba(255,255,255,.22);margin:0 3px;}

body.mobile .rt-area{max-height:none;}

/* ===== 后台：活动列表 / 编辑器 ===== */
.badge{white-space:nowrap;}
.muted{color:#9AA096;font-size:12px;}
.admin .table td{padding:10px 8px;}
.admin .table th{padding:10px 8px;}
.admin .table .ops .op{margin-right:6px;}
.tb-head{display:flex;gap:10px;align-items:center;}
.tb-head-text{min-width:0;}
.tb-title{font-weight:600;line-height:1.35;}
.tb-sess{font-size:12.5px;color:#3A423B;}
.tb-price{white-space:nowrap;}
.row-off{opacity:.6;}
.ops{white-space:nowrap;}
.ops .op{margin-right:8px;}
.ops .op:last-child{margin-right:0;}
.notice.warn{background:#FBF3E8;border:1px solid #FED7AA;color:#8A4A22;}
.notice.warn b{color:#8A4A22;}
.modal.wide{max-width:1100px;}

/* 弹窗放大模式：点标题栏右上角 ⤢ 在「小窗 / 全屏」之间切换（编辑长图文时用）
   全屏时窗口吃满可视区，正文区自己滚动，两个编辑器都给足高度——不会再误点到边上把窗口关掉。 */
.modal-head-btns{display:flex;align-items:center;gap:2px;flex:0 0 auto;}
.modal-max{border:1px solid var(--line);background:#F9F7F2;font-size:12.5px;line-height:1.6;color:var(--green-dark);
  padding:3px 10px;border-radius:6px;cursor:pointer;white-space:nowrap;}
.modal-max:hover{border-color:var(--green);background:var(--green-soft);}
.modal-max[hidden]{display:none;}
.modal.full{max-width:none;width:100%;height:calc(100vh - 40px);height:calc(100dvh - 40px);max-height:none;
  display:flex;flex-direction:column;overflow:hidden;}
.modal.full .modal-head{position:static;flex:0 0 auto;}
.modal.full .modal-body{flex:1 1 auto;min-height:0;overflow:auto;}
.modal.full .modal-foot{position:static;flex:0 0 auto;}
.modal.full .rt-area{max-height:none;min-height:400px;}
/* 活动编辑：短字段行（分类/目的地、强度/期号）。
   只让「一行就能填完」的字段并排，省滚动；带正文的（介绍、行程、费用、注意、批次）一律整行满宽，
   一个活动介绍粘一篇公众号图文进来，半栏 500px 是没法看的。 */
.ed-row{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;align-items:start;}
.ed-row > .field{min-width:0;}
/* 活动编辑器里的两个富文本框（介绍 / 行程）是这里的正经工作面，给足高度、别挤成一条缝 */
.ed .rt-area{min-height:240px;}
.ed-top{display:grid;grid-template-columns:236px 1fr;gap:16px;margin-bottom:16px;}
.ed-cover-prev{width:100%;height:132px;border-radius:10px;border:1px dashed var(--line);background:#F9F7F2;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.ed-cover-prev img{width:100%;height:100%;object-fit:cover;display:block;}
.ed-cover-prev.has{border-style:solid;}
.ed-cover-empty{text-align:center;color:var(--gray-2);font-size:12.5px;line-height:1.6;}
.ed-cover-empty span{display:block;font-size:11.5px;color:#ADA79A;margin-top:2px;}
.ed-sess-head,.ed-sess{display:grid;grid-template-columns:1.25fr .9fr .7fr .7fr 1.3fr 40px;gap:8px;align-items:center;}
.ed-sess-head{font-size:11.5px;color:var(--gray-2);margin-bottom:6px;}
.ed-sess{margin-bottom:8px;}
.ed-sess .input{padding:8px 10px;font-size:13px;}
.ed-sess .op{padding:0;background:none;border:none;}
/* 批次行的删除：40px 的列里塞「删」字挤得难受，换成 30×30 的叉号图标。
   纯图标必须带 aria-label（读屏念得出来）+ title（鼠标悬停有提示），否则等于没文字 */
.ed-sess .op-x{width:30px;height:30px;padding:0;justify-self:center;display:inline-flex;
  align-items:center;justify-content:center;border:1px solid var(--line);border-radius:var(--r-sm);
  background:#fff;color:var(--gray-2);font-size:14px;line-height:1;font-family:inherit;cursor:pointer;
  transition:background .15s,border-color .15s,color .15s;}
.ed-sess .op-x:hover{border-color:var(--danger);color:var(--danger);background:var(--danger-soft);}

/* 手机视图：双端都要好看 */
body.mobile .ed-top{grid-template-columns:1fr;}
body.mobile .ed-row{grid-template-columns:1fr;}
body.mobile .ed-cover-prev{height:150px;}
body.mobile .modal.wide{max-width:none;}
body.mobile .sess-ov-note{display:none;}
body.mobile .sess-ov-row{grid-template-columns:1fr auto auto;}
body.mobile .sess-picker{gap:10px;}
body.mobile .sess{padding:12px;}
body.mobile .ops .op{margin-right:10px;}

/* 手机端底部「去填写报名信息」条：它是"带你下去填表"，不是报名按钮，
   所以做成描边次要样式，跟绿色的「提交报名」明显区分；表单进视野后自动隐藏 */
.sticky-cta{display:none;}
body.mobile .hero{height:190px;}
body.mobile .wrap{padding-bottom:96px;}
body.mobile .sticky-cta{display:block;position:fixed;left:50%;transform:translateX(-50%);bottom:14px;
  width:min(402px,calc(100% - 28px));z-index:40;border-radius:var(--r-md);padding:14px 16px;
  background:var(--moss);color:#fff;border:none;
  font-size:15px;font-weight:700;box-shadow:0 10px 26px -8px rgba(62,94,76,.45);}
body.mobile .sticky-cta:active{background:var(--brand);}
.sticky-cta.hide,
body.mobile .sticky-cta.hide{display:none;}

/* 手机端：活动管理从表格改成卡片，避免多列横向挤压（演示里的「手机视图」和真机都适用） */
body.mobile .act-table thead{display:none;}
body.mobile .act-table,
body.mobile .act-table tbody{display:block;}
body.mobile .act-table tr{display:grid;grid-template-columns:1fr auto;gap:6px 10px;padding:14px;border-bottom:1px solid #EFF1EF;}
body.mobile .act-table td{display:block;border:none;padding:0;white-space:normal;}
body.mobile .act-table td.tb-act{grid-column:1 / -1;margin-bottom:4px;}
body.mobile .act-table td:nth-child(2){grid-column:1;}
body.mobile .act-table td:nth-child(3){grid-column:2;justify-self:end;text-align:right;}
body.mobile .act-table td:nth-child(4){grid-column:1;}
body.mobile .act-table td.ops{grid-column:1 / -1;display:flex;gap:18px;padding-top:10px;margin-top:6px;border-top:1px solid #EFF1EF;}
body.mobile .act-table .thumb{width:52px;height:36px;}

@media (max-width:640px){
  .act-table thead{display:none;}
  .act-table,.act-table tbody{display:block;}
  .act-table tr{display:grid;grid-template-columns:1fr auto;gap:6px 10px;padding:14px;border-bottom:1px solid #EFF1EF;}
  .act-table td{display:block;border:none;padding:0;white-space:normal;}
  .act-table td.tb-act{grid-column:1 / -1;margin-bottom:4px;}
  .act-table td:nth-child(2){grid-column:1;}
  .act-table td:nth-child(3){grid-column:2;justify-self:end;text-align:right;}
  .act-table td:nth-child(4){grid-column:1;}
  .act-table td.ops{grid-column:1 / -1;display:flex;gap:18px;padding-top:10px;margin-top:6px;border-top:1px solid #EFF1EF;}
  .act-table .thumb{width:52px;height:36px;}
  .act-table .tb-price{font-size:14px;}
}

/* 真机 / 窄屏：微信里打开时没有「手机视图」这个开关，靠媒体查询兜底 */
@media (max-width:760px){
  .wrap{padding:16px 14px 96px;}
  .topbar-inner{gap:12px;padding:0 14px;}
  .nav{gap:16px;}
  .nav-link{font-size:14px;}
  .user-chip .me-name{max-width:84px;}
  #viewportToggle{display:none;}
  .grid{grid-template-columns:1fr;}
  .detail{grid-template-columns:1fr;}
  .admin{grid-template-columns:1fr;}
  .two-col{grid-template-columns:1fr;}
  .hero{height:190px;}
  .panel{padding:16px;}
  .modal{max-width:none;}
  .modal.wide{max-width:none;}
  .sess-ov-note{display:none;}
  .sess-ov-row{grid-template-columns:1fr auto auto;}
  .ed-top{grid-template-columns:1fr;}
  .ed-row{grid-template-columns:1fr;}
  .sticky-cta{display:block;position:fixed;left:50%;transform:translateX(-50%);bottom:14px;
    width:calc(100% - 28px);z-index:40;border-radius:10px;padding:12px 16px;
    background:var(--moss);color:#fff;border:1px solid var(--moss);
    font-size:15px;font-weight:600;box-shadow:0 8px 22px rgba(62,94,76,.22);}
}

@media (max-width:520px){
  .ed-sess-head{display:none;}
  .ed-sess{grid-template-columns:1fr 1fr;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;margin-bottom:10px;}
  .ed-sess input[data-sf="note"]{grid-column:1 / -1;}
  .ed-sess .op{justify-self:end;}
  .ed-sess .op-x{justify-self:end;}
  .sess-ov-note{display:none;}
}

/* ===== 详情页：排期横向日期卡（参考同行小程序：排期上卡片、状态一眼看清） ===== */
.dt-sched{margin:18px 0 2px;}
.dt-sched-h{display:flex;align-items:baseline;gap:10px;margin:0 2px 12px;}
.dt-sched-t{font-size:15px;font-weight:700;color:var(--ink);}
.dt-sched-n{font-size:12px;color:var(--moss);font-weight:600;}
.sch-scroll{display:flex;gap:10px;overflow-x:auto;padding:2px 2px 12px;scrollbar-width:thin;-webkit-overflow-scrolling:touch;}
.sch-scroll::-webkit-scrollbar{height:5px;}
.sch-scroll::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px;}
.sch-card{position:relative;flex:0 0 auto;width:94px;min-height:90px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:9px 7px 8px;
  background:var(--panel);border:1.5px solid var(--line);border-radius:var(--r-md);cursor:pointer;
  font-family:inherit;transition:border-color .15s,box-shadow .15s,transform .15s;}
.sch-card:hover{transform:translateY(-2px);box-shadow:var(--sh-1);}
.sch-card.on{border-color:var(--moss);box-shadow:0 0 0 3px var(--moss-soft);background:#fff;}
.sch-card.dim{opacity:.62;}
.sch-check{position:absolute;top:-9px;right:-9px;width:20px;height:20px;border-radius:999px;background:var(--moss);color:#fff;font-size:12px;line-height:20px;text-align:center;display:none;}
.sch-card.on .sch-check{display:block;}
.sch-d{font-size:17px;font-weight:800;color:var(--ink);line-height:1.1;}
.sch-w{font-size:11px;color:var(--gray-2);}
.sch-price{font-size:12px;color:var(--ink-2);font-weight:600;margin-top:2px;}
.sch-badge{margin-top:4px;font-size:11px;padding:2px 7px;border-radius:999px;font-weight:600;white-space:normal;word-break:break-word;max-width:100%;text-align:center;line-height:1.25;}
.sch-badge.go{background:var(--moss-soft);color:var(--moss);}
.sch-badge.full{background:var(--ochre-soft);color:var(--ochre);}
.sch-badge.end{background:var(--line);color:var(--gray-2);}

/* ===== 详情页：已参加的人（真实微信名 + 头像） ===== */
.dt-people{margin:4px 0 2px;padding:16px 2px 4px;border-top:1px solid var(--line);}
.dt-people-h{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:13px;}
.dt-people-h>span:first-child{font-size:15px;font-weight:700;color:var(--ink);}
.dt-people-n{font-size:12.5px;color:var(--gray-2);}
.pa-row{display:flex;flex-wrap:wrap;gap:14px 16px;}
.pa{display:flex;flex-direction:column;align-items:center;gap:5px;width:46px;}
.pa .avatar{width:42px;height:42px;border-radius:999px;box-shadow:var(--sh-1);}
.pa-name{font-size:11px;color:var(--ink-2);max-width:46px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pa.more{justify-content:center;font-size:14px;font-weight:700;color:var(--gray-2);border:1.5px dashed var(--line);border-radius:999px;height:42px;box-sizing:border-box;}
/* 分组胶囊：一笔报名 = 一个胶囊。人数写在名字下面（「共 3 人」），
   不再做成压在头像上的数字角标 —— 黑底白字扣在人脸上，正面看就是脑门上贴了朵白花。 */
.pa-group{position:relative;}
.pa-group .pa-name{font-weight:600;color:var(--ink);}
.pa-n{font-size:10px;line-height:1.4;color:var(--gray);letter-spacing:.2px;margin-top:-2px;white-space:nowrap;}

/* ===== 详情页报名面板：已选批次摘要（替代原竖向选择器，避免和上方日期卡重复） ===== */
.sg-sel{font-size:13px;color:var(--ink-2);background:var(--brand-soft);border:1px solid var(--brand-line);border-radius:var(--r-sm);padding:9px 12px;margin-bottom:14px;}

@media (max-width:760px){
  .sch-card{width:84px;min-height:84px;padding:9px 6px 8px;}
  .sch-d{font-size:16px;}
  .pa{width:42px;}
  .pa .avatar{width:38px;height:38px;}
}

/* ---------- 详情页「已参加的人」全量名单 sheet ---------- */
.pa-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap;}
.pa-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:16px 10px;}
.pa-card{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;}
.pa-card .avatar{width:52px;height:52px;border-radius:999px;box-shadow:var(--sh-1);}
.pa-card .pa-name{font-size:12px;color:var(--ink-2);max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pa-card .badge.sm{padding:1px 8px;font-size:11px;}
.badge.sm{padding:1px 8px;font-size:11px;}
/* 「更多」从 div 改 button：清掉原生按钮样式，保留虚线 chip 外观 */
.pa.more{background:none;font-family:inherit;cursor:pointer;padding:0 14px;}
.pa.more:hover{border-color:var(--brand);color:var(--brand);}

/* ---------- 后台报名人资料卡 ---------- */
.tel-link{color:var(--moss);font-weight:600;text-decoration:none;border-bottom:1px dashed var(--moss);}
.tel-link:hover{opacity:.8;}
.pc-head{display:flex;align-items:center;gap:14px;padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--line);}
.pc-head .avatar{width:56px;height:56px;border-radius:999px;box-shadow:var(--sh-1);}
.pc-name{font-size:17px;font-weight:700;color:var(--ink);}
.pc-sub{font-size:12.5px;color:var(--gray-2);margin-top:2px;}
.pc-grid{display:flex;flex-direction:column;gap:2px;}
.pc-row{display:flex;align-items:baseline;gap:12px;padding:9px 2px;border-bottom:1px solid var(--line);}
.pc-row:last-child{border-bottom:none;}
.pc-k{flex:0 0 76px;color:var(--gray-2);font-size:13px;}
.pc-v{flex:1 1 auto;color:var(--ink);font-size:14px;word-break:break-all;}
.pc-v .op.sm{padding:1px 8px;border:1px solid var(--brand-line);border-radius:999px;margin-left:6px;}






/* ---------- 顶栏导航：窄屏不许折行（原来「首页」被压成竖排两字） ---------- */
.nav-link{white-space:nowrap;}

/* ---------- 后台名单表：桌面端不许把列压成 0 宽 ---------- */
.roster-table{min-width:760px;}
.roster-table td{white-space:nowrap;}
.roster-table td.ops .op{margin-right:8px;}
.roster-table td.ops .op:last-child{margin-right:0;}

/* ---------- 后台名单表：窄屏转成卡片（手机上看名单是高频场景，10 列横滚没法用） ---------- */
@media (max-width:760px){
  .roster-panel{overflow:visible!important;padding:0!important;background:none;border:none;box-shadow:none;}
  .roster-table{min-width:0;}
  .roster-table thead{display:none;}
  .roster-table,.roster-table tbody{display:block;width:auto;}
  .roster-table tr{display:block;background:#fff;border:1px solid var(--line);
    border-radius:12px;margin-bottom:10px;padding:10px 14px;box-shadow:var(--sh-1);}
  .roster-table td{display:flex;align-items:flex-start;gap:12px;padding:7px 0;
    border-bottom:1px dashed var(--line);white-space:normal;word-break:break-all;}
  .roster-table td:last-child{border-bottom:none;}
  .roster-table td::before{content:attr(data-l);flex:0 0 58px;color:var(--gray-2);
    font-size:12px;font-weight:600;line-height:1.7;}
  /* 活动名单独占一行当标题 */
  .roster-table td[data-l="活动"]{display:block;border-bottom:1px solid var(--line);
    padding-bottom:9px;margin-bottom:2px;font-size:14.5px;}
  .roster-table td[data-l="活动"]::before{display:none;}
  /* 操作按钮并排放，别竖成三行 */
  .roster-table td.ops{display:flex;align-items:center;gap:10px;padding-top:10px;flex-wrap:wrap;}
  .roster-table td.ops .op{margin-right:0;padding:5px 12px;}
  .roster-table td .nick-cell{display:inline-flex;align-items:center;gap:6px;}
}

/* ---------- 商家登录：测试阶段把口令标出来 + 明文切换（4 位数字容易打错） ---------- */
.pin-tip{font-size:13px;color:var(--gray);margin:0 0 8px;}
.pin-tip .pin-now{font-size:17px;color:var(--brand);letter-spacing:.14em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;}
.pin-wrap{position:relative;}
.pin-wrap .input{padding-right:60px;}
.pin-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);
  border:none;background:none;color:var(--gray);font-size:13px;cursor:pointer;
  padding:6px 10px;border-radius:8px;font-family:inherit;}
.pin-eye:hover{color:var(--brand);background:var(--brand-soft);}

/* ==========================================================================
   详情页重排（2026-10-28）：名单提到最顶 + 报名改成弹窗
   ========================================================================== */

/* 顶部「报名信息」条：进来第一眼看到有谁去了 */
.dt-people{padding:14px 16px 16px;margin:0 0 14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);}
.dt-people-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap;}
.dt-people-h>span:first-child{font-size:15px;font-weight:700;color:var(--ink);}
.dt-people-n{font-size:12.5px;color:var(--gray-2);}
.pa-empty{font-size:13px;color:var(--gray-2);margin:0;padding:2px 0 4px;}
/* 头像改成可点的按钮：网友点开看头像+网名，商家点开看完整资料 */
.pa{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;}
.pa:hover .avatar{transform:translateY(-2px);box-shadow:var(--sh-2);}
.pa .avatar{transition:transform .15s,box-shadow .15s;}

/* 精简报名卡：价格 + 本期 + 一个「我要报名」 */
.signup-mini{padding:0;overflow:hidden;position:sticky;top:84px;}
.signup-mini .sg-body{padding:16px 18px 18px;}
.sg-sel-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px;padding:10px 12px;
  background:var(--brand-soft);border:1px solid var(--brand-line);border-radius:var(--r-sm);font-size:13px;color:var(--ink-2);}
.sg-sel-line .sg-sel-t{font-size:12px;color:var(--gray);}
.sg-sel-line b{color:var(--ink);font-weight:600;}

/* 底部固定条（对齐同行）：左边价格与本期，右边一个「我要报名」 */
.sticky-bar{display:none;}
body.mobile .sticky-bar{display:flex;}
@media (max-width:760px){
  .sticky-bar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;align-items:center;gap:12px;
    padding:10px 14px calc(10px + env(safe-area-inset-bottom,0px));
    background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid var(--line);
    box-shadow:0 -6px 20px rgba(31,27,24,.07);}
}
.sticky-bar-info{flex:1 1 auto;min-width:0;font-size:12px;color:var(--gray);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sticky-bar-info b{font-size:17px;color:var(--brand);font-weight:800;}
.sticky-bar .sticky-cta{display:block;flex:0 0 auto;position:static;transform:none;left:auto;bottom:auto;
  width:auto;min-width:132px;margin:0;padding:12px 22px;border-radius:10px;border:1px solid var(--moss);
  background:var(--moss);color:#fff;font-size:15.5px;font-weight:700;text-align:center;cursor:pointer;
  box-shadow:0 6px 16px rgba(62,94,76,.22);}
.sticky-bar .sticky-cta:active{background:var(--brand);}
/* 旧的「滚动到底自动收起」逻辑没了，.hide 不再需要 */
.sticky-cta.hide,body.mobile .sticky-cta.hide{display:block;}

/* ---------- 报名弹窗 ---------- */
.sg-modal{display:flex;flex-direction:column;gap:14px;}
.sg-m-act{display:flex;align-items:center;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--line);}
.sg-m-act .thumb,.sg-m-act img{width:52px;height:52px;border-radius:10px;object-fit:cover;flex:0 0 auto;}
.sg-m-act b{display:block;font-size:15px;color:var(--ink);}
.sg-m-act .muted{font-size:12.5px;color:var(--gray-2);margin-top:2px;}
.sg-m-pick{border:1px solid var(--line);border-radius:var(--r-md);padding:12px 12px 14px;background:#fff;}
.sg-m-h{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px;}
.sg-m-h b{font-size:14px;color:var(--ink);}
.sg-m-h span{font-size:12px;color:var(--gray-2);}
.sg-m-sum{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
  padding:12px 14px;border-radius:var(--r-md);background:var(--moss-soft);border:1px solid #CFE0D6;}
.sg-m-sum.off{background:#F3F1EC;border-color:var(--line);}
.sg-m-sum-l b{display:block;font-size:16px;color:var(--ink);}
.sg-m-sum-l .sg-m-sub{display:block;font-size:12px;color:var(--gray);margin-top:3px;}
.sg-m-note{display:block;font-size:12px;color:var(--gray-2);margin-top:2px;}
.sg-m-sum-r{text-align:right;white-space:nowrap;}
.sg-m-sum-r b{font-size:20px;color:var(--brand);font-weight:800;}
.sg-m-sum-r span{font-size:12px;color:var(--gray);}
.sg-m-mine:empty{display:none;}
/* 期次卡上补一行出发时间 */
.sch-card .sch-t{font-size:11px;color:var(--ink-2);font-weight:600;}

/* ---------- 名单里的某个人（访客版 / 商家版共用 .pc-* 卡片样式） ---------- */
.pa-grid .pa-card{background:none;border:none;padding:2px 0 0;cursor:pointer;font-family:inherit;}
.pa-grid .pa-card:hover .avatar{transform:translateY(-2px);box-shadow:var(--sh-2);}
.pa-grid .pa-card .avatar{transition:transform .15s,box-shadow .15s;}

/* 「更多」按钮：文字别被挤成竖排两行 */
.pa.more{width:auto;min-width:54px;padding:0 14px;white-space:nowrap;font-size:13px;line-height:1.2;}

/* 「需要管理员 ID」弹窗里的当前 ID 提示 */
.admin-id-now{font-size:17px;color:var(--brand);letter-spacing:.14em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;}

/* 资料卡底部的「← 返回名单」：靠左，其余按钮靠右 */
.modal-foot .btn[data-back-list]{margin-right:auto;}

/* ============ 借鉴「32号」新增样式：编号 / 标签 / 成团热度 / 进度 / 实时动态 / 客服 / 引导 ============ */
.card-tags{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px;}
.tag-pill{background:var(--moss-soft);color:var(--moss);border-radius:var(--r-pill);padding:2px 9px;font-size:11.5px;}
.code-pill{display:inline-block;background:var(--seal);color:#fff;border-radius:var(--r-pill);padding:2px 9px;font-size:11.5px;font-weight:600;margin-right:6px;}

.heat{display:inline-block;border-radius:var(--r-pill);padding:2px 9px;font-size:11.5px;font-weight:600;}
.heat-formed{background:var(--moss-soft);color:var(--moss);}
.heat-open{background:var(--moss-soft);color:var(--moss);}
.heat-hot{background:var(--seal-deep);color:#fff;}
.heat-soon{background:var(--ochre-soft);color:var(--ochre);}

.card-prog{height:6px;background:var(--line);border-radius:999px;overflow:hidden;margin:10px 0 4px;}
.card-prog-bar{display:block;height:100%;background:linear-gradient(90deg,var(--moss),var(--ochre));border-radius:999px;}
.card-prog-n{font-size:11.5px;color:var(--gray-2);}

.dt-code{display:inline-block;font-size:12px;font-weight:700;color:var(--seal);letter-spacing:.04em;
  margin:0 0 0 10px;vertical-align:middle;}
.dt-tag{display:inline-block;background:var(--moss-soft);color:var(--moss);border-radius:var(--r-pill);padding:2px 10px;font-size:12px;margin-left:6px;}

/* 多期：小卡横排，窄屏最多露 3 期，其余折在标题行右侧的「更多 N 期」后面（大屏够宽就全铺开，不折） */
.sch-grid{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;}
.sch-more-link{margin-left:auto;padding:2px 0;background:none;border:0;font-family:inherit;cursor:pointer;
  font-size:11.5px;color:var(--moss);letter-spacing:.2px;}
.sch-more-link:hover{text-decoration:underline;text-underline-offset:2px;}

/* 单期：一条横向出发信息条。左侧 3px 竖色条标状态，中间日期竖排、时间/价格一列，
   右侧余位胶囊。宽度由内容决定、铺满一行，不再出现「窄卡 + 大片空白」 */
.sch-solo{display:flex;align-items:center;gap:12px;padding:11px 13px 11px 14px;
  background:var(--white);border:1px solid var(--line);border-left:3px solid var(--moss);
  border-radius:var(--r-md);}
.sch-solo.full{border-left-color:var(--ochre);}
.sch-solo.end{border-left-color:var(--gray-2);}
.ss-date{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;
  padding-right:12px;border-right:1px solid var(--line);line-height:1.12;}
.ss-date b{font-size:19px;font-weight:800;color:var(--ink);letter-spacing:-.4px;font-variant-numeric:tabular-nums;}
.ss-date span{font-size:10.5px;color:var(--gray-2);letter-spacing:.5px;margin-top:2px;}
.ss-mid{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px;}
.ss-time{font-size:11.5px;color:var(--gray);letter-spacing:.2px;}
.ss-price{font-size:15px;font-weight:700;color:var(--ink);line-height:1.1;}
.ss-price i{font-style:normal;font-size:10.5px;font-weight:500;color:var(--gray-2);margin-left:3px;letter-spacing:.2px;}
.sch-solo .sch-badge{flex:0 0 auto;margin-top:0;white-space:nowrap;}

/* 窄屏折叠，大屏（≥761px）一行放得下就不折 */
@media (max-width:760px){
  .sch-grid[data-more="0"] .sch-extra{display:none;}
}
@media (min-width:761px){
  .sch-more-link{display:none;}
  /* 大屏别把单期条拉满 1140px：左边日期、右边一个徽章、中间 700px 空白，
     比窄卡更难看。内容只有「日期 / 时间 / 价格 / 余位」四件，560px 刚好，多了就是空 */
  .sch-solo{max-width:560px;}
}

.dt-leader{background:var(--white);border-radius:var(--r-lg);padding:15px 16px;margin-bottom:18px;box-shadow:var(--sh-1);}
.dt-leader-h{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--gray);font-weight:600;margin-bottom:12px;}
.dt-leader-h b{font-size:10.5px;font-weight:700;color:var(--moss);background:var(--moss-soft);
  padding:1px 7px;border-radius:var(--r-pill);letter-spacing:.4px;}
/* 多位领队：一行一位，宽屏自动并成两列；一位时也不会孤零零缩在角落 */
.dt-leader-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px 18px;}
.dt-leader-row{display:flex;align-items:center;gap:11px;min-width:0;}
/* 贴纸头像：米白内衬 2px + 1px 细描边 + 轻投影，圆边比原来那圈生硬的图更像手账贴纸 */
.dl-ava{position:relative;flex:0 0 auto;display:inline-flex;padding:2px;border-radius:50%;
  background:linear-gradient(160deg,#F6F1E7,#FFFDF9);
  box-shadow:0 0 0 1px var(--line),0 2px 6px rgba(31,27,24,.07);}
.dl-ava .avatar{width:54px;height:54px;display:block;border-radius:50%;}
.dl-tag{position:absolute;left:-7px;top:-5px;font-style:normal;height:15px;line-height:15px;
  padding:0 5px;border-radius:5px;background:var(--moss);color:#fff;
  font-size:9.5px;font-weight:700;letter-spacing:.4px;white-space:nowrap;
  box-shadow:0 0 0 1.5px #fff,0 1px 3px rgba(31,27,24,.14);}
.dt-leader-info{display:flex;flex-direction:column;min-width:0;}
.dt-leader-info b{font-size:14.5px;color:var(--ink);letter-spacing:.2px;}
.dt-leader-sub{font-size:12px;color:var(--gray-2);margin-top:3px;line-height:1.55;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}

.sg-prog{height:6px;background:var(--line);border-radius:999px;overflow:hidden;margin:10px 0 4px;}
.sg-prog-bar{display:block;height:100%;background:linear-gradient(90deg,var(--moss),var(--ochre));border-radius:999px;}
.sg-prog-n{font-size:12px;color:var(--gray);margin-bottom:6px;}

.live-feed{display:flex;align-items:center;gap:10px;background:var(--moss-soft);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 12px;margin-bottom:14px;overflow:hidden;}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--moss);flex:0 0 auto;box-shadow:0 0 0 3px rgba(61,92,74,.15);animation:livePulse 1.6s ease-in-out infinite;}
@keyframes livePulse{0%,100%{opacity:1}50%{opacity:.35}}
/* 原地淡入轮播：所有条目叠在同一位置，只有 .on 那条可见（不再横向滚动，避免晃眼） */
.live-track{position:relative;flex:1 1 auto;min-width:0;height:18px;}
.live-item{position:absolute;left:0;right:0;top:0;line-height:18px;font-size:12.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transition:opacity .45s ease;}
.live-item.on{opacity:1;}
.live-item b{color:var(--moss);font-weight:600;}

.filter-sel{height:38px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;color:var(--ink-2);font-size:13px;padding:0 8px;margin-left:8px;cursor:pointer;}

.cs-fab{position:fixed;right:16px;bottom:84px;z-index:60;display:flex;flex-direction:column;align-items:flex-end;gap:8px;}
.cs-btn{width:52px;height:52px;border-radius:50%;border:none;background:var(--brand);color:#fff;font-size:14px;font-weight:600;box-shadow:0 8px 22px rgba(34,50,43,.28);cursor:pointer;}
.cs-btn:hover{background:var(--brand-deep);}
.cs-pop{background:#fff;border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-2);padding:14px 16px;width:230px;}
.cs-pop-h{font-weight:700;margin-bottom:8px;font-size:14px;}
.cs-row{display:flex;justify-content:space-between;font-size:13px;padding:5px 0;border-top:1px dashed var(--line);}
.cs-row:first-of-type{border-top:none;}
.cs-row a{color:var(--moss);text-decoration:none;}
.cs-tip{font-size:11.5px;color:var(--gray-2);margin:8px 0 0;}

.onboard{position:fixed;inset:0;background:rgba(31,27,24,.55);display:flex;align-items:center;justify-content:center;z-index:200;padding:20px;}
.onboard-card{background:#fff;border-radius:var(--r-lg);max-width:320px;width:100%;padding:24px 22px;box-shadow:var(--sh-3);}
.onboard-h{font-size:17px;font-weight:700;margin-bottom:12px;}
.onboard-list{margin:0 0 18px;padding-left:18px;font-size:13.5px;line-height:2;color:var(--ink-2);}

/* ===== 领队：标识标签 + 后台资料模块 + 报名列表置顶行 ===== */
/* 领队标签：实心松绿，置于状态胶囊之前，突出带队身份 */
.badge.lead{background:var(--moss);color:#fff;font-weight:700;}
/* 后台编辑：领队选择 / 新建 + 头像 + 简介 */
.leader-pick{display:flex;gap:8px;align-items:center;}
/* 已指派的领队：一排小胶囊，点谁编谁，× 移出这个活动（不动档案） */
.leader-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px;}
.leader-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 6px 3px 4px;border:1px solid var(--line);
  border-radius:999px;background:var(--white);cursor:pointer;transition:border-color .15s,box-shadow .15s;}
.leader-chip .avatar{width:22px;height:22px;border-radius:999px;display:block;}
.leader-chip b{font-size:12.5px;font-weight:600;color:var(--ink);}
.leader-chip:hover{border-color:var(--moss);}
.leader-chip.active{border-color:var(--moss);box-shadow:0 0 0 2px var(--moss-soft);}
.leader-chip-x{border:none;background:none;padding:0 2px;line-height:1;font-size:14px;color:var(--gray-2);cursor:pointer;}
.leader-chip-x:hover{color:var(--brand);}
.leader-chip-empty{font-size:12px;color:var(--gray-2);}
.leader-pick select{font-family:inherit;}
.leader-pick .btn.outline.sm{white-space:nowrap;flex:0 0 auto;}
.leader-box{margin-top:10px;border:1px dashed var(--line);border-radius:var(--r-md);padding:12px;background:#F8FAF8;}
.leader-edit{display:flex;gap:14px;align-items:flex-start;}
.leader-ava{display:flex;flex-direction:column;align-items:center;gap:8px;}
.avatar.lg{width:56px;height:56px;border-radius:999px;object-fit:cover;background:var(--line);}
.leader-ava .btn{font-size:11px;padding:3px 10px;}
.leader-fields{flex:1;display:flex;flex-direction:column;gap:8px;}
.leader-fields .input{width:100%;}
/* 微信身份：openid 输入 + 一键绑定 */
.leader-id{display:flex;gap:8px;align-items:center;}
.leader-id .input{flex:1;min-width:0;}
.leader-id .btn{white-space:nowrap;flex:0 0 auto;}
.leader-fields textarea.input{resize:vertical;font-family:inherit;line-height:1.5;}
/* 报名成员列表里的领队：不单开格子，只在头像左上角打一个小角标（对齐同行做法）。
   领队本身已排第一位，再套描边/大胶囊会挤爆 46px 的格子。 */
.ava-wrap{position:relative;display:inline-flex;flex:0 0 auto;}
.ava-wrap .avatar{display:block;}
.lead-mark{position:absolute;top:-3px;left:-6px;z-index:2;display:inline-block;
  height:14px;line-height:14px;padding:0 4px;border-radius:5px;
  background:var(--moss);color:#fff;font-size:9.5px;font-weight:700;letter-spacing:.3px;
  border:1.5px solid #fff;box-shadow:0 1px 3px rgba(31,27,24,.18);white-space:nowrap;}


/* ================= 详情页：硬指标条 + 费用说明 / 注意事项 + 报名条款 =================
   新增块，放在文件末尾（注意：顶层规则会盖住前面的同名规则，改这里的东西只改这里） */

/* 指标条：强度 / 里程 / 累计爬升 / 成团人数。
   分寸拿捏：这是「扫一眼就够」的辅助信息，视觉重量必须低于封面、低于批次、低于报名按钮。
   三条做法：
     ① 单行等分（手机也不折成 2×2）——省掉约 70px 首屏高度，且四个数一眼横向对比；
     ② 三级字号建层级，不靠加粗加大：值 15px/700 墨色 ＞ 标签 10.5px 岩灰 ＞ 单位 10.5px 更深一档的灰。
        单位一定要比数字小，「13 km」才读成一个整体（现在两个等粗字并排，就是"笨重"的来源）；
     ③ 去阴影、只留 1px 细线 + 内分隔线，像参数表而不是又一张卡片。
   列数由前端按实际有几项算，避免只剩一格撑满整行。 */
.dt-kpis{display:grid;margin:12px 0 4px;background:var(--white);border:1px solid var(--line);
  border-radius:var(--r-lg);overflow:hidden;}
.dt-kpi{padding:9px 5px 8px;text-align:center;border-right:1px solid #EDEFEC;min-width:0;}
.dt-kpi:last-child{border-right:0;}
.dt-kpi-v{display:block;font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-.2px;
  line-height:1.25;font-variant-numeric:tabular-nums;}
.dt-kpi-u{font-size:11px;font-weight:500;color:var(--gray);letter-spacing:.2px;}
.dt-kpi-k{display:block;margin-top:3px;font-size:10.5px;color:var(--gray-2);letter-spacing:.35px;line-height:1.2;}

/* 费用说明 / 注意事项：一行一条。行首方括号前缀渲染成小标签，退改类用赭石色提醒 */
.fee-list{display:flex;flex-direction:column;gap:9px;}
.fee-line{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;color:var(--ink-2);line-height:1.7;}
.fee-k{flex:0 0 auto;width:44px;box-sizing:border-box;text-align:center;font-size:11.5px;font-weight:700;
  line-height:18px;padding:1px 7px;border-radius:5px;background:var(--brand-soft);color:var(--brand);
  letter-spacing:.3px;}
.fee-line.warn .fee-k{background:var(--ochre-soft);color:#8C5A21;}
.fee-v{flex:1;min-width:0;word-break:break-word;}
.fee-dot{flex:0 0 auto;width:4px;height:4px;border-radius:50%;background:var(--rock);margin-top:11px;}
.fee-p{margin:0;font-size:13.5px;line-height:1.78;color:var(--ink-2);}
.fee-p + .fee-p{margin-top:2px;}

/* 报名条款弹层：正文区自己滚动，避免长条款把弹窗撑破；勾选框放在正文下面，够大够好点 */
.terms-doc{font-size:13.5px;line-height:1.85;color:var(--ink-2);max-height:min(56vh,480px);overflow:auto;
  padding:2px 8px 14px 2px;border-bottom:1px solid var(--line);margin-bottom:14px;
  scrollbar-width:thin;scrollbar-color:var(--brand-line) transparent;}
/* 滚动条要看得见：手机上正文一截断，用户会以为条款只有这么点 */
.terms-doc::-webkit-scrollbar{width:6px;}
.terms-doc::-webkit-scrollbar-track{background:transparent;}
.terms-doc::-webkit-scrollbar-thumb{background:var(--brand-line);border-radius:3px;}
.terms-doc p{margin:0 0 10px;}
.terms-doc p:last-child{margin-bottom:0;}
.terms-end{margin:14px 0 0!important;text-align:center;font-size:11.5px;color:var(--gray-2);letter-spacing:.5px;}
.terms-chk{display:flex;gap:9px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-md);
  background:var(--brand-soft);font-size:13px;line-height:1.6;color:var(--ink-2);cursor:pointer;}
.terms-chk input{margin:2px 0 0;flex:0 0 auto;width:16px;height:16px;accent-color:var(--brand);cursor:pointer;}

/* 报名卡下面那行小字入口 */
.terms-line{margin:8px 0 0;text-align:center;font-size:11.5px;color:var(--gray-2);line-height:1.65;}
.terms-line a{color:var(--brand);text-decoration:underline;text-underline-offset:2px;}

/* 活动编辑器：里程 / 爬升 / 成团人数 三格一行 */
.three-col{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}

/* 窄屏也保持四格一行：4×82px 足够放下「累计爬升」四个字，折成 2×2 只会白占一屏高度 */
@media (max-width:760px){
  .three-col{grid-template-columns:1fr;}
  /* 报名卡的价格行：窄屏上「¥199 / 人」会被挤成两行（"人"单独掉下去），看着像没对齐 */
  .sg-price{flex-wrap:wrap;row-gap:8px;}
  .sg-price-main,.sg-unit{white-space:nowrap;}
}
/* 大屏：格子被拉到 285px，若还用手机那套 15px，中间会空得像没填完。
   这里不是简单放大字号，而是把「值 / 单位 / 标签」的级差一起按桌面尺度重算：
   18px 值 + 11.5px 单位 + 11px 标签、上下气口各加 5px，让它成为一条真正的参数带。 */
@media (min-width:761px){
  .dt-kpi{padding:14px 10px 12px;}
  .dt-kpi-v{font-size:18px;}
  .dt-kpi-u{font-size:11.5px;}
  .dt-kpi-k{margin-top:4px;font-size:11px;letter-spacing:.5px;}
}
body.mobile .three-col{grid-template-columns:1fr;}

/* ================= 相册 / 灯箱 / 咨询 / 列表筛选条 =================
   新增块，放在文件末尾（顶层规则会盖住前面同名规则，改这里只改这里） */

/* ---- 首页列表条：结果数 + 清除筛选 ---- */
.list-bar{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;
  margin:-6px 0 14px;min-height:24px;}
.list-n{font-size:12.5px;color:var(--gray-2);letter-spacing:.2px;}
.list-n b{color:var(--brand);font-weight:700;}
.list-n.none{color:#8C5A21;}
.list-clear{background:none;border:1px solid var(--line);border-radius:var(--r-pill);
  padding:5px 12px;font-size:12px;color:var(--ink-2);cursor:pointer;font-family:inherit;white-space:nowrap;}
.list-clear:hover{border-color:var(--brand-line);color:var(--brand);}

/* ---- 卡片上的「N 张」角标（封面左上；右上已经被日期角标占了，别撞） ---- */
.card{position:relative;}
.card-gal{position:absolute;left:10px;top:10px;z-index:2;padding:3px 8px;border-radius:6px;
  background:rgba(22,16,14,.52);color:#fff;font-size:11px;letter-spacing:.3px;
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);}

/* ---- 详情页：大图 + 缩略图条 ---- */
.dt-hero{cursor:zoom-in;}
.dt-hero-n{position:absolute;right:12px;bottom:12px;z-index:1;padding:4px 10px;border-radius:6px;
  background:rgba(22,16,14,.5);color:#fff;font-size:11.5px;letter-spacing:.3px;}
.dt-thumbs{display:flex;gap:8px;overflow-x:auto;padding:10px 2px 4px;margin:-8px 0 16px;
  scrollbar-width:thin;-webkit-overflow-scrolling:touch;}
.dt-thumb{flex:0 0 auto;width:78px;height:56px;padding:0;border:none;border-radius:8px;overflow:hidden;
  background:#EDE9DF;cursor:pointer;opacity:.62;transition:opacity .15s,box-shadow .15s;box-shadow:inset 0 0 0 1px var(--line);}
.dt-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.dt-thumb:hover{opacity:.9;}
.dt-thumb.on{opacity:1;box-shadow:0 0 0 2px var(--brand);}

/* ---- 灯箱：黑底、图居中、左右箭头贴边 ---- */
.lightbox{position:fixed;inset:0;z-index:400;display:flex;align-items:center;justify-content:center;
  background:rgba(12,10,9,.97);padding:24px;}
.lb-img{max-width:calc(100vw - 120px);max-height:calc(100vh - 96px);object-fit:contain;
  border-radius:6px;box-shadow:0 20px 60px rgba(0,0,0,.5);cursor:zoom-out;}
.lb-x{position:absolute;right:16px;top:12px;width:40px;height:40px;border:none;background:rgba(255,255,255,.12);
  color:#fff;font-size:22px;line-height:1;border-radius:50%;cursor:pointer;}
.lb-x:hover{background:rgba(255,255,255,.22);}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:46px;border:none;
  background:rgba(255,255,255,.12);color:#fff;font-size:26px;line-height:1;border-radius:50%;cursor:pointer;}
.lb-nav:hover{background:rgba(255,255,255,.24);}
.lb-prev{left:14px;}
.lb-next{right:14px;}
.lb-n{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);color:rgba(255,255,255,.72);
  font-size:12.5px;letter-spacing:1px;}

/* ---- 咨询弹层 ---- */
.contact-sheet{padding:2px 0 4px;}
.cs-lead{margin:0 0 14px;font-size:13px;line-height:1.7;color:var(--gray);}
.cs-line{display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:var(--r-md);
  background:#FAF7F1;border:1px solid var(--line);margin-bottom:8px;}
.cs-k{flex:0 0 34px;font-size:12px;color:var(--gray-2);}
.cs-v{flex:1;min-width:0;font-size:14.5px;font-weight:700;color:var(--ink);word-break:break-all;}
.cs-tel{color:var(--brand);text-decoration:none;font-weight:700;}
.cs-tip{margin:10px 0 0;font-size:12px;line-height:1.7;color:var(--gray-2);}
.cs-ask{margin:8px 0 0;font-size:12px;line-height:1.6;color:var(--gray-2);background:#F6F2E9;
  border-radius:8px;padding:9px 12px;word-break:break-word;}

/* ---- 详情页两个咨询入口 ---- */
.btn.sg-ask{margin-top:10px;background:#fff;color:var(--brand);border:1px solid var(--brand-line);}
.btn.sg-ask:hover{background:var(--brand-soft);}
.sticky-ask{flex:0 0 auto;height:40px;padding:0 16px;border-radius:var(--r-pill);
  background:#fff;border:1px solid var(--brand-line);color:var(--brand);
  font-size:13.5px;font-weight:600;font-family:inherit;cursor:pointer;}
.sticky-ask:active{transform:translateY(1px);}

/* ---- 编辑器：相册 ---- */
.gal-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-top:8px;}
.gal-item{position:relative;aspect-ratio:4/3;border-radius:8px;overflow:hidden;background:#EDE9DF;
  box-shadow:inset 0 0 0 1px var(--line);}
.gal-item img{width:100%;height:100%;object-fit:cover;display:block;}
.gal-item.pending img{opacity:.55;}
.gal-x{position:absolute;right:3px;top:3px;width:20px;height:20px;border-radius:50%;border:none;
  background:rgba(22,16,14,.62);color:#fff;font-size:13px;line-height:1;cursor:pointer;}
.gal-set{position:absolute;left:3px;bottom:3px;padding:2px 6px;border:none;border-radius:5px;
  background:rgba(22,16,14,.6);color:#fff;font-size:10.5px;cursor:pointer;}
.gal-wait{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:11px;color:#fff;background:rgba(22,16,14,.28);pointer-events:none;}
/* 空状态要占满一整行：它落在 .gal-list 的 grid 里，不写 grid-column 会被挤成一条 96px 宽的竖条，
   中文在竖条里一行只剩两三个字，看着像坏掉了 */
.gal-empty{grid-column:1/-1;display:flex;flex-direction:column;align-items:flex-start;
  justify-content:center;gap:4px;padding:14px 16px;border:1px dashed var(--line);
  border-radius:var(--r-md);font-size:12.5px;color:var(--gray-2);text-align:left;}
.gal-empty span{font-size:11.5px;color:#B4AEA2;}
.gal-add{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
.gal-url{display:flex;gap:8px;margin-top:8px;}
.gal-url .input{flex:1;min-width:0;}

@media (max-width:760px){
  .dt-thumb{width:64px;height:48px;}
  .lb-img{max-width:calc(100vw - 32px);max-height:calc(100vh - 140px);}
  .lb-prev{left:6px;}
  .lb-next{right:6px;}
  .lb-nav{width:38px;height:38px;font-size:22px;}
  .list-bar{margin-top:-2px;}
  .gal-list{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));}
}
body.mobile .dt-thumb{width:64px;height:48px;}

/* 详情页（手机）底部已有「咨询 + 我要报名」固定条，右下角客服浮标会压住指标条 —— 这一页先收起来 */
@media (max-width:760px){
  body.dt-page .cs-fab{display:none;}
}
body.mobile.dt-page .cs-fab{display:none;}

/* ==========================================================================
   一笔报名：N 个人的资料一次全摆出来（2026-11-01）
   —— 原来是一排头像、资料要一个个点开；同名同姓时根本分不清，联系谁定不下来。
   现在一人一张卡，真名 / 手机（可直接拨）/ 证件尾号 / 留言同屏，
   序号 1·2·3 让人能当面说「第 2 个」。
   ========================================================================== */
.pg-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;color:var(--gray-2);margin:0 0 8px;}
.pg-dot{color:var(--line);font-weight:700;}
.pg-lead{margin:0 0 12px;font-size:12px;line-height:1.65;color:var(--gray);}
.pg-list{display:flex;flex-direction:column;gap:10px;}
.pg-row{padding:11px 12px 9px;border:1px solid var(--line);border-radius:var(--r-md);background:#F8FAF8;}
.pg-h{display:flex;align-items:center;gap:10px;}
.pg-no{flex:0 0 13px;font-size:11px;font-weight:700;color:var(--gray-2);text-align:center;
  font-variant-numeric:tabular-nums;}
.pg-h .avatar{flex:0 0 auto;border-radius:999px;box-shadow:var(--sh-1);}
.pg-who{flex:1 1 auto;min-width:0;}
.pg-who b{display:block;font-size:14px;font-weight:700;line-height:1.35;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pg-nick{display:block;font-size:11.5px;line-height:1.4;color:var(--gray-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* 字段行左缩进 23px = 序号 13 + 间隙 10，与头像左缘对齐，看着像同一栏 */
.pg-kv{display:flex;align-items:baseline;gap:8px;margin-top:6px;padding-left:23px;font-size:12.5px;line-height:1.5;}
.pg-k{flex:0 0 26px;font-size:11.5px;color:var(--gray-2);}
.pg-v{flex:1 1 auto;min-width:0;color:var(--ink-2);word-break:break-all;}
.pg-v .tel-link{font-size:13.5px;letter-spacing:.02em;}
.pg-call{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;
  background:var(--moss-soft);color:var(--moss);font-size:10.5px;font-weight:600;}
.pg-mono{font-variant-numeric:tabular-nums;letter-spacing:.02em;}
.pg-dim{color:var(--gray-2);font-size:11.5px;font-weight:400;}
/* 文字链也留出指头能按的高度，别做成 12px 的一行字 */
.pg-more{margin:4px 0 0 23px;padding:6px 0 2px;border:none;background:none;font-family:inherit;
  font-size:12.5px;font-weight:600;color:var(--moss);cursor:pointer;}
.pg-more:hover{text-decoration:underline;}
/* 单笔报名（1 人）没有序号，字段行就不该再缩进那一格 */
.pg-row.solo .pg-kv{padding-left:0;}
.pg-row.solo .pg-more{margin-left:0;}
@media (max-width:420px){
  .pg-row{padding:10px 11px 8px;}
}

/* ==========================================================================
   推广页：报名链接 + 二维码（2026-11-04）
   —— 原来是演示版的 xshang.com 假短链，扫码打不开。现在直接给真实活动链接，
     二维码里装的就是它，任何手机扫都到得了。
   ========================================================================== */
.promo-sub{font-size:11.5px;line-height:1.4;color:var(--gray-2);margin-top:2px;}
.promo-link{font-size:12.5px;color:var(--moss);text-decoration:none;word-break:break-all;}
.promo-link:hover{text-decoration:underline;}
.promo-ops{white-space:nowrap;}
.promo-ops .btn{margin-right:6px;}
.promo-ops .btn:last-child{margin-right:0;}
.promo-meta{margin-top:14px;display:flex;flex-wrap:wrap;gap:14px;font-size:12.5px;color:var(--gray);}
.promo-url{font-size:12.5px;font-weight:600;line-height:1.5;word-break:break-all;}
@media (max-width:560px){
  .promo-ops .btn{padding:5px 9px;font-size:11.5px;}
}
.promo-tips{margin-top:18px;padding:12px 14px;border:1px dashed var(--line);border-radius:var(--r-md);background:#F7F9F7;}
.promo-tips b{display:block;font-size:12.5px;color:var(--ink);margin-bottom:6px;}
.promo-tips ol{margin:0;padding-left:16px;font-size:12px;line-height:1.85;color:var(--gray);}

/* 推广页表格在手机上改成竖排卡片：
   原本三列挤在 390px 里，链接被折成三行、按钮只剩半截，根本点不准 */
@media (max-width:560px){
  .promo-table,.promo-table tbody,.promo-table tr,.promo-table td{display:block;width:auto;}
  .promo-table thead{display:none;}
  .promo-table tr{padding:12px 0;border-bottom:1px solid var(--line);}
  .promo-table tr:last-child{border-bottom:none;}
  .promo-table td{padding:0;border:none;}
  .promo-table td:nth-child(2){margin-top:5px;}
  .promo-table td:nth-child(3){margin-top:9px;}
  .promo-ops .btn{padding:6px 14px;font-size:12px;}
  .promo-url{font-size:11.5px;}
}

/* ==========================================================================
   推广页：短链接（2026-11-04 晚）
   —— 商家习惯在微信群发短链。短码存在活动文档里，链接是 xsxhw.cn/?s=短码。
      左栏把短链接放大给人看清长度与形态，右栏二维码装的就是这条短链。
   ========================================================================== */
.promo-shortbox{margin-top:12px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);
  background:#F7F9F7;}
.promo-short-k{font-size:11.5px;color:var(--gray-2);letter-spacing:.02em;}
.promo-short-v{margin-top:3px;font-size:16px;font-weight:700;line-height:1.4;color:var(--ink);
  word-break:break-all;font-variant-numeric:tabular-nums;}
.promo-short-none{font-size:12.5px;font-weight:400;color:var(--gray);line-height:1.6;}
.promo-short-ops{margin-top:8px;display:flex;align-items:center;gap:10px;}
.promo-short-len{font-size:11.5px;color:var(--gray-2);}

.promo-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:4px;}
.promo-head h3{margin:0;}

.promo-code-row{margin-top:6px;display:flex;align-items:center;gap:6px;}
.promo-code-k{flex:0 0 auto;font-size:11px;color:var(--gray-2);}
.promo-code-inp{width:104px;height:26px;padding:0 8px;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace;
  letter-spacing:.04em;border-radius:6px;background:#fff;}
.promo-code-inp::placeholder{letter-spacing:0;font-family:inherit;color:var(--gray-2);}
.promo-code-hint{font-size:10.5px;color:var(--ochre);white-space:nowrap;}
@media (max-width:560px){
  .promo-short-v{font-size:15px;}
  .promo-code-inp{width:92px;}
  .promo-head{align-items:flex-start;}
  .promo-head h3{font-size:14px;}
}

/* 说明里的行内代码：不然 xsxhw.cn/qdh 这种会被当成正文、折行折得看不懂 */
.promo-tips code{padding:1px 5px;border-radius:4px;background:#EDEFEC;color:var(--ink);
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;white-space:nowrap;}
/* 手机上说明占太多高度，把二维码挤到很下面 —— 只留最关键的两条 */
@media (max-width:560px){
  .promo-tips ol li:nth-child(n+3){display:none;}
}

/* ============ 分享入口：详情页「分享」+ 对外分享页 #/share ============
   短链本来就是发出去用的，入口必须在「看得见活动」的地方，而不是锁在商家后台。
   后台那个页面还兼着改短码，领队没有口令，所以另开一个只读页。 */
.dt-head-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;}
.dt-head-top .crumb{margin-bottom:0;}
.dt-share{flex:none;border:1px solid var(--line);background:var(--white);color:var(--gray);
  font-size:12.5px;padding:5px 13px;border-radius:var(--r-pill);transition:.15s;line-height:1.5;}
.dt-share::before{content:'↗';margin-right:4px;}
.dt-share:hover{border-color:var(--brand-line);color:var(--brand);}

.sh-wrap{max-width:720px;}
/* 顶部一键复制：把「复制全部」做成整页最显眼的一颗按钮，
   旁边小字说清复制出来长什么样，免得点完还要猜格式。 */
.sh-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin:0 0 16px;padding:12px 14px;background:var(--moss-soft);
  border:1px solid var(--line);border-radius:var(--radius);}
.sh-top .btn{flex:0 0 auto;}
.sh-top-hint{font-size:12.5px;color:var(--gray-2);line-height:1.5;}
.sh-hidden-note{margin:8px 0 0;font-size:12.5px;line-height:1.7;color:var(--ochre);background:rgba(176,137,88,.08);border:1px solid rgba(176,137,88,.22);border-radius:8px;padding:7px 12px;}
.sh-hidden-note b{font-weight:700;}
.sh-list{display:flex;flex-direction:column;gap:12px;}
.sh-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;box-shadow:var(--sh-1);}
.sh-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.sh-h b{font-size:15.5px;color:var(--ink);line-height:1.4;}
.sh-state{font-size:11.5px;color:var(--moss);background:var(--moss-soft);
  padding:2px 8px;border-radius:var(--r-pill);white-space:nowrap;}
.sh-meta{font-size:12.5px;color:var(--gray-2);margin-top:5px;}
/* 链接本身用等宽 + 可整段选中：复制失败时用户还能长按手动取 */
.sh-link{margin-top:10px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:14px;
  font-weight:600;color:var(--brand);word-break:break-all;background:var(--canvas);
  border-radius:var(--r-md);padding:10px 12px;user-select:all;-webkit-user-select:all;}
.sh-ops{display:flex;gap:8px;margin-top:12px;}
.sh-ops .btn{flex:1;}
.sh-foot-hint{margin-top:20px;}
@media (max-width:560px){
  .sh-card{padding:14px;}
  .sh-link{font-size:13px;}
}

/* ---------- 电脑端扫码登录 ----------
   二维码是唯一视觉焦点，其它元素一律让路：不要边框堆叠、不要彩色区块，
   底下那行状态字用弱色 —— 扫码失败时人先看二维码，再看提示。 */
.wxqr{display:flex;flex-direction:column;align-items:center;padding:10px 0 4px;}
.wxqr-tip{font-size:13px;color:var(--gray);margin-bottom:14px;letter-spacing:.2px;}
.wxqr-img{width:190px;height:190px;display:flex;align-items:center;justify-content:center;
  background:var(--panel);border-radius:var(--r-md);}
.wxqr-img img,.wxqr-img canvas{display:block;border-radius:var(--r-sm);}
.wxqr-ph{font-size:12.5px;color:var(--gray-2);text-align:center;line-height:1.9;padding:0 12px;}
.wxqr-ph a{color:var(--moss);text-decoration:underline;}
.wxqr-st{margin-top:14px;font-size:12.5px;color:var(--gray);min-height:18px;text-align:center;}
.wxqr-st.warn{color:var(--ochre);}
.wxqr-st.err{color:var(--danger);}
.wxqr-done{display:flex;flex-direction:column;align-items:center;padding:14px 4px 6px;text-align:center;}
.wxqr-done-ic{width:46px;height:46px;border-radius:50%;background:var(--moss-soft,#E8EFE9);
  color:var(--moss);font-size:24px;line-height:46px;font-weight:700;margin-bottom:12px;}
.wxqr-done-t{font-size:16px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.wxqr-done-s{font-size:13px;color:var(--gray);line-height:1.8;max-width:260px;}

/* ---------- 后台 · 账号体检 ----------
   这一页只服务「把撕开的账号并回去」这一个动作，所以视觉按「先看结论（那排数字），
   再看待办（重复组），最后看边角（孤儿数据）」的顺序排，不堆装饰。
   数字卡用平铺而不是大卡片：五个指标要一眼扫完，不能让人滑两屏。 */
.acc-stats{display:flex;flex-wrap:wrap;gap:10px;}
.acc-stat{flex:1 1 96px;min-width:96px;background:var(--canvas);border-radius:var(--r-md);
  padding:12px 14px;text-align:center;}
.acc-stat b{display:block;font-size:21px;line-height:1.25;font-weight:700;color:var(--brand);
  font-variant-numeric:tabular-nums;}
.acc-stat span{display:block;margin-top:3px;font-size:11.5px;color:var(--gray-2);letter-spacing:.2px;}
.acc-h{margin:24px 0 8px;font-size:14px;font-weight:700;color:var(--ink);
  padding-left:9px;border-left:3px solid var(--moss);line-height:1.3;}
.acc-group{border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;margin-bottom:12px;
  background:var(--panel);}
.acc-gtitle{font-size:12px;color:var(--gray-2);margin-bottom:9px;letter-spacing:.2px;}
.acc-row{display:flex;align-items:center;gap:10px;padding:9px 2px;border-bottom:1px dashed var(--line);
  font-size:13px;cursor:pointer;}
.acc-row:last-of-type{border-bottom:0;}
.acc-row input[type=radio]{flex:0 0 auto;margin:0;accent-color:var(--moss);}
.acc-nick{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:600;color:var(--ink);}
.acc-uid{flex:0 0 auto;font-size:11.5px;color:var(--gray-2);
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}
.acc-n{flex:0 0 auto;font-size:11.5px;color:var(--moss);white-space:nowrap;}
.acc-group .btn.sm{margin-top:10px;}
.acc-tbl{font-size:12.5px;}
.acc-tbl td{vertical-align:middle;}
.acc-tbl .acc-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:11.5px;color:var(--gray-2);white-space:nowrap;}
.acc-sel{display:inline-block;width:auto;min-width:158px;margin-right:8px;padding:6px 9px;font-size:12px;}
@media (max-width:600px){
  .acc-stat{flex:1 1 30%;min-width:0;padding:10px 8px;}
  .acc-stat b{font-size:18px;}
  .acc-tbl thead{display:none;}
  .acc-tbl tr{display:block;padding:10px 0;border-bottom:1px solid var(--line);}
  .acc-tbl td{display:inline-block;border:0;padding:2px 8px 2px 0;}
  .acc-sel{min-width:130px;}
}

/* 账号体检 · 批量归并条
   一行放「并到哪个账号 + 执行」，压在表格顶上；不要做成表格里的列 ——
   每行都塞一个下拉，几十行下来整页变成一排重复的控件，什么都看不清。 */
.acc-batch{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin:10px 0 12px;
  padding:12px 14px;background:var(--canvas);border-radius:var(--r-md);}
.acc-batch-l{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--gray-2);}
.acc-batch .btn.sm{flex:0 0 auto;}
.acc-tbl input[type=checkbox]{width:15px;height:15px;accent-color:var(--moss);cursor:pointer;}
@media (max-width:600px){
  .acc-batch{flex-direction:column;align-items:stretch;}
  .acc-batch-l{width:100%;}
  .acc-batch .acc-sel{width:100%;min-width:0;margin-right:0;}
  .acc-batch .btn.sm{width:100%;}
}

/* 账号体检 · 本机残留区
   和上面那几块（改云端）分开写：这里清的是**当前这台设备**，换台电脑还有一份。
   用虚线分隔、不做成红色告警条 —— 它不动任何业务数据，只是把本地副本里的证件擦掉。 */
.acc-local{margin-top:22px;padding-top:18px;border-top:1px dashed var(--line);}
.acc-local h4{margin:0 0 7px;font-size:13.5px;font-weight:700;color:var(--brand);letter-spacing:.2px;}
/* 限宽：后台是满宽面板，说明文字拉到 700px 以上一行 60 多个字，眼睛回扫很累 */
.acc-local .hint{margin:0 0 11px;line-height:1.75;max-width:620px;}

/* 领队资料 · 后台独立模块
   用卡片不用表格：这里的对象是「人」，头像和简介要一眼看见；
   表格适合几十行数据，摆在四位领队面前只会显得空。 */
.ld-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:14px;margin-bottom:18px;}
.ld-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:14px 15px;box-shadow:var(--sh-1);display:flex;flex-direction:column;min-width:0;}
.ld-top{display:flex;align-items:center;gap:14px;min-width:0;}
.ld-id{display:flex;flex-direction:column;gap:5px;min-width:0;}
.ld-id b{font-size:15px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ld-id .badge{align-self:flex-start;}
.ld-bio{font-size:12.5px;line-height:1.65;color:var(--gray);margin:12px 0 14px;min-height:40px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.ld-foot{margin-top:auto;padding-top:11px;border-top:1px dashed var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;}
.ld-ref{font-size:11.5px;color:var(--gray-2);}
.ld-ops{display:flex;gap:8px;flex-wrap:wrap;}

/* 活动编辑器里的快捷新建：一行三个控件，别再铺开一整块资料表单 */
.leader-quick{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:9px;
  padding:9px 10px;background:var(--canvas);border:1px dashed var(--line);border-radius:var(--r-md);}
.leader-quick .input{flex:1;min-width:150px;max-width:260px;}
.leader-quick .btn{flex:0 0 auto;}
@media (max-width:600px){
  .ld-grid{grid-template-columns:1fr;}
  .leader-quick .input{max-width:none;flex:1 1 100%;}
}

/* 领队资料：关联微信账号（从登录账号里点选，不再手填 openid） */
.ld-bind{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:var(--canvas);}
.ld-bound,.ld-unbound{display:flex;flex-direction:column;gap:4px;min-width:0;}
.ld-bound b{font-size:13px;color:var(--moss);}
.ld-unbound b{font-size:13px;color:var(--ink);}
.ld-bind small{font-size:11.5px;line-height:1.6;color:var(--gray);}
.ld-bind-ops{display:flex;gap:8px;flex-wrap:wrap;}
.ld-bind-ops .btn{white-space:nowrap;}
.ld-pick{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:10px;}
.ld-pick-head{display:flex;gap:8px;align-items:center;margin-bottom:10px;}
.ld-pick-head .input{flex:1;min-width:0;}
.ld-pick-head .btn{flex:0 0 auto;}
.ld-pick-list{max-height:230px;overflow:auto;display:flex;flex-direction:column;gap:6px;}
.ld-pick-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:7px;}
.ld-pick-who{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.ld-pick-who b{font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ld-pick-who small{font-size:11px;color:var(--gray);}
.ld-pick-who .ld-pick-uid{color:var(--gray-2);font-size:10.5px;}
.ld-pick-row .btn{flex:0 0 auto;white-space:nowrap;}
.ld-pick .hint{margin:10px 0 0;line-height:1.7;font-size:11.5px;}
.ld-pick-gate{padding:2px 0;}
@media (max-width:600px){
  .ld-bind-ops .btn{flex:1 1 auto;}
}
