/* ============================================================
   Club Med 运营管理平台 · 交互原型
   设计依据：Ant Design v6 Design Token + Club Med 官方品牌色
   品牌：navy #1E2A4A / blue #2E5DA8 / gold #FFCC00 / cream #F5F0E8
   ============================================================ */
:root{
  /* ---- 品牌 ---- */
  --navy:#1E2A4A;
  --navy-soft:#26345C;
  --blue:#2E5DA8;
  --blue-hover:#3B6FC0;
  --blue-active:#244A87;
  --blue-bg:#EAF0F9;
  --blue-border:#A9C1E0;
  --gold:#FFCC00;
  --cream:#F5F0E8;

  /* ---- 中性 / 文字 ---- */
  --text:rgba(0,0,0,.88);
  --text-2:rgba(0,0,0,.65);
  --text-3:rgba(0,0,0,.45);
  --text-4:rgba(0,0,0,.25);
  --border:#D9D9D9;
  --border-2:#F0F0F0;
  --split:rgba(5,5,5,.06);
  --bg-container:#FFFFFF;
  --bg-layout:#F5F5F5;
  --bg-hover:rgba(0,0,0,.04);
  --bg-fill-2:rgba(0,0,0,.06);
  --bg-fill-3:rgba(0,0,0,.04);
  --bg-fill-4:rgba(0,0,0,.02);

  /* ---- 语义色 ---- */
  --success:#52C41A; --success-bg:#F6FFED; --success-border:#B7EB8F;
  --warning:#FAAD14; --warning-bg:#FFFBE6; --warning-border:#FFE58F;
  --error:#FF4D4F;   --error-bg:#FFF2F0;   --error-border:#FFCCC7;
  --info:#2E5DA8;    --info-bg:#EAF0F9;    --info-border:#A9C1E0;

  /* ---- 圆角 / 阴影 / 动效 ---- */
  --r-xs:2px; --r-sm:4px; --r:6px; --r-lg:8px;
  --shadow-1:0 6px 16px 0 rgba(0,0,0,.08),0 3px 6px -4px rgba(0,0,0,.12),0 9px 28px 8px rgba(0,0,0,.05);
  --shadow-3:0 1px 2px 0 rgba(0,0,0,.03),0 1px 6px -1px rgba(0,0,0,.02),0 2px 4px 0 rgba(0,0,0,.02);
  --ease:cubic-bezier(.645,.045,.355,1);
  --dur-fast:.1s; --dur-mid:.2s; --dur-slow:.3s;

  /* ---- 深色导航 ---- */
  --sider-text:rgba(255,255,255,.72);
  --sider-text-on:#FFFFFF;
  --sider-text-dim:rgba(255,255,255,.26);
  --sider-hover:rgba(46,93,168,.22);
  --sider-active:rgba(46,93,168,.42);
  --sider-line:rgba(255,255,255,.08);

  --sider-w:208px;
  --sider-w-collapsed:48px;
  --topbar-h:48px;
  --tabbar-h:40px;
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,
    'Noto Sans','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;
  font-size:14px; line-height:1.5714; color:var(--text);
  background:var(--bg-layout);
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:rgba(0,0,0,.18);border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.3)}
::-webkit-scrollbar-track{background:transparent}
.sider::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18)}
.sider::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}

.ico{width:16px;height:16px;flex:0 0 auto;display:block}
.ico-14{width:14px;height:14px}
.ico-16{width:16px;height:16px}
.ico-18{width:18px;height:18px}
.ico-20{width:20px;height:20px}
.ico-24{width:24px;height:24px}

/* ================= 外壳 ================= */
.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}

/* ---- 顶栏 48px ---- */
.topbar{
  height:var(--topbar-h);flex:0 0 var(--topbar-h);
  background:var(--navy);color:#fff;
  display:flex;align-items:center;gap:12px;padding:0 16px 0 0;
  position:relative;z-index:60;
}
.topbar__logo{
  width:var(--sider-w);flex:0 0 var(--sider-w);
  display:flex;align-items:center;gap:10px;padding-left:16px;
  transition:width var(--dur-mid) var(--ease),flex-basis var(--dur-mid) var(--ease);
}
.app.is-collapsed .topbar__logo{width:var(--sider-w-collapsed);flex-basis:var(--sider-w-collapsed);padding-left:0;justify-content:center;gap:0}
.app.is-collapsed .brandmark,.app.is-collapsed .brandname{display:none}
.brandmark{
  width:26px;height:26px;flex:0 0 auto;border-radius:var(--r-sm);
  background:var(--blue);display:grid;place-items:center;position:relative;
}
.brandmark::after{
  content:'';width:6px;height:6px;background:var(--gold);
  transform:rotate(45deg);position:absolute;right:3px;bottom:3px;border-radius:1px;
}
.brandmark svg{width:14px;height:14px;color:#fff}
.brandname{font-size:15px;font-weight:600;letter-spacing:.2px;white-space:nowrap}

.iconbtn{
  width:32px;height:32px;border:0;background:transparent;border-radius:var(--r-sm);
  display:grid;place-items:center;color:rgba(255,255,255,.75);cursor:pointer;
  transition:background var(--dur-fast),color var(--dur-fast);
}
.iconbtn:hover{background:rgba(255,255,255,.12);color:#fff}
.iconbtn:active{background:rgba(255,255,255,.2)}

.topbar__spacer{flex:1}
.topbar__search{
  display:flex;align-items:center;gap:8px;height:30px;padding:0 12px;
  background:rgba(255,255,255,.1);border-radius:15px;color:rgba(255,255,255,.6);
  width:220px;cursor:pointer;transition:background var(--dur-fast);
}
.topbar__search:hover{background:rgba(255,255,255,.16)}
.topbar__search span{font-size:13px;white-space:nowrap}
.topbar__badge{position:relative}
.dot{
  position:absolute;top:4px;right:4px;min-width:14px;height:14px;padding:0 4px;
  background:var(--error);color:#fff;border-radius:7px;font-size:10px;
  line-height:14px;text-align:center;font-weight:600;
}
.topbar__user{display:flex;align-items:center;gap:8px;padding:0 8px;cursor:pointer;border-radius:var(--r-sm);height:32px}
.topbar__user:hover{background:rgba(255,255,255,.12)}
.avatar{
  width:26px;height:26px;border-radius:50%;background:var(--blue);color:#fff;
  display:grid;place-items:center;font-size:12px;font-weight:600;flex:0 0 auto;
}
.topbar__divider{width:1px;height:20px;background:rgba(255,255,255,.16);flex:0 0 1px}
.tag-proto{
  font-size:11px;padding:1px 7px;border-radius:10px;
  background:rgba(255,204,0,.16);color:var(--gold);border:1px solid rgba(255,204,0,.35);
  line-height:16px;white-space:nowrap;
}

/* ================= 主体 ================= */
.app-body{flex:1;display:flex;min-height:0}

/* ---- 侧边栏 ---- */
.sider{
  width:var(--sider-w);flex:0 0 var(--sider-w);background:var(--navy);
  overflow-y:auto;overflow-x:hidden;
  transition:width var(--dur-mid) var(--ease),flex-basis var(--dur-mid) var(--ease);
  position:relative;z-index:50;
}
.app.is-collapsed .sider{width:var(--sider-w-collapsed);flex-basis:var(--sider-w-collapsed)}
.sider__inner{padding:8px 0 24px}

.menu-single{
  display:flex;align-items:center;gap:10px;height:40px;margin:0 8px;padding:0 12px;
  border-radius:var(--r-sm);color:var(--sider-text);cursor:pointer;text-decoration:none;
  position:relative;transition:background var(--dur-fast),color var(--dur-fast);
  font-size:14px;white-space:nowrap;
}
.menu-single:hover{background:var(--sider-hover);color:var(--sider-text-on)}
.menu-single.is-active{background:var(--sider-active);color:var(--sider-text-on);font-weight:500}
.menu-single.is-active::before{
  content:'';position:absolute;left:-8px;top:8px;bottom:8px;width:3px;
  background:var(--blue-hover);border-radius:0 3px 3px 0;
}
.app.is-collapsed .menu-single{justify-content:center;padding:0;margin:0 4px;gap:0}
.app.is-collapsed .menu-label{display:none}

.menu-groups{margin-top:4px}
/* 侧栏一级 = 业务模块（31 个）：条目多，用间距而非分隔线区分，避免碎 */
.mg{border-top:0}
.mg + .mg{margin-top:2px}
.mg__head{
  display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;margin:0 8px;
  border-radius:var(--r-sm);color:var(--sider-text);cursor:pointer;
  transition:background var(--dur-fast),color var(--dur-fast);white-space:nowrap;
}
.mg__head:hover{background:var(--sider-hover);color:var(--sider-text-on)}
.mg__label{flex:1;font-size:14px;overflow:hidden;text-overflow:ellipsis}
.mg__live{width:6px;height:6px;border-radius:50%;background:var(--gold);flex:0 0 auto;
  box-shadow:0 0 0 3px rgba(255,204,0,.16)}
.mg__chev{transition:transform var(--dur-mid) var(--ease);color:rgba(255,255,255,.4)}
.mg.is-open>.mg__head>.mg__chev{transform:rotate(180deg)}
.app.is-collapsed .mg__head{justify-content:center;padding:0;margin:0 4px}
.app.is-collapsed .mg__label,.app.is-collapsed .mg__chev,.app.is-collapsed .mg__live{display:none}
.mg.is-current>.mg__head{color:var(--sider-text-on)}

.mg__body{overflow:hidden;max-height:0;transition:max-height var(--dur-slow) var(--ease)}
.mg.is-open>.mg__body{max-height:600px}
.app.is-collapsed .mg__body{display:none}

.ms__head{
  display:flex;align-items:center;gap:8px;height:40px;padding:0 12px 0 40px;
  color:var(--sider-text);cursor:pointer;font-size:13px;
  transition:background var(--dur-fast),color var(--dur-fast);white-space:nowrap;
}
.ms__head:hover{background:var(--sider-hover);color:var(--sider-text-on)}
.ms__label{flex:1;overflow:hidden;text-overflow:ellipsis}
.ms__count{
  font-size:11px;color:rgba(255,255,255,.45);background:rgba(255,255,255,.08);
  padding:0 5px;border-radius:8px;line-height:16px;
}
.ms__chev{transition:transform var(--dur-mid) var(--ease);color:rgba(255,255,255,.32)}
.ms.is-open>.ms__head>.ms__chev{transform:rotate(180deg)}
.ms.is-current>.ms__head{color:var(--sider-text-on)}
.ms__body{overflow:hidden;max-height:0;transition:max-height var(--dur-slow) var(--ease)}
.ms.is-open>.ms__body{max-height:1500px}

.mi{
  display:flex;align-items:center;gap:8px;height:36px;padding:0 12px 0 46px;
  color:var(--sider-text);font-size:13px;cursor:pointer;text-decoration:none;
  position:relative;transition:background var(--dur-fast),color var(--dur-fast);
  white-space:nowrap;
}
.mi__label{flex:1;overflow:hidden;text-overflow:ellipsis}
.mi:hover{background:var(--sider-hover);color:var(--sider-text-on)}
.mi.is-active{background:var(--sider-active);color:var(--sider-text-on);font-weight:500}
.mi.is-active::before{
  content:'';position:absolute;left:0;top:7px;bottom:7px;width:3px;
  background:var(--gold);border-radius:0 3px 3px 0;
}
.mi.is-locked{color:var(--sider-text-dim);cursor:not-allowed}
.mi.is-locked:hover{background:transparent;color:var(--sider-text-dim)}
.mi__lock{opacity:.65}
.mi__star{color:var(--gold);flex:0 0 auto}

/* ---- 折叠态飞出层 ---- */
.flyout{
  position:fixed;z-index:200;min-width:220px;max-width:320px;
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-1);
  padding:8px 0;display:none;border:1px solid var(--border-2);
  max-height:80vh;overflow-y:auto;
}
.flyout.is-open{display:block;animation:fadeUp var(--dur-mid) var(--ease)}
@keyframes fadeUp{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
.flyout__title{font-size:13px;font-weight:600;color:var(--text);padding:8px 16px 4px}
.flyout__item{
  display:block;padding:7px 16px;font-size:13px;color:var(--text-2);
  cursor:pointer;text-decoration:none;transition:background var(--dur-fast),color var(--dur-fast);
}
.flyout__item:hover{background:var(--blue-bg);color:var(--blue)}
.flyout__item.is-locked{color:var(--text-4);cursor:not-allowed}
.flyout__item.is-locked:hover{background:transparent;color:var(--text-4)}
.flyout__sep{height:1px;background:var(--split);margin:6px 0}

/* ---- 主区 ---- */
.main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}

.tabbar{
  height:var(--tabbar-h);flex:0 0 var(--tabbar-h);background:#fff;
  border-bottom:1px solid var(--border-2);display:flex;align-items:flex-end;
  gap:4px;padding:0 12px;overflow-x:auto;overflow-y:hidden;
}
.tabbar::-webkit-scrollbar{height:0}
.tab{
  display:flex;align-items:center;gap:6px;height:32px;padding:0 12px;
  font-size:13px;color:var(--text-2);background:#fff;border:1px solid var(--border-2);
  border-bottom:0;border-radius:var(--r) var(--r) 0 0;cursor:pointer;
  margin-bottom:-1px;white-space:nowrap;transition:color var(--dur-fast),background var(--dur-fast);
}
.tab:hover{color:var(--blue)}
.tab.is-active{color:var(--blue);box-shadow:inset 0 2px 0 var(--blue);font-weight:500}
.tab__dot{width:6px;height:6px;border-radius:50%;background:var(--border);flex:0 0 auto}
.tab.is-active .tab__dot{background:var(--blue)}
.tab__close{
  width:16px;height:16px;border:0;background:transparent;border-radius:var(--r-xs);
  display:grid;place-items:center;color:var(--text-3);cursor:pointer;padding:0;
}
.tab__close:hover{background:var(--bg-fill-2);color:var(--text)}
.tab__close svg{width:11px;height:11px}

.content{flex:1;overflow-y:auto;background:var(--bg-layout);padding:24px}
.page{max-width:1360px;margin:0 auto;animation:pageIn var(--dur-slow) var(--ease)}
.page--wide{max-width:1780px}
@keyframes pageIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ================= 通用组件 ================= */
.crumb{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-3);margin-bottom:8px;flex-wrap:wrap}
.crumb a{color:var(--text-3);text-decoration:none;transition:color var(--dur-fast)}
.crumb a:hover{color:var(--blue)}
.crumb__cur{color:var(--text-2)}
.crumb__sep{color:var(--text-4)}

.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:16px}
.page-title{font-size:24px;line-height:32px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px}
.page-sub{font-size:13px;color:var(--text-3);margin:6px 0 0;max-width:880px}
.page-actions{display:flex;gap:8px;flex:0 0 auto;padding-top:26px}

.btn{
  height:32px;padding:0 15px;border-radius:var(--r);border:1px solid var(--border);
  background:#fff;color:var(--text);font-size:14px;cursor:pointer;text-decoration:none;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  transition:all var(--dur-fast);white-space:nowrap;
}
.btn:hover{border-color:var(--blue);color:var(--blue)}
.btn:active{border-color:var(--blue-active);color:var(--blue-active)}
.btn--primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn--primary:hover{background:var(--blue-hover);border-color:var(--blue-hover);color:#fff}
.btn--primary:active{background:var(--blue-active);border-color:var(--blue-active)}
.btn--ghost{border-color:transparent;background:transparent;color:var(--text-2)}
.btn--ghost:hover{background:var(--bg-hover);color:var(--text);border-color:transparent}
.btn:disabled{background:var(--bg-fill-3);border-color:var(--border);color:var(--text-4);cursor:not-allowed}
.btn:disabled:hover{border-color:var(--border);color:var(--text-4)}

.card{
  background:var(--bg-container);border-radius:var(--r-lg);
  box-shadow:var(--shadow-3);padding:24px;
}
.card+.card{margin-top:16px}
.card--flush{padding:0;overflow:hidden}
.card__head{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:16px 24px;border-bottom:1px solid var(--border-2);
}
.card__title{font-size:16px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px}

.pill{
  font-size:12px;line-height:20px;padding:0 7px;border-radius:var(--r-sm);
  border:1px solid transparent;white-space:nowrap;font-weight:400;display:inline-block;
}
.pill--gold{background:rgba(255,204,0,.16);color:#8A6A00;border-color:rgba(255,204,0,.5)}
.pill--blue{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-border)}
.pill--default{background:#FAFAFA;color:var(--text-2);border-color:var(--border)}

.tag-status{font-size:12px;line-height:20px;padding:0 7px;border-radius:var(--r-sm);border:1px solid transparent;display:inline-block}
.tag-status--waiting{background:var(--warning-bg);color:#AD6800;border-color:var(--warning-border)}
.tag-status--processing{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-border)}
.tag-status--done{background:var(--success-bg);color:var(--success);border-color:var(--success-border)}
.tag-status--error{background:var(--error-bg);color:var(--error);border-color:var(--error-border)}

.alert{
  display:flex;gap:10px;padding:12px 16px;border-radius:var(--r-lg);
  font-size:14px;border:1px solid transparent;margin-top:16px;
}
.alert--info{background:var(--info-bg);border-color:var(--info-border);color:#1D3F75}
.alert--warning{background:var(--warning-bg);border-color:var(--warning-border);color:#8A5A00}
.alert svg{flex:0 0 auto;margin-top:2px}
.alert__body strong{display:block;margin-bottom:2px}
.alert__body{line-height:1.7}

/* ================= 表格 ================= */
.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}
.tbl th{
  background:#FAFAFA;text-align:left;font-weight:600;color:var(--text-2);
  font-size:13px;padding:12px 16px;border-bottom:1px solid var(--border-2);white-space:nowrap;
}
.tbl td{padding:14px 16px;border-bottom:1px solid var(--border-2);color:var(--text)}
.tbl tbody tr{transition:background var(--dur-fast)}
.tbl tbody tr:hover{background:#FAFAFA}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl .num{font-variant-numeric:tabular-nums}
.tbl .link{color:var(--blue);cursor:pointer;text-decoration:none}
.tbl .link:hover{color:var(--blue-hover)}
.tbl .muted{color:var(--text-3)}

.sk{
  background:var(--bg-fill-2);border-radius:var(--r-sm);height:14px;display:inline-block;
  background-image:linear-gradient(90deg,var(--bg-fill-2) 0%,var(--bg-fill-3) 50%,var(--bg-fill-2) 100%);
  background-size:200% 100%;animation:sk 1.4s ease infinite;
}
@keyframes sk{0%{background-position:200% 0}100%{background-position:-200% 0}}

.empty{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:56px 24px;color:var(--text-3);gap:12px;text-align:center;
}
.empty__icon{
  width:64px;height:64px;border-radius:50%;background:var(--bg-fill-3);
  display:grid;place-items:center;color:var(--text-4);
}
.empty__title{font-size:14px;color:var(--text-2)}
.empty__desc{font-size:13px;color:var(--text-3);max-width:420px}

.seg{display:inline-flex;background:var(--bg-fill-3);border-radius:var(--r);padding:2px;gap:2px}
.seg__btn{
  border:0;background:transparent;height:26px;padding:0 14px;border-radius:var(--r-sm);
  font-size:13px;color:var(--text-2);cursor:pointer;transition:all var(--dur-fast);white-space:nowrap;
}
.seg__btn:hover{color:var(--blue)}
.seg__btn.is-active{background:#fff;color:var(--text);font-weight:500;box-shadow:var(--shadow-3)}
.seg__btn small{color:var(--text-3);margin-left:3px}

.tabs{display:flex;gap:32px;border-bottom:1px solid var(--border-2);margin:-24px -24px 24px;padding:0 24px}
.tabitem{
  border:0;background:transparent;padding:14px 0;font-size:14px;color:var(--text-2);
  cursor:pointer;position:relative;transition:color var(--dur-fast);
}
.tabitem:hover{color:var(--blue)}
.tabitem.is-active{color:var(--blue);font-weight:500}
.tabitem.is-active::after{
  content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--blue);
}

/* ================= 工作台 ================= */
.hero{
  background:var(--navy);border-radius:var(--r-lg);padding:24px;
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  position:relative;overflow:hidden;color:#fff;
}
.hero::after{
  content:'';position:absolute;right:-40px;top:-60px;width:220px;height:220px;
  border-radius:50%;background:rgba(46,93,168,.35);
}
.hero::before{
  content:'';position:absolute;right:96px;bottom:-70px;width:150px;height:150px;
  border-radius:50%;background:rgba(255,204,0,.10);
}
.hero__main{position:relative;z-index:1}
.hero__hi{font-size:20px;font-weight:600;margin:0 0 6px;letter-spacing:.2px}
.hero__meta{font-size:13px;color:rgba(255,255,255,.72);margin:0}
.hero__meta b{color:var(--gold);font-weight:600}
.hero__side{position:relative;z-index:1;display:flex;align-items:center;gap:12px;white-space:nowrap;flex:0 0 auto}

.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:16px}
.kpi{
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);padding:20px 24px;
  transition:transform var(--dur-mid) var(--ease),box-shadow var(--dur-mid) var(--ease);
}
.kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow-1)}
.kpi__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.kpi__label{font-size:13px;color:var(--text-3)}
.kpi__icon{width:32px;height:32px;border-radius:var(--r);display:grid;place-items:center;background:var(--blue-bg);color:var(--blue)}
.kpi__icon.is-gold{background:rgba(255,204,0,.18);color:#8A6A00}
.kpi__icon.is-green{background:var(--success-bg);color:var(--success)}
.kpi__icon.is-red{background:var(--error-bg);color:var(--error)}
.kpi__num{font-size:28px;line-height:36px;font-weight:600;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.kpi__num small{font-size:14px;font-weight:400;color:var(--text-3);margin-left:4px}
.kpi__foot{font-size:12px;color:var(--text-3);margin-top:8px}
.up{color:#CF1322;font-weight:500}

.sect-title{font-size:16px;font-weight:600;margin:24px 0 12px;display:flex;align-items:center;gap:8px}
.sect-title span.muted{font-size:13px;font-weight:400;color:var(--text-3);font-weight:400}

.domains{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.dcard{
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);padding:20px;
  cursor:pointer;border:1px solid transparent;
  transition:all var(--dur-mid) var(--ease);
}
.dcard:hover{border-color:var(--blue-border);transform:translateY(-2px);box-shadow:var(--shadow-1)}
.dcard__top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.dcard__icon{
  width:36px;height:36px;border-radius:var(--r);background:var(--navy);color:#fff;
  display:grid;place-items:center;flex:0 0 auto;
}
.dcard__name{font-size:15px;font-weight:600}
.dcard__stat{font-size:12px;color:var(--text-3);margin-bottom:10px}
.dcard__list{display:flex;flex-wrap:wrap;gap:6px}
.chip{
  font-size:12px;line-height:20px;padding:0 7px;border-radius:var(--r-sm);
  background:var(--bg-fill-3);color:var(--text-2);border:1px solid var(--border-2);
}
.chip.is-live{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-border)}

.live-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.lcard{
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);
  padding:20px;border-left:3px solid var(--blue);
  transition:transform var(--dur-mid) var(--ease),box-shadow var(--dur-mid) var(--ease);
}
.lcard:hover{transform:translateY(-2px);box-shadow:var(--shadow-1)}
.lcard__top{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.lcard__top .pill{margin-left:auto;flex:0 0 auto}
.lcard__icon{width:32px;height:32px;border-radius:var(--r);background:var(--blue-bg);color:var(--blue);display:grid;place-items:center;flex:0 0 auto}
.lcard__name{font-size:15px;font-weight:600}
.lcard__path{font-size:12px;color:var(--text-3);margin:0 0 14px}
.lcard__desc{font-size:13px;color:var(--text-2);margin:0 0 16px;min-height:42px;line-height:1.6}

/* ================= 占位框架页 ================= */
.filter-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.field{display:flex;flex-direction:column;gap:6px}
.field__label{font-size:13px;color:var(--text-2)}
.ctl{
  height:32px;border:1px solid var(--border);border-radius:var(--r);background:#fff;
  display:flex;align-items:center;gap:8px;padding:0 11px;color:var(--text-4);font-size:14px;
  cursor:not-allowed;user-select:none;
}
.ctl.is-disabled{background:var(--bg-fill-3);border-color:var(--border);color:var(--text-4)}
.ctl__ph{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.slots{display:flex;flex-direction:column;gap:16px}
.slot{
  border:1px dashed var(--border);border-radius:var(--r-lg);padding:16px;
  background:#FCFCFC;transition:border-color var(--dur-mid),background var(--dur-mid);
}
.slot.is-focus{border-color:var(--blue-border);background:var(--blue-bg)}
.slot__head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.slot__no{
  width:22px;height:22px;border-radius:var(--r-sm);background:var(--navy);color:#fff;
  font-size:12px;display:grid;place-items:center;font-weight:600;flex:0 0 auto;
}
.slot.is-focus .slot__no{background:var(--blue)}
.slot__title{font-size:14px;font-weight:600}
.slot__desc{font-size:12px;color:var(--text-3);flex:1;min-width:220px;line-height:1.6}

.mini-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;
  border:1px solid var(--border-2);border-radius:var(--r);overflow:hidden;background:#fff}
.mini-tbl th{background:#FAFAFA;padding:10px 12px;text-align:left;font-weight:600;color:var(--text-3);
  border-bottom:1px solid var(--border-2);white-space:nowrap}
.mini-tbl td{padding:12px;border-bottom:1px solid var(--border-2);color:var(--text-3)}
.mini-tbl tr:last-child td{border-bottom:0}
.mini-tbl td .sk{display:block}

.formgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px 24px}
.fitem{display:flex;flex-direction:column;gap:6px}
.fitem__lbl{font-size:13px;color:var(--text-2)}
.fitem__lbl i{color:var(--error);font-style:normal;margin-right:2px}
.fitem__ctl{
  height:32px;border:1px solid var(--border);border-radius:var(--r);background:var(--bg-fill-4);
  display:flex;align-items:center;padding:0 11px;color:var(--text-4);font-size:13px;
}
.fitem--wide{grid-column:1 / -1}
.fitem--wide .fitem__ctl{height:88px;align-items:flex-start;padding-top:9px;justify-content:center}

.preview-wrap{display:flex;gap:24px;align-items:flex-start}
.phone{
  width:240px;flex:0 0 auto;border:6px solid var(--navy);border-radius:24px;
  background:#fff;padding:6px;position:relative;box-shadow:var(--shadow-3);
}
.phone__bar{
  position:absolute;left:50%;transform:translateX(-50%);top:8px;width:60px;height:5px;
  border-radius:3px;background:rgba(255,255,255,.45);
}
.phone__screen{
  border-radius:14px;background:var(--bg-layout);height:430px;overflow:hidden;
  display:flex;flex-direction:column;padding:14px 8px 8px;gap:8px;
}
.ph-head{height:14px;width:60%;border-radius:4px;background:var(--bg-fill-2);margin:0 auto}
.ph-block{border-radius:8px;background:#fff;border:1px dashed var(--border);display:grid;place-items:center;
  color:var(--text-4);font-size:11px;text-align:center;padding:4px}
.preview-notes{flex:1;min-width:240px}
.note-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:10px}
.note-list li{display:flex;gap:8px;font-size:13px;color:var(--text-2);line-height:1.6}
.note-list li b{color:var(--text);font-weight:600}
.note-dot{width:6px;height:6px;border-radius:50%;background:var(--blue);flex:0 0 auto;margin-top:7px}

/* ================= 功能域总览 ================= */
.mod-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.mod-card{background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);padding:20px}
.mod-card__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.mod-card__name{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}
.mod-card__name::before{content:'';width:3px;height:14px;border-radius:2px;background:var(--blue)}
.fn-list{display:flex;flex-direction:column;gap:2px}
.fn{
  display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:var(--r-sm);
  font-size:13px;color:var(--text-2);transition:background var(--dur-fast);text-decoration:none;
}
.fn:hover{background:var(--bg-fill-4)}
.fn.is-live{color:var(--blue);cursor:pointer;font-weight:500}
.fn.is-live:hover{background:var(--blue-bg)}
.fn__dot{width:6px;height:6px;border-radius:50%;background:var(--border);flex:0 0 auto}
.fn.is-live .fn__dot{background:var(--blue)}
.fn__note{margin-left:auto;font-size:11px;color:var(--text-4)}

/* ================= 浮层 ================= */
.msg-wrap{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:1200;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.msg{
  display:flex;align-items:center;gap:8px;background:#fff;border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);padding:9px 16px;font-size:14px;color:var(--text);
  animation:msgIn var(--dur-mid) var(--ease);max-width:520px;
}
.msg.is-out{animation:msgOut var(--dur-mid) var(--ease) forwards}
@keyframes msgIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
@keyframes msgOut{to{opacity:0;transform:translateY(-12px)}}
.msg--info svg{color:var(--blue)}
.msg--success svg{color:var(--success)}
.msg--warning svg{color:var(--warning)}

.mask{
  position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1000;
  display:none;align-items:center;justify-content:center;
}
.mask.is-open{display:flex;animation:fadeIn var(--dur-mid) var(--ease)}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{
  width:520px;max-width:calc(100vw - 32px);background:#fff;border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);padding:24px;animation:zoomIn var(--dur-mid) var(--ease);
  max-height:calc(100vh - 64px);overflow-y:auto;
}
@keyframes zoomIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
.modal__title{font-size:16px;font-weight:600;margin:0 0 12px;display:flex;align-items:center;gap:8px}
.modal__body{font-size:14px;color:var(--text-2);line-height:1.75}
.modal__body p{margin:0 0 10px}
.modal__body strong{color:var(--text)}
.modal__body ul{margin:8px 0 0;padding-left:20px}
.modal__body li{margin-bottom:6px}
.modal__foot{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}

.drawer-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1000;display:none}
.drawer-mask.is-open{display:block;animation:fadeIn var(--dur-mid) var(--ease)}
.drawer{
  position:absolute;right:0;top:0;bottom:0;width:408px;background:#fff;
  box-shadow:var(--shadow-1);display:flex;flex-direction:column;
  animation:slideIn var(--dur-slow) var(--ease);
}
@keyframes slideIn{from{transform:translateX(100%)}to{transform:none}}
.drawer__head{display:flex;align-items:center;justify-content:space-between;
  padding:16px 24px;border-bottom:1px solid var(--border-2)}
.drawer__title{font-size:16px;font-weight:600}
.drawer__body{padding:24px;overflow-y:auto;flex:1}
.drawer__foot{padding:16px 24px;border-top:1px solid var(--border-2);display:flex;justify-content:flex-end;gap:8px}

.tip{
  position:fixed;z-index:1300;background:rgba(0,0,0,.85);color:#fff;font-size:12px;
  line-height:18px;padding:4px 8px;border-radius:var(--r);max-width:280px;
  display:none;pointer-events:none;white-space:nowrap;
}
.tip.is-open{display:block;animation:fadeIn var(--dur-fast) var(--ease)}

/* ================= 营销活动配置（实装） ================= */
/* ---- 状态标签 ---- */
.tag{font-size:12px;line-height:20px;padding:0 7px;border-radius:var(--r-sm);border:1px solid transparent;
  display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.tag--draft{background:#FAFAFA;color:var(--text-2);border-color:var(--border)}
.tag--audited{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-border)}
.tag--live{background:var(--success-bg);color:#389E0D;border-color:var(--success-border)}
.tag--offline{background:var(--bg-fill-2);color:var(--text-3);border-color:var(--border)}
.tag--builtin{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-border)}
.tag--custom{background:rgba(255,204,0,.16);color:#8A6A00;border-color:rgba(255,204,0,.5)}
/* 「来自内容素材」来源标注（内容组由「从内容素材选择」导入时显示，可回溯） */
.tag--src{background:var(--bg-fill-3);color:var(--text-3);border-color:var(--border)}
.tag__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}

/* ---- 搭建器工具条 ---- */
.camp-bar{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);
  padding:12px 16px;margin-bottom:12px;position:sticky;top:0;z-index:30;
}
.camp-bar__title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}
.camp-bar__spacer{flex:1}
.camp-bar__seg{display:inline-flex;background:var(--bg-fill-3);border-radius:var(--r);padding:2px;gap:2px}

/* ---- 面板容器（搭建器四栏共用） ---- */
.camp-col{background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-3);overflow:hidden;
  display:flex;flex-direction:column}
.camp-col__head{
  display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;
  padding:12px 14px;border-bottom:1px solid var(--border-2);font-size:13px;font-weight:600;
}
.camp-col__body{padding:12px;max-height:calc(100vh - 250px);overflow-y:auto;flex:1;
  display:flex;flex-direction:column}
/* ---- 属性面板 ---- */
.pp__group{margin-bottom:14px}
.pp__glabel{font-size:12px;font-weight:600;color:var(--text-2);margin-bottom:8px;
  display:flex;align-items:center;gap:6px}
.pp__glabel::before{content:'';width:3px;height:11px;border-radius:2px;background:var(--blue)}
.pp__row{margin-bottom:10px}
.pp__lbl{font-size:12px;color:var(--text-2);margin-bottom:5px;display:block}
.pp__lbl i{color:var(--error);font-style:normal;margin-right:2px}
.inp{
  width:100%;height:30px;border:1px solid var(--border);border-radius:var(--r);
  padding:0 9px;font-size:13px;font-family:inherit;color:var(--text);background:#fff;outline:none;
  transition:border-color var(--dur-fast);
}
.inp:hover{border-color:var(--blue-hover)}
.inp:focus{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-bg)}
.inp:disabled{background:var(--bg-fill-3);color:var(--text-3);cursor:not-allowed}
.inp::placeholder{color:var(--text-4)}
select.inp{cursor:pointer;appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-opacity='.45' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 6px center;background-size:14px;padding-right:24px}
/* 多行输入（公告列表 / 富文本内容）：.inp 的固定高度对 textarea 不适用 */
textarea.inp{height:auto;min-height:66px;padding:7px 9px;line-height:1.7;resize:vertical}
.seg-sm{display:flex;gap:6px;flex-wrap:wrap}
.seg-sm__b{border:1px solid var(--border);background:#fff;height:28px;padding:0 10px;border-radius:var(--r);
  font-size:12px;color:var(--text-2);cursor:pointer;transition:all var(--dur-fast)}
.seg-sm__b:hover{border-color:var(--blue);color:var(--blue)}
.seg-sm__b.is-on{background:var(--blue-bg);border-color:var(--blue);color:var(--blue);font-weight:500}
.chk{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--text-2);cursor:pointer;
  padding:5px 0}
.chk input{accent-color:var(--blue);width:15px;height:15px;cursor:pointer}
.pp__hint{font-size:11px;color:var(--text-3);line-height:1.6;margin-top:4px}

/* ---- 内容素材属性表单（宽表单：两列栅格 + 分组标题） ---- */
.sform{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 24px}
.sform+.sform{margin-top:0}
.sform__wide{grid-column:1 / -1}
.sform .inp{height:32px}
.sform__sec{font-size:13px;font-weight:600;color:var(--text);
  display:flex;align-items:center;gap:7px;
  margin:0 0 16px;padding-bottom:8px;border-bottom:1px solid var(--border-2)}
.sform__sec .ico-14{color:var(--blue)}
.sform__sec+.sform{margin-bottom:24px}
.sform__note{font-size:11px;font-weight:400;color:var(--text-3);margin-left:2px}

/* ---- 内容素材「内容设计」：内容项卡片 + 添加项 ---- */
.gcard{border:1px solid var(--border);border-radius:var(--r);background:var(--bg-fill-4)}
.gcard+.gcard{margin-top:12px}
.gcard__head{display:flex;align-items:center;gap:8px;padding:9px 12px;flex-wrap:wrap;row-gap:6px;
  border-bottom:1px solid var(--border-2);background:#fff;border-radius:var(--r) var(--r) 0 0}
.gcard__no{font-size:12px;font-weight:600;color:var(--text);flex:0 0 auto;white-space:nowrap}
.gcard__spacer{flex:1}
/* 商品组件：卡头在「第 N 项」后带一枚价格模式标记（固定价格 / 动态价格），扫一眼就能分辨 */
.gcard__tag{flex:0 0 auto;font-size:10.5px;line-height:1.6;padding:0 7px;border-radius:9px;
  background:var(--blue-bg);color:var(--blue);white-space:nowrap}
/* 商品价格：固定价格 = ¥ + 价格输入框；动态价格 = 度假村下拉 + 入住日期区间（两个日期框并排）+ 入住人数 */
.gp-price{display:flex;align-items:center;gap:7px;margin-top:8px}
.gp-price__unit{font-size:13px;font-weight:600;color:var(--text-2);flex:0 0 auto}
.gp-price__suffix{font-size:11.5px;color:var(--text-3);flex:0 0 auto}
.gp-price .inp{flex:1;min-width:0}
.gp-dyn{margin-top:8px}
.gp-range{display:flex;align-items:center;gap:7px;margin-top:8px}
.gp-range>label{flex:0 0 auto;font-size:12px;color:var(--text-2)}
.gp-range>span{flex:0 0 auto;color:var(--text-4)}
.gp-range .inp{flex:1;min-width:0}
/* 入住人数（第二十三轮）：与入住日期同形 —— 行内 label + 两枚窄数字框（成人 / 儿童） */
.gp-guests{display:flex;align-items:center;gap:7px;margin-top:8px}
.gp-guests>label{flex:0 0 auto;font-size:12px;color:var(--text-2)}
.gp-guests__n{display:flex;align-items:center;gap:5px;flex:0 0 auto;font-size:12px;color:var(--text-3)}
.gp-guests__n .inp{width:56px;flex:0 0 auto;min-width:0;text-align:center}
/* 「内容来自内容素材 …」：由「从内容素材选择」导入的项，头部下方一条全宽说明（含来源编号与第几项） */
.gcard__src{display:flex;align-items:center;gap:6px;padding:7px 12px;background:var(--bg-fill-3);
  border-bottom:1px solid var(--border-2);font-size:11.5px;color:var(--text-3);line-height:1.5}
.gcard__src svg{color:var(--text-4);flex:0 0 auto}
.gcard__src b{color:var(--text-2);font-weight:600;margin:0 1px}
.gcard>.sform{padding:14px 14px 4px}
.gcard .pp__row{margin-bottom:10px}
/* 头部只剩「第 N 项 + 删除项」：删除项始终靠右收尾 */
.gcard__head .tblop{flex:0 0 auto;margin-left:auto}
/* 内容项排布：内容素材编辑页 #slotGroups（固定两列）与搭建器配置面板 #blkGroups（按宽度自适应）共用同一套项卡片 */
#slotGroups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}
#blkGroups{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:12px;align-items:start}
#slotGroups>.empty,#blkGroups>.empty{grid-column:1 / -1}
#slotGroups .gcard+.gcard,#blkGroups .gcard+.gcard{margin-top:0}
#slotGroups .gcard>.sform,#blkGroups .gcard>.sform{padding:12px 12px 2px;gap:12px 14px}
#slotGroups .pp__hint,#blkGroups .pp__hint{font-size:10.5px;line-height:1.5}
.gadd{width:100%;margin-top:12px;height:40px;border:1px dashed var(--border);border-radius:var(--r);
  background:var(--bg-fill-4);color:var(--text-2);font-size:13px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:6px;transition:all var(--dur-fast)}
.gadd:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-bg)}
.card .notice{margin-top:4px}
.media-thumb{
  display:flex;align-items:center;gap:8px;border:1px dashed var(--border);border-radius:var(--r);
  padding:8px;background:var(--bg-fill-4);font-size:12px;color:var(--text-3);
}
.media-thumb__box{width:36px;height:36px;border-radius:var(--r-sm);background:var(--bg-fill-2);
  display:grid;place-items:center;color:var(--text-4);flex:0 0 auto}

/* ============================================================
   可视化搭建器（组件库 / 手机画布 / 配置面板）
   ============================================================ */
/* 三栏：组件库 196 / 画布 344（手机 286 + 内边距）/ 配置面板吃掉剩余 —— 画布收窄、右侧变大 */
.bld{display:grid;grid-template-columns:196px 344px minmax(0,1fr);gap:10px}

/* ---- ① 组件库：图标网格 ---- */
.lib{padding:8px 6px}
.lib__group{margin-bottom:8px}
.lib__ghead{display:flex;align-items:center;gap:6px;padding:7px 8px;border-radius:var(--r);cursor:pointer;
  font-size:12px;font-weight:600;color:var(--text-2);user-select:none}
.lib__ghead:hover{background:var(--bg-fill-3)}
.lib__ghead .ico-14:last-child{margin-left:auto;color:var(--text-4);
  transition:transform var(--dur-mid) var(--ease)}
.lib__group.is-open .lib__ghead .ico-14:last-child{transform:rotate(180deg)}
.lib__grid{display:none;grid-template-columns:repeat(4,1fr);gap:1px;margin-top:4px}
.lib__group.is-open .lib__grid{display:grid}
.lib__cell{display:flex;flex-direction:column;align-items:center;gap:5px;padding:8px 0 7px;
  border:1px solid transparent;border-radius:var(--r);cursor:pointer;text-align:center;
  transition:background var(--dur-fast),border-color var(--dur-fast),transform var(--dur-fast)}
.lib__cell:hover{background:var(--blue-bg);border-color:var(--blue-border);transform:translateY(-1px)}
.lib__cell:active{transform:scale(.95)}
.lib__ico{width:38px;height:38px;border-radius:9px;background:var(--bg-fill-3);display:grid;
  place-items:center;color:var(--text-2);transition:all var(--dur-fast)}
.lib__cell:hover .lib__ico{background:#fff;color:var(--blue);box-shadow:var(--shadow-3)}
.lib__cell>span{font-size:10.5px;color:var(--text-2);line-height:1.3;white-space:nowrap}
.lib__cell.is-disabled{opacity:.42;cursor:not-allowed}
.lib__cell.is-disabled:hover{background:transparent;border-color:transparent;transform:none}
.lib__cell.is-disabled:hover .lib__ico{background:var(--bg-fill-3);color:var(--text-2);box-shadow:none}

/* 画布栏 head：标题一行 + 操作一行（语言切换 / 页面设置 / 重置画布） */
.camp-col__head--canvas{flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px}
.cvhead__t{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600}
.cvhead__t .ico-14{color:var(--blue)}
.cvhead__ops{display:flex;align-items:center;gap:6px}
.cvhead__seg{display:flex;flex:0 0 auto;border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.cvhead__seg button{border:0;background:#fff;height:26px;padding:0 8px;font-size:12px;color:var(--text-2);
  font-family:inherit;cursor:pointer;transition:all var(--dur-fast)}
.cvhead__seg button+button{border-left:1px solid var(--border)}
.cvhead__seg button:hover{color:var(--blue)}
.cvhead__seg button.is-on{background:var(--blue-bg);color:var(--blue);font-weight:500}
.cvhead__btn{flex:1 1 auto;min-width:0;height:26px;padding:0 6px;border:1px solid var(--border);
  background:#fff;border-radius:var(--r);font-size:12px;color:var(--text-2);font-family:inherit;
  white-space:nowrap;cursor:pointer;transition:all var(--dur-fast)}
.cvhead__btn:hover{border-color:var(--blue);color:var(--blue)}
.cvhead__btn.is-on{background:var(--blue-bg);border-color:var(--blue-border);color:var(--blue);font-weight:500}
.cvhead__btn:disabled{opacity:.5;cursor:not-allowed}
.cvhead__btn:disabled:hover{border-color:var(--border);color:var(--text-2)}

/* ---- ③ 手机预览画布 ---- */
.pvc{background:var(--bg-layout);border-radius:var(--r);padding:18px 14px;min-height:560px;flex:1;
  display:flex;justify-content:center;align-items:flex-start}
.phone2{width:286px;flex:0 0 auto;background:#101418;border-radius:30px;padding:7px;order:1;
  box-shadow:0 12px 32px rgba(16,20,24,.22);position:relative}
.phone2__inner{background:#fff;border-radius:24px;overflow:hidden;display:flex;flex-direction:column;
  height:566px;position:relative}
.phone2__status{height:23px;display:flex;align-items:center;justify-content:space-between;padding:0 13px;
  font-size:9.5px;color:var(--text-2);font-weight:600;flex:0 0 auto;background:#fff;
  font-variant-numeric:tabular-nums}
.phone2__status i{display:inline-flex;align-items:center;gap:3px;font-style:normal;font-weight:400}
.phone2__navbar{height:36px;display:flex;align-items:center;justify-content:center;font-size:13px;
  font-weight:500;color:var(--text);background:#fff;border-bottom:1px solid var(--border-2);flex:0 0 auto;
  position:relative;padding:0 44px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.phone2__navbar em{position:absolute;right:11px;top:50%;transform:translateY(-50%);font-style:normal;
  font-size:9.5px;color:var(--text-4);background:var(--bg-fill-3);padding:2px 5px;border-radius:3px}
.phone2__scroll{flex:1;overflow-y:auto;background:var(--bg-layout);position:relative}
.phone2__scroll::-webkit-scrollbar{width:3px}
.phone2__scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.pnode{position:relative;cursor:pointer;transition:box-shadow var(--dur-fast)}
.pnode:hover{box-shadow:inset 0 0 0 1px var(--blue-border)}
.pnode.is-sel{box-shadow:inset 0 0 0 2px var(--blue);z-index:2}
.pnode__tag{position:absolute;left:0;top:0;transform:translateX(-100%);background:var(--blue);color:#fff;
  font-size:10px;line-height:1;padding:5px 7px;border-radius:4px 0 0 4px;white-space:nowrap;display:none;z-index:4}
.pnode.is-sel .pnode__tag,.pnode:hover .pnode__tag{display:block}
.pnode__ops{position:absolute;right:4px;top:4px;display:none;gap:1px;z-index:4;background:rgba(255,255,255,.97);
  border:1px solid var(--border);border-radius:5px;padding:2px;box-shadow:var(--shadow-3)}
.pnode:hover .pnode__ops{display:flex}
.pnode__op{border:0;background:transparent;width:22px;height:22px;border-radius:4px;display:grid;
  place-items:center;color:var(--text-2);cursor:pointer;line-height:0}
.pnode__op:hover{background:var(--bg-hover);color:var(--blue)}
.pnode__op--del:hover{background:var(--error-bg);color:var(--error)}
.pnode__op:disabled{opacity:.3;cursor:not-allowed}
.pnode__op:disabled:hover{background:transparent;color:var(--text-2)}
.pnode.is-dragging{opacity:.38}
.pnode.is-over{box-shadow:inset 0 0 0 2px #5B8DEE}
.pnode.is-hidden{opacity:.42}
.pnode.is-hidden::after{content:'已隐藏';position:absolute;right:6px;bottom:6px;font-size:9.5px;
  background:rgba(0,0,0,.6);color:#fff;padding:2px 6px;border-radius:3px;z-index:3}
.pvc__empty{margin:20px 14px;border:1px dashed var(--border);border-radius:var(--r);padding:32px 14px;
  text-align:center;color:var(--text-4);font-size:12px;background:rgba(255,255,255,.65);line-height:1.7}
.pvc__empty b{display:block;color:var(--text-2);font-size:13px;margin:9px 0 5px}
.pvc__empty em{font-style:normal;color:var(--blue);cursor:pointer}
/* 组件真实效果皮肤 */
.pv{background:#fff}
.pv-carousel{height:134px;position:relative;
  color:rgba(255,255,255,.92);font-size:11.5px;text-align:center;overflow:hidden}
/* 图片区 = 真正的「图片」层：渐变底画在这一层，「图片圆角」才看得见（圆角由内联样式写入）。
   若把渐变留在父级 .pv-carousel 上，圆角作用在透明层上 → 视觉恒等于零。 */
.pv-carousel__slide{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;
  justify-content:center;align-items:center;gap:4px;padding:0 18px;overflow:hidden;
  background:linear-gradient(135deg,#1E2A4A 0%,#2E5DA8 100%)}
.pv-carousel b{font-size:14px;font-weight:600;color:#fff}
.pv-carousel__dots{position:absolute;bottom:9px;left:0;right:0;display:flex;justify-content:center;gap:4px;z-index:2}
/* 指示器位置 */
.pv-carousel.is-left .pv-carousel__dots{justify-content:flex-start;padding-left:10px}
.pv-carousel.is-right .pv-carousel__dots{justify-content:flex-end;padding-right:10px}
/* 指示器样式：一 圆点+长条 / 二 小方角 / 三 短横线 / 四 圆环（色调自定义走 --dot-on/--dot-off） */
.pv-carousel__dots i{width:5px;height:5px;border-radius:50%;background:var(--dot-off,rgba(255,255,255,.5));display:block}
.pv-carousel__dots i.on{background:var(--dot-on,#fff);width:13px;border-radius:3px}
.pv-carousel.is-d2 .pv-carousel__dots i{width:7px;height:5px;border-radius:2px}
.pv-carousel.is-d2 .pv-carousel__dots i.on{width:7px;border-radius:2px}
.pv-carousel.is-d3 .pv-carousel__dots i{width:14px;height:3px;border-radius:2px}
.pv-carousel.is-d3 .pv-carousel__dots i.on{width:14px;border-radius:2px}
.pv-carousel.is-d4 .pv-carousel__dots i{width:7px;height:7px;background:transparent;
  border:1.5px solid var(--dot-off,rgba(255,255,255,.55))}
.pv-carousel.is-d4 .pv-carousel__dots i.on{width:7px;background:var(--dot-on,#fff);border-color:var(--dot-on,#fff)}
.pv-carousel.is-card{margin:8px 10px;border-radius:10px;height:120px}
.pv-carousel.is-full{margin:0;border-radius:0}
/* 商品组件（prodgroup · 第二十一轮）：皮肤与轮播**完全同一套**（全屏 / 卡片、指示器、图片圆角都复用），
   只把幻灯片里的内容换成「商品图标 + 商品名 + 价格」，故只加一个修饰类。 */
.pv-carousel--prod .pv-carousel__slide{justify-content:flex-end;align-items:flex-start;gap:5px;
  padding:0 16px 24px;text-align:left}
.pv-carousel__thumb{width:40px;height:40px;border-radius:8px;background:rgba(255,255,255,.16);
  display:grid;place-items:center;color:#fff;margin-bottom:2px}
.pv-carousel__price{font-style:normal;display:flex;align-items:baseline;gap:5px;max-width:100%;
  font-size:15px;font-weight:600;color:var(--gold)}
/* 动态价签 = 标签「动态价」+ 一长串细则（度假村 / 入住日期 / 入住人数）。
   ⚠️ 不能沿用上面那条 flex + nowrap：细则太长时会把标签挤成两行（「动态」「价」），
   细则自己又被省略号截掉 —— 改成上下两行、细则允许折行且不截断（第二十三轮发现）。 */
.pv-carousel__price.is-dyn{display:block;font-size:13px;color:#fff;line-height:1.4}
.pv-carousel__price.is-dyn small{display:block;margin-top:1px;white-space:normal;
  overflow:visible;text-overflow:clip;line-height:1.45}
/* 入住人数单独一行且不折行（「3 成人 · 2 儿童」被拆开很难看） */
.pv-carousel__price.is-dyn small.pv-carousel__guests{white-space:nowrap}
.pv-carousel__price small{font-size:10px;font-weight:400;color:rgba(255,255,255,.72);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-img{height:106px;background:var(--bg-fill-3);display:grid;place-items:center;color:var(--text-4);
  font-size:11px;border-bottom:1px dashed var(--border)}
.pv-title{padding:13px 14px;font-size:15px;font-weight:600;color:var(--text);text-align:center;line-height:1.45}
.pv-title.is-left{text-align:left}
.pv-title.is-deco::before{content:'';display:block;width:22px;height:3px;border-radius:2px;
  background:var(--gold);margin:0 auto 8px}
.pv-text{padding:11px 14px;font-size:12px;color:var(--text-2);line-height:1.8;
  display:flex;align-items:center;justify-content:space-between;gap:10px}
.pv-text__title{flex:1;min-width:0;word-break:break-word}
.pv-text__btn{flex:none;display:inline-flex;align-items:center;gap:2px;white-space:nowrap}
.pv-spacer{height:14px;background:var(--bg-fill-4)}
.pv-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px 4px;padding:14px 10px}
.pv-grid>div{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:10px;color:var(--text-2)}
.pv-grid i{width:36px;height:36px;border-radius:50%;background:var(--bg-fill-3);display:grid;
  place-items:center;color:var(--text-3)}
.pv-list{padding:9px 10px;display:flex;flex-direction:column;gap:8px}
.pv-list__r{display:flex;gap:9px;background:#fff;border:1px solid var(--border-2);border-radius:8px;padding:8px}
.pv-list__r>i{width:62px;height:56px;border-radius:6px;flex:0 0 auto;background:var(--bg-fill-3);
  display:grid;place-items:center;color:var(--text-4)}
.pv-list__r>div{flex:1;min-width:0}
.pv-list__r b{font-size:11.5px;font-weight:500;color:var(--text);line-height:1.45;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pv-list__r em{font-style:normal;color:var(--error);font-weight:600;font-size:13px}
.pv-list__r small{color:var(--text-4);text-decoration:line-through;font-size:10px;margin-left:3px}
.pv-list__r u{display:block;text-decoration:none;overflow:hidden;margin-top:5px}
.pv-list__r u span{background:var(--error);color:#fff;border-radius:9px;font-size:10px;padding:2px 9px;float:right}
.pv-list.is-two{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pv-list.is-two .pv-list__r{flex-direction:column}
.pv-list.is-two .pv-list__r>i{width:100%;height:74px}
.pv-video{height:128px;background:var(--navy);display:grid;place-items:center;align-content:center;gap:8px}
.pv-video span{font-size:10px;color:rgba(255,255,255,.62);max-width:88%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.pv-video i{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.93);display:grid;
  place-items:center;color:var(--navy)}
/* 热区图层 = 真正的「图片」层：渐变底画在这一层，「图片圆角」才看得见（圆角由内联样式写入）。
   overflow:hidden 让三个热区框跟着圆角一起被裁切。 */
.pv-hotspot{position:relative;height:124px;background:linear-gradient(150deg,#EDF1F7,#DCE4EF);
  display:grid;place-items:center;color:var(--text-3);font-size:11px;overflow:hidden}
.pv-hotspot u{position:absolute;border:1.5px dashed var(--blue);border-radius:4px;background:rgba(46,93,168,.12);
  text-decoration:none}
.pv-hotspot u::after{content:attr(data-n);position:absolute;left:-1px;top:-15px;font-size:9px;color:#fff;
  background:var(--blue);padding:1px 5px;border-radius:3px}

/* ---- 2026-10-09 第八轮新增组件的画布皮肤（导航组 / 图片魔方 / 公告栏 / 富文本 / 辅助线 / 悬浮按钮）----
   一律遵守图层规则：圆角 / 底色写在「自己画了东西」的那一层上，别挂在透明的父级。 */
/* 导航组：排列展示（单行 N 格）/ 宫格展示（多行宫格，格子带浅底）/ 列表展示（一行一项 + 箭头） */
.pv-nav{display:grid;gap:10px 4px;padding:13px 10px}
.pv-nav__i{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:11px;color:var(--text-2);
  text-align:center;min-width:0}
.pv-nav__i>i{width:38px;height:38px;background:var(--blue-bg);color:var(--blue);display:grid;place-items:center;
  overflow:hidden}
.pv-nav__i>span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-nav.is-grid .pv-nav__i{background:var(--bg-fill-4);border-radius:8px;padding:8px 4px}
.pv-nav.is-list{display:flex;flex-direction:column;gap:0;padding:6px 10px}
.pv-nav__r{display:flex;align-items:center;gap:9px;padding:9px 4px;border-bottom:1px solid var(--border-2);
  font-size:12.5px;color:var(--text)}
.pv-nav__r:last-child{border-bottom:0}
.pv-nav__r>i{width:30px;height:30px;flex:0 0 auto;background:var(--blue-bg);color:var(--blue);display:grid;
  place-items:center;overflow:hidden}
.pv-nav__r>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-nav__r>u{flex:0 0 auto;color:var(--text-4);display:inline-flex;text-decoration:none}
/* 图片魔方：布局由预设决定，「图片间距」= grid gap，「图片圆角」写在各格子自身（自带底色） */
.pv-cube{display:grid;gap:4px;padding:10px}
.pv-cube.is-one{grid-template-columns:1fr}
.pv-cube.is-two{grid-template-columns:repeat(2,1fr)}
.pv-cube.is-three{grid-template-columns:repeat(3,1fr)}
.pv-cube.is-four{grid-template-columns:repeat(4,1fr)}
.pv-cube.is-l1r2{grid-template-columns:1.4fr 1fr;grid-template-rows:1fr 1fr}
.pv-cube.is-l2r1{grid-template-columns:1fr 1.4fr;grid-template-rows:1fr 1fr}
.pv-cube__i{background:var(--bg-fill-3);color:var(--text-4);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:4px;font-size:10px;padding:4px;overflow:hidden;text-align:center}
.pv-cube__i>span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 公告栏：样式一 单行头条 / 样式二 标题行 + 带序号列表 */
.pv-notice{display:flex;align-items:center;gap:8px;padding:10px 10px;background:#fff;font-size:11.5px;
  color:var(--text-2);overflow:hidden}
.pv-notice__head{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px}
.pv-notice__head>b{background:var(--blue);color:#fff;border-radius:3px;font-size:10.5px;font-weight:500;
  padding:2px 6px;white-space:nowrap}
.pv-notice__logo{width:62px;height:18px;border-radius:3px;background:var(--bg-fill-3);color:var(--text-4);
  display:inline-flex;align-items:center;justify-content:center;overflow:hidden}
.pv-notice__roll{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-notice>u{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;text-decoration:none;color:var(--blue)}
.pv-notice.is-list{flex-direction:column;align-items:stretch;gap:0;padding:0}
.pv-notice.is-list .pv-notice__head{display:flex;justify-content:space-between;align-items:center;
  padding:9px 10px 7px;border-bottom:1px solid var(--border-2)}
.pv-notice.is-list .pv-notice__head>u{color:var(--text-3)}
.pv-notice__r{display:flex;align-items:center;gap:7px;padding:6px 10px;overflow:hidden}
.pv-notice__r>i{flex:0 0 auto;width:14px;height:14px;border-radius:2px;background:var(--bg-fill-3);
  color:var(--text-4);font-size:9px;font-style:normal;display:grid;place-items:center}
.pv-notice__r>i.on{background:var(--error);color:#fff}
.pv-notice__r>i.on2{background:#F59E0B;color:#fff}
.pv-notice__r>i.on3{background:#EAB308;color:#fff}
.pv-notice__r>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 富文本：内容由 content.html 清洗后渲染 */
.pv-rich{padding:11px 14px;font-size:12.5px;color:var(--text-2);line-height:1.85;word-break:break-word}
.pv-rich p{margin:0 0 8px}
.pv-rich p:last-child{margin-bottom:0}
.pv-rich ul,.pv-rich ol{margin:0 0 8px;padding-left:18px}
.pv-rich li{margin-bottom:3px}
.pv-rich strong,.pv-rich b{color:var(--text);font-weight:600}
.pv-rich h1,.pv-rich h2,.pv-rich h3,.pv-rich h4{font-size:14px;font-weight:600;color:var(--text);margin:0 0 7px}
.pv-rich blockquote{margin:0 0 8px;padding:2px 0 2px 9px;border-left:3px solid var(--border);color:var(--text-3)}
/* 辅助线：只画一条线，不留白（留白是「间距」组件的事） */
.pv-line{padding:0 10px}
.pv-line>i{display:block;border-bottom:1px solid var(--border)}
/* 悬浮按钮：图片 + 吸附侧对齐（原型里以「贴边的一行」示意悬浮位置） */
.pv-float{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:8px 10px;font-size:10.5px;
  color:var(--text-4)}
.pv-float.is-left{justify-content:flex-start}
.pv-float>b{width:40px;height:40px;border-radius:50%;background:var(--navy);color:#fff;display:grid;
  place-items:center;box-shadow:0 2px 8px rgba(30,42,74,.28)}
.pv-float>span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---- ④ 配置面板 ---- */
.cfg__head{padding:14px 14px 12px;border-bottom:1px solid var(--border-2)}
.cfg__name{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px}
.cfg__name button{border:0;background:transparent;color:var(--text-4);cursor:pointer;padding:2px;
  border-radius:3px;line-height:0}
.cfg__name button:hover{color:var(--blue);background:var(--blue-bg)}
.cfg__sub{font-size:11px;color:var(--text-3);margin-top:4px;line-height:1.6}
.cfg__tabs{display:grid;grid-template-columns:repeat(2,1fr);border-bottom:1px solid var(--border-2);
  position:sticky;top:0;background:#fff;z-index:3}
.cfg__tab{border:0;background:transparent;height:38px;font-size:13px;color:var(--text-3);cursor:pointer;
  position:relative;transition:color var(--dur-fast)}
.cfg__tab:hover{color:var(--blue)}
.cfg__tab.is-on{color:var(--blue);font-weight:500}
.cfg__tab.is-on::after{content:'';position:absolute;left:50%;transform:translateX(-50%);bottom:-1px;
  width:32px;height:2px;border-radius:2px;background:var(--blue)}
.cfg__body{padding:14px}
.cfg-sec{display:flex;align-items:center;gap:10px;margin:2px 0 12px;font-size:12px;font-weight:600;
  color:var(--text-2)}
.cfg-sec::before,.cfg-sec::after{content:'';flex:1;height:1px;background:var(--border-2)}
/* 标题行带右侧动作（如内容分项的「同步 / 从内容素材选择」）：去掉右侧分隔线，动作靠右 */
.cfg-sec--act::after{display:none}
.cfg-sec--act .cfg-sec__acts{margin-left:auto;display:flex;align-items:center;gap:8px}
.cfg-sec--act .cfg-sec__acts .cfg-sec__btn{margin-left:0}
.cfg-sec--act .cfg-sec__btn{margin-left:auto;height:24px;padding:0 10px;border:1px solid var(--border);
  border-radius:var(--r-sm);background:#fff;color:var(--text-2);font-size:12px;font-weight:500;cursor:pointer;
  display:inline-flex;align-items:center;gap:5px;transition:all var(--dur-fast)}
.cfg-sec--act .cfg-sec__btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-bg)}
.cfg-row{margin-bottom:13px}
.cfg-row:last-child{margin-bottom:4px}
.cfg-lbl{display:block;font-size:12px;color:var(--text-2);margin-bottom:6px;line-height:1.5}
.cfg-lbl i{color:var(--error);font-style:normal;margin-right:2px}
.cfg-lbl b{color:var(--text-4);font-weight:400;font-size:11px;margin-left:4px}
.cfg-hint{margin-top:6px;font-size:11px;color:var(--text-4);line-height:1.65}
.cfg-tip{font-size:11px;color:var(--text-3);line-height:1.68;margin-top:6px}
.cfg-tip b{color:var(--text-2)}
.cfg-presets{display:flex;gap:8px;flex-wrap:wrap}
.cfg-preset{width:78px;border:1px solid var(--border);border-radius:var(--r);padding:5px;background:#fff;
  cursor:pointer;text-align:center;transition:all var(--dur-fast)}
.cfg-preset:hover{border-color:var(--blue-border);background:var(--blue-bg)}
.cfg-preset.is-on{border-color:var(--blue);background:var(--blue-bg);box-shadow:0 0 0 1px var(--blue)}
.cfg-preset__box{height:34px;border-radius:4px;background:var(--bg-fill-3);display:flex;gap:2px;
  padding:3px;margin-bottom:4px;align-items:stretch}
.cfg-preset__box i{flex:1;border-radius:2px;background:var(--bg-fill-2);display:block}
.cfg-preset__box i.wide{flex:1 0 100%}
.cfg-preset__box.is-col{flex-direction:column;gap:2px}
.cfg-preset.is-on .cfg-preset__box{background:#fff}
.cfg-preset.is-on .cfg-preset__box i{background:var(--blue-border)}
.cfg-preset span{font-size:10.5px;color:var(--text-3);line-height:1.3;display:block}
.cfg-preset.is-on span{color:var(--blue);font-weight:500}
.cfg-sw{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.cfg-sw>span{font-size:12px;color:var(--text-2)}
.sw{position:relative;width:38px;height:20px;flex:0 0 auto;display:inline-block}
.sw input{position:absolute;opacity:0;width:0;height:0}
.sw i{position:absolute;inset:0;border-radius:12px;background:var(--bg-fill-2);
  transition:background var(--dur-fast)}
.sw i::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.22);transition:transform var(--dur-fast)}
.sw input:checked+i{background:var(--blue)}
.sw input:checked+i::after{transform:translateX(18px)}
.sw input:disabled+i{opacity:.45}
.cfg-radios{display:flex;gap:14px;flex-wrap:wrap}
.cfg-radio{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2);cursor:pointer}
.cfg-radio input{accent-color:var(--blue);width:14px;height:14px;cursor:pointer}
.cfg-radio input:disabled{cursor:not-allowed}
.cfg-media{display:flex;align-items:center;gap:9px;border:1px solid var(--border);border-radius:var(--r);
  padding:7px;background:var(--bg-fill-4)}
.cfg-media__box{width:46px;height:46px;border-radius:var(--r-sm);background:#fff;
  border:1px dashed var(--border);display:grid;place-items:center;color:var(--text-4);flex:0 0 auto}
.cfg-media__info{flex:1;min-width:0;font-size:11.5px;color:var(--text-2);line-height:1.5;word-break:break-all}
.cfg-media__info b{display:block;font-size:12px;color:var(--text);font-weight:500;margin-bottom:2px}
.cfg-plus{width:68px;height:68px;border:1px dashed var(--border);border-radius:var(--r);
  background:var(--bg-fill-4);display:grid;place-items:center;color:var(--text-4);cursor:pointer;
  transition:all var(--dur-fast)}
.cfg-plus:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-bg)}
.cfg-color{display:flex;align-items:center;gap:8px}
.cfg-color__sw{width:24px;height:24px;border-radius:5px;border:1px solid var(--border);flex:0 0 auto;
  cursor:pointer;padding:0;overflow:hidden}
.cfg-color__code{flex:1;min-width:0;height:28px;border:1px solid var(--border);border-radius:var(--r-sm);
  padding:0 8px;font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums}
.cfg-color__reset{border:0;background:transparent;color:var(--text-3);font-size:11.5px;cursor:pointer;
  padding:3px 5px;border-radius:3px;white-space:nowrap}
.cfg-color__reset:hover{color:var(--blue);background:var(--blue-bg)}
.cfg-slider{display:flex;align-items:center;gap:9px}
.cfg-slider input[type=range]{flex:1;min-width:0;accent-color:var(--blue);cursor:pointer}
.cfg-slider__num{flex:0 0 54px;height:28px;border:1px solid var(--border);border-radius:var(--r-sm);
  text-align:center;font-size:12px;color:var(--text-2)}
.cfg-slider__unit{font-size:11px;color:var(--text-3);flex:0 0 auto}
.cfg-palette{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.cfg-palette button{width:20px;height:20px;border-radius:5px;border:1px solid rgba(0,0,0,.1);cursor:pointer;
  padding:0;transition:transform var(--dur-fast)}
.cfg-palette button:hover{transform:scale(1.16)}
/* 样式设置：四向 / 四角展开控件（展开小按钮 + 子输入） */
.cfg-expand{flex:0 0 auto;width:28px;height:28px;border:1px solid var(--border);border-radius:var(--r-sm);
  background:#fff;color:var(--text-3);display:grid;place-items:center;cursor:pointer;padding:0;
  transition:all var(--dur-fast)}
.cfg-expand:hover{border-color:var(--blue);color:var(--blue)}
.cfg-expand.is-on{border-color:var(--blue);color:var(--blue);background:var(--blue-bg)}
.cfg-box4{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}
.cfg-box4__i{display:flex;align-items:center;gap:6px}
.cfg-box4__i>span{flex:0 0 auto;width:22px;font-size:11px;color:var(--text-3)}
.cfg-box4__i .inp{flex:1;min-width:0;height:28px;padding:0 8px;font-size:12px}
.cfg-empty{padding:46px 16px;text-align:center;color:var(--text-4)}
.cfg-empty__t{font-size:13px;color:var(--text-2);margin:10px 0 5px}
.cfg-empty__d{font-size:11.5px;line-height:1.72}
.cfg-readonly{border:1px dashed var(--border);border-radius:var(--r);padding:14px;background:var(--bg-fill-4);
  font-size:12px;color:var(--text-3);line-height:1.72;text-align:center}
.cfg-readonly b{color:var(--text-2)}
.cfg-readonly svg{color:var(--gold);margin-bottom:4px}
.cfg__bar{padding:11px 14px;border-top:1px solid var(--border-2);display:flex;gap:8px;background:#fff;
  position:sticky;bottom:0}

/* ---- 列表页小件 ---- */
.rowsum{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--text-3)}
.rowsum b{color:var(--text-2);font-weight:600}
.tbl__ops{display:flex;gap:2px;flex-wrap:wrap}
.tblop{border:0;background:transparent;color:var(--blue);font-size:13px;cursor:pointer;
  padding:2px 6px;border-radius:var(--r-sm);transition:background var(--dur-fast)}
.tblop:hover{background:var(--blue-bg)}
.tblop--danger{color:var(--error)}
.tblop--danger:hover{background:var(--error-bg)}
.tblop:disabled{color:var(--text-4);cursor:not-allowed}
.tblop:disabled:hover{background:transparent}
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 16px;font-size:13px;color:var(--text-3);flex-wrap:wrap}
.pager__pages{display:flex;gap:4px;align-items:center}
.pgbtn{min-width:28px;height:28px;border:1px solid var(--border);background:#fff;border-radius:var(--r-sm);
  font-size:13px;color:var(--text-2);cursor:pointer;transition:all var(--dur-fast)}
.pgbtn:hover{border-color:var(--blue);color:var(--blue)}
.pgbtn.is-on{background:var(--blue);border-color:var(--blue);color:#fff}
.notice{display:flex;gap:10px;padding:12px 14px;border-radius:var(--r);font-size:12px;line-height:1.7;
  background:var(--bg-fill-4);border:1px solid var(--border-2);color:var(--text-2)}
.notice svg{flex:0 0 auto;margin-top:2px;color:var(--blue)}
.notice b{color:var(--text)}
.kv{display:flex;gap:8px;font-size:12px;line-height:1.8}
.kv__k{color:var(--text-3);flex:0 0 84px}

/* ---- 列表页工具条（筛选 + 计数） ---- */
.listbar{display:flex;align-items:center;justify-content:space-between;gap:12px 16px;flex-wrap:wrap;
  padding:16px 24px 4px}
.listbar__filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ================= 素材库弹窗（图片素材选择器） ================= */
.modal--lib{width:1120px;max-width:calc(100vw - 40px);height:min(700px,calc(100vh - 72px));padding:0;
  overflow:hidden;display:flex;flex-direction:column}
.mlib{display:flex;flex-direction:column;min-height:0;height:100%}
.mlib__head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 18px;border-bottom:1px solid var(--border-2);flex:0 0 auto}
.mlib__title{font-size:15px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px;color:var(--text)}
.mlib__title svg{color:var(--blue)}
.mlib__scope{font-size:12px;font-weight:400;color:var(--text-3)}
.mlib__x{border:0;background:transparent;color:var(--text-4);cursor:pointer;padding:4px;
  border-radius:var(--r-sm);line-height:0}
.mlib__x:hover{background:var(--bg-hover);color:var(--text)}
.mlib__main{display:flex;flex:1;min-height:0}
.mlib__aside{width:214px;flex:0 0 214px;border-right:1px solid var(--border-2);overflow-y:auto;padding:8px 6px}
.mlib__node{display:flex;align-items:center;gap:6px;height:32px;padding-right:6px;border-radius:var(--r-sm);
  font-size:13px;color:var(--text-2);cursor:pointer;transition:background var(--dur-fast),color var(--dur-fast)}
.mlib__node:hover{background:var(--bg-hover);color:var(--text)}
.mlib__node.is-on{background:var(--blue-bg);color:var(--blue);font-weight:500}
.mlib__caret{width:14px;flex:0 0 14px;display:grid;place-items:center;color:var(--text-4);line-height:0;
  transition:transform var(--dur-fast)}
.mlib__caret:not(.is-open){transform:rotate(-90deg)}
.mlib__caret--blank{visibility:hidden}
.mlib__fico{line-height:0;display:grid;place-items:center;color:#E3A600}
.mlib__fname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mlib__more{font-size:13px;color:var(--text-4);opacity:0;padding:0 4px;border-radius:3px;line-height:1}
.mlib__node:hover .mlib__more,.mlib__node.is-on .mlib__more{opacity:1}
.mlib__more:hover{background:var(--bg-fill-3);color:var(--text-2)}
.mlib__right{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}
.mlib__bar{display:flex;align-items:center;gap:8px;padding:14px 16px 12px;flex:0 0 auto;flex-wrap:wrap}
.mlib__movesel{width:152px;flex:0 0 152px;height:32px}
.mlib__search{position:relative;margin-left:auto;width:220px;flex:0 0 220px}
.mlib__search .inp{height:32px;padding-right:34px}
.mlib__sbtn{position:absolute;right:1px;top:1px;width:30px;height:30px;border:0;background:transparent;
  color:var(--text-3);cursor:pointer;display:grid;place-items:center;border-radius:var(--r-sm);line-height:0}
.mlib__sbtn:hover{color:var(--blue);background:var(--bg-hover)}
.mlib__gridwrap{flex:1;min-height:0;overflow-y:auto;padding:2px 16px 10px}
.mlib__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:14px 10px}
.mlib__card{cursor:pointer;min-width:0}
.mlib__thumb{position:relative;height:112px;border-radius:var(--r);overflow:hidden;
  border:1px solid var(--border-2);background:var(--bg-fill-3);
  transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.mlib__card:hover .mlib__thumb{border-color:var(--blue)}
.mlib__card.is-on .mlib__thumb{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue)}
.mlib__ph{display:block;width:100%;height:100%}
.mlib__check{position:absolute;right:0;top:0;width:22px;height:22px;display:none;place-items:center;
  background:var(--blue);color:#fff;border-radius:0 var(--r) 0 12px;line-height:0}
.mlib__card.is-on .mlib__check{display:grid}
/* 视频素材的时长角标（图片不显示） */
.mlib__dur{position:absolute;right:5px;bottom:5px;font-size:11px;line-height:16px;padding:0 5px;
  border-radius:3px;background:rgba(0,0,0,.62);color:#fff;font-variant-numeric:tabular-nums}
.mlib__cname{margin-top:6px;font-size:11.5px;line-height:1.4;color:var(--text-2);text-align:center;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mlib__card.is-on .mlib__cname{color:var(--blue)}
.mlib__empty{grid-column:1/-1;padding:64px 0;text-align:center;font-size:13px;color:var(--text-4)}
.mlib__pager{display:flex;align-items:center;justify-content:center;gap:10px;flex:0 0 auto;
  padding:12px 16px;border-top:1px solid var(--border-2);font-size:13px;color:var(--text-3)}
.mlib__pages{display:flex;gap:4px;align-items:center}
.pgbtn--dots{border-color:transparent;cursor:default}
.pgbtn--dots:hover{border-color:transparent;color:var(--text-2)}
.mlib__selinfo{padding-left:12px;margin-left:2px;border-left:1px solid var(--border-2);color:var(--text-2)}
.mlib__selinfo b{color:var(--blue)}
@media (max-width:1240px){
  .mlib__aside{width:176px;flex-basis:176px}
  .mlib__search{width:170px;flex-basis:170px}
}

/* ================= 选择链接弹窗（按类型选对象） ================= */
.modal--link{width:1100px;max-width:calc(100vw - 40px);height:min(800px,calc(100vh - 60px));padding:0;
  overflow:hidden;display:flex;flex-direction:column}
.lkp{display:flex;flex-direction:column;min-height:0;height:100%}
.lkp__head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto;
  padding:16px 20px;border-bottom:1px solid var(--border-2);box-shadow:0 4px 8px -6px rgba(0,0,0,.14);
  position:relative;z-index:2}
.lkp__title{font-size:17px;font-weight:600;margin:0;color:var(--text)}
.lkp__x{border:0;background:transparent;color:var(--text-4);cursor:pointer;padding:4px;
  border-radius:var(--r-sm);line-height:0}
.lkp__x:hover{background:var(--bg-hover);color:var(--text)}
.lkp__bar{display:flex;align-items:center;gap:10px;padding:16px 20px 10px;flex:0 0 auto}
.lkp__sel{width:190px;flex:0 0 190px;height:36px;font-size:14px}
.lkp__search{position:relative;flex:1;min-width:0}
.lkp__search .inp{height:36px;font-size:14px;padding-right:50px}
.lkp__sbtn{position:absolute;right:1px;top:1px;width:42px;height:34px;border:0;background:var(--blue);color:#fff;
  cursor:pointer;display:grid;place-items:center;line-height:0;
  border-radius:0 calc(var(--r) - 1px) calc(var(--r) - 1px) 0}
.lkp__sbtn:hover{background:var(--blue-hover)}
.lkp__pagerrow{display:flex;justify-content:flex-end;padding:0 20px 10px;flex:0 0 auto}
/* 填表型链接（网页链接 / 本小程序 / 其他小程序）：检索 + 分页 + 列表整块换成输入框 */
.lkp__formwrap{flex:1;min-height:0;overflow:auto;padding:2px 20px 16px}
.lkp__form{max-width:600px}
.lkp__form .pp__row{margin-bottom:14px}
.lkp__pages{display:flex}
.lkp__pgbtn{min-width:32px;height:31px;padding:0 9px;border:1px solid #DEE2E6;border-left:0;background:#fff;
  font-size:13px;color:var(--blue);cursor:pointer;font-family:inherit;line-height:1;
  transition:background var(--dur-fast),color var(--dur-fast)}
.lkp__pgbtn:first-child{border-left:1px solid #DEE2E6;border-radius:var(--r-sm) 0 0 var(--r-sm)}
.lkp__pgbtn:hover{background:var(--blue-bg)}
.lkp__pgbtn.is-on{background:var(--blue);border-color:var(--blue);color:#fff}
.lkp__pgbtn:disabled{color:var(--text-4);cursor:not-allowed;background:#fff}
.lkp__pgbtn--dots{cursor:default;color:var(--text-3)}
.lkp__pgbtn--dots:hover{background:#fff}
.lkp__total{height:31px;line-height:29px;padding:0 12px;border:1px solid #DEE2E6;border-left:0;
  border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:13px;color:var(--text-3);white-space:nowrap}
.lkp__total b{color:var(--text);font-weight:600}
.lkp__tablewrap{flex:1;min-height:0;overflow:auto;margin:0 20px 16px;
  border:1px solid #DEE2E6;border-radius:var(--r-sm)}
.lkp__table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0}
.lkp__table th{height:50px;padding:0 12px 0 0;text-align:left;font-size:14px;font-weight:500;
  color:var(--text);background:#fff;border-bottom:2px solid #DEE2E6;
  position:sticky;top:0;z-index:1}
.lkp__table th:nth-child(2){padding-left:18px}
.lkp__table td{height:51px;padding:0 12px 0 0;border-bottom:1px solid #E5E6EB;
  font-size:13.5px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lkp__table tbody tr:last-child td{border-bottom:0}
.lkp__row{cursor:pointer;transition:background var(--dur-fast)}
.lkp__row:hover{background:var(--bg-fill-4)}
.lkp__row.is-on,.lkp__row.is-on:hover{background:var(--blue-bg)}
.lkp__rd{width:46px;padding:0 !important;text-align:center}
.lkp__radio{display:inline-block;width:15px;height:15px;border:1px solid #8C8C8C;border-radius:50%;
  background:#fff;vertical-align:middle;transition:all var(--dur-fast)}
.lkp__row:hover .lkp__radio{border-color:var(--blue)}
.lkp__row.is-on .lkp__radio{border-color:var(--blue);background:var(--blue)}
.lkp__td--name{padding-left:18px;color:var(--text)}
.lkp__empty{text-align:center;color:var(--text-4);font-size:13px;height:180px}
.lkp__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;flex:0 0 auto;
  padding:14px 20px;border-top:1px solid var(--border-2)}
@media (max-width:1240px){
  .lkp__sel{width:160px;flex-basis:160px}
}

/* ================= 从内容素材选择弹窗（内容型组件导入内容素材的组内容） ================= */
.modal--rec{width:720px;max-width:calc(100vw - 40px);height:min(640px,calc(100vh - 72px));padding:0;
  overflow:hidden;display:flex;flex-direction:column}
.rec{display:flex;flex-direction:column;min-height:0;height:100%}
.rec__head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 18px;border-bottom:1px solid var(--border-2);flex:0 0 auto}
.rec__title{font-size:15px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px;color:var(--text)}
.rec__title svg{color:var(--blue)}
.rec__scope{font-size:12px;font-weight:400;color:var(--text-3)}
.rec__x{border:0;background:transparent;color:var(--text-4);cursor:pointer;padding:4px;
  border-radius:var(--r-sm);line-height:0}
.rec__x:hover{background:var(--bg-hover);color:var(--text)}
.rec__notice{display:flex;gap:8px;margin:14px 18px 0;padding:10px 12px;border-radius:var(--r);
  background:var(--blue-bg);color:var(--text-2);font-size:12px;line-height:1.7;flex:0 0 auto}
.rec__notice svg{color:var(--blue);flex:0 0 auto;margin-top:2px}
.rec__list{flex:1;min-height:0;overflow-y:auto;padding:12px 18px}
.rec__row{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border);
  border-radius:var(--r);background:#fff;cursor:pointer;transition:all var(--dur-fast)}
.rec__row+.rec__row{margin-top:10px}
.rec__row:hover{border-color:var(--blue-border);background:var(--blue-bg)}
.rec__row.is-on{border-color:var(--blue);background:var(--blue-bg)}
.rec__radio{width:16px;height:16px;flex:0 0 16px;margin-top:2px;border:1px solid #8C8C8C;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:#fff;color:#fff;line-height:0}
.rec__row.is-on .rec__radio{border-color:var(--blue);background:var(--blue)}
.rec__info{min-width:0;flex:1}
.rec__name{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--text)}
.rec__meta{font-size:12px;color:var(--text-3);margin-top:5px}
.rec__prev{font-size:12px;color:var(--text-4);margin-top:4px;line-height:1.6;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 已选内容素材的内容项清单：导入前把「这次要导入哪几项」逐条列出来 */
.rec__pick{flex:0 0 auto;max-height:198px;overflow-y:auto;padding:12px 18px;
  border-top:1px solid var(--border-2);background:var(--blue-bg)}
.rec__pick-h{font-size:12px;color:var(--text-2);line-height:1.8;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.rec__pick-h svg{color:var(--blue);flex:0 0 auto}
.rec__pick-h b{color:var(--text);font-weight:600}
.rec__pick-list{list-style:none;margin:9px 0 0;padding:0}
.rec__pick-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--border);
  border-radius:var(--r-sm);background:#fff;font-size:12px;color:var(--text-2)}
.rec__pick-item+.rec__pick-item{margin-top:6px}
.rec__pick-no{width:16px;height:16px;flex:0 0 16px;border-radius:50%;background:var(--blue);color:#fff;
  font-size:10.5px;font-weight:600;display:flex;align-items:center;justify-content:center;line-height:1}
.rec__pick-t{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  flex:0 1 auto;min-width:0}
.rec__pick-lk{margin-left:auto;color:var(--text-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  flex:0 1 auto;min-width:0;max-width:44%}
.rec__foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex:0 0 auto;
  padding:14px 18px;border-top:1px solid var(--border-2)}
.rec__hint{margin-right:auto;font-size:12px;color:var(--text-3)}

/* ================= 列表「预览」弹窗（营销活动配置 / 自由式页面配置） =================
   弹窗只有一个手机视图（复用 .phone2 真机外壳，与搭建器画布同宽同高，所见即所得），
   因此宽度按手机 + 内边距收紧，不做多余的空白留白。
   手机是固定高 566px 的「真机」，超高时在手机内滚动 —— 与画布行为一致，不做第二套。 */
.modal--pv{width:432px;max-width:calc(100vw - 40px);height:min(820px,calc(100vh - 48px));padding:0;
  overflow:hidden;display:flex;flex-direction:column}
.pv2{display:flex;flex-direction:column;min-height:0;height:100%}
.pv2__head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 18px;border-bottom:1px solid var(--border-2);flex:0 0 auto}
.pv2__title{font-size:15px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px;
  color:var(--text);min-width:0}
.pv2__title svg{color:var(--blue);flex:0 0 auto}
.pv2__title>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv2__tags{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.pv2__x{border:0;background:transparent;color:var(--text-4);cursor:pointer;padding:4px;
  border-radius:var(--r-sm);line-height:0}
.pv2__x:hover{background:var(--bg-hover);color:var(--text)}
/* ================= 生成 scheme URL 弹窗（列表「已发布」行的行操作） ================= */
.modal--scheme{width:660px;max-width:calc(100vw - 40px);padding:0;
  overflow:hidden;display:flex;flex-direction:column}
.scheme{display:flex;flex-direction:column;min-height:0}
.scheme__head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 20px;border-bottom:1px solid var(--border-2);flex:0 0 auto}
.scheme__title{font-size:15px;font-weight:600;margin:0;display:inline-flex;align-items:center;gap:8px;color:var(--text)}
.scheme__title svg{color:var(--blue)}
.scheme__meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 20px;
  background:var(--bg-layout);border-bottom:1px solid var(--border-2);flex:0 0 auto;
  font-size:12px;color:var(--text-3)}
.scheme__meta i{font-style:normal;color:var(--text-4)}
.scheme__meta .scheme__name{color:var(--text);font-weight:500}
.scheme__body{padding:16px 20px;display:flex;flex-direction:column;gap:10px;min-height:0;overflow:auto}
.scheme__tip{display:flex;align-items:flex-start;gap:6px;font-size:12px;color:var(--text-3);
  background:var(--blue-bg);border:1px solid var(--blue-border);border-radius:var(--r);padding:9px 11px;line-height:1.55}
.scheme__tip svg{color:var(--blue);flex:0 0 auto;margin-top:1px}
.scheme__row{display:flex;align-items:center;gap:10px}
.scheme__term{flex:0 0 52px;font-size:12px;color:var(--text-2);text-align:right}
.scheme__url{flex:1 1 auto;min-width:0;font-family:ui-monospace,Menlo,Consolas,monospace;
  font-size:12px;color:var(--text-2);background:var(--bg-fill-3)}
.scheme__copy{flex:0 0 auto;min-width:72px}
.scheme__copy.is-done{background:var(--blue-bg);border-color:var(--blue-border);color:var(--blue)}
.scheme__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 20px;border-top:1px solid var(--border-2);flex:0 0 auto;background:var(--bg-layout)}
.scheme__hint{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-4)}
.scheme__hint svg{flex:0 0 auto}
/* 预览终端切换行（微信 / 百度 / 支付宝）：复用画布栏语言切换的 .cvhead__seg 样式 */
.pv2__term{display:flex;align-items:center;gap:10px;padding:9px 18px;flex:0 0 auto;
  border-bottom:1px solid var(--border-2);background:#fff}
.pv2__term-l{font-size:12px;color:var(--text-3);flex:0 0 auto}
.pv2__term .cvhead__seg{flex:0 0 auto}
.pv2__term-hint{margin-left:auto;font-size:11.5px;color:var(--text-4);text-align:right;line-height:1.5}
.pv2__meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 18px;
  background:var(--bg-layout);border-bottom:1px solid var(--border-2);flex:0 0 auto;
  font-size:12px;color:var(--text-3)}
.pv2__meta i{font-style:normal;color:var(--text-4)}
/* 主体只剩手机一栏：水平居中，竖向置顶；手机内超高时在 .phone2__scroll 里滚 */
.pv2__body{flex:1;min-height:0;display:flex;align-items:flex-start;justify-content:center;
  padding:16px 18px;overflow:auto}
.pv2__phone{flex:0 0 auto;display:flex;align-items:flex-start;justify-content:center;
  background:var(--bg-layout);border-radius:var(--r);padding:12px;overflow:auto}
.pv2__phone .phone2{order:0}
.pv2__foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex:0 0 auto;
  padding:14px 18px;border-top:1px solid var(--border-2)}
.pv2__hint{margin-right:auto;font-size:12px;color:var(--text-3)}
.pv2__hint svg{color:var(--text-4);margin-right:3px;vertical-align:-3px}

/* ================= 响应式（桌面 B 端，1280 起为设计基准） ================= */
@media (max-width:1680px){
  .bld{grid-template-columns:184px 336px minmax(0,1fr)}
}
@media (max-width:1520px){
  .bld{grid-template-columns:176px 328px minmax(0,1fr)}
}
@media (max-width:1340px){
  .topbar__search span{display:none}
  .topbar__search{width:auto;padding:0 10px}
  .bld{grid-template-columns:1fr;gap:12px}
  .camp-col__body{max-height:none}
}
@media (max-width:1280px){
  .bld{grid-template-columns:1fr;gap:14px}
  .camp-col__body{max-height:none}
}
@media (max-width:1360px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .domains,.live-cards{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:1180px){
  .brandname{display:none}
  .hero{flex-wrap:wrap;gap:16px}
}
@media (max-width:1100px){
  .domains,.live-cards,.mod-grid{grid-template-columns:1fr}
  #slotGroups{grid-template-columns:1fr}
  .filter-row{grid-template-columns:repeat(2,1fr)}
  .preview-wrap{flex-direction:column}
}
@media (max-width:980px){
  .topbar__search{display:none}
  .topbar__user>div,.topbar__user>svg{display:none}
  .topbar__user{padding:0 4px}
  .page-head{flex-direction:column;gap:12px}
  .page-actions{padding-top:0}
}

/* 拆分页面后补充：一级菜单功能全景入口 */
.mg__overview{
  display:flex;align-items:center;gap:6px;margin:6px 8px 2px;padding:7px 8px;
  border-radius:var(--r-sm);color:rgba(255,255,255,.72);font-size:12px;
  text-decoration:none;background:rgba(255,255,255,.04);
}
.mg__overview:hover{background:var(--sider-hover);color:#fff}
.app.is-collapsed .mg__overview{display:none}

