/* ============================================================================
 * 投票系统后台设计系统
 * 方案十四：深海军蓝、皇家蓝、浅灰蓝与红色危险操作
 * ==========================================================================*/

/* ---------- 设计令牌 ---------- */
:root {
  /* 全站后台统一字体：中文优先微软雅黑，Mac 使用苹方，避免各模块各自选择字体。 */
  --font-sans: "Microsoft YaHei", "PingFang SC", "Noto Sans SC", Arial, sans-serif;
  --font-mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;

  --type-page-title: 20px;
  --type-section-title: 16px;
  --type-card-title: 15px;
  --type-body: 14px;
  --type-caption: 13px;
  --type-helper: 12px;
  --type-title-weight: 700;
  --type-body-weight: 400;
  --type-body-leading: 1.55;

  --radius-sm: 6px;
  --radius: 8px;
  --radius-lg: 10px;
  --radius-xl: 12px;

  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px;
  --sp-5: 20px; --sp-6: 24px; --sp-8: 32px; --sp-10: 40px; --sp-12: 48px;

  --accent: #2563eb;
  --accent-2: #173b8f;
  --accent-3: #3b82f6;
  --on-primary: #ffffff;
  --on-accent: #ffffff;
  --primary: var(--accent);
  --primary-soft: rgba(1,75,170,0.10);
  --green: #10b981;
  --red: #ef4444;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);

  /* ---- 投票编辑构建器三栏宽度（唯一真源，勿在别处硬编码） ----
     在 1280px→1920px 之间对左右栏做线性插值：1280 时收到 150/260 把空间让给
     中间画布，1920 及以上恢复既定的 320/520。纯 vw 缩放会在断点处跳变，故用 calc。
     外层已先占 344px：.sidebar 264px + .content--wide 左右各 40px，
     曾因固定 320+520 导致 1440 屏画布只剩 212px、白卡塌到 137px。 */
  --vb-col-left: clamp(150px, calc(150px + (100vw - 1280px) * 0.2656), 320px);
  --vb-col-right: clamp(260px, calc(260px + (100vw - 1280px) * 0.40625), 520px);
  --page-width: 1200px;
  --page-width-wide: 1440px;
}

/* 浅色主题 */
:root, [data-theme="light"] {
  --bg: #f5f7fa;
  --bg-grad: none;
  --surface: #ffffff;
  --surface-solid: #ffffff;
  --surface-2: #f8fafc;
  --border: #dbe3ec;
  --border-strong: #c6d1df;
  --text: #172033;
  --text-2: #526176;
  --text-3: #8290a3;
  --heading-color: #173b8f;
  --body-color: #334155;
  --helper-color: #8290a3;
  --shadow: 0 2px 10px rgba(15,23,42,.06);
  --shadow-lg: 0 10px 28px rgba(15,23,42,.10);
  --glass-blur: 0px;
  --sidebar-bg: #ffffff;
  --hover: rgba(1,75,170,0.06);
}

/* 深色主题 */
[data-theme="dark"] {
  --bg: #071a2a;
  --bg-grad: none;
  --surface: #0d3550;
  --surface-solid: #0d3550;
  --surface-2: #123b5d;
  --border: rgba(216,229,238,0.18);
  --border-strong: rgba(216,229,238,0.32);
  --text: #f1f6f8;
  --text-2: #c5d5df;
  --text-3: #a6c0cd;
  --heading-color: #f1f6f8;
  --body-color: #d9e5eb;
  --helper-color: #a6c0cd;
  --shadow: 0 10px 30px -12px rgba(0,0,0,0.6);
  --shadow-lg: 0 24px 60px -20px rgba(0,0,0,0.7);
  --sidebar-bg: #071a2a;
  --hover: rgba(255,255,255,0.06);
  --accent: #236db0;
  --accent-2: #014baa;
  --accent-3: #3c7fc1;
  --primary-soft: rgba(35,109,176,0.18);
}

* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  font-family: var(--font-sans);
  color: var(--text);
  background: var(--bg);
  background-image: var(--bg-grad);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
  font-size: var(--type-body);
  line-height: var(--type-body-leading);
  transition: background-color .4s var(--ease), color .4s var(--ease);
}
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
h1, h2, h3, h4, h5, h6 {
  color: var(--heading-color);
  letter-spacing: 0;
  margin-top: 0;
}
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 10px; }
::-webkit-scrollbar-track { background: transparent; }

/* fade-in 入场 */
@keyframes fadeUp { from { opacity:0; transform: translateY(14px); } to { opacity:1; transform:none; } }
@keyframes pop { from { opacity:0; transform: scale(.96); } to { opacity:1; transform:none; } }
@keyframes shimmer { 0%{background-position:-200% 0} 100%{background-position:200% 0} }
.fade-in { animation: fadeUp .5s var(--ease) both; }

/* ---------- 布局 ---------- */
.app { display: grid; grid-template-columns: 264px 1fr; min-height: 100vh; }

/* 侧边栏 */
.sidebar {
  position: sticky; top: 0; height: 100vh;
  background: var(--sidebar-bg);
  backdrop-filter: blur(var(--glass-blur)) saturate(160%);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(160%);
  border-right: 1px solid var(--border);
  display: flex; flex-direction: column; padding: var(--sp-5) var(--sp-3);
  z-index: 20;
}
.brand { display:flex; align-items:center; gap:12px; padding: 4px 10px 18px; }
.brand-logo {
  width: 40px; height: 40px; border-radius: 12px; flex: none;
  background: var(--accent);
  display:grid; place-items:center; color:#fff; font-weight:800; font-size:18px;
  box-shadow: 0 8px 20px -6px rgba(79,70,229,.6);
}
.brand-name { font-weight: 800; font-size: 15px; letter-spacing:.2px; }
.brand-sub { font-size: 11px; color: var(--text-3); margin-top:1px; }

.nav { display:flex; flex-direction:column; gap:3px; margin-top:8px; overflow-y:auto; }
.nav-group { font-size: 11px; color: var(--text-3); text-transform: uppercase; letter-spacing:.12em; padding: 14px 12px 6px; }
.nav-item {
  display:flex; align-items:center; gap:11px; padding: 10px 12px; border-radius: var(--radius-sm);
  color: var(--text-2); font-weight: 600; font-size: 13.5px; position: relative;
  transition: background .25s var(--ease), color .25s var(--ease);
}
.nav-item:hover { background: var(--hover); color: var(--text); }
.nav-item.active { background: color-mix(in srgb, var(--accent) 10%, var(--surface-solid)); color: var(--accent); }
.nav-item.active::before {
  content:""; position:absolute; left:0; top:50%; transform:translateY(-50%);
  width:4px; height:20px; border-radius:4px; background: var(--accent);
}
.nav-ico { width:20px; height:20px; display:inline-flex; align-items:center; justify-content:center; color:currentColor; flex:0 0 20px; }
.nav-svg{width:18px;height:18px;display:block}
.nav-badge { margin-left:auto; min-width:18px; height:18px; padding:0 5px; border-radius:999px; background:var(--danger,#e5484d); color:#fff; font-size:11px; font-weight:700; display:inline-flex; align-items:center; justify-content:center; }
.sidebar-foot { margin-top:auto; padding-top: var(--sp-4); border-top:1px solid var(--border); }

/* 主区域 */
.main { display:flex; flex-direction:column; min-width:0; }
.topbar {
  position: sticky; top:0; z-index:15;
  display:flex; align-items:center; gap: var(--sp-4);
  padding: var(--sp-4) var(--sp-8);
  background: var(--surface); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--border);
}
.topbar h1 { font-size: var(--type-page-title); margin:0; font-weight:var(--type-title-weight); line-height:1.35; }
.topbar .crumb { color: var(--text-3); font-size:12.5px; margin-top:2px; }
.topbar-spacer { flex:1; }
.content { padding: var(--sp-8); max-width: var(--page-width); width:100%; margin:0 auto; }
.content.content--wide { max-width: var(--page-width-wide); padding: var(--sp-6) var(--sp-10); margin:0 auto; }

/* 管理员与权限页面：自动撑满可用宽度、放大表格文字、角色列不换行 */
main.content:has(.perm-page) {
  max-width: 100%;
  padding: var(--sp-6) var(--sp-10);
}
.perm-page .tbl,
.perm-page .perm-toolbar,
.perm-page .card-sub,
.perm-page .muted { font-size: 14px; }
.perm-page .tbl thead th { font-size: 13px; }
.perm-page .perm-matrix td:first-child,
.perm-page .perm-matrix th:first-child { white-space: nowrap; min-width: 120px; }

/* ---------- 玻璃卡片 ---------- */
.card {
  background: var(--surface); backdrop-filter: blur(var(--glass-blur)) saturate(150%);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(150%);
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: var(--shadow); padding: var(--sp-6);
  transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.card.hover-lift:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: var(--border-strong); }
.card-head { display:flex; align-items:center; justify-content:space-between; margin-bottom: var(--sp-5); gap:12px; }
.card-title { font-size: var(--type-card-title); font-weight: var(--type-title-weight); line-height:1.4; }
.card-sub { font-size: 13.5px; color: var(--text-3); margin-top:2px; }

/* ---------- 按钮 ---------- */
.btn {
  display:inline-flex; align-items:center; gap:8px; justify-content:center;
  min-height: 40px; padding: 9px 16px; border-radius: var(--radius-sm); border:1px solid var(--border);
  background: var(--surface-2); color: var(--text); font-weight:700; font-size:13px;
  transition: transform .2s var(--ease), box-shadow .25s var(--ease), background .25s var(--ease), border-color .25s;
  white-space:nowrap;
}
.btn:hover { transform: translateY(-2px); box-shadow: var(--shadow); }
.btn:active { transform: translateY(0) scale(.98); }
.btn-primary {
  background: var(--primary); color: var(--on-primary); border:none;
  box-shadow: 0 10px 24px -8px color-mix(in srgb, var(--primary) 45%, transparent);
}
.btn-primary:hover { box-shadow: 0 14px 30px -8px color-mix(in srgb, var(--primary) 55%, transparent); }
.btn-ghost { background: transparent; }
.btn-danger { background: #e53935; color:#fff; border:1px solid #e53935; }
.btn-sm { min-height: 32px; padding: 6px 13px; font-size:13px; border-radius: var(--radius-sm); }
.btn-icon { padding: 9px; width: 38px; height: 38px; }
.btn:disabled { opacity:.45; cursor:not-allowed; transform:none; box-shadow:none; }

/* 磁吸按钮 */
.magnetic { transition: transform .25s var(--ease), box-shadow .25s var(--ease); }

/* ---------- 徽章 / 标签 ---------- */
.badge {
  display:inline-flex; align-items:center; gap:5px; padding: 3px 10px; border-radius: 999px;
  font-size: 13px; font-weight: 700; line-height:1.4;
  background: var(--surface-2); color: var(--text-2); border:1px solid var(--border);
}
.badge .dot { width:7px; height:7px; border-radius:50%; }
.badge-status { color: #fff; border:none; }

/* 阶段/状态进度 */
.steps { display:flex; align-items:center; gap:0; flex-wrap:wrap; }
.step { display:flex; align-items:center; gap:10px; }
.step-node {
  width: 30px; height:30px; border-radius:50%; display:grid; place-items:center;
  font-size:13px; font-weight:800; background: var(--surface-2); border:1px solid var(--border); color:var(--text-3);
}
.step-node.done { background: var(--primary); color: var(--on-primary); border:none; }
.step-node.current { background: var(--surface-solid); border:2px solid var(--primary); color:var(--primary); box-shadow:0 0 0 4px color-mix(in srgb, var(--primary) 15%, transparent); }
.step-line { width: 38px; height:2px; background: var(--border-strong); margin: 0 6px; }
.step-line.done { background: var(--primary); }

/* ---------- 表格 ---------- */
.table-wrap { overflow-x:auto; border-radius: var(--radius); border:1px solid var(--border); }
table.tbl { width:100%; border-collapse: collapse; font-size:14px; min-width: 720px; }
.tbl thead th {
  text-align:left; padding: 13px 16px; font-weight:700; color: var(--text-2);
  background: var(--surface-2); border-bottom:1px solid var(--border); white-space:nowrap; font-size:13.5px;
  position: sticky; top: 0;
}
.tbl tbody td { padding: 13px 16px; border-bottom:1px solid var(--border); color: var(--text); vertical-align:middle; }
.tbl tbody tr { transition: background .2s var(--ease); }
.tbl tbody tr:hover { background: var(--hover); }
.tbl tbody tr:last-child td { border-bottom:none; }
.cell-strong { font-weight: 700; }
.cell-sub { color: var(--text-3); font-size:13px; }

/* ---------- 表单 ---------- */
.field { margin-bottom: var(--sp-4); }
.field label { display:block; font-weight:700; font-size:13.5px; margin-bottom:7px; color: var(--text-2); }
.field .req { color: var(--red); margin-left:3px; }
.input, .select, .textarea {
  width:100%; min-height:40px; padding: 9px 13px; border-radius: var(--radius-sm); border:1px solid var(--border-strong);
  background: var(--surface-solid); color: var(--text); font-size:13.5px; font-family:inherit;
  transition: border-color .2s, box-shadow .2s, background .2s;
}
.input:focus, .select:focus, .textarea:focus {
  outline:none; border-color: var(--accent); box-shadow: 0 0 0 4px rgba(79,70,229,.16);
}
.textarea { resize: vertical; min-height: 110px; }
.switch { position:relative; width:46px; height:26px; display:inline-block; }
.switch input { display:none; }
.switch .track { position:absolute; inset:0; background: var(--border-strong); border-radius:999px; transition:.3s var(--ease); }
.switch .track::after { content:""; position:absolute; top:3px; left:3px; width:20px; height:20px; background:#fff; border-radius:50%; transition:.3s var(--ease); box-shadow:0 2px 6px rgba(0,0,0,.3); }
.switch input:checked + .track { background: var(--accent); }
.switch input:checked + .track::after { transform: translateX(20px); }

/* 网格 */
.grid { display:grid; gap: var(--sp-5); }
.grid-2 { grid-template-columns: repeat(2,1fr); }
.grid-3 { grid-template-columns: repeat(3,1fr); }
.grid-4 { grid-template-columns: repeat(4,1fr); }
@media (max-width: 1100px){ .grid-3,.grid-4{ grid-template-columns: repeat(2,1fr);} }
.nav-toggle { display: none; }
.nav-backdrop { display: none; }
@media (max-width: 760px){
  .grid-2,.grid-3,.grid-4{ grid-template-columns: 1fr; }
  .app{ grid-template-columns:1fr; }
  .content{padding:16px;}
  /* #135 移动端：侧边栏改为离屏抽屉 + 汉堡按钮（桌面不受影响） */
  .nav-toggle{ display:inline-flex; align-items:center; justify-content:center; width:40px; height:40px; font-size:20px; border-radius:10px; }
  .sidebar{
    display:flex; position:fixed; top:0; left:0; bottom:0; width:264px; max-width:84vw; height:100vh;
    z-index:200; transform:translateX(-100%); transition:transform .26s var(--ease);
    background:var(--surface); box-shadow:0 12px 40px rgba(0,0,0,.28); padding:var(--sp-5) var(--sp-3);
  }
  body.sidebar-open .sidebar{ transform:translateX(0) !important; }
  .nav-backdrop{ display:block; position:fixed; inset:0; background:rgba(15,23,42,.45); opacity:0; visibility:hidden; transition:opacity .26s; z-index:150; }
  body.sidebar-open .nav-backdrop{ opacity:1; visibility:visible; }
}

/* KPI 卡 */
.kpi { position:relative; overflow:hidden; }
.kpi-ico { width:44px; height:44px; border-radius:13px; display:grid; place-items:center; font-size:20px;
  background: color-mix(in srgb, var(--accent) 10%, var(--surface-solid)); color: var(--accent); }
.kpi-val { font-size: 30px; font-weight: 800; letter-spacing:-.5px; margin-top:14px; font-variant-numeric: tabular-nums; }
.kpi-label { color: var(--text-3); font-size:12.5px; margin-top:2px; }
.kpi-trend { font-size:12px; font-weight:700; margin-top:8px; }
.kpi-trend.up { color: var(--green); }
.kpi-trend.down { color: var(--red); }
.kpi::after { content:none; }

/* 工具条 */
.toolbar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom: var(--sp-5); }
.toolbar .grow { flex:1; }
.search { position:relative; }
.search input { padding-left:38px; width: 260px; }
.search .si { position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--text-3); }

/* 分页 */
.pager { display:flex; align-items:center; gap:6px; margin-top: var(--sp-5); flex-wrap:wrap; }
.pager button { min-width:36px; height:36px; border-radius:9px; border:1px solid var(--border); background:var(--surface-2); color:var(--text-2); font-weight:700; }
.pager button.active { background: var(--primary); color: var(--on-primary); border:none; }
.pager button:disabled { opacity:.4; }

/* ---------- 模态框 ---------- */
.modal-mask {
  position: fixed; inset:0; background: rgba(8,12,24,.5); backdrop-filter: blur(6px);
  display:none; align-items:flex-start; justify-content:center; z-index: 100; padding: 5vh 16px; overflow-y:auto;
}
.modal-mask.open { display:flex; animation: fadeUp .3s var(--ease); }
.modal {
  width: 100%; max-width: 760px; background: var(--surface-solid); border:1px solid var(--border-strong);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); padding: var(--sp-6);
  animation: pop .35s var(--ease);
  max-height: 86vh; overflow-y: auto; display:flex; flex-direction:column;
}
.modal.wide { max-width: 960px; }
.modal-head { display:flex; align-items:center; justify-content:space-between; margin-bottom: var(--sp-5); position: sticky; top:0; background: var(--surface-solid); z-index:2; padding-bottom:6px; }
.modal-title { font-size: 17px; font-weight:800; }
.modal-x { width:34px; height:34px; border-radius:10px; border:1px solid var(--border); background:var(--surface-2); color:var(--text-2); font-size:18px; flex:none; }
.modal-foot { display:flex; justify-content:flex-end; gap:10px; margin-top: var(--sp-6); padding-top: var(--sp-5); border-top:1px solid var(--border); position: sticky; bottom:0; background: var(--surface-solid); z-index:2; }
.permission-modal{overflow:hidden;padding-bottom:0}
.permission-modal .modal-head{flex:none;margin-bottom:var(--sp-3)}
.permission-modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:6px}
.permission-modal .modal-foot{flex:none;position:static;margin:0;padding:var(--sp-4) 0 var(--sp-5)}

/* 向导式弹窗：头部固定 + 中间 body 滚动 + 底部 footer 固定（贴齐圆角底边） */
.modal.wizard-modal { overflow: hidden; padding-bottom: 0; }
.modal.wizard-modal .wizard-steps { flex:none; position: sticky; top:0; z-index:3; background: var(--surface-solid); padding-bottom:6px; margin-bottom: var(--sp-5); }
.modal.wizard-modal .wizard-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding-right: 6px; }
.modal.wizard-modal .modal-foot {
  flex:none; position: static; margin: 0;
  padding: var(--sp-5) var(--sp-6) var(--sp-6);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
}

/* 预览弹窗：内容区独立滚动，关闭底栏贴死弹框底边，杜绝漏底缝 */
.modal.preview-modal {
  overflow: hidden;
  padding: 0;
  max-height: 86vh;
}
.modal.preview-modal .preview-modal-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: var(--sp-6);
  background: #f9fafb;
}
.modal.preview-modal .modal-foot {
  flex: none;
  position: static;
  margin: 0;
  padding: 14px 20px 18px;
  border-top: 1px solid var(--border);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  background: var(--surface-solid);
  z-index: 3;
}

/* 带搜索的多选下拉（推荐单位） */
.ms { position: relative; }
.ms-control { display:flex; align-items:center; gap:6px; min-height:44px; padding:7px 12px; border:1px solid var(--border-strong); border-radius:var(--radius-sm); background:var(--surface-solid); cursor:pointer; flex-wrap:wrap; transition:border-color .15s, box-shadow .15s; }
.ms-control:hover { border-color:var(--accent); }
.ms-control:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(79,70,229,.15); }
.ms-placeholder { color:var(--text-3); font-size:14px; }
.ms-tags { display:flex; flex-wrap:wrap; gap:5px; }
.ms-tag { display:inline-flex; align-items:center; gap:4px; background:var(--primary-soft); color:var(--accent); font-size:12px; font-weight:600; padding:3px 6px 3px 10px; border-radius:999px; }
.ms-tag-x { border:none; background:transparent; color:var(--accent); cursor:pointer; font-size:13px; line-height:1; padding:0 2px; opacity:.7; }
.ms-tag-x:hover { opacity:1; }
.ms-caret { margin-left:auto; color:var(--text-3); font-size:12px; transition:transform .15s; }
.ms-panel { margin-top:8px; border:1px solid var(--border-strong); border-radius:var(--radius-sm); background:var(--surface-2); padding:8px; box-shadow:var(--shadow); }
.ms-search-wrap { display:flex; align-items:center; gap:6px; margin-bottom:8px; }
.ms-search-wrap .si { font-size:13px; opacity:.6; }
.ms-search-wrap .input { flex:1; }
.ms-options { max-height:240px; overflow-y:auto; display:flex; flex-direction:column; gap:2px; }
.ms-opt { display:flex; align-items:center; gap:9px; padding:9px 10px; border-radius:9px; cursor:pointer; transition:background .12s; }
.ms-opt:hover { background:var(--surface-solid); }
.ms-opt input { accent-color:var(--accent); width:16px; height:16px; flex:none; }
.ms-opt-name { font-weight:600; font-size:14px; color:var(--text); }
.ms-opt-sub { margin-left:auto; font-size:11px; color:var(--text-3); }
.ms-empty { padding:14px; text-align:center; color:var(--text-3); font-size:13px; }

/* 富文本编辑器 */
.rte { border:1px solid var(--border-strong); border-radius: var(--radius-sm); overflow:hidden; background: var(--surface-solid); }
.rte-toolbar { display:flex; flex-wrap:wrap; gap:4px; padding:8px; border-bottom:1px solid var(--border); background: var(--surface-2); }
.rte-btn { border:1px solid var(--border); background: var(--surface); border-radius:8px; padding:5px 9px; font-size:12px; font-weight:700; color: var(--text-2); cursor:pointer; transition: border-color .15s, color .15s; }
.rte-btn:hover { border-color: var(--accent); color: var(--accent); }
.rte-sep { width:1px; background: var(--border); margin:2px 4px; }
.rte-content { min-height:170px; max-height:340px; overflow-y:auto; padding:12px 13px; font-size:13.5px; line-height:1.7; outline:none; }
.rte-content:focus { border-color: var(--accent); }
.rte-content img, .rte-content video { max-width:100%; border-radius:10px; margin:8px 0; }
.news-detail img, .news-detail video { max-width:100%; border-radius:10px; margin:8px 0; }
.news-detail { font-size:14px; line-height:1.8; color: var(--text); }

/* 向导步骤 */
.wizard-steps { display:flex; gap:8px; margin-bottom: var(--sp-6); }
.wz { flex:1; text-align:center; font-size:12px; font-weight:700; color:var(--text-3); padding-top:10px; position:relative; }
.wz::before { content:""; position:absolute; top:0; left:0; right:0; height:4px; border-radius:4px; background:var(--border); }
.wz.active::before, .wz.done::before { background: var(--accent); }
.wz.active { color: var(--accent); }

/* ---------- Toast ---------- */
.toast-wrap { position: fixed; top: 22px; right: 22px; z-index: 200; display:flex; flex-direction:column; gap:10px; }
.toast {
  background: var(--surface-solid); border:1px solid var(--border-strong); border-left:4px solid var(--accent);
  padding: 13px 18px; border-radius: 12px; box-shadow: var(--shadow-lg); min-width: 240px;
  animation: pop .3s var(--ease); display:flex; align-items:center; gap:10px; font-weight:600; font-size:13px;
}
.toast.ok { border-left-color: var(--green); }
.toast.warn { border-left-color: var(--accent); }
.toast.err { border-left-color: var(--red); }

/* ---------- 图表 ---------- */
.chart-svg { width:100%; height:auto; display:block; overflow:visible; }
.chart-legend { display:flex; flex-wrap:wrap; gap:10px 16px; margin-top:14px; }
.legend-item { display:flex; align-items:center; gap:7px; font-size:12.5px; color:var(--text-2); }
.legend-dot { width:10px; height:10px; border-radius:3px; }
.bar-rect, .slice, .dot-pt { cursor:pointer; transition: opacity .2s, transform .2s; }
.bar-rect:hover, .slice:hover { opacity:.82; }
.chart-tip {
  position:fixed; pointer-events:none; z-index:300; background: var(--surface-solid);
  border:1px solid var(--border-strong); border-radius:10px; padding:8px 11px; font-size:12px; font-weight:600;
  box-shadow: var(--shadow-lg); display:none;
}

/* 评分编辑器 */
.score-row { display:grid; grid-template-columns: 1fr 120px 90px 90px; gap:12px; align-items:center; padding:11px 0; border-bottom:1px solid var(--border); }
.score-row .max-input { text-align:center; }
.score-row .swatch { width:14px; height:14px; border-radius:4px; }
.score-total { font-size:26px; font-weight:800; font-variant-numeric:tabular-nums; }

/* 头像 */
.avatar { width:36px; height:36px; border-radius:11px; display:grid; place-items:center; font-weight:800; color:#fff; font-size:13px; flex:none; }
.avatar.sm { width:30px; height:30px; border-radius:9px; font-size:12px; }

/* 空态 */
.empty { text-align:center; padding: 50px 20px; color: var(--text-3); }
.empty .em-ico { font-size:40px; opacity:.5; }

/* 进度条 */
.progress { height:8px; border-radius:999px; background: var(--surface-2); overflow:hidden; }
.progress > i { display:block; height:100%; border-radius:999px; background: var(--accent); }

/* 区块标题 */
.section-bar { display:flex; align-items:center; gap:10px; margin: var(--sp-8) 0 var(--sp-4); }
.section-bar h3 { font-size:var(--type-section-title); font-weight:var(--type-title-weight); line-height:1.4; margin:0; }
.section-title { font-size:var(--type-section-title); font-weight:var(--type-title-weight); line-height:1.4; color:var(--text); }
.section-bar .line { flex:1; height:1px; background: var(--border); }
.muted { color: var(--text-3); }
.flex { display:flex; } .between { justify-content:space-between; } .items-center { align-items:center; } .gap-2{gap:8px} .gap-3{gap:12px} .wrap{flex-wrap:wrap}
.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-5{margin-top:20px}.mt-6{margin-top:24px}
.mb-3{margin-bottom:12px}.mb-4{margin-bottom:16px}
.text-2{color:var(--text-2)} .text-3{color:var(--text-3)} .fw-7{font-weight:700} .fw-8{font-weight:800}
.nowrap{white-space:nowrap} .right{text-align:right} .center{text-align:center}
.chip { display:inline-flex; padding:3px 9px; border-radius:8px; background:var(--surface-2); border:1px solid var(--border); font-size:11.5px; font-weight:700; color:var(--text-2); }
.divider { height:1px; background:var(--border); margin: var(--sp-5) 0; }

/* ---------- 前台内容管理（网站设置） ---------- */
.web-actions{position:sticky;bottom:8px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:14px 16px;margin-top:8px;background:var(--surface);border:1px solid var(--border-strong);border-radius:14px;box-shadow:0 6px 22px rgba(15,23,42,.10);z-index:5}
.card .field{margin-bottom:10px}

/* ---------- 新闻公告后台行内编辑 ---------- */
.news-toolbar { display: flex; justify-content: flex-end; margin-bottom: 14px; }
.news-editor { display: flex; flex-direction: column; gap: 18px; }
.ne-card { border: 1px solid var(--border); border-radius: 14px; padding: 18px; background: var(--surface); }
.ne-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.ne-id { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; color: var(--text-3); background: var(--surface-2); padding: 3px 8px; border-radius: 6px; }
.ne-status { font-size: 12px; font-weight: 600; padding: 3px 10px; border-radius: 999px; }
.ne-status.published { color: #166534; background: #dcfce7; }
.ne-status.draft { color: #1e3a8a; background: #dbeafe; }
.ne-grid { display: grid; grid-template-columns: 1.5fr 1fr; gap: 14px; }
.ne-thumb { max-width: 100%; max-height: 160px; border-radius: 10px; margin-top: 10px; }
.ne-imgprev { min-height: 36px; }
.tag-checks { display: flex; flex-wrap: wrap; gap: 10px; }
.tag-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); cursor: pointer; padding: 5px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-2); }
.tag-check input { margin: 0; }
.ne-actions { display: flex; justify-content: flex-end; margin-top: 10px; padding-top: 12px; border-top: 1px dashed var(--border); }
.tags-editor { display: flex; flex-direction: column; gap: 10px; }

/* 新闻列表视图（原位置行内编辑入口） */
.news-list { display: flex; flex-direction: column; gap: 14px; }
.nr-row { display: flex; gap: 16px; align-items: center; padding: 14px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); transition: box-shadow .25s var(--ease), transform .25s var(--ease); }
.nr-row:hover { box-shadow: var(--shadow-sm); transform: translateY(-2px); }
.nr-thumb-wrap { flex: 0 0 120px; }
.nr-thumb { width: 120px; height: 80px; object-fit: cover; border-radius: 10px; display: block; }
.nr-thumb--empty { display: flex; align-items: center; justify-content: center; background: var(--accent-2); color: #fff; font-size: 13px; font-weight: 600; }
.nr-info { flex: 1; min-width: 0; }
.nr-meta { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.nr-cat { font-size: 12px; font-weight: 600; color: var(--accent-2); background: var(--primary-soft); padding: 3px 8px; border-radius: 999px; }
.nr-title { margin: 0 0 4px; font-size: 16px; font-weight: 600; color: var(--text); }
.nr-summary { margin: 0; font-size: 13px; color: var(--text-2); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.nr-date { margin-top: 6px; font-size: 12px; color: var(--text-3); }
.nr-actions { flex: 0 0 auto; display: flex; gap: 8px; }
/* 后台新闻列表：置顶开关 + 置顶高亮 */
.nr-row.pinned { border-color: #60a5fa; background: #eff6ff; }
.nr-pin { white-space: nowrap; }
.nr-pin.pinned { color: #1e40af; }
@media (max-width: 620px) {
  .nr-row { flex-direction: column; align-items: stretch; }
  .nr-thumb-wrap { flex: none; }
  .nr-thumb, .nr-thumb--empty { width: 100%; height: 140px; }
  .nr-actions { justify-content: flex-end; }
}
.tag-row { display: flex; align-items: center; gap: 10px; }
.tag-row .input { flex: 1; }
@media (max-width: 720px) {
  .ne-grid { grid-template-columns: 1fr; }
}

/* ---------- 管理员与权限（安全认证） ---------- */
.perm-matrix th,.perm-matrix td{padding:9px 8px}
.perm-matrix thead tr:first-child th{background:var(--surface-2)}
/* 账号权限分配：权限勾选区 */
.perm-groups{display:flex;flex-wrap:wrap;gap:16px}
.perm-group{min-width:200px;flex:1}
.perm-group-h{font-size:12.5px;font-weight:600;color:var(--text-2);margin-bottom:8px}
.perm-grid{display:flex;flex-wrap:wrap;gap:8px 18px}
.perm-chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;user-select:none}
.tag{display:inline-flex;align-items:center;font-size:11px;line-height:1;padding:2px 6px;border-radius:6px;font-weight:600;white-space:nowrap}
.tag-lock{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}
.tag-scope{background:var(--primary-soft);color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 30%,var(--border))}

/* ---------- 赛事列表：阶段进度 pills（自动换行，不横向滚动） ---------- */
.stage-pills{display:flex;flex-wrap:wrap;gap:6px;max-width:240px}
.stage-pills .sp{font-size:12px;line-height:1;padding:4px 10px;border-radius:999px;background:var(--surface-2);color:var(--text-3);border:1px solid var(--border)}
.stage-pills .sp.cur{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 2px 8px rgba(79,70,229,.28)}
/* 流程阶段勾选卡片上的标签 */
.tag{font-size:11px;line-height:1;padding:2px 7px;border-radius:999px;font-weight:600}
.tag-required{background:#dcfce7;color:#16a34a;border:1px solid #86efac}
.tag-optional{background:#fef9c3;color:#a16207;border:1px solid #fde047}
.card-locked{background:var(--surface-2)}

/* ---------- 评分模版库 ---------- */
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.lib-card{border:1px solid var(--border);border-radius:14px;padding:16px;background:var(--surface);display:flex;flex-direction:column;gap:10px}
.lib-card .lib-name{font-size:15px;font-weight:700}
.lib-meta{display:flex;flex-wrap:wrap;gap:6px}
.lib-chip{font-size:11.5px;padding:2px 9px;border-radius:999px;background:var(--surface-2);color:var(--text-3);border:1px solid var(--border)}
.lib-chip.mode{background:#eef2ff;color:#4338ca;border-color:#c7d2fe}
.lib-dim{border-left:3px solid var(--accent);padding:8px 10px;background:var(--surface-2);border-radius:8px}
.lib-dim-h{display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:13px}
.lib-dim-h .w{color:var(--accent);font-variant-numeric:tabular-nums}
.lib-item{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;padding:3px 0;border-bottom:1px dashed var(--border)}
.lib-item:last-child{border-bottom:none}
.lib-item .mx{color:var(--text-3);font-variant-numeric:tabular-nums;flex:none}
.lib-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.lib-stat{font-size:12.5px;color:var(--text-3)}
/* 编辑器 */
.ed-stage{border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--surface)}
.ed-dim{border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--surface-2)}
.ed-item-row{display:grid;grid-template-columns:1.4fr 90px 1fr 34px;gap:8px;align-items:center;margin-bottom:8px}
.ed-weight-note{font-size:12.5px;font-weight:600}
.ed-weight-note.ok{color:#16a34a}
.ed-weight-note.bad{color:#dc2626}
.perm-chk input{width:16px;height:16px}
.perm-g-layout{display:grid;grid-template-columns:150px minmax(0,1fr);gap:16px;min-height:260px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface)}
.perm-g-sidebar{background:var(--surface-2);padding:10px 8px;border-right:1px solid var(--border)}
.perm-g-sidebar-title{font-size:12px;font-weight:700;color:var(--text-3);padding:4px 8px 9px;text-transform:uppercase;letter-spacing:.04em}
.perm-g-nav-item{width:100%;display:flex;align-items:center;justify-content:space-between;gap:6px;border:0;border-left:3px solid transparent;background:transparent;color:var(--text-2);padding:9px 8px;text-align:left;font-size:13px;cursor:pointer;border-radius:4px}
.perm-g-nav-item:hover{background:var(--surface);color:var(--text)}
.perm-g-nav-item.is-active{border-left-color:var(--accent);background:var(--surface);color:var(--accent);font-weight:700}
.perm-g-nav-item b{font-size:11px;font-weight:600;color:var(--text-3)}
.perm-g-main{padding:12px 14px;min-width:0;max-height:410px;overflow:auto}
.perm-module-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-bottom:12px}
.perm-module-toggle{display:flex;align-items:center;gap:7px;min-height:36px;padding:7px 9px;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;font-size:12px}
.perm-module-toggle:has(input:not(:checked)){color:var(--text-3);background:var(--surface-2)}
.perm-module-toggle input{accent-color:var(--accent)}
.perm-module-toggle.is-super-locked{opacity:.62;cursor:not-allowed}
.perm-super-note{margin:6px 0 8px;padding:8px 10px;border:1px solid #f1d48a;border-radius:6px;background:#fff8e6;color:#8a5a00;font-size:12px}
.form-error{display:block;min-height:16px;margin-top:4px;color:#dc2626;font-size:12px;line-height:1.35}
.input.is-invalid{border-color:#dc2626;box-shadow:0 0 0 2px rgba(220,38,38,.12)}
.perm-g-toolbar{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);padding:0 0 10px;margin-bottom:12px;font-size:13px;font-weight:700}
.perm-g-hint{font-size:12px;font-weight:400;color:var(--text-3)}
.perm-tile-group{scroll-margin-top:12px;margin-bottom:18px}
.perm-tile-group:last-child{margin-bottom:0}
.perm-group-h{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--text-2);margin-bottom:8px}
.perm-group-count{font-size:11px;color:var(--accent);font-weight:600}
.perm-tile-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.perm-tile{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;min-height:66px;padding:10px 10px 8px;border:1px solid var(--border);border-radius:6px;background:var(--surface);cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}
.perm-tile:hover{border-color:var(--accent);box-shadow:0 2px 8px rgba(37,99,235,.1)}
.perm-tile:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--surface));box-shadow:inset 0 0 0 1px var(--accent)}
.perm-tile input{position:absolute;top:9px;right:9px;width:15px;height:15px;accent-color:var(--accent)}
.perm-tile-title{padding-right:18px;font-size:13px;font-weight:700;color:var(--text)}
.perm-tile-key{margin-top:4px;font-size:10px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.perm-tile-note{margin-top:4px;font-size:10px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.perm-tile.is-locked{opacity:.55;cursor:not-allowed;background:var(--surface-2)}
.perm-tile.is-module-disabled{opacity:.45;filter:grayscale(.25)}
@media (max-width:720px){.perm-g-layout{grid-template-columns:1fr}.perm-g-sidebar{display:flex;gap:4px;overflow:auto;border-right:0;border-bottom:1px solid var(--border)}.perm-g-sidebar-title{display:none}.perm-g-nav-item{min-width:110px}.perm-tile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.doc-list{list-style:none;padding:0;margin:8px 0 0}
.doc-list li{padding:7px 0;border-bottom:1px dashed var(--border);font-size:13px;line-height:1.6}
.doc-list li:last-child{border-bottom:none}
.doc-list code{background:var(--surface-2);padding:2px 6px;border-radius:6px;font-size:12px;color:var(--accent)}

/* ---------- 登录页（居中卡片 · 主流登录布局） ---------- */
.login-screen{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);overflow:hidden}
.login-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.login-bg::before,.login-bg::after{content:"";position:absolute;border-radius:50%;filter:blur(90px);opacity:.45}
.login-bg::before{width:440px;height:440px;background:radial-gradient(circle,var(--accent),transparent 70%);top:-140px;right:-90px}
.login-bg::after{width:400px;height:400px;background:radial-gradient(circle,var(--accent-2),transparent 70%);bottom:-140px;left:-110px}
.login-card{position:relative;z-index:1;width:100%;max-width:400px;background:var(--surface-solid);border:1px solid var(--border-strong);border-radius:var(--radius-lg);padding:40px 36px 34px;box-shadow:var(--shadow-lg)}
.login-brand{display:flex;align-items:center;gap:12px}
.login-desc{margin:14px 0 0;color:var(--text-3);font-size:13px;line-height:1.65}
.login-form{margin-top:26px}
.login-form .field{margin-bottom:16px}
.login-remember{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--text-2);margin:2px 0 18px;cursor:pointer;user-select:none}
.login-remember input{width:15px;height:15px;accent-color:var(--accent)}
.login-form .btn[type=submit]{width:100%;justify-content:center;padding:13px;font-size:15px}
.login-foot{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:20px;font-size:13px;color:var(--text-3);flex-wrap:wrap}
.login-foot a{color:var(--accent);font-weight:600}
.login-foot a:hover{text-decoration:underline}
.login-foot .sep{color:var(--border-strong)}

/* ---------- 密码显隐切换（统一眼睛图标） ---------- */
.pwd-wrap{position:relative}
.pwd-wrap .input{padding-right:44px}
.pwd-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;cursor:pointer;color:var(--text-3);border-radius:8px;transition:background .15s,color .15s;-webkit-tap-highlight-color:transparent}
.pwd-toggle:hover{background:var(--surface-2);color:var(--accent)}
.pwd-toggle.is-on{color:var(--accent)}
.pwd-toggle svg{width:19px;height:19px;display:block}

/* ---------- 首页版块布局管理器 ---------- */
.sec-list{display:flex;flex-direction:column;gap:10px;margin-bottom:6px}
.sec-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid var(--border);border-radius:14px;background:var(--surface);transition:border-color .2s,box-shadow .2s}
.sec-row:hover{border-color:var(--accent);box-shadow:var(--shadow-sm,0 4px 14px rgba(0,0,0,.08))}
.sec-main{display:flex;align-items:center;gap:10px;min-width:0}
.sec-type{font-size:12px;font-weight:700;color:var(--on-accent);background:var(--accent);padding:3px 9px;border-radius:999px;white-space:nowrap}
.sec-title{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sec-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.sec-actions .btn[disabled]{opacity:.4;cursor:not-allowed}

/* 固定版块标识 */
.sec-row--fixed{border-style:dashed;border-color:var(--border-strong,#cbd2dc)}
.sec-row--fixed:hover{border-color:var(--accent)}
.sec-fixed{font-size:11px;font-weight:700;color:#fff;background:var(--accent);padding:2px 8px;border-radius:999px;white-space:nowrap}

/* 比赛多选勾选 */
.compcheck{display:flex;flex-direction:column;gap:8px;max-height:240px;overflow:auto;padding:10px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2,var(--surface))}
.cc-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:border-color .2s,background .2s}
.cc-item:hover{border-color:var(--accent)}
.cc-item input{margin-top:3px;accent-color:var(--accent);flex-shrink:0}
.cc-item span{display:flex;flex-direction:column;gap:2px;min-width:0}
.cc-item b{font-weight:600;color:var(--text)}
.cc-item i{font-style:normal;font-size:12px;color:var(--muted,#8a8f98)}

/* 展示条数单选 */
.countselect{display:flex;flex-wrap:wrap;gap:8px}
.cs-opt{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:1px solid var(--border);border-radius:999px;cursor:pointer;font-size:14px;color:var(--text);transition:border-color .2s,background .2s,color .2s}
.cs-opt:hover{border-color:var(--accent)}
.cs-opt input{accent-color:var(--accent);margin:0}
.cs-opt:has(input:checked){border-color:var(--accent);background:var(--accent);color:var(--on-accent)}

/* 嵌套列表编辑器（亮点 / 参赛步骤，始终可见的可编辑行） */
.nl-editor{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.nl-empty{padding:12px;text-align:center;border:1px dashed var(--border);border-radius:10px;color:var(--muted,#8a8f98)}
.nl-row{position:relative;display:flex;flex-wrap:wrap;gap:10px;padding:12px 36px 12px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.nl-cell{display:flex;flex-direction:column;gap:4px;flex:1 1 160px;min-width:0}
.nl-cell--full{flex-basis:100%}
.nl-cell label{font-size:12px;color:var(--muted,#8a8f98)}
.nl-cell .input{width:100%}
.nl-del{position:absolute;top:8px;right:8px;width:24px;height:24px;border:none;border-radius:8px;background:var(--danger,#e5484d);color:#fff;cursor:pointer;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;opacity:.85;transition:opacity .2s}
.nl-del:hover{opacity:1}
.nl-add{align-self:flex-start;margin-top:4px}
.nl-cell--auto{flex:0 0 auto}
.nl-cell--page{flex:1 1 220px}
.drag-over{outline:2px dashed var(--accent);outline-offset:2px}

/* 全站配色方案选择器 */
.scheme-picker{padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface-2,var(--surface))}
.scheme-opts{display:flex;flex-wrap:wrap;gap:10px}
.scheme-opt{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1px solid var(--border);border-radius:999px;cursor:pointer;font-size:13.5px;font-weight:600;color:var(--text);background:var(--surface);transition:border-color .2s,box-shadow .2s,transform .15s}
.scheme-opt:hover{transform:translateY(-1px)}
.scheme-opt.is-active{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.scheme-dot{width:18px;height:18px;border-radius:50%;flex:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);background:var(--swatch,var(--primary))}
.scheme-name{white-space:nowrap}

/* 全站配色方案独立页 */
.st-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}
.st-opt{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .15s;position:relative}
.st-opt:hover{transform:translateY(-2px);border-color:var(--primary)}
.st-opt.is-active{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.st-swatch{width:100%;aspect-ratio:16/10;border-radius:10px;background:var(--swatch);box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.st-name{font-weight:700;color:var(--text);font-size:14px}
.st-check{position:absolute;top:10px;right:10px;width:22px;height:22px;border-radius:50%;background:var(--primary);color:var(--on-primary);display:flex;align-items:center;justify-content:center;font-size:12px;opacity:0;transition:opacity .2s}
.st-opt.is-active .st-check{opacity:1}

/* 页头/页底编辑器 */
.logo-preview{padding:12px;border:1px dashed var(--border);border-radius:12px;background:var(--surface-2,var(--surface));text-align:center}
.ft-col{padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface);cursor:grab}
.ft-col-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.ft-col-head .fw-7{margin-right:auto}
.ft-col .field{margin-bottom:12px}
.ft-col .nl-row{padding-right:36px}

/* 开关 */
.switch{position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0}

/* 分段切换（筛选器） */
.seg{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden;background:var(--surface)}
.seg-btn{border:none;background:transparent;padding:7px 16px;font-size:13.5px;font-weight:600;color:var(--text-2);cursor:pointer;transition:background .2s,color .2s}
.seg-btn:hover{color:var(--text)}
.seg-btn.active{background:var(--primary);color:var(--on-primary)}
.switch .slider{position:absolute;cursor:pointer;inset:0;background:var(--border-strong);border-radius:999px;transition:background .2s}
.switch .slider::before{content:"";position:absolute;height:18px;width:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .2s}
.switch input:checked + .slider{background:var(--accent)}
.switch input:checked + .slider::before{transform:translateX(18px)}

/* 图片上传预览 */
.img-thumb{max-width:96px;max-height:54px;border-radius:8px;display:block;object-fit:cover;border:1px solid var(--border)}
.img-prev{margin-top:8px;padding:10px;border:1px dashed var(--border);border-radius:12px;background:var(--surface-2);min-height:44px;display:flex;align-items:center;justify-content:center;text-align:center}
.img-prev img{max-width:100%}

/* 轮播背景取色器（纯色 / 渐变 / 色板，替代手写 CSS 渐变） */
.bg-picker{border:1px solid var(--border);border-radius:12px;padding:12px;background:var(--surface-2)}
.bg-tabs{display:flex;gap:6px;margin-bottom:10px}
.bg-tabs button{padding:6px 14px;border:1px solid var(--border);background:var(--surface);border-radius:999px;cursor:pointer;font-size:13px;color:var(--text-2);transition:all .15s}
.bg-tabs button.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.bg-panel{margin-top:4px}
.bg-panel input[type=color]{width:46px;height:34px;border:1px solid var(--border);border-radius:8px;background:none;cursor:pointer;padding:2px}
.bg-panel input[type=range]{accent-color:var(--accent)}
.swatches{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.swatch{height:46px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:transform .15s,border-color .15s;padding:0}
.swatch:hover{transform:translateY(-2px);border-color:var(--accent)}
.bg-preview{margin-top:10px;font-size:12px;color:var(--text-2);word-break:break-all}
.bg-preview code{background:var(--surface);padding:2px 6px;border-radius:6px;border:1px solid var(--border)}

/* ============ 注册字段管理 ============ */
.rf-layout{display:grid;grid-template-columns:300px 1fr;gap:20px;align-items:start}
@media (max-width:860px){.rf-layout{grid-template-columns:1fr}}
.rf-side{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:16px;position:sticky;top:20px}
.rf-side-head{font-weight:700;font-size:15px;margin-bottom:12px}
.rf-groups{display:flex;flex-direction:column;gap:8px}
.rf-group{background:var(--surface-2,var(--surface));border:1px solid var(--border);border-radius:12px;padding:10px}
.rf-group-head{display:flex;align-items:center;gap:6px}
.rf-group-name{flex:1;font-weight:600;font-size:14px}
.rf-group-count{font-size:12px;color:var(--text-2);background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:1px 8px;min-width:24px;text-align:center}
.rf-ico{width:28px;height:28px;border:1px solid var(--border);background:var(--surface);border-radius:8px;cursor:pointer;color:var(--text-2);font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.rf-ico:hover{border-color:var(--accent);color:var(--accent)}
.rf-del-group:hover{border-color:var(--danger);color:var(--danger)}
.rf-add-group{margin-top:12px;width:100%}

.rf-main{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:16px}
.rf-main-head{display:flex;align-items:center;justify-content:space-between;font-weight:700;font-size:15px;margin-bottom:14px}
.rf-fields{display:flex;flex-direction:column;gap:10px}
.rf-field-row{display:flex;align-items:center;gap:12px;background:var(--surface-2,var(--surface));border:1px solid var(--border);border-radius:12px;padding:12px;cursor:grab;transition:box-shadow .15s,border-color .15s}
.rf-field-row:hover{border-color:var(--accent)}
.rf-field-row.rf-dragging{opacity:.5}
.rf-field-row.rf-drag-over{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft,rgba(79,70,229,.18))}
.rf-drag{color:var(--text-2);font-size:18px;cursor:grab;user-select:none}
.rf-field-main{flex:1;min-width:0}
.rf-field-label{font-weight:600;font-size:14.5px;display:flex;align-items:center;gap:8px}
.rf-core{font-size:11px;font-weight:700;color:var(--accent);background:var(--accent-soft,rgba(79,70,229,.12));border:1px solid var(--border);border-radius:999px;padding:1px 8px}
.rf-field-meta{font-size:12.5px;color:var(--text-2);margin-top:3px}
.rf-field-meta code{background:var(--surface);padding:1px 6px;border-radius:6px;border:1px solid var(--border);font-size:11.5px}
.rf-flags{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}
.rf-flag{font-size:11.5px;font-weight:600;color:var(--text-2);border:1px solid var(--border);border-radius:999px;padding:1px 9px}
.rf-flag.on{color:var(--green,#10b981);border-color:var(--green,#10b981)}
.rf-flag.req{color:var(--red,#ef4444);border-color:var(--red,#ef4444)}
.rf-field-acts{display:flex;gap:8px;flex:none}
.rf-disabled{opacity:.5;cursor:not-allowed}

.rf-edit{padding:2px 0}
.rf-sub{font-weight:700;font-size:13.5px;margin:14px 0 8px;color:var(--text)}
.rf-opts{display:flex;flex-direction:column;gap:8px}
.rf-opt-row{display:grid;grid-template-columns:1fr 1fr 32px;gap:8px;align-items:center}
.rf-opt-del{width:32px;height:32px;border:1px solid var(--border);background:var(--surface);border-radius:8px;cursor:pointer;color:var(--danger,#ef4444)}
.rf-cascade-row{display:grid;grid-template-columns:140px 1fr;gap:10px;align-items:center;margin-bottom:8px}
.rf-cascade-row label{font-size:13.5px;font-weight:600}

/* ==================== 赛事类型模版 · 金数据风格表单构建器 ==================== */
.ct-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:18px}
.ct-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:18px;box-shadow:var(--shadow);transition:all .2s}
.ct-card:hover{box-shadow:0 6px 18px rgba(0,0,0,.08);transform:translateY(-1px)}
.ct-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.ct-card-title{font-size:16px;font-weight:700;color:var(--text)}
.ct-card-desc{font-size:12.5px;color:var(--text-2);margin:0 0 6px;line-height:1.5;min-height:18px}
.ct-card-meta{font-size:12px;color:var(--text-2);margin:10px 0 6px}
.ct-card-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.ct-card-actions{display:flex;gap:8px;margin-top:8px;padding-top:12px;border-top:1px dashed var(--border)}

.fb-builder{display:grid;grid-template-columns:240px 1fr 320px;min-height:600px;height:calc(100vh - 240px);border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--surface);box-shadow:0 2px 10px rgba(0,0,0,.04)}
.fb-pane{overflow-y:auto;overflow-x:hidden}
.fb-pane::-webkit-scrollbar{width:6px}
.fb-pane::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}
.fb-palette{background:#fafbfc;border-right:1px solid var(--border);padding:14px}
.fb-canvas{padding:20px;background:#fff}
.fb-settings{background:#fafbfc;border-left:1px solid var(--border);padding:14px}
.fb-topbar{display:flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--border);border-radius:14px;background:var(--surface);margin-bottom:12px;flex-wrap:wrap}
.fb-back-link{color:var(--accent);cursor:pointer;font-size:13px;font-weight:600;user-select:none}
.fb-back-link:hover{text-decoration:underline}
.fb-grow{flex:1}

.fb-palette-group{margin-bottom:18px}
.fb-palette-group h4{font-size:12px;color:var(--text-2);margin:0 0 8px;text-transform:uppercase;letter-spacing:.5px;font-weight:700}
.fb-palette-item{display:flex;align-items:center;gap:8px;padding:9px 11px;background:#fff;border:1px solid var(--border);border-radius:8px;cursor:pointer;margin-bottom:5px;font-size:13px;transition:all .15s;user-select:none}
.fb-palette-item:hover{border-color:var(--accent);background:#eef6ff;transform:translateX(2px)}
.fb-pi-ico{width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--accent);border-radius:6px;font-weight:700;font-size:13px;flex-shrink:0}

.fb-empty{text-align:center;padding:50px 20px;color:var(--text-2)}
.fb-empty-icon{font-size:46px;margin-bottom:10px;opacity:.45}

.fb-field{position:relative;padding:18px 50px 18px 42px;border:2px dashed #e5e7eb;border-radius:10px;margin-bottom:12px;background:#fff;cursor:grab;transition:all .15s}
.fb-field:active{cursor:grabbing}
.fb-field input,.fb-field select,.fb-field textarea{cursor:text}
.fb-field-actions button{cursor:pointer}
.fb-field:hover{border-color:#93c5fd}
.fb-field.selected{border:2px solid var(--accent);background:#f0f7ff;box-shadow:0 2px 8px rgba(37,99,235,.12)}
.fb-field-no{position:absolute;left:12px;top:14px;font-size:11px;color:var(--text-2);font-weight:700;background:#f3f4f6;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:50%}
.fb-field.selected .fb-field-no{background:var(--accent);color:#fff}
.fb-field-actions{position:absolute;right:8px;top:8px;display:flex;gap:3px;opacity:0;transition:opacity .15s}
.fb-field:hover .fb-field-actions,.fb-field.selected .fb-field-actions{opacity:1}
.fb-field-label{font-weight:600;font-size:14px;color:var(--text);display:flex;align-items:center;gap:4px}
.fb-field-help{font-size:12px;color:var(--text-2);margin-top:3px;line-height:1.4}
.fb-field-body{margin-top:10px;padding:10px;background:#f9fafb;border-radius:6px;font-size:13px;color:var(--text-2)}
.fb-field-body .input{margin-bottom:0}
.fb-req{color:#ef4444;font-weight:700}
.fb-idx{color:var(--text-2);font-weight:700;margin-right:2px}
.fb-file-drop{text-align:center;padding:12px;border:1px dashed #d1d5db;border-radius:6px;background:#fff}
.fb-file-tip{font-size:13px;color:var(--text-2);margin-bottom:4px}
.fb-file-meta{font-size:11px;color:var(--text-2)}
/* 参赛编号规则（确认码）配置弹窗 */
.cr-rows{display:flex;flex-direction:column;gap:8px;margin-bottom:6px}
.cr-row{display:flex;align-items:center;gap:8px}
.cr-row .select,.cr-row .input{flex:0 0 auto}
.cr-ctrl{display:flex;align-items:center;gap:6px;flex:1;flex-wrap:wrap}
.cr-preview{font-size:15px;font-weight:700;color:var(--primary);padding:6px 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;word-break:break-all}

.fb-iconbtn{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:#fff;border-radius:6px;cursor:pointer;font-size:12px;color:var(--text-2);padding:0;line-height:1}
.fb-iconbtn:hover{background:#f3f4f6;color:var(--text)}
.fb-iconbtn--danger:hover{background:#fef2f2;color:#dc2626;border-color:#fecaca}

.fb-settings-head{padding-bottom:12px;margin-bottom:14px;border-bottom:1px solid var(--border)}
.fb-settings-title{font-size:15px;font-weight:700;color:var(--text);margin-bottom:3px}
.fb-setting-group{margin-bottom:18px;padding-bottom:14px;border-bottom:1px dashed var(--border)}
.fb-setting-group:last-child{border-bottom:none;padding-bottom:0}
.fb-setting-group h5{font-size:12px;color:var(--text-2);margin:0 0 10px;text-transform:uppercase;letter-spacing:.5px;font-weight:700}
.fb-setting-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.fb-setting-row label{flex:0 0 80px;font-size:13px;color:var(--text-2);font-weight:500}
.fb-setting-row .input,.fb-setting-row .select,.fb-setting-row .textarea{flex:1;min-width:0}
.fb-setting-row .switch{flex:0 0 auto}
.fb-setting-row .textarea{resize:vertical;min-height:60px}

.fb-option-row{display:flex;gap:6px;margin-bottom:6px;align-items:center}
.fb-option-row .input{flex:1;min-width:0}

@media (max-width:1280px){
  .fb-builder{grid-template-columns:200px 1fr 280px}
}
@media (max-width:1024px){
  .fb-builder{grid-template-columns:1fr;height:auto}
  .fb-palette,.fb-settings{border:none;border-top:1px solid var(--border);max-height:400px}
}

/* ======================== 中文日历（date-picker.js） ======================== */
.cdp-layer { position: absolute; z-index: 300; }
.cdp-pop { width: 300px; background: var(--surface-solid); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow-lg); padding: 12px; animation: pop .25s var(--ease); }
.cdp-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.cdp-title { font-weight: 700; font-size: 15px; color: var(--text); cursor: pointer; }
.cdp-nav { width: 30px; height: 30px; border: none; background: var(--surface-2); border-radius: 8px; cursor: pointer; color: var(--text-2); font-size: 16px; }
.cdp-nav:hover { background: var(--primary-soft); color: var(--primary); }
.cdp-close { width: 30px; height: 30px; border: none; background: var(--surface-2); border-radius: 8px; cursor: pointer; color: var(--text-2); font-size: 18px; line-height: 1; display: flex; align-items: center; justify-content: center; }
.cdp-close:hover { background: #fde2e2; color: #e23c3c; }
.cdp-week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; margin-bottom: 4px; }
.cdp-week span { text-align: center; font-size: 12px; color: var(--text-3); padding: 4px 0; }
.cdp-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.cdp-blank { height: 30px; }
.cdp-day { height: 30px; border: none; background: transparent; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--text); transition: all .15s; }
.cdp-day:hover { background: var(--primary-soft); color: var(--primary); }
.cdp-day.is-today { box-shadow: inset 0 0 0 1px var(--primary); }
.cdp-day.is-sel { background: var(--primary); color: var(--on-primary); font-weight: 700; }
.cdp-years, .cdp-months { display: grid; gap: 6px; }
.cdp-years { grid-template-columns: repeat(4, 1fr); }
.cdp-months { grid-template-columns: repeat(3, 1fr); }
.cdp-yr, .cdp-mo { padding: 8px 4px; border: 1px solid var(--border); background: var(--surface); border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--text); }
.cdp-yr:hover, .cdp-mo:hover { border-color: var(--primary); color: var(--primary); }
.cdp-yr.is-sel, .cdp-mo.is-sel { background: var(--primary); color: var(--on-primary); border-color: var(--primary); }
.cdp-foot { margin-top: 8px; text-align: center; }
.cdp-today { border: 1px solid var(--border); background: var(--surface); border-radius: 8px; padding: 6px 16px; cursor: pointer; font-size: 13px; color: var(--primary); font-weight: 600; }
.cdp-today:hover { background: var(--primary-soft); }

/* 封面图上传（新建赛事·基础信息） */
.cover-upload { display:flex; align-items:center; gap:14px; }
.cover-prev { width:96px; height:96px; border-radius:12px; border:1px dashed var(--border-strong); background:var(--surface-2) center/cover no-repeat; flex:none; display:flex; align-items:center; justify-content:center; color:var(--text-3); font-size:12px; text-align:center; overflow:hidden; }
.cover-prev img { width:100%; height:100%; object-fit:cover; }
.cover-actions { display:flex; flex-direction:column; gap:8px; }
.cover-clear { font-size:12px; color:var(--red); cursor:pointer; background:none; border:none; padding:0; }

/* 加分项配置（赛事类型模版字段设置） */
.bonus-on { color: var(--primary); font-weight:600; }
.bonus-opts { margin-top:8px; display:flex; flex-direction:column; gap:6px; }
.bonus-opt-row { display:flex; align-items:center; gap:8px; }
.bonus-opt-row .bo-label { flex:1; min-width:0; font-size:13px; color:var(--text-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bonus-opt-row .input { max-width:84px; }
.bonus-note { font-size:12px; color:var(--text-3); margin-top:6px; line-height:1.5; }

/* 字段预览中的加分标识 */
.fb-bonus-tag { display:inline-block; margin-left:6px; padding:1px 7px; border-radius:999px; font-size:11px; font-weight:700; line-height:1.6; color:#fff; background:#16a34a; vertical-align:middle; }
.fb-opt-bonus { display:inline-block; margin-left:3px; padding:0 6px; border-radius:6px; font-size:11px; font-weight:700; color:#16a34a; background:rgba(22,163,74,.12); }
.ct-bonus-badge { display:inline-block; margin-left:8px; padding:2px 8px; border-radius:999px; font-size:12px; font-weight:700; color:#16a34a; background:rgba(22,163,74,.12); }

/* —— 模板编辑器增强：拖拽 / 内联标题 / 地址 / 矩阵 / 板块 —— */
.fb-drag-handle{position:absolute;left:6px;top:8px;cursor:grab;color:#cbd5e1;font-size:15px;user-select:none;line-height:1}
.fb-drag-handle:active{cursor:grabbing}
.fb-drag-handle:hover{color:var(--accent)}
.fb-field{padding-left:48px}
.fb-field-no{left:28px}
.fb-field.dragging{opacity:.4;border-style:solid;box-shadow:0 10px 24px rgba(0,0,0,.16);background:#fff}
.fb-field-label-text{outline:none;border-bottom:1px dashed transparent;padding:0 2px;cursor:text;border-radius:3px;min-width:24px;display:inline-block}
.fb-field-label-text:hover{border-bottom-color:#93c5fd;background:#f0f7ff}
.fb-field-label-text:focus{border-bottom-color:var(--accent);background:#eef6ff}
.fb-import-box{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:12px 14px}
.fb-import-box>div:last-child{margin-bottom:0}
.fb-import-box label{font-size:12px;color:var(--text-2);font-weight:600}
.fb-other-input{flex:0 0 200px;min-width:160px;margin-left:6px}
.fb-addr-row{display:flex;gap:8px}
.fb-addr-row .fb-addr-sel{flex:1;min-width:90px}
.fb-section-desc{padding:14px 16px;background:#f1f5f9;border-left:3px solid var(--accent);border-radius:8px;color:#334155;font-size:13px;line-height:1.6;white-space:pre-wrap}
.fb-page-break{margin:4px 0 2px;border-top:2px dashed #cbd5e1;padding-top:8px;color:#64748b;font-size:12px;font-weight:600;letter-spacing:.5px}
.fb-matrix{overflow-x:auto;margin-top:4px}
.fb-mx-table{border-collapse:collapse;width:100%;font-size:12px}
.fb-mx-table th,.fb-mx-table td{border:1px solid #e5e7eb;padding:6px 8px;text-align:left;vertical-align:top}
.fb-mx-table th{background:#f8fafc;font-weight:600;color:#475569}
.fb-mx-corner{width:90px}
.fb-mx-rowhead{background:#f8fafc;white-space:nowrap;color:#475569}
.fb-mx-row{display:flex;gap:6px;margin-bottom:6px;align-items:center}
.fb-mx-row .input{flex:1;min-width:0}
.fb-mx-col{margin-bottom:8px;padding:8px;background:#f8fafc;border:1px solid var(--border);border-radius:6px}
.fb-mx-col .input{flex:1;min-width:0;margin-bottom:4px}
.fb-mx-opts{margin-top:4px;padding-left:8px}

/* ====================== 投票管理模块 ====================== */
.va-opt-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.va-opt-idx{width:18px;flex:0 0 18px;text-align:right;color:var(--text-3);font-size:12.5px;font-weight:600}
.va-opt-row .input{flex:1;min-width:0}
.va-opt-del{flex:0 0 auto;padding:6px 10px;line-height:1}

.vote-opts{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.vote-opt{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:border-color .15s,background .15s}
.vote-opt:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));background:var(--primary-soft)}
.vote-opt:has(input:checked){border-color:var(--accent);background:var(--primary-soft)}
.vote-opt input{accent-color:var(--accent);width:16px;height:16px}

.vote-tally-row{display:flex;align-items:center;gap:12px;padding:8px 0}
.vote-tally-label{flex:0 0 160px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:#334155;font-weight:600}
.vote-bar{flex:1;height:14px;background:#eef2f7;border-radius:7px;overflow:hidden}
.vote-bar-fill{height:100%;background:var(--accent);border-radius:7px;transition:width .35s ease}
.vote-tally-num{flex:0 0 auto;font-size:13px;color:var(--text-2)}

/* ============================================================
   * 投票管理 · 构建器（左 palette / 中 canvas / 右 settings）
   * 修复：此前缺失本段 CSS 导致 aside 塌成竖排，新建活动不再是左中右
   * ==========================================================*/
.vb-edit-wrap{display:flex;flex-direction:column;gap:14px}
/* 三栏宽度（唯一真源见下方 --vb-col-* 变量）：宽屏维持 320/520，窄屏自动让位给中间画布。
   曾用固定 320+520，在 1440 屏把画布挤到 212px、白卡仅 137px。
   注意外层先吃掉 344px：.sidebar 264px + .content--wide 左右各 40px。 */
.vb-builder{display:grid;grid-template-columns:var(--vb-col-left) minmax(0,1fr) var(--vb-col-right);gap:14px;align-items:start}
.vb-pane{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px;padding:14px}
.vb-palette-group{margin-bottom:14px}
.vb-palette-group h4{margin:0 0 8px;font-size:12px;color:var(--text-2);letter-spacing:.04em;text-transform:none}
.vb-palette-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border,#e6edf3);border-radius:8px;margin-bottom:6px;cursor:grab;font-size:13px;transition:border-color .15s,background .15s}
.vb-palette-item:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,#fff)}
.vb-pi-ico{width:22px;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 12%,#fff);border-radius:6px;font-size:13px}
.vb-pane-title{font-weight:700;font-size:14px;margin:0 0 10px}
.vb-canvas{min-height:240px}
.vb-empty{padding:48px 16px;text-align:center;color:var(--text-2);border:2px dashed var(--border,#e6edf3);border-radius:10px}
.vb-empty-icon{font-size:32px;margin-bottom:6px}
.vb-field{position:relative;border:1px solid transparent;border-radius:10px;padding:12px 12px 12px 44px;margin-bottom:10px;transition:border-color .15s,background .15s}
.vb-field:hover{border-color:var(--border,#e6edf3);background:color-mix(in srgb,var(--accent) 3%,#fff)}
.vb-field.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,#fff)}
.vb-drag-handle{position:absolute;left:10px;top:14px;cursor:grab;color:var(--text-2);font-size:14px}
.vb-field-no{position:absolute;left:26px;top:34px;font-size:11px;color:var(--text-2)}
.vb-field-label{font-weight:600;font-size:14px;margin-bottom:6px}
.vb-field-label-text{outline:none}
.vb-field-label-text:focus{box-shadow:0 1px 0 var(--accent)}
.vb-req{color:#ef4444;margin-left:3px}
.vb-idx{display:inline-block;font-size:11px;color:var(--text-2);margin-right:4px}
.vb-field-help{font-size:12px;color:var(--text-2);margin-bottom:6px}
.vb-field-body{font-size:14px}
.vb-field-actions{position:absolute;right:10px;top:10px;display:flex;gap:4px;opacity:0;transition:opacity .15s}
.vb-field:hover .vb-field-actions{opacity:1}
.vb-iconbtn{border:1px solid var(--border,#e6edf3);background:#fff;border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:12px;color:var(--text-2)}
.vb-iconbtn:hover{border-color:var(--accent);color:var(--accent)}
.vb-iconbtn--danger:hover{border-color:#ef4444;color:#ef4444}
.vb-section-desc{border-radius:6px;font-size:13px}
.vb-page-break{font-size:13px;color:var(--text-2)}
.vb-file-drop{border:2px dashed var(--border,#e6edf3);border-radius:10px;padding:18px;text-align:center;color:var(--text-2)}
.vb-file-tip{font-size:14px}
.vb-file-meta{font-size:12px;margin-top:6px}
.vb-settings-head{font-weight:700;font-size:14px;margin:0 0 10px}
.vb-setting-group{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border,#e6edf3)}
.vb-setting-group:last-child{border-bottom:none}
.vb-setting-group h5{margin:0 0 8px;font-size:13px}
.vb-setting-row{display:flex;align-items:center;justify-content:flex-start;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.vb-setting-row label{font-size:13px;color:var(--text-2);flex:0 0 auto}
/* 文本输入框/颜色/下拉/复合控件都紧贴标签右侧，方便就近编辑（不再被 space-between 推到整行最右，用户要求"不要离那么远"） */
.vb-setting-row .input{width:200px;max-width:100%;flex:1 1 200px;min-width:160px}
.vb-setting-row .textarea{width:100%;flex:1 1 100%}
.vb-setting-row input[type=color]{flex:0 0 auto}
.vb-setting-row select{flex:0 1 auto;min-width:140px}
.vb-setting-row .flex{flex:1 1 auto;gap:8px;min-width:0}
/* 开关后紧跟的说明文字单独成行，不再挤在开关右侧 */
.vb-setting-row:has(.switch) > .cell-sub{flex-basis:100%;margin-left:0}
.vb-section-h{margin:14px 0 8px;font-size:13px;font-weight:700;color:var(--accent)}
/* 提交成果页按钮：每个按钮配置行用卡片分隔，清晰可辨 */
.vb-success-btn-row{margin:10px 0;padding:12px;border:1px solid var(--border,#e6edf3);border-radius:10px;background:color-mix(in srgb,var(--accent) 3%,#fff)}
.vb-success-btn-row .sb-row-head{font-size:12px;font-weight:600;color:var(--text-2);margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--border,#e6edf3)}
.vb-banner-row{margin-bottom:10px}
.vb-banner-preview{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:color-mix(in srgb,var(--accent) 12%,#fff);border:1px solid var(--border,#e6edf3);min-height:96px;overflow:hidden}
.vb-banner-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.vb-banner-actions .btn-danger{color:#dc2626;border-color:#fecaca}
.vb-banner-actions .btn-danger:hover{background:#fee2e2}
.vb-banner-filename{font-size:12px;color:var(--text-2,#94a3b8);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vb-color-palette{display:flex;flex-wrap:wrap;gap:6px}
.vb-color-swatch{width:24px;height:24px;border-radius:6px;border:2px solid transparent;cursor:pointer}
.vb-color-swatch.active{border-color:#0f172a;box-shadow:0 0 0 2px #fff inset}
.vb-color-input{width:34px;height:24px;border:1px solid var(--border,#e6edf3);border-radius:6px;padding:0;cursor:pointer}
.vb-opt-row,.vb-mat-row{display:flex;align-items:center;gap:6px;margin-bottom:6px;flex-wrap:wrap}
.vb-option-row{display:flex;align-items:center;gap:4px;margin-bottom:6px;flex-wrap:nowrap}
.vb-option-row .vb-opt-label-input{flex:1;min-width:60px}
.vb-option-row .vb-opt-value-input{width:70px;max-width:70px;flex:none}
.vb-option-row .vb-opt-upload-btn{flex:none;width:28px;height:28px;text-align:center;font-size:13px}
.vb-opt-check{font-size:12px;color:var(--text-2);display:flex;align-items:center;gap:3px;flex:none}
.vb-preview-opts{display:flex;gap:8px}
.vb-preview-opts--vertical{flex-direction:column}
.vb-preview-opts--horizontal{flex-direction:row;flex-wrap:wrap;align-items:center}
.vb-preview-opts--vertical .vb-preview-opt{margin-bottom:4px}
.vb-preview-opts--horizontal .vb-preview-opt{margin-right:12px}
.vb-preview-opt img{width:48px;height:48px;object-fit:cover;border-radius:6px;vertical-align:middle;margin-right:4px}
.vb-file-types{display:flex;flex-wrap:wrap;gap:4px}
.vb-file-type-chip{display:inline-flex;align-items:center;gap:3px;font-size:12px;padding:3px 8px;border:1px solid var(--border,#e6edf3);border-radius:6px;cursor:pointer;user-select:none}
.vb-file-type-chip input{margin:0}
.vb-file-type-chip:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,#fff)}
/* 文件类型下拉多选 */
.vb-file-type-dropdown{position:relative;width:100%}
.vb-dropdown-trigger{display:flex;align-items:center;justify-content:space-between;width:100%;padding:7px 10px;border:1px solid var(--border,#e6edf3);border-radius:8px;background:var(--card,#fff);cursor:pointer;font-size:13px;transition:border-color .15s,box-shadow .15s}
.vb-dropdown-trigger:hover{border-color:var(--accent)}
.vb-dropdown-trigger.open{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}
.vb-file-type-summary{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.vb-dropdown-arrow{flex-shrink:0;margin-left:8px;transition:transform .2s;color:var(--text-2,#94a3b8)}
.vb-dropdown-trigger.open .vb-dropdown-arrow{transform:rotate(180deg)}
.vb-dropdown-panel{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;max-height:280px;overflow-y:auto;background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.12);padding:4px}
.vb-dropdown-panel .vb-file-type-chip{display:flex;width:100%;align-items:center;gap:6px;border:none;border-radius:6px;margin-bottom:2px;padding:6px 8px;font-size:13px}
.vb-dropdown-panel .vb-file-type-chip:hover{background:color-mix(in srgb,var(--accent) 6%,#fff)}
.vb-dropdown-panel .vb-file-type-chip:has(input:checked){background:color-mix(in srgb,var(--accent) 10%,#fff)}
.vb-ft-ext{font-weight:600;min-width:40px;font-size:12px}
.vb-ft-label{color:var(--text-2,#94a3b8);font-size:12px}
.vb-mat-fill-input{font-size:13px;padding:4px 6px}
.vb-preview-idx{font-weight:600;color:var(--text-2);margin-right:4px}
/* ★ 2026-08-15 顶部 sticky：标题行 + tab栏 + 表单状态 全固定在页面顶部 */
.vb-edit-sticky{
  position:sticky; top:72px; z-index:50;
  display:flex; flex-direction:column; gap:6px;
  padding:10px 14px 12px;
  background:color-mix(in srgb, var(--card,#fff) 92%, transparent);
  -webkit-backdrop-filter:saturate(160%) blur(8px);
  backdrop-filter:saturate(160%) blur(8px);
  border:1px solid var(--border,#e6edf3);
  border-radius:12px;
  box-shadow:0 2px 10px rgba(15,23,42,.04);
}
.vb-edit-sticky .vb-topbar{
  border:none;padding:0;background:transparent;box-shadow:none;
  display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;width:100%;
}
.vb-edit-sticky .vb-topbar-left{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:0}
.vb-edit-sticky .vb-back{
  width:28px;height:28px;display:flex;align-items:center;justify-content:center;
  border-radius:8px;background:color-mix(in srgb,var(--accent) 8%,#fff);
  color:var(--accent);font-size:16px;text-decoration:none;flex-shrink:0
}
.vb-edit-sticky .vb-back:hover{background:color-mix(in srgb,var(--accent) 16%,#fff)}
.vb-edit-sticky .vb-topbar-title{
  font-weight:700;font-size:15px;
  width:340px;max-width:32vw;min-width:240px;flex:none;
  padding:6px 10px;border-radius:8px
}
/* 表单状态栏：并入顶栏第一行，紧凑 pills */
.vb-edit-sticky .vb-form-status-bar{
  border:none;padding:0;background:transparent;margin:0;
  display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:nowrap;
  min-width:0;
}
.vb-edit-sticky .vb-status-label{font-size:12px;font-weight:700;color:var(--text-2);padding-left:0;white-space:nowrap}
.vb-edit-sticky .vb-status-row{display:flex;align-items:center;gap:6px;flex:0 1 auto;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
.vb-edit-sticky .vb-status-row::-webkit-scrollbar{display:none}
.vb-edit-sticky .vb-status-pill{
  display:inline-flex;align-items:center;gap:6px;
  padding:6px 16px;border-radius:999px;border:1px solid var(--border,#e6edf3);
  background:var(--card,#fff);color:var(--text);font-size:13px;cursor:pointer;white-space:nowrap;
  transition:background .25s var(--ease),border-color .25s var(--ease),box-shadow .25s var(--ease),transform .25s var(--ease),color .25s var(--ease)
}
.vb-edit-sticky .vb-status-pill:hover{background:color-mix(in srgb,var(--accent) 8%,#fff);border-color:color-mix(in srgb,var(--accent) 50%,var(--border));transform:translateY(-2px);box-shadow:0 4px 12px rgba(79,70,229,.10)}
.vb-edit-sticky .vb-status-pill.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700;box-shadow:0 6px 18px rgba(79,70,229,.28);transform:translateY(-2px) scale(1.04)}
.vb-edit-sticky .vb-status-dot{width:7px;height:7px;border-radius:50%;box-shadow:0 0 0 2px rgba(255,255,255,.35)}
.vb-edit-sticky .vb-status-name{line-height:1}
.vb-edit-sticky .vb-topbar-ops{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;flex-shrink:0}
 .vb-edit-sticky .vb-topbar-ops{justify-self:end}
 .vb-edit-sticky .vb-top-editor-tools{gap:8px;flex:0 0 auto}
.vb-edit-sticky .vb-header-status,.vb-edit-sticky .vb-header-action{display:inline-flex;align-items:center;height:34px;box-sizing:border-box;border-radius:6px;font-size:12px;font-weight:600;white-space:nowrap}
.vb-edit-sticky .vb-header-status{gap:7px;padding:0 10px;border:1px solid #bfdbfe;background:#eff6ff;color:#2563eb}
.vb-edit-sticky .vb-topbar-ops .btn{padding:6px 12px;font-size:13px}
.vb-edit-sticky .vb-topbar-ops .btn-secondary{background:var(--accent);color:#fff;border-color:var(--accent)}
.vb-edit-sticky .vb-topbar-ops .btn-secondary:hover{background:color-mix(in srgb,var(--accent) 88%,#000)}
.vb-edit-sticky .vb-header-action{padding:0 12px;color:var(--text-2);background:var(--surface);border:1px solid var(--border)}
.vb-edit-sticky .vb-header-action:hover{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,#fff)}
.vb-edit-sticky .vb-op-del{color:var(--danger,#ef4444);background:transparent;border:none;padding:6px 10px}
.vb-edit-sticky .vb-op-del:hover{color:#fff;background:var(--danger,#ef4444)}
/* tab 栏：铺满宽度 + 滑动 active 动效 */
.vb-edit-sticky .vb-tabs{
  width:100%;
  border:none;padding:0;background:transparent;
  display:flex;gap:4px;
}
.vb-edit-sticky .vb-tab{
  flex:1;min-width:0;text-align:center;white-space:nowrap;
  padding:8px 6px;font-size:13px;border-radius:8px;
  position:relative;overflow:hidden;
  color:var(--text-2);
  background:var(--surface-solid,#fff);
  border:1px solid var(--border,#e6edf3);
  transition:color .35s var(--ease), border-color .25s var(--ease), box-shadow .25s var(--ease);
}
.vb-edit-sticky .vb-tab::before{
  content:"";position:absolute;inset:0;background:var(--accent);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .4s var(--ease);
  border-radius:inherit;z-index:0
}
.vb-edit-sticky .vb-tab.active{color:#fff;border-color:transparent}
.vb-edit-sticky .vb-tab.active::before{transform:scaleX(1)}
.vb-edit-sticky .vb-tab span{position:relative;z-index:1}
.vb-edit-sticky .vb-tab:not(.active):hover{
  color:var(--accent);
  border-color:color-mix(in srgb,var(--accent) 45%,var(--border));
  box-shadow:0 2px 10px rgba(79,70,229,.08)
}
@media (max-width:1100px){
  .vb-edit-sticky .vb-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:thin;padding-bottom:4px}
  .vb-edit-sticky .vb-tab{flex:0 0 auto;min-width:112px}
}
.vb-topbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 14px;background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px}
.vb-back{color:var(--accent);cursor:pointer;font-size:13px;text-decoration:none}
.vb-back:hover{text-decoration:underline}
.vb-tabs{display:flex;align-items:center;gap:4px;padding:6px 8px;background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px;flex-wrap:wrap}
.vb-tab{border:none;background:transparent;padding:8px 16px;border-radius:8px;cursor:pointer;font-size:14px;color:var(--text-2)}
.vb-tab:hover{background:color-mix(in srgb,var(--accent) 8%,#fff)}
.vb-tab.active{background:var(--accent);color:#fff}
.vb-tab-body{margin-top:14px}
.vb-status-badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#fff;padding:3px 10px;border-radius:999px}
.vb-dot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.85)}
.vb-submit-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px;position:sticky;bottom:0}
.vb-chip{display:inline-block;font-size:12px;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,#fff);color:var(--accent);margin:0 4px 4px 0}
.vb-list{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media (max-width:1200px){.vb-list{grid-template-columns:repeat(3,1fr)}}
@media (max-width:900px){.vb-list{grid-template-columns:repeat(2,1fr)}}
@media (max-width:600px){.vb-list{grid-template-columns:1fr}}
.vb-card{border:1px solid var(--border,#e6edf3);border-radius:14px;padding:14px;background:var(--card,#fff);display:flex;flex-direction:column;transition:border-color .2s,box-shadow .2s,transform .2s}
.vb-card:hover{border-color:color-mix(in srgb,var(--accent) 40%,var(--border));box-shadow:0 10px 28px rgba(15,23,42,.08);transform:translateY(-2px)}
.vb-card-title-wrap{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:10px;min-height:44px}
.vb-card-select{flex:0 0 auto;display:inline-flex;align-items:center}.vb-card-select input,.vb-list-select-all input{width:16px;height:16px;accent-color:var(--primary,#2563eb)}
.vb-card-title{font-weight:700;font-size:16px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:1}
.vb-card-meta{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px;color:var(--text-2,#64748b);font-size:12px;line-height:1.4}
.vb-card-meta span{white-space:nowrap}
.vb-card-cover{height:150px;border-radius:10px;background-size:cover;background-position:center;background-color:color-mix(in srgb,var(--accent) 10%,#fff);margin-bottom:12px;position:relative;overflow:hidden}
.vb-card-cover--empty{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-2);gap:8px;background:var(--surface-2)}
.vb-card-cover-ico{width:64px;height:auto;opacity:.45}
.vb-card-cover--empty span{font-size:12px}
.vb-card-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:auto;padding-top:12px;border-top:1px solid var(--border,#e6edf3)}
.vb-card-count{display:none}
.vb-card-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.vb-card-actions--row{display:flex;gap:6px;flex-wrap:wrap;width:100%;justify-content:flex-start}
.vb-stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px}
.vb-stat-card{background:color-mix(in srgb,var(--accent) 6%,#fff);border-radius:10px;padding:12px;text-align:center}
.vb-stat-num{font-size:20px;font-weight:700;color:var(--accent)}
.vb-report-block{margin-bottom:16px}
.vb-report-table{width:100%;border-collapse:collapse;font-size:13px}
.vb-report-table th,.vb-report-table td{border:1px solid var(--border,#e6edf3);padding:6px 10px;text-align:left}
.vb-report-table th{background:color-mix(in srgb,var(--accent) 8%,#fff)}
.is-vote-detail .vb-report-results .vb-report-table th:nth-child(1),
.is-vote-detail .vb-report-results .vb-report-table td:nth-child(1){width:72px;text-align:center}
.is-vote-detail .vb-report-results .vb-report-table th:nth-child(n+3),
.is-vote-detail .vb-report-results .vb-report-table td:nth-child(n+3){width:110px;text-align:center}
.vb-rpt-matrix-toggle{display:inline-flex;align-items:center;justify-content:center;gap:5px;width:100%;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}
.vb-rpt-matrix-toggle span{width:14px;color:#2563eb;font-size:14px;line-height:1}
.vb-rpt-matrix-toggle b{font-weight:700}
.vb-rpt-matrix-toggle:hover{color:#2563eb}
.vb-rpt-mitem.is-collapsed{display:none}

/* 投票后台首屏：活动卡片保持可扫读，编辑操作在窄屏下稳定换行。 */
.vb-list{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;align-items:stretch}
.vb-card{border-radius:12px;padding:16px;min-width:0}
.vb-card-actions--row .btn{min-height:34px}
.vb-edit-sticky .vb-tabs{border-radius:10px;position:relative;z-index:2}
.vb-edit-sticky .vb-topbar-ops .vb-op-del{color:var(--red,#ef4444);border-color:color-mix(in srgb,var(--red,#ef4444) 28%,var(--border,#e6edf3))}
.vb-edit-sticky .vb-topbar-ops .vb-op-del:hover{background:color-mix(in srgb,var(--red,#ef4444) 8%,transparent);border-color:var(--red,#ef4444)}

.vb-list-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 16px;padding:10px 12px;background:var(--surface-solid,#fff);border:1px solid var(--border,#e6edf3);border-radius:10px}
.vb-list-select-all{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:13px;color:var(--text-secondary,#475569)}
.vb-list-search{display:flex;align-items:center;gap:6px;flex:1 1 280px;min-width:220px}
.vb-list-search > span{font-size:20px;color:var(--text-2);line-height:1}
.vb-list-search .input{flex:1;min-width:0}
.vb-list-status{width:150px;flex:0 0 150px}
.vb-list-count,.vb-list-pager{font-size:12px;color:var(--text-2);white-space:nowrap}
.vb-list-pager{display:flex;align-items:center;gap:8px;margin-left:auto}
.vb-list-pager--bottom{justify-content:flex-end;margin:16px 0 0;padding-top:12px;border-top:1px solid var(--border,#e6edf3)}
.vb-mobile-panels{display:none}
.vb-publish-check-list{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.vb-publish-check{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--border,#e6edf3);border-radius:9px;background:var(--surface-solid,#fff)}
.vb-publish-check>span{width:20px;height:20px;display:grid;place-items:center;border-radius:50%;font-weight:800;color:#fff;background:#94a3b8;flex:0 0 auto}
.vb-publish-check.is-ok>span{background:#16a34a}.vb-publish-check.is-warn>span{background:#f59e0b}
.vb-publish-check b,.vb-publish-check small{display:block}.vb-publish-check small{margin-top:2px;color:var(--text-2);font-size:12px}
.vb-log-table{min-width:760px}.vb-archive-page{display:flex;flex-direction:column;gap:16px}
.vb-combined-note{display:flex;align-items:flex-start;gap:10px;margin:0 0 14px;padding:10px 12px;border-left:3px solid var(--accent);border-radius:8px;background:color-mix(in srgb,var(--accent) 6%,var(--surface-solid,#fff));color:var(--text-2);font-size:12px;line-height:1.6}
.vb-combined-note b{color:var(--accent);white-space:nowrap}

@media (max-width:900px){
  .vb-edit-sticky .vb-topbar{align-items:stretch}
  .vb-edit-sticky .vb-topbar-left,.vb-edit-sticky .vb-topbar-ops{width:100%;flex-wrap:wrap}
  .vb-edit-sticky .vb-topbar-ops .btn{flex:1 1 auto}
  .vb-edit-sticky .vb-topbar-ops .vb-op-del{flex:0 0 42px}
}

@media (max-width:760px){
  .vb-list-toolbar{align-items:stretch}
  .vb-list-search{flex-basis:100%}
  .vb-list-status{flex:1;width:auto}
  .vb-list-pager{margin-left:0;flex:1;justify-content:flex-end}
  .vb-mobile-panels{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:0 0 10px;padding:4px;background:var(--surface-solid,#fff);border:1px solid var(--border,#e6edf3);border-radius:10px}
  .vb-mobile-panel-btn{border:0;background:transparent;color:var(--text-2);border-radius:7px;padding:8px 6px;font:600 13px inherit}
  .vb-mobile-panel-btn.active{background:var(--accent);color:#fff}
  .vb-builder{display:block!important;min-width:0}
  .vb-builder > .vb-pane{display:none}
  .vb-builder.is-mobile-palette > .vb-pane[data-mobile-pane="palette"],
  .vb-builder.is-mobile-canvas > .vb-pane[data-mobile-pane="canvas"],
  .vb-builder.is-mobile-settings > .vb-pane[data-mobile-pane="settings"]{display:flex}
  .vb-pane.vb-palette,.vb-pane.vb-settings{position:relative;top:auto;max-height:none;overflow:visible;min-height:0}
  .vb-pane.vb-canvas{max-height:none;overflow:hidden}
  .vb-canvas-scroll{max-height:none;overflow:visible}
  .vb-edit-sticky .vb-topbar{display:flex;flex-direction:column;align-items:stretch;gap:8px}
  .vb-edit-sticky .vb-topbar-left{width:100%;min-width:0}
  .vb-edit-sticky .vb-topbar-title{width:100%;max-width:none;min-width:0}
  .vb-edit-sticky .vb-form-status-bar{justify-content:flex-start;overflow:hidden}
  .vb-edit-sticky .vb-topbar-ops{width:100%;display:grid;grid-template-columns:1fr 1fr 42px;gap:5px}
  .vb-edit-sticky .vb-topbar-ops .btn{min-width:0;padding-left:6px;padding-right:6px;overflow:hidden;text-overflow:ellipsis}
  .vb-edit-sticky .vb-tabs{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px}
  .vb-edit-sticky .vb-tab{flex:0 0 auto;min-width:78px}
}
/* 数据报表矩阵滚动条：滑块用页面主蓝 #2563EB，清晰可见（需求2） */
.vb-matrix-scroll{scrollbar-width:thin;scrollbar-color:#2563EB rgba(148,163,184,.18)}
.vb-matrix-scroll::-webkit-scrollbar{width:10px;height:10px}
.vb-matrix-scroll::-webkit-scrollbar-track{background:rgba(148,163,184,.18);border-radius:8px}
.vb-matrix-scroll::-webkit-scrollbar-thumb{background:#2563EB;border-radius:8px;border:2px solid transparent;background-clip:content-box}
.vb-matrix-scroll::-webkit-scrollbar-thumb:hover{background:#1d4ed8;border-radius:8px;border:2px solid transparent;background-clip:content-box}
.vb-pub-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.vb-pub-card{border:1px solid var(--border,#e6edf3);border-radius:10px;padding:10px;text-align:center;cursor:pointer;font-size:13px;transition:border-color .15s,background .15s,box-shadow .15s,transform .15s}
.vb-pub-card:hover{border-color:color-mix(in srgb,var(--accent) 45%,#e6edf3)}
.vb-pub-card.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,#fff);font-weight:600;box-shadow:0 2px 12px rgba(37,99,235,.18);transform:translateY(-1px)}
.vb-pub-card.active .vb-pub-name::after{content:" ✓";color:var(--accent)}
.vb-pub-dot{width:10px;height:10px;border-radius:50%;margin:0 auto 6px}
/* 表单状态设置：状态 tab */
.vb-status-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.vb-status-tab{border:1px solid var(--border,#e6edf3);background:#fff;color:#475569;border-radius:8px;padding:7px 14px;font-size:13px;cursor:pointer;transition:all .15s}
.vb-status-tab:hover{border-color:color-mix(in srgb,var(--accent) 45%,#e6edf3)}
.vb-status-tab.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,#fff);color:var(--accent);font-weight:600}
.vb-pub-link-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.vb-pub-link-row .input{flex:1;min-width:200px}
.vb-qr-box{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}
.vb-qr-actions{display:flex;flex-direction:column;gap:6px}
.vb-addr-row{display:flex;gap:6px;flex-wrap:wrap}
.vb-addr-sel{flex:1;min-width:90px}
.vb-other-input{width:160px}

/* 表单发布页：与表单编辑工作区统一视觉，保持原有控件与发布逻辑不变。 */
.is-vote-detail .vb-publish-page{
  width:100%;
  max-width:none;
  box-sizing:border-box;
  padding:18px 24px 56px;
  background:#f8fafc;
}
.is-vote-detail .vb-publish-checklist{
  margin:0 0 16px;
  padding:16px;
  background:#fff;
  border:1px solid #dfe5ec;
  border-radius:10px;
  box-shadow:0 1px 2px rgba(15,23,42,.03);
}
.is-vote-detail .vb-publish-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  min-height:28px;
  margin-bottom:12px;
}
.is-vote-detail .vb-publish-head h3{
  margin:0;
  color:#0f172a;
  font-size:16px;
  line-height:1.4;
}
.is-vote-detail .vb-publish-head span{
  color:#2563eb;
  font-size:12px;
  font-weight:700;
  white-space:nowrap;
}
.is-vote-detail .vb-publish-check-list{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:8px;
  margin:0;
}
.is-vote-detail .vb-publish-check{
  min-width:0;
  align-items:center;
  gap:8px;
  min-height:42px;
  box-sizing:border-box;
  padding:8px 10px;
  border-radius:7px;
  background:#f8fafc;
}
.is-vote-detail .vb-publish-check>span{
  width:18px;
  height:18px;
  font-size:11px;
}
.is-vote-detail .vb-publish-check b{
  min-width:0;
  overflow:hidden;
  color:#334155;
  font-size:12px;
  font-weight:600;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.is-vote-detail .vb-publish-check em{
  margin-left:auto;
  color:#64748b;
  font-size:11px;
  font-style:normal;
  white-space:nowrap;
}
.is-vote-detail .vb-publish-check.is-ok em{color:#16a34a}
.is-vote-detail .vb-publish-check.is-warn em{color:#d97706}
.is-vote-detail .vb-publish-checklist>.cell-sub{
  margin:10px 0 0;
  color:#64748b;
  font-size:12px;
  line-height:1.5;
}
.is-vote-detail .vb-publish-page>.vb-section-h{
  display:flex;
  align-items:center;
  min-height:42px;
  box-sizing:border-box;
  margin:14px 0 0;
  padding:0 14px;
  color:#0f172a;
  background:#f8fafc;
  border:1px solid #dfe5ec;
  border-bottom:0;
  border-radius:8px 8px 0 0;
  font-size:14px;
}
.is-vote-detail .vb-publish-page>.vb-section-h::before{
  content:"";
  width:3px;
  height:16px;
  margin-right:9px;
  border-radius:2px;
  background:#2563eb;
}
.is-vote-detail .vb-publish-page>.vb-setting-group{
  box-sizing:border-box;
  margin:0;
  padding:14px 16px;
  background:#fff;
  border:1px solid #dfe5ec;
  border-radius:0 0 8px 8px;
}
.is-vote-detail .vb-publish-page>.vb-setting-group+.vb-section-h{margin-top:12px}
.is-vote-detail .vb-publish-page .vb-pub-link-row{align-items:stretch;gap:8px}
.is-vote-detail .vb-publish-page .vb-pub-link-row .input{min-width:220px;height:36px;box-sizing:border-box}
.is-vote-detail .vb-publish-page .vb-pub-link-row .btn{height:36px;white-space:nowrap}
.is-vote-detail .vb-publish-page .vb-qr-box{
  display:grid;
  grid-template-columns:160px minmax(0,1fr);
  align-items:center;
  gap:18px;
}
.is-vote-detail .vb-publish-page .vb-qr-img{display:block;box-sizing:border-box}
.is-vote-detail .vb-publish-page .vb-qr-actions{align-items:flex-start;gap:8px}
.is-vote-detail .vb-publish-page .vb-qr-actions .cell-sub{max-width:420px;margin:2px 0 0!important;line-height:1.6}
.is-vote-detail .vb-publish-page .vb-setting-row{min-height:36px;margin-bottom:8px;padding:4px 0;border-bottom:1px solid #f1f5f9}
.is-vote-detail .vb-publish-page .vb-setting-row:last-child{border-bottom:0}
.is-vote-detail .vb-publish-page .vb-setting-row>label:first-child{min-width:120px;color:#334155;font-weight:600}
.is-vote-detail .vb-publish-page .vb-setting-row .input,
.is-vote-detail .vb-publish-page .vb-setting-row .textarea{min-height:36px;box-sizing:border-box}
.is-vote-detail .vb-publish-page .vb-setting-row .textarea{max-width:680px}
.is-vote-detail .vb-publish-page .vb-banner-preview{display:grid;place-items:center;box-sizing:border-box;background:#f1f5f9;border:1px dashed #cbd5e1;border-radius:8px;color:#64748b}
.is-vote-detail .vb-publish-page .vb-setting-group>.cell-sub{color:#64748b;line-height:1.6}
.is-vote-detail .vb-publish-page input[type=file]{max-width:100%;font-size:12px;color:#64748b}

/* 数据报表 / 投票总控台：把状态、流程控制和统计入口形成单一操作区。 */
.is-vote-detail .vb-workbench-pane{gap:16px;padding:16px 24px 56px;background:#f8fafc}
.is-vote-detail .vb-workbench-control{border-color:#cbd5e1;box-shadow:0 3px 12px rgba(15,23,42,.05)}
.is-vote-detail.vb-tab-report .vb-form-status-bar{display:none}
.is-vote-detail .vb-workbench-control .vb-workbench-section-head{min-height:54px;padding:0 18px;background:#f1f5f9}
.is-vote-detail .vb-workbench-control .vb-workbench-section-head h3{font-size:var(--type-section-title)}
.is-vote-detail .vb-control-title{display:flex;align-items:baseline;gap:10px;min-width:0}
.is-vote-detail .vb-control-title>span{color:#64748b;font-size:12px;font-weight:400}
.is-vote-detail .vb-workbench-status{display:inline-flex;align-items:center;gap:6px;margin-left:auto;padding:6px 10px;border:1px solid #bfdbfe;border-radius:6px;background:#eff6ff;color:#475569;font-size:12px}
.is-vote-detail .vb-workbench-status b{color:#2563eb}
.is-vote-detail .vb-workbench-control-grid{grid-template-columns:minmax(300px,1fr) minmax(280px,1.1fr) auto;gap:20px;padding:16px 18px}
.is-vote-detail .vb-workbench-attendee{padding-right:18px;border-right:1px solid #e5e7eb}
.is-vote-detail .vb-workbench-attendee>span{color:#0f172a}
.is-vote-detail .vb-workbench-attendee input{width:112px}
.is-vote-detail .vb-workbench-lifecycle{justify-content:flex-start}
.is-vote-detail .vb-workbench-lifecycle .btn{min-width:108px}
.is-vote-detail .vb-workbench-lifecycle .btn-primary{background:#2563eb;border-color:#2563eb}
.is-vote-detail .vb-workbench-lifecycle .btn-ghost{color:#2563eb;border-color:#93c5fd;background:#eff6ff}
.is-vote-detail .vb-workbench-lifecycle .btn-danger{margin-left:2px;background:#fff7ed;color:#c2410c;border-color:#fdba74}
.is-vote-detail .vb-workbench-lifecycle .btn-danger:hover{background:#ffedd5;border-color:#f97316}
.is-vote-detail .vb-workbench-utility{padding-left:18px;border-left:1px solid #e5e7eb}
.is-vote-detail .vb-workbench-utility .btn-danger{background:#fff7ed;color:#c2410c;border-color:#fdba74}
.is-vote-detail .vb-workbench-utility .btn-danger:hover{background:#ffedd5;border-color:#f97316}
.is-vote-detail .vb-report-results .vb-workbench-section-head,
.is-vote-detail .vb-report-monitor-settings .vb-workbench-section-head{background:#f8fafc}
.is-vote-detail .vb-report-results #rptServerPane{min-height:96px}
.is-vote-detail .vb-report-monitor-settings .vb-report-monitor-grid{padding:16px 18px}
.is-vote-detail .vb-report-monitor-settings .vb-workbench-field{padding:8px 0}
.is-vote-detail .vb-report-monitor-settings .vb-workbench-field input{height:36px}

@media(max-width:1100px){
  .is-vote-detail .vb-workbench-pane{padding-left:16px;padding-right:16px}
  .is-vote-detail .vb-workbench-control-grid{grid-template-columns:1fr 1fr}
  .is-vote-detail .vb-workbench-attendee{border-right:0}
  .is-vote-detail .vb-workbench-utility{grid-column:1/-1;padding:12px 0 0;border-left:0;border-top:1px solid #e5e7eb}
}
@media(max-width:700px){
  .is-vote-detail .vb-workbench-pane{padding:10px 10px 36px}
  .is-vote-detail .vb-workbench-control-grid{grid-template-columns:1fr;gap:12px}
  .is-vote-detail .vb-workbench-attendee{padding-right:0}
  .is-vote-detail .vb-workbench-lifecycle{flex-wrap:wrap}
  .is-vote-detail .vb-workbench-utility{grid-column:auto;padding:12px 0 0}
  .is-vote-detail .vb-control-title{align-items:flex-start;flex-direction:column;gap:2px}
}

/* 方案二：投票控制、结果、监票设置三列工作区。 */
.is-vote-detail.vb-tab-report .vb-report-layout{display:grid;grid-template-columns:230px minmax(0,1fr) 260px;gap:12px;align-items:start;padding:14px 18px 40px}
.is-vote-detail.vb-tab-report .vb-report-layout>.vb-workbench-control{grid-column:1;grid-row:1}
.is-vote-detail.vb-tab-report .vb-report-layout>.vb-report-results{grid-column:2;grid-row:1}
.is-vote-detail.vb-tab-report .vb-report-layout>.vb-report-monitor-settings{grid-column:3;grid-row:1}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-control-grid{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:14px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-meta-row{display:flex;flex-direction:column;align-items:stretch;gap:10px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-meta-row .vb-workbench-status{margin:0;padding:7px 9px;justify-content:space-between}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-attendee{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-attendee input{width:auto;min-width:0}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-attendee .btn{grid-column:1/-1;width:100%}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-lifecycle{display:grid;grid-template-columns:1fr;gap:8px;padding-top:12px;border-top:1px solid #e5e7eb}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-lifecycle .btn{width:100%;min-width:0}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-utility{display:flex;flex-direction:column;align-items:stretch;gap:8px;padding:12px 0 0;border:0;border-top:1px solid #e5e7eb}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-utility-title{color:#64748b;font-size:12px;font-weight:600;line-height:1.2}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-utility-actions{display:grid;grid-template-columns:1fr;gap:8px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-workbench-utility-actions .btn{width:100%;min-width:0}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-report-monitor-settings .vb-report-monitor-grid{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:14px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-report-monitor-settings .vb-workbench-field{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-report-monitor-settings .vb-workbench-field .btn{grid-column:1/-1;width:100%}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-report-results .vb-workbench-section-head{padding-left:14px;padding-right:14px}
.is-vote-detail.vb-tab-report .vb-report-layout .vb-report-results .vb-report-block{margin-left:14px;margin-right:14px}
@media(max-width:1100px){
  .is-vote-detail.vb-tab-report .vb-report-layout{grid-template-columns:minmax(210px,280px) minmax(0,1fr)}
  .is-vote-detail.vb-tab-report .vb-report-layout>.vb-workbench-control{grid-column:1;grid-row:1}
  .is-vote-detail.vb-tab-report .vb-report-layout>.vb-report-results{grid-column:2;grid-row:1/span 2}
  .is-vote-detail.vb-tab-report .vb-report-layout>.vb-report-monitor-settings{grid-column:1;grid-row:2}
}
@media(max-width:700px){
  .is-vote-detail.vb-tab-report .vb-report-layout{display:block;padding:10px 10px 30px}
  .is-vote-detail.vb-tab-report .vb-report-layout>section{margin-bottom:12px}
}

/* 报表页实际挂载在 vb-tab-body 内，使用内容结构作为稳定作用域。 */
.vb-tab-body:has(.vb-report-layout) .vb-report-layout{display:grid;grid-template-columns:230px minmax(0,1fr) 260px;gap:12px;align-items:start;padding:14px 18px 40px}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-workbench-control{grid-column:1;grid-row:1}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-results{grid-column:2;grid-row:1}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-monitor-settings{grid-column:3;grid-row:1}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-control-grid{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:14px}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-meta-row{display:flex;flex-direction:column;align-items:stretch;gap:10px}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-meta-row .vb-workbench-status{margin:0;padding:7px 9px;justify-content:space-between}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-attendee{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;padding-right:0;border-right:0}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-attendee input{width:auto;min-width:0}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-attendee .btn{grid-column:1/-1;width:100%}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-lifecycle{display:grid;grid-template-columns:1fr;gap:8px;padding-top:12px;border-top:1px solid #e5e7eb}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-lifecycle .btn{width:100%;min-width:0}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-utility{display:flex;flex-direction:column;align-items:stretch;gap:8px;padding:12px 0 0;border:0;border-top:1px solid #e5e7eb}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-utility-title{color:#64748b;font-size:12px;font-weight:600;line-height:1.2}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-utility-actions{display:grid;grid-template-columns:1fr;gap:8px}
.vb-tab-body:has(.vb-report-layout) .vb-workbench-utility-actions .btn{width:100%;min-width:0}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-report-monitor-grid{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:14px}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-workbench-field{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-workbench-field .btn{grid-column:1/-1;width:100%}
@media(max-width:1100px){
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout{grid-template-columns:minmax(210px,280px) minmax(0,1fr)}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-results{grid-column:2;grid-row:1/span 2}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-monitor-settings{grid-column:1;grid-row:2}
}
@media(max-width:700px){
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout{display:block;padding:10px 10px 30px}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>section{margin-bottom:12px}
}
@media(min-width:901px) and (max-width:1100px){
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout{grid-template-columns:200px minmax(0,1fr) 210px;gap:10px;padding-left:10px;padding-right:10px}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-workbench-control{grid-column:1;grid-row:1}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-results{grid-column:2;grid-row:1}
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-monitor-settings{grid-column:3;grid-row:1}
}

/* 监票大屏设置：方案三，横向配置带 + 下方链接操作带，收敛为黑白工作台 */
.vb-mon-config--toolbar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:14px;background:#fff;border:1px solid #dfe5ec;border-radius:8px;margin-bottom:16px;align-items:stretch}
.vb-mon-config--toolbar .vb-mon-config-row{grid-column:auto;grid-row:auto;min-width:0;min-height:112px;box-sizing:border-box;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:12px;padding:14px;background:#fff;border:1px solid #e5e7eb;border-radius:6px}
.vb-mon-config--toolbar .vb-mon-config-label{margin:0;color:#111827;font-weight:700}
.vb-mon-config--toolbar .vb-mon-theme-btn,.vb-mon-config--toolbar .vb-mon-cols-btn{border:1px solid #cbd5e1;background:#fff;color:#111827;border-radius:6px;transition:background .15s,border-color .15s,color .15s}
.vb-mon-config--toolbar .vb-mon-theme-btn{padding:7px 12px}
.vb-mon-config--toolbar .vb-mon-theme-btn.active,.vb-mon-config--toolbar .vb-mon-cols-btn.active{background:#2563eb;border-color:#2563eb;color:#fff}
.vb-mon-config--toolbar .vb-mon-theme-btn:hover,.vb-mon-config--toolbar .vb-mon-cols-btn:hover{border-color:#111827}
.vb-mon-config--toolbar .vb-mon-countdown-card{background:#fff}
.vb-mon-config--toolbar .vb-mon-countdown-config{flex:1;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.vb-mon-config--toolbar .vb-mon-cd-label{display:none}
.vb-mon-config--toolbar .vb-mon-cd-input{width:72px;min-width:72px;height:34px;box-sizing:border-box;text-align:center;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#111827}
.vb-mon-config--toolbar .vb-mon-cd-preview{font-variant-numeric:tabular-nums;font-weight:700;color:#111827;white-space:nowrap}
.vb-mon-config--toolbar .vb-mon-config-row .btn-primary{background:#2563eb;border-color:#2563eb;color:#fff}
.vb-mon-config--toolbar .vb-mon-config-row .btn-ghost,.vb-mon-config--toolbar .vb-mon-copy-btn{background:#fff;border:1px solid #cbd5e1;color:#111827}
.vb-mon-config--toolbar .vb-mon-config-actions{grid-column:1/-1;grid-row:auto;display:grid;grid-template-columns:auto minmax(220px,1fr) auto auto auto auto;align-items:center;gap:10px;margin:0;padding:12px 14px;border-top:1px solid #e5e7eb}
.vb-mon-config--toolbar .vb-mon-link-state{color:#111827;font-weight:700}
.vb-mon-config--toolbar .vb-mon-url{min-width:0;background:#fff;border:1px solid #cbd5e1;color:#374151}
.vb-mon-config--toolbar #vbMonPreview{white-space:nowrap}
@media(max-width:1100px){.vb-mon-config--toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.vb-mon-config--toolbar .vb-mon-config-row{min-height:112px}}
@media(max-width:900px){.vb-mon-config--toolbar{grid-template-columns:1fr}.vb-mon-config--toolbar .vb-mon-config-row,.vb-mon-config--toolbar .vb-mon-config-actions{grid-column:auto;grid-row:auto}.vb-mon-config--toolbar .vb-mon-config-actions{grid-template-columns:1fr 1fr}.vb-mon-config--toolbar .vb-mon-link-state,.vb-mon-config--toolbar .vb-mon-url{grid-column:1/-1}}

/* 报表页投票总控：三列固定基线，避免按钮因内容长度漂移。 */
.is-vote-detail.vb-tab-report .vb-workbench-control-grid{grid-template-columns:minmax(270px,1fr) minmax(330px,1.15fr) auto;min-height:78px;align-items:stretch}
.is-vote-detail.vb-tab-report .vb-workbench-meta-row{display:flex;align-items:center;justify-content:space-between;gap:14px;min-width:0}
.is-vote-detail.vb-tab-report .vb-workbench-attendee,
.is-vote-detail.vb-tab-report .vb-workbench-lifecycle,
.is-vote-detail.vb-tab-report .vb-workbench-utility{min-height:44px;box-sizing:border-box}
.is-vote-detail.vb-tab-report .vb-workbench-attendee{align-self:center}
.is-vote-detail.vb-tab-report .vb-workbench-meta-row .vb-workbench-attendee{border-right:0;padding-right:0}
.is-vote-detail.vb-tab-report .vb-workbench-meta-row .vb-workbench-status{margin-left:auto;white-space:nowrap}
.is-vote-detail.vb-tab-report .vb-workbench-lifecycle{align-self:center;align-items:center}
.is-vote-detail.vb-tab-report .vb-workbench-lifecycle .btn,
.is-vote-detail.vb-tab-report .vb-workbench-utility .btn{height:38px;min-width:112px;white-space:nowrap}
.is-vote-detail.vb-tab-report .vb-workbench-utility{align-self:center;align-items:center;flex-wrap:wrap}
.is-vote-detail.vb-tab-report .vb-workbench-utility .btn-danger{background:#fff;color:#dc2626;border-color:#fca5a5}
.is-vote-detail.vb-tab-report .vb-workbench-utility .btn-danger:hover{background:#fef2f2;border-color:#ef4444}
.is-vote-detail.vb-tab-report .vb-workbench-section-head .btn{height:34px}
.is-vote-detail.vb-tab-report .vb-workbench-lifecycle .btn[aria-busy="true"]{cursor:wait;opacity:.72}
.is-vote-detail.vb-tab-report .vb-report-results .vb-workbench-section-head,
.is-vote-detail.vb-tab-report .vb-report-monitor-settings .vb-workbench-section-head{min-height:50px}
.is-vote-detail.vb-tab-report .vb-report-results .vb-report-block{margin:0 18px 16px}
.is-vote-detail.vb-tab-report .vb-report-results .vb-section-h{margin:0 18px 10px}
@media(max-width:1100px){
  .is-vote-detail.vb-tab-report .vb-workbench-control-grid{grid-template-columns:1fr 1fr}
  .is-vote-detail.vb-tab-report .vb-workbench-utility{grid-column:1/-1;padding:12px 0 0;border-left:0;border-top:1px solid #e5e7eb}
}
@media(max-width:700px){
  .is-vote-detail.vb-tab-report .vb-workbench-meta-row{align-items:flex-start;flex-direction:column;gap:8px}
  .is-vote-detail.vb-tab-report .vb-workbench-meta-row .vb-workbench-status{margin-left:0}
}

@media (max-width:1000px){
  .is-vote-detail .vb-publish-check-list{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:700px){
  .is-vote-detail .vb-publish-page{padding:12px 10px 42px}
  .is-vote-detail .vb-publish-check-list{grid-template-columns:1fr}
  .is-vote-detail .vb-publish-check b{white-space:normal}
  .is-vote-detail .vb-publish-page .vb-qr-box{grid-template-columns:1fr}
  .is-vote-detail .vb-publish-page .vb-setting-row{align-items:flex-start!important}
  .is-vote-detail .vb-publish-page .vb-setting-row>label:first-child{width:100%;min-width:0}
  .is-vote-detail .vb-publish-page .vb-pub-link-row .input{flex-basis:100%;min-width:0}
}

/* ============================================================
   * 投票管理 · 新增 10 模块通用卡片 / 列表 / 矩阵
   * ==========================================================*/
.vm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.vm-card{border:1px solid var(--border,#e6edf3);border-radius:12px;padding:14px;background:var(--card,#fff);cursor:pointer;transition:border-color .15s,box-shadow .15s}
.vm-card:hover{border-color:var(--accent);box-shadow:0 6px 18px rgba(15,23,42,.08)}
.vm-card-title{font-weight:700;font-size:15px;margin-bottom:4px}
.vm-card-sub{font-size:13px;color:var(--text-2);margin-bottom:8px}
.vm-card-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.vm-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid var(--border,#e6edf3);border-radius:10px;margin-bottom:8px;background:var(--card,#fff)}
.vm-row-title{font-weight:600;font-size:14px}
.vm-mat-row{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px dashed var(--border,#e6edf3);flex-wrap:wrap}
.vm-mat-r{flex:0 0 180px;font-weight:600;font-size:13px}
.vm-mat-c{display:flex;gap:14px;flex-wrap:wrap}
.vm-mat-cell{font-size:13px;display:flex;align-items:center;gap:4px}

/* ============================================================
   * 投票管理 · 落地页 WYSIWYG 表单预览 / 前台投票大厅 / 成功页
   * ==========================================================*/
.vb-canvas--preview{position:relative;display:flex;flex-direction:column}
.vb-form-preview{max-width:100%;margin:0 auto;background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:16px;box-shadow:0 10px 30px rgba(15,23,42,.06);overflow:hidden}
.vb-form-preview.is-editing{border:2px dashed var(--border,#cbd5e1)}
.vb-preview-banner{height:180px;background-size:cover;background-position:center;background-color:color-mix(in srgb,var(--accent) 12%,#fff)}
.vb-preview-head{padding:28px 32px 18px}
.vb-preview-head--center{text-align:center}
.vb-preview-title{font-size:22px;font-weight:700;line-height:1.3;margin:0 0 10px;color:var(--text)}
.vb-preview-title.editable{box-shadow:0 1px 0 transparent;transition:box-shadow .15s}
.vb-preview-title.editable:focus{outline:none;box-shadow:0 2px 0 var(--accent)}
.vb-preview-desc{font-size:14px;color:var(--text-2);line-height:1.6;margin:0;white-space:pre-wrap}
.vb-preview-desc.editable{box-shadow:0 1px 0 transparent}
.vb-preview-desc.editable:focus{outline:none;box-shadow:0 2px 0 var(--accent)}
.vb-preview-body{padding:8px 8px 24px}
.vb-preview-foot{position:sticky;bottom:0;padding:16px 8px;background:var(--surface-solid);border-top:1px solid var(--border,#e6edf3);display:flex;align-items:center;justify-content:space-between;gap:12px}
.vb-form-nav{position:sticky;bottom:0;padding:16px 8px;background:#fff;border-top:1px solid var(--border,#e6edf3);z-index:2}
.vb-form-nav-row{display:flex;gap:12px}
.vb-form-nav-row--top{margin-bottom:12px}
.vb-form-nav-row--bottom .vb-form-nav-btn--submit{width:100%;flex:none}
.vb-form-nav-btn{flex:1;padding:10px 6px;border:none;cursor:pointer;transition:opacity .15s,transform .1s;line-height:1.2;white-space:nowrap;font-size:13px}
.vb-form-nav-btn:hover:not(:disabled){transform:translateY(-1px)}
.vb-form-nav-btn--disabled{opacity:.55;cursor:not-allowed}
.vb-form-nav-btn.selected{outline:3px solid var(--accent);outline-offset:3px}
.vb-preview-field{position:relative;margin-bottom:22px;padding:14px 16px;border:1px solid transparent;border-radius:10px;transition:border-color .15s,background .15s}
.vb-preview-field:hover{border-color:var(--border,#e6edf3);background:color-mix(in srgb,var(--accent) 2%,#fff)}
.vb-preview-field.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,#fff)}
.vb-preview-label{display:block;font-weight:600;font-size:14px;margin-bottom:8px;color:var(--text)}
.vb-preview-label-text{outline:none}
.vb-preview-req{color:#ef4444;margin-left:3px}
.vb-preview-idx{display:inline-block;font-size:11px;color:var(--text-2);margin-right:5px;background:var(--bg-2,#f1f5f9);padding:1px 5px;border-radius:4px}
.vb-preview-help{font-size:12px;color:var(--text-2);margin:-4px 0 8px;line-height:1.55}
.vb-preview-help p{margin:0 0 6px}
.vb-preview-help p:last-child{margin-bottom:0}
.vb-preview-help ul,.vb-preview-help ol{margin:0 0 6px 18px;padding:0}
.vb-field-help{font-size:12px;color:var(--text-2);margin:4px 0 6px;line-height:1.55;white-space:normal}
.vb-rich-editor--sm .vb-rich-area{min-height:72px;max-height:160px;padding:8px 10px;font-size:13px}
.vb-rich-editor--sm .vb-rich-toolbar{padding:4px 6px;gap:2px;flex-wrap:wrap}
.vb-rich-editor--sm .vb-rich-toolbar button{font-size:12px;padding:2px 6px}
/* 字段说明：放宽右侧排版，独占一整块而不是挤在 label 旁 */
.vb-setting-block{display:flex;flex-direction:column;gap:8px;margin:12px 0 14px;padding:12px;border:1px solid var(--border,#e6edf3);border-radius:12px;background:color-mix(in srgb,var(--accent) 3%,#fff)}
.vb-setting-block-h{font-size:13px;font-weight:600;color:var(--text);margin:0}
.vb-rich-editor--help{width:100%;flex:none;display:block;border-radius:10px}
.vb-rich-editor--help .vb-rich-toolbar{padding:8px 8px 6px;gap:4px 6px;flex-wrap:wrap;align-items:center}
/* 字段说明工具栏按钮：多字按钮（如「• 列表」「清除」）允许按内容自动加宽、不换行，整体略宽但文字完整在框内 */
.vb-rich-editor--help .vb-rich-toolbar button{width:auto;min-width:32px;height:28px;padding:0 10px;white-space:nowrap;flex:0 0 auto}
.vb-rich-editor--help .vb-rich-area{min-height:120px;max-height:280px;padding:12px;font-size:14px;line-height:1.6}
.vb-rich-editor--help .vb-rich-area:empty:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none}
.vb-rich-select{height:28px;border:1px solid var(--border,#e6edf3);border-radius:6px;background:#fff;font-size:12px;padding:0 6px;color:var(--text);cursor:pointer;max-width:88px}
.vb-rich-select:hover{border-color:var(--accent)}
.vb-rich-select.vb-rich-fontsize{max-width:72px}
.vb-rich-select.vb-rich-fontsel{max-width:132px}
.vb-rich-toolbar option{font-size:13px}
/* 右侧设置面板保持可读的同时，让中间编辑画布更宽（约等于页面底图宽度） */
.vb-builder{grid-template-columns:var(--vb-col-left) minmax(0,1fr) var(--vb-col-right)!important}
.vb-pane.vb-settings{min-width:0}
.vb-setting-row{flex-wrap:wrap}
.vb-setting-row > .vb-rich-editor{flex:1 1 100%;max-width:100%}
/* 减少画布内部水平留白，让 banner/表单预览更宽 */
.vb-preview-head{padding:28px 24px 18px}
.vb-preview-body{padding:8px 24px 24px}
.vb-preview-foot{padding:16px 24px}
.vb-form-nav{padding:16px 24px}
/* 矩阵选择：列等宽 + 表头不换行 + 行标签可换行 */
.vb-mat-table{table-layout:fixed;width:100%}
.vb-mat-table--select th.vb-mat-col-h,
.vb-mat-table--select .vb-mat-col-h{white-space:nowrap!important;word-break:keep-all;text-align:center;overflow:hidden}
.vb-mat-table--select .vb-mat-col-c{white-space:nowrap!important;text-align:center}
.vb-mat-table--select .vb-mat-row-label,
.vb-mat-table .vb-mat-row-label{white-space:normal!important;word-break:break-word;line-height:1.45;text-align:left}
.vb-preview-input,.vb-preview-textarea{width:100%;max-width:100%}
.vb-preview-opt{display:flex;align-items:center;gap:8px;padding:8px 0;font-size:14px;cursor:pointer}
.vb-preview-opt img{width:48px;height:48px;object-fit:cover;border-radius:6px}
.vb-preview-opt input[type=radio],.vb-preview-opt input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent)}
.vb-preview-divider{border-top:1px dashed var(--border,#d1d5db);margin:10px 0}
.vb-preview-section-desc{padding:14px;background:color-mix(in srgb,var(--accent) 8%,#fff);border-left:4px solid var(--accent);border-radius:8px;font-size:14px;line-height:1.6;white-space:pre-wrap}
.vb-preview-page-break{border-top:2px dashed var(--border,#cbd5e1);padding-top:10px;color:var(--text-2);font-size:13px}
.vb-preview-file-drop{border:2px dashed var(--border,#e6edf3);border-radius:12px;padding:22px;text-align:center;color:var(--text-2);background:color-mix(in srgb,var(--text-2) 2%,#fff)}
.vb-preview-file-tip{font-size:14px}
.vb-preview-file-meta{font-size:12px;margin-top:6px}
.vb-preview-submit{min-width:140px}

/* 编辑模式覆盖 */
.vb-field-editable{padding-left:48px}
.vb-field-editable .vb-field-actions{position:absolute;right:10px;top:10px;display:flex;gap:4px;opacity:0;transition:opacity .15s;z-index:2}
.vb-field-editable:hover .vb-field-actions{opacity:1}
.vb-field-editable .vb-drag-handle{position:absolute;left:12px;top:16px;cursor:grab;color:var(--text-2);font-size:16px}
.vb-field-editable .vb-field-no{position:absolute;left:30px;top:36px;font-size:11px;color:var(--text-2)}

/* 富文本编辑器 */
.vb-rich-editor{border:1px solid var(--border,#e6edf3);border-radius:10px;overflow:hidden;background:#fff;flex:1;min-width:0}
.vb-rich-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:8px;background:var(--bg-2,#f8fafc);border-bottom:1px solid var(--border,#e6edf3)}
.vb-rich-toolbar button{border:1px solid var(--border,#e6edf3);background:#fff;border-radius:6px;width:32px;height:28px;cursor:pointer;font-size:13px;color:var(--text);display:flex;align-items:center;justify-content:center}
.vb-rich-toolbar button:hover{border-color:var(--accent);color:var(--accent)}
.vb-rich-toolbar button[data-value]{width:auto;padding:0 10px}
.vb-rich-sep{width:1px;height:20px;background:var(--border,#e6edf3);margin:0 2px}
.vb-rich-area{min-height:120px;padding:12px;outline:none;overflow-y:auto;max-height:260px}
.vb-rich-area p{margin:0 0 8px}
.vb-rich-area ul,.vb-rich-area ol{margin:0 0 8px 18px}
.vb-field-tag{display:inline-block;background:color-mix(in srgb,var(--accent) 12%,#fff);color:var(--accent);padding:1px 8px;border-radius:999px;font-size:12px}

/* 成功页 / 开始前页 */
.vb-success-body{text-align:center;padding:24px 0}
.vb-success-ico{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:26px;margin:0 auto 14px}
.vb-success-body h3{font-size:18px;margin:0 0 8px}
.vb-success-richtext{text-align:left}
.vb-success-richtext img{max-width:100%;border-radius:8px}
.vb-success-poster{max-width:100%;border-radius:12px;box-shadow:0 8px 24px rgba(15,23,42,.1)}
.vb-success-cert .vb-cert-border{border:3px double var(--border,#e6edf3);border-radius:var(--radius-lg);padding:32px;background:var(--surface-solid)}
.vb-success-cert h3{font-size:20px;margin:0 0 16px;color:var(--accent)}
.vb-success-cert p{font-size:14px;line-height:1.8;color:var(--text)}
.vb-cert-meta{font-size:13px;color:var(--text-2)}
.vb-cert-id{font-weight:700;color:var(--accent)}
.vb-cert-sign{text-align:right;margin-top:24px;font-style:italic;color:var(--text-2)}

/* 单选组 */
.vb-radio-group{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}
.vb-radio-group--inline{flex-direction:row;flex-wrap:wrap}
.vb-radio{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text);cursor:pointer}
.vb-radio input[type=radio]{width:16px;height:16px;accent-color:var(--accent)}
.hidden{display:none!important}

/* 矩阵选择折叠 / 展开（滚动 + 底部按钮 + 屏幕右侧悬浮 FAB） */
.vb-matrix-collapse{margin-top:4px;position:relative}
.vb-matrix-collapse-body{border:1px solid var(--border,#e6edf3);border-radius:10px;overflow:auto;background:#fff;resize:vertical;min-height:80px}
.vb-matrix-collapse-body table{margin:0}
.vb-matrix-toggle{width:100%;margin-top:8px;padding:13px;border:1px dashed var(--border,#cbd5e1);background:color-mix(in srgb,var(--accent) 4%,#fff);color:var(--accent);border-radius:10px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,transform .1s;min-height:44px}
.vb-matrix-toggle:hover{background:color-mix(in srgb,var(--accent) 9%,#fff);transform:translateY(-1px)}
.vb-matrix-fab{position:fixed;right:16px;top:50%;transform:translateY(-50%);z-index:90;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:52px;min-height:72px;padding:10px 6px;border:none;border-radius:999px;background:var(--accent,#2563eb);color:#fff;box-shadow:0 8px 24px rgba(37,99,235,.35);cursor:pointer;font-size:11px;font-weight:700;line-height:1.15;transition:transform .15s,box-shadow .15s}
.vb-matrix-fab:hover{transform:translateY(-50%) scale(1.05);box-shadow:0 12px 28px rgba(37,99,235,.45)}
.vb-matrix-fab-ico{font-size:14px;line-height:1}
.vb-matrix-fab-txt{letter-spacing:.04em}
.vb-matrix-fab-n{font-size:10px;opacity:.85;font-weight:600}

/* 选项 / 列 颜色选择（预设色板） */
.vb-opt-color{width:26px;height:26px;padding:0;border:1px solid var(--border,#e6edf3);border-radius:6px;background:none;cursor:pointer;flex:0 0 auto}
.vb-opt-color::-webkit-color-swatch-wrapper{padding:2px}
.vb-opt-color::-webkit-color-swatch{border:none;border-radius:4px}
.vb-option-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.vb-preview-opt{--opt-color:var(--accent,#2563eb)}
.vb-preview-opt input:checked + span{color:var(--opt-color)}
.vb-preview-opt .vb-opt-dot{display:none}
.vb-preview-opt::before{content:"";width:10px;height:10px;border-radius:50%;background:var(--opt-color);flex:0 0 auto;margin-right:-4px}

/* 矩阵：选中圆点 / 文字、表头冻结、右侧常驻图例 */
.vb-mat-dot{display:inline-block;width:12px;height:12px;border-radius:50%;vertical-align:middle}
.vb-mat-cell-label{display:inline-flex;align-items:center;justify-content:center;--mat-col:var(--accent,#2563eb)}
.vb-mat-table--sticky thead th{position:sticky;top:0;z-index:3}
.vb-mat-cell-text{font-size:12px;font-weight:700;color:var(--mat-col)}
.vb-matrix-legend{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:6px;padding:8px 10px;background:rgba(255,255,255,.92);border:1px solid var(--border,#e6edf3);border-radius:10px;box-shadow:0 6px 18px rgba(15,23,42,.12);font-size:12px;font-weight:600;z-index:80;pointer-events:none}
.vb-matrix-legend-item{display:flex;align-items:center;gap:6px;white-space:nowrap}
.vb-matrix-legend-item i{width:9px;height:9px;border-radius:50%;flex:0 0 auto}

/* 提交确认页 · 投票结果预览 */
.vb-confirm-preview .vb-preview-desc{color:#64748b}
.vb-vote-preview-row{display:flex;flex-direction:column;gap:8px;padding:14px 0;border-bottom:1px solid var(--border,#e6edf3)}
.vb-vote-preview-row:last-child{border-bottom:none}
.vb-vote-preview-q{font-weight:600;font-size:14px;color:var(--text)}
.vb-vote-preview-a{display:flex;flex-direction:column;gap:6px}
.vb-vote-answer{display:inline-block;align-self:flex-start;padding:5px 14px;border-radius:999px;font-size:13px;font-weight:600;line-height:1.3}
.vb-vote-answer--disagree{box-shadow:0 0 0 1px #fca5a5 inset!important;font-weight:700!important}
.vb-vote-answer--abstain{box-shadow:0 0 0 1px #fcd34d inset!important;font-weight:700!important}
.vb-vote-matrix-row{display:flex;align-items:center;gap:10px;padding:5px 0;font-size:13px}
.vb-vote-matrix-r{flex:0 0 200px;font-weight:500;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 表单设置 · 配色行 */
.vb-color-row{display:flex;flex-wrap:wrap;gap:14px}
.vb-color{display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}
.vb-color input[type=color]{width:34px;height:30px;border:1px solid var(--border,#e6edf3);border-radius:6px;background:#fff;padding:2px;cursor:pointer}

/* ============================================================
   * 投票管理 · 编辑构建器布局优化（三栏 / 设备框 / 选中态）
   * ==========================================================*/
.vb-builder{display:grid;grid-template-columns:var(--vb-col-left) minmax(0,1fr) var(--vb-col-right);gap:14px;align-items:stretch}
.vb-pane{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px;padding:12px}
.vb-pane.vb-palette{position:sticky;top:0;max-height:calc(100vh - 200px);overflow-y:auto}
.vb-pane.vb-canvas{display:flex;flex-direction:column;max-height:calc(100vh - 200px);padding:0;overflow:hidden}
.vb-canvas-scroll{flex:1;overflow-y:auto;padding:18px 0;background:color-mix(in srgb,var(--text-2) 5%,transparent)}
.vb-pane.vb-settings{position:sticky;top:0;max-height:calc(100vh - 200px);overflow-y:auto}
.vb-pane.vb-settings .vb-settings-head{position:sticky;top:-12px;z-index:4;margin:-12px -12px 14px;padding:12px;background:color-mix(in srgb,var(--card,#fff) 96%,transparent);border-bottom:1px solid var(--border,#e6edf3);backdrop-filter:blur(8px)}
.vb-pane.vb-settings .vb-settings-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vb-palette-group{margin-bottom:14px}
.vb-palette-group h4{font-size:12px;color:var(--text-2);margin:0 0 8px;font-weight:600}
.vb-palette-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border,#e6edf3);border-radius:8px;cursor:pointer;font-size:13px;margin-bottom:6px;background:#fff;transition:border-color .15s,background .15s,transform .1s}
.vb-palette-item:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 4%,#fff);transform:translateY(-1px)}
.vb-pi-ico{font-size:15px}

/* 画布工具栏（设备切换） */
.vb-canvas-pagebar{display:inline-flex;align-items:center;gap:6px;margin-left:auto}
.vb-canvas-pagebar .vb-page-btn{border:1px solid var(--border,#e6edf3);background:#fff;border-radius:6px;padding:4px 10px;cursor:pointer;font-size:12px;color:var(--text-2)}
.vb-canvas-pagebar .vb-page-btn:hover{border-color:var(--accent);color:var(--accent)}
.vb-canvas-pagebar .vb-page-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.vb-canvas-pagebar .vb-page-btn:disabled{opacity:.5;cursor:not-allowed}
.vb-canvas-pagebar .vb-page-info{font-size:12px;color:var(--text-2);padding:0 4px}

/* 文件类型下拉多选 */
.vb-dropdown-multi{position:relative;display:inline-block;min-width:180px;max-width:260px}
.vb-dropdown-summary{cursor:pointer;list-style:none;border:1px solid var(--border,#e6edf3);border-radius:8px;padding:6px 10px;font-size:13px;background:#fff;display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--text)}
.vb-dropdown-summary::-webkit-details-marker{display:none}
.vb-canvas-toolbar-label{font-size:13px;font-weight:600;color:var(--text)}
/* 画布工具栏：统一内边距与对齐，避免“画布预览”文字贴左边 */
.vb-canvas-toolbar{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--card,#fff);border-bottom:1px solid var(--border,#e6edf3)}
.vb-seg{display:inline-flex;background:var(--bg-2,#f1f5f9);border-radius:8px;padding:3px}
.vb-seg-btn{border:none;background:transparent;padding:6px 12px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text-2);transition:all .15s}
.vb-seg-btn.active{background:var(--card,#fff);color:var(--accent);box-shadow:0 1px 3px rgba(15,23,42,.12);font-weight:600}
/* 画布工具栏「全部必填」复选框（桌面/手机旁） */
.vb-all-required{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text);cursor:pointer;user-select:none;padding:5px 10px;border:1px solid var(--border,#e6edf3);border-radius:8px;background:var(--bg-2,#f8fafc);transition:border-color .15s,color .15s}
.vb-all-required:hover{border-color:var(--accent);color:var(--accent)}
.vb-all-required input{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;margin:0}

/* 设备预览框 */
.vb-device-frame{display:flex;justify-content:center;min-height:0}
/* 白卡宽度：占画布 85%，但不小于 360px、不大于 720px。
   下限 360px 是关键——旧版纯比例(65%)在画布被挤窄时会跟着塌成 82~137px 的纸条。
   1062 行的 .vb-form-preview{max-width:100%} 兜底防溢出，故此处不再另设 max-width。 */
.vb-device-frame.vb-device-desktop .vb-form-preview{width:clamp(min(360px,100%),85%,720px)}
.vb-device-frame.vb-device-mobile .vb-form-preview{max-width:390px;box-shadow:0 12px 36px rgba(15,23,42,.14)}
.vb-device-frame.vb-device-mobile .vb-preview-banner{height:150px}

/* Banner（画布可选中） */
.vb-preview-banner{position:relative;cursor:pointer;border-bottom:1px solid var(--border,#e6edf3);overflow:hidden;background-color:color-mix(in srgb,var(--accent) 12%,#fff)}
.vb-preview-banner.selected{outline:3px solid var(--accent);outline-offset:-3px}
.vb-banner-img{display:block;width:100%;height:auto;object-fit:contain;object-position:top center}
.vb-banner-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:0 32px;pointer-events:none}
.vb-banner-ot{font-size:22px;font-weight:700;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.45);line-height:1.3}
.vb-banner-os{font-size:14px;color:#fff;margin-top:6px;text-shadow:0 1px 3px rgba(0,0,0,.45)}
.vb-banner-ph{display:flex;align-items:center;justify-content:center;color:var(--text-2);font-size:13px;padding:60px 0}

/* 提交按钮（对齐 / 选中 / 隐藏 / 链接回退） */
.vb-preview-submit{display:inline-block;min-width:140px;border:none;cursor:pointer;transition:box-shadow .15s,transform .1s;padding:14px 20px;line-height:1.2}
.vb-preview-submit:hover{transform:translateY(-1px)}
.vb-preview-submit.selected{outline:3px solid var(--accent);outline-offset:3px}
.vb-submit-align-left{text-align:left}
.vb-submit-align-center{text-align:center}
.vb-submit-align-right{text-align:right}
.vb-submit-hidden-ph{display:inline-block;padding:10px 16px;border:2px dashed var(--border,#cbd5e1);border-radius:8px;color:var(--text-2);font-size:13px;cursor:pointer;background:color-mix(in srgb,var(--accent) 3%,#fff)}
.vb-submit-link{display:inline-block;color:var(--accent);font-weight:600;cursor:pointer;text-decoration:underline}

/* 页面概览面板（未选中元素时） */
.vb-page-overview{padding:4px}
.vb-po-head{font-weight:700;font-size:15px;margin-bottom:4px}
.vb-po-card{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1px solid var(--border,#e6edf3);border-radius:12px;cursor:pointer;margin-bottom:10px;transition:border-color .15s,box-shadow .15s,transform .1s;background:#fff}
.vb-po-card:hover{border-color:var(--accent);box-shadow:0 6px 18px rgba(15,23,42,.08);transform:translateY(-1px)}
.vb-po-ico{font-size:22px;flex:0 0 auto;line-height:1.2}
.vb-po-title{font-weight:600;font-size:14px}
.vb-po-desc{font-size:12px;color:var(--text-2);margin-top:2px}
.vb-po-tip{font-size:12px;color:var(--text-2);background:color-mix(in srgb,var(--accent) 6%,#fff);border-radius:8px;padding:10px;line-height:1.6}
.vb-banner-preview--lg{min-height:140px;cursor:pointer}
/* 拖拽插入目标高亮（从左侧字段库拖到画布两字段之间时指示插入位置） */
.vb-drop-target{outline:2px dashed var(--accent);outline-offset:-2px;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent) inset;border-radius:10px}
.vb-palette-item{cursor:grab}
.vb-palette-item:active{cursor:grabbing}

/* 编辑表单：与投票设置保持同一固定页头和紧凑工作区 */
.vb-edit-sticky{position:sticky;top:0;z-index:20;background:var(--bg,#f8fafc);padding-bottom:10px}
.is-vote-detail .sidebar{display:none}
.is-vote-detail .main{grid-column:1 / -1}
.is-vote-detail .topbar{height:66px;padding:0 32px;background:#fff;border-bottom:1px solid var(--border,#e6edf3)}
.is-vote-detail .content{padding:16px 24px 32px;max-width:none}
.vb-edit-sticky .vb-topbar{min-height:58px;padding:10px 14px;border:1px solid var(--border,#e6edf3);border-radius:10px 10px 0 0;background:#fff;box-shadow:0 2px 8px rgba(15,23,42,.04)}
.vb-edit-sticky .vb-tabs{border:1px solid var(--border,#e6edf3);border-top:0;border-radius:0 0 10px 10px;background:#fff;padding:0 8px}
.vb-edit-sticky .vb-tab{height:42px;padding:0 18px;font-size:13px}
.vb-tab-body{padding-top:2px}
.vb-edit-wrap{max-width:1680px;margin:0 auto}
.vb-builder{grid-template-columns:196px minmax(0,1fr) 250px;gap:10px;align-items:start}
.is-vote-detail .vb-builder{grid-template-columns:196px minmax(0,1fr) 250px!important}
.vb-pane{border-radius:10px;padding:12px;background:#fff;box-shadow:0 1px 3px rgba(15,23,42,.035)}
.vb-pane.vb-palette,.vb-pane.vb-settings{top:0;max-height:calc(100vh - 136px)}
.vb-pane.vb-canvas{top:0;max-height:calc(100vh - 136px);background:#f8fafc}
.vb-pane.vb-canvas{align-self:start;margin-top:0}
.vb-palette-group{margin-bottom:16px}
.vb-palette-title{font-size:14px;font-weight:700;color:#1e293b;padding:2px 0 10px;border-bottom:1px solid #e8edf4;margin-bottom:12px}
.vb-palette-title span{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;margin-left:4px;border:1px solid #94a3b8;border-radius:50%;font-size:10px;font-weight:600;color:#64748b}
.vb-palette-group h4{font-size:12px;letter-spacing:.02em;margin:2px 0 8px;padding-bottom:6px;border-bottom:1px solid #eef2f7}
.vb-palette-item{min-height:38px;padding:8px 10px;margin-bottom:6px;background:#fff;color:#334155}
.vb-palette-item .vb-pi-ico{color:var(--accent);background:var(--primary-soft);border:1px solid color-mix(in srgb,var(--accent) 20%,var(--border));font-family:Arial,sans-serif;font-weight:700}
.vb-canvas-toolbar{min-height:48px;padding:8px 12px;gap:10px}
.vb-canvas-scroll{padding:14px 10px 24px;background:#f5f7fb}
.vb-device-frame.vb-device-desktop .vb-form-preview{width:min(100%,760px)}
.vb-form-preview{border:1px solid #e5eaf1;box-shadow:0 8px 24px rgba(15,23,42,.08)}
.vb-pane.vb-settings{padding:0 12px 12px}
.vb-pane.vb-settings .vb-settings-head{margin:0 -12px 14px;padding:13px 12px;background:#fff}
.vb-settings-head h5{font-size:14px;line-height:1.35}
.vb-settings .field{margin-bottom:12px}
.vb-settings .input{min-height:38px}
@media (max-width:1180px){
  .vb-builder{grid-template-columns:196px minmax(0,1fr) 250px;gap:10px}
  .vb-edit-sticky .vb-topbar{flex-wrap:wrap}
}
@media (max-width:900px){
  .vb-edit-sticky{position:relative}
  .vb-builder{display:block}
  .vb-pane{display:none}
  .vb-builder.is-mobile-palette .vb-palette,.vb-builder.is-mobile-canvas .vb-canvas,.vb-builder.is-mobile-settings .vb-settings{display:flex;margin-bottom:10px}
  .vb-pane.vb-palette,.vb-pane.vb-settings,.vb-pane.vb-canvas{position:relative;top:auto;max-height:none}
  .vb-mobile-panels{display:flex;position:sticky;top:0;z-index:5;background:#fff;border:1px solid var(--border,#e6edf3);padding:4px;margin-bottom:8px;border-radius:8px}
}

/* 移动端固定底部提示（编辑态） */
.vb-fixed-mobile-hint{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-2);background:color-mix(in srgb,var(--accent) 6%,#fff);padding:3px 8px;border-radius:999px}

/* ============================================================
 * 表单编辑器最终视觉规范：1100px 连续工作区 / 无缝三栏 / 紧凑控件
 * 仅作用于 editTabHTML 生成的 .vb-edit-wrap，不影响其它投票页签。
 * ==========================================================*/
.is-vote-detail .vb-edit-wrap{
  width:100%;max-width:none;margin:0;gap:0;background:#fff;
  border:1px solid #dfe5ec;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px rgba(15,23,42,.04)
}
.is-vote-detail .vb-form-editor-bar{
  position:sticky;top:0;z-index:20;height:44px;display:flex;align-items:center;justify-content:flex-end;gap:18px;
  padding:0 calc(clamp(300px,26%,420px) + 24px) 0 16px;background:#fff;border-bottom:1px solid #dfe5ec
}
.is-vote-detail .vb-form-subtabs{height:100%;display:flex;align-items:stretch;gap:28px;flex:0 0 auto}
.is-vote-detail .vb-form-subtab{
  min-width:0!important;height:100%!important;padding:0 4px!important;border:0!important;border-radius:0!important;
  background:transparent!important;color:#334155!important;font-size:12px!important;font-weight:500;box-shadow:none!important;position:relative
}
.is-vote-detail .vb-form-subtab::before{display:none!important}
.is-vote-detail .vb-form-subtab.active{color:#1677ff!important;font-weight:700}
.is-vote-detail .vb-form-subtab.active::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:#1677ff}
.is-vote-detail .vb-form-editor-tools{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:10px;color:#64748b}
.is-vote-detail .vb-form-editor-tools .vb-seg{padding:0;background:transparent;border:1px solid #d9e0e8;border-radius:4px;overflow:hidden}
.is-vote-detail .vb-form-editor-tools .vb-seg-btn{height:28px;padding:0 10px;border-radius:0;font-size:12px;color:#64748b}
.is-vote-detail .vb-form-editor-tools .vb-seg-btn+.vb-seg-btn{border-left:1px solid #d9e0e8}
.is-vote-detail .vb-form-editor-tools .vb-seg-btn.active{color:#1677ff;background:#eff6ff;box-shadow:none}
.is-vote-detail .vb-form-editor-tools .vb-all-required{height:28px;padding:0;border:0;background:transparent;border-radius:0;font-size:12px}
.is-vote-detail .vb-form-editor-tools .vb-all-required input{width:15px;height:15px}
.is-vote-detail .vb-editor-hint{
  display:grid;place-items:center;width:18px;height:18px;flex:0 0 18px;
  border:1px solid #cbd5e1;border-radius:50%;color:#64748b;background:#fff;
  font-size:11px;font-weight:700;cursor:help
}
.is-vote-detail .vb-editor-actions{display:flex;align-items:center;gap:6px;margin-left:2px}
.is-vote-detail .vb-editor-actions .btn{height:30px;min-width:58px;padding:0 12px;font-size:12px}
.is-vote-detail .vb-editor-save-state{font-size:12px;color:#64748b;white-space:nowrap}
.is-vote-detail .vb-editor-save-state{color:#64748b}

.is-vote-detail .vb-builder{
  width:100%;grid-template-columns:clamp(196px,16%,260px) minmax(0,1fr) clamp(300px,26%,420px)!important;
  column-gap:clamp(16px,4vw,72px)!important;align-items:stretch!important;background:#f7f9fc
}
.is-vote-detail .vb-builder>.vb-pane{
  position:relative;top:auto;min-width:0;max-height:620px;height:620px;margin:0;padding:0;
  border:1px solid #dfe5ec;border-radius:8px;box-shadow:0 1px 3px rgba(15,23,42,.04);background:#fff;overflow:hidden
}
.is-vote-detail .vb-builder>.vb-palette{padding:14px 12px;overflow-y:auto;border-right:1px solid #dfe5ec}
.is-vote-detail .vb-builder>.vb-canvas{display:flex;flex-direction:column;background:#fff;border-right:1px solid #dfe5ec}
.is-vote-detail .vb-builder>.vb-settings{padding:0 12px 48px;overflow-y:auto}
.is-vote-detail .vb-canvas-scroll{flex:1;padding:6px 8px 24px;background:#fff;overflow-y:auto;scrollbar-width:none}
.is-vote-detail .vb-canvas-scroll::-webkit-scrollbar{width:0;height:0}
.is-vote-detail .vb-device-frame{display:block;width:100%}
.is-vote-detail .vb-device-frame.vb-device-desktop .vb-form-preview{width:100%;max-width:none;border:0;border-radius:0;box-shadow:none}
.is-vote-detail .vb-device-frame.vb-device-mobile .vb-form-preview{margin:0 auto}
.is-vote-detail .vb-preview-banner{height:auto!important;aspect-ratio:16/5;border:0;border-radius:0}
.is-vote-detail .vb-preview-banner .vb-banner-img{width:100%;height:100%;object-fit:cover;object-position:center}
.is-vote-detail .vb-preview-head{padding:16px 14px 12px}
.is-vote-detail .vb-preview-body{padding:0 8px 18px}
.is-vote-detail .vb-preview-field{margin-bottom:8px;padding:10px 42px 10px 34px;border-radius:4px;background:#fff}
.is-vote-detail .vb-preview-field.selected{border-color:#1677ff;background:#fff;box-shadow:0 0 0 1px rgba(22,119,255,.08)}
.is-vote-detail .vb-field-editable .vb-field-actions{opacity:1;right:7px;top:7px}
.is-vote-detail .vb-field-editable .vb-drag-handle{left:10px;top:13px;font-size:13px}
.is-vote-detail .vb-field-editable .vb-field-no{left:24px;top:31px}
.is-vote-detail .vb-field-label{font-size:12px;margin-bottom:4px}
.is-vote-detail .vb-field-body{font-size:12px}
.is-vote-detail .vb-preview-opt{font-size:12px;padding:3px 0;gap:6px}
.is-vote-detail .vb-preview-opt input[type=radio],.is-vote-detail .vb-preview-opt input[type=checkbox]{width:14px;height:14px}
.is-vote-detail .vb-iconbtn{width:24px;height:24px;border:0;background:transparent;border-radius:4px}
.is-vote-detail .vb-field-actions .vb-iconbtn{
  display:inline-flex;align-items:center;justify-content:center;color:#5f6b7a;font-size:15px;line-height:1
}
.is-vote-detail .vb-field-actions .vb-iconbtn:hover{background:#f1f5f9;color:#1677ff}
.is-vote-detail .vb-field-actions .vb-iconbtn--danger:hover{color:#ef4444;background:#fff1f2}
.is-vote-detail .vb-page-break{margin:8px 0}

.is-vote-detail .vb-palette-title{padding:0 0 10px;margin:0 0 10px;font-size:13px}
.is-vote-detail .vb-palette-group{margin-bottom:10px}
.is-vote-detail .vb-palette-group h4{margin:0 0 6px;padding:0;border:0;font-size:11px;font-weight:500;color:#566273}
.is-vote-detail .vb-palette-item{min-height:34px;margin-bottom:5px;padding:5px 9px;gap:8px;border-radius:4px;font-size:12px;transform:none}
.is-vote-detail .vb-palette-item:hover{transform:none}
.is-vote-detail .vb-palette-item .vb-pi-ico{width:20px;height:20px;border:0;border-radius:4px;font-size:12px;background:#eff6ff;color:#1677ff}

.is-vote-detail .vb-pane.vb-settings .vb-settings-head{
  position:sticky;top:0;z-index:5;margin:0 -12px 10px;padding:11px 12px;background:#fff;border-bottom:1px solid #e5eaf0;backdrop-filter:none
}
.is-vote-detail .vb-settings-title{font-size:12px;font-weight:700}
.is-vote-detail .vb-settings-head .cell-sub{font-size:11px;margin-top:2px}
.is-vote-detail .vb-settings-help,.is-vote-detail .vb-palette-title>span{
  display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;margin-left:3px;
  border:1px solid #a8b3c2;border-radius:50%;color:#64748b;font-size:9px;font-weight:600;vertical-align:1px
}
.is-vote-detail .vb-required-mark{color:#ef4444}
.is-vote-detail .vb-setting-group{margin-bottom:10px;padding-bottom:9px}
.is-vote-detail .vb-setting-group h5{font-size:12px;margin:0 0 7px}
.is-vote-detail .vb-setting-row{display:grid;grid-template-columns:1fr;align-items:start;gap:4px;margin-bottom:8px}
.is-vote-detail .vb-setting-row>label{font-size:11px;color:#475569}
.is-vote-detail .vb-setting-row .input{width:100%;min-width:0;min-height:32px;height:32px;padding:5px 9px;border-radius:4px;font-size:11px}
.is-vote-detail .vb-setting-row:has(.switch){display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap}
.is-vote-detail .vb-setting-block{gap:6px;margin:8px 0 10px;padding:8px;border-radius:4px;background:#fff}
.is-vote-detail .vb-setting-block-h{font-size:11px}
.is-vote-detail .vb-setting-block-h .cell-sub{font-size:10px}
.is-vote-detail .vb-rich-editor--help{border-radius:4px}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar{padding:5px;gap:3px;flex-wrap:wrap}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar button{min-width:26px;height:24px;padding:0 6px;font-size:11px;border-radius:3px}
.is-vote-detail .vb-rich-editor--help .vb-rich-area{min-height:70px;max-height:120px;padding:8px;font-size:11px;line-height:1.5}
.is-vote-detail .vb-rich-select{height:24px;font-size:10px;border-radius:3px}
.is-vote-detail .vb-option-row{gap:4px;margin-bottom:5px;flex-wrap:nowrap}
.is-vote-detail .vb-option-row .input{height:30px;min-height:30px;font-size:11px;border-radius:4px}
@media (max-width:900px){
  .is-vote-detail .vb-form-editor-bar{height:auto;min-height:48px;padding:6px 10px;flex-wrap:wrap}
  .is-vote-detail .vb-form-editor-tools{width:100%;justify-content:flex-end;flex-wrap:wrap;gap:7px}
  .is-vote-detail .vb-builder{display:block}
  .is-vote-detail .vb-builder>.vb-pane{height:auto;max-height:none;border:0}
}

/* 右侧字段设置保留足够的文字与编辑工具空间；富文本工具栏采用确定性栅格，避免窄栏自动挤乱。 */
.is-vote-detail .vb-builder{grid-template-columns:clamp(196px,16%,260px) minmax(0,1fr) clamp(300px,26%,420px)!important}
.is-vote-detail .vb-builder{column-gap:24px!important}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar{
  display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;padding:6px
}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar .vb-rich-sep{display:none}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar button{
  width:100%;min-width:0;height:26px;padding:0 2px
}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar .vb-rich-fontsize{grid-column:span 2;max-width:none;width:100%}
.is-vote-detail .vb-rich-editor--help .vb-rich-toolbar .vb-rich-fontsel{grid-column:span 3;max-width:none;width:100%}
.is-vote-detail .vb-rich-editor--help .vb-rich-area{min-height:96px;max-height:180px}
@media (max-width:1200px) and (min-width:901px){
  .is-vote-detail .vb-builder{column-gap:16px!important}
}
/* 三栏宽度已由 :root 的 --vb-col-* 线性插值全程接管（1280px 以下自动落到紧凑值），
   无需再设断点。原来这里写的 .vb-builder{grid-template-columns:...} 一直被上方
   带 !important 的规则压制、从未生效，故一并移除，避免误导。 */

/* ========== 投票结果 / 做票监视 ========== */
.vb-result-pane{padding:4px 2px 24px}
.vb-result-hero{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;padding:16px 18px;border-radius:var(--radius-lg);background:var(--surface-2);border:1px solid var(--border,#e6edf3);margin-bottom:16px}
.vb-result-kicker{font-size:12px;color:var(--text-2);letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}
.vb-result-title{margin:0 0 6px;font-size:18px;font-weight:700}
.vb-result-desc{margin:0;font-size:13px;color:var(--text-2);line-height:1.55;max-width:640px}
.vb-result-hero-right{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex:0 0 auto}
.vb-switch{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;cursor:pointer}
.vb-switch input{width:16px;height:16px}
.vb-result-status{font-size:12px;padding:4px 10px;border-radius:999px;background:#f1f5f9;color:#475569}
.vb-result-status.is-on{background:#dbeafe;color:#1d4ed8}
.vb-result-status.is-growing{background:#fef3c7;color:#b45309}
.vb-result-status.is-capped{background:#d1fae5;color:#047857}
.vb-result-status.is-off{background:#f1f5f9;color:#64748b}
.vb-result-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
@media (max-width:900px){.vb-result-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.vb-result-card{background:#fff;border:1px solid var(--border,#e6edf3);border-radius:12px;padding:14px 16px}
.vb-result-card--primary{background:color-mix(in srgb,var(--accent) 6%,#fff);border-color:color-mix(in srgb,var(--accent) 25%,#e6edf3)}
.vb-result-card-label{font-size:12px;color:var(--text-2);margin-bottom:4px}
.vb-result-card-num{font-size:28px;font-weight:800;line-height:1.1;color:#0f172a}
.vb-result-card-sub{font-size:12px;color:var(--text-2);margin-top:4px}
.vb-result-agree{color:#1d4ed8}
.vb-result-disagree{color:#b91c1c}
.vb-result-abstain{color:#64748b}
.vb-result-progress{height:8px;background:#e2e8f0;border-radius:999px;overflow:hidden;margin:10px 0 6px}
.vb-result-progress-fill{height:100%;background:var(--accent);border-radius:999px;transition:width .4s ease}
.vb-result-two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:900px){.vb-result-two-col{grid-template-columns:1fr}}
.vb-result-panel{background:#fff;border:1px solid var(--border,#e6edf3);border-radius:12px;padding:14px 16px}
.vb-result-rawbox{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:12px;font-size:13px;line-height:1.7}
.vb-form-group{margin-bottom:12px}
.vb-form-group>label{display:block;font-size:13px;font-weight:600;margin-bottom:4px;color:#334155}
.vb-result-clock{margin-top:10px;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;padding:6px 12px;border-radius:999px;display:inline-block;letter-spacing:.2px}
.vb-result-clock.is-running{background:rgba(34,197,94,.14);color:#16a34a}
.vb-result-clock.is-stop{background:var(--primary-soft);color:var(--accent-2)}
.vb-result-clock.is-frozen{background:rgba(148,163,184,.18);color:#475569}
.vb-form-row{display:flex;flex-wrap:wrap;gap:12px 18px}
.vb-check{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:500;cursor:pointer}
/* 增补票分段计划表 */
.vb-seg-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:4px}
.vb-seg-table th,.vb-seg-table td{border:1px solid var(--border,#e6edf3);padding:6px 8px;text-align:center}
.vb-seg-table th{background:#f1f5f9;color:#475569;font-weight:600}
.vb-seg-table .vb-seg-idx{font-weight:700;color:#64748b}
.vb-seg-in{width:90px;text-align:center}
.vb-seg-table .vb-seg-del{color:#ef4444;border-color:#fecaca}
.vb-mon-ctrl{padding:10px 0 6px;border-bottom:1px solid var(--border,#e6edf3);margin-bottom:10px}
.vb-mon-ctrl-nums{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:13px;margin-bottom:8px}

/* ======================== 换届项目管理 ======================== */
.proj-toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px}
.proj-h2{font-size:20px;font-weight:700;margin:0 0 4px}
.proj-tip{margin:0;color:var(--muted,#64748b);font-size:13px;max-width:640px}
.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.proj-card{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:14px;padding:18px;display:flex;flex-direction:column;gap:14px;transition:.18s}
.proj-card:hover{box-shadow:0 6px 20px rgba(15,23,42,.08);transform:translateY(-2px)}
.proj-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.proj-card-name{font-weight:700;font-size:16px}
.proj-card-sub{color:var(--muted,#64748b);font-size:13px;margin-top:2px}
.proj-card-meta{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--muted,#64748b);border-top:1px dashed var(--border,#e6edf3);padding-top:10px}
.proj-card-actions{display:flex;gap:8px}
.proj-empty{color:var(--muted,#64748b);font-size:14px;padding:40px;text-align:center;grid-column:1/-1;background:var(--card,#fff);border:1px dashed var(--border,#e6edf3);border-radius:14px}

.proj-detail{display:flex;flex-direction:column;gap:18px}
.proj-detail-bar{display:flex;align-items:center;gap:14px}
.proj-detail-title{display:flex;align-items:center;gap:10px;flex:1}
.proj-detail-name{font-size:18px;font-weight:700}

.proj-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.stat{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:12px;padding:16px;text-align:center}
.stat-num{font-size:24px;font-weight:800;color:var(--primary,#2563eb)}
.stat-label{font-size:12px;color:var(--muted,#64748b);margin-top:4px}

.proj-section{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:14px;padding:18px}
.proj-section-head{display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.proj-section-head h3{margin:0;font-size:15px}

.meeting-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px}
.meeting-card{border:1px solid var(--border,#e6edf3);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}
.meeting-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.meeting-name{font-weight:700;font-size:14px}
.meeting-sub{color:var(--muted,#64748b);font-size:12px;margin-top:2px}
.meeting-items{display:flex;flex-direction:column;gap:8px}
.vi-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 10px;background:var(--bg,#f8fafc);border-radius:8px}
.vi-name{font-size:13px;font-weight:600;flex:1;min-width:120px}
.vi-tag{font-size:11px;padding:2px 8px;border-radius:20px;background:#eef2ff;color:#4338ca}
.vi-linked{font-size:12px;color:#10b981;font-weight:600}
.vi-link{padding:5px 8px;border:1px solid var(--border,#e6edf3);border-radius:8px;font-size:12px;max-width:160px}
.vi-empty{color:var(--muted,#64748b);font-size:13px;padding:6px}
.meeting-foot{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--muted,#64748b);border-top:1px dashed var(--border,#e6edf3);padding-top:8px}

.signin-toolbar{display:flex;gap:8px;margin-bottom:14px}
.signin-table-wrap{overflow-x:auto;border:1px solid var(--border,#e6edf3);border-radius:10px}
.signin-table{width:100%;border-collapse:collapse;font-size:13px}
.signin-table th,.signin-table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border,#e6edf3)}
.signin-table th{background:var(--bg,#f8fafc);font-weight:600;color:var(--muted,#64748b)}
.signin-table tr:last-child td{border-bottom:none}
.ta-right{text-align:right}
.role-badge{font-size:11px;padding:3px 9px;border-radius:20px;font-weight:600;white-space:nowrap}
.role-member_rep{background:#dbeafe;color:#1d4ed8}
.role-council_member{background:#dcfce7;color:#15803d}
.role-supervisor{background:#fef9c3;color:#a16207}
.role-leader{background:#fae8ff;color:#a21caf}
.muted{color:var(--muted,#64748b)}
.perm-preview{margin-top:16px;background:var(--bg,#f8fafc);border-radius:10px;padding:14px}
.perm-preview-title{font-size:13px;font-weight:700;margin-bottom:10px}
.perm-row{display:flex;align-items:center;gap:12px;padding:6px 0;font-size:13px}
.perm-meetings{color:var(--muted,#64748b)}

/* 向导 */
.wz-steps{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:18px}
.wz-step{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted,#64748b)}
.wz-step.active{color:var(--primary,#2563eb);font-weight:700}
.wz-step.done{color:#10b981}
.wz-dot{width:22px;height:22px;border-radius:50%;background:var(--bg,#eef2f7);display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.wz-step.active .wz-dot{background:var(--primary,#2563eb);color:#fff}
.wz-step.done .wz-dot{background:#10b981;color:#fff}
.wz-arrow{color:var(--muted,#cbd5e1)}
.wz-body{max-width:680px}
.wz-field{margin-bottom:14px;display:flex;flex-direction:column;gap:6px}
.wz-field label{font-size:13px;font-weight:600;color:var(--muted,#475569)}
.wz-field input,.wz-field select,.wz-field textarea{padding:9px 11px;border:1px solid var(--border,#e6edf3);border-radius:9px;font-size:14px;font-family:inherit}
.wz-row{display:flex;gap:14px}.wz-row .wz-field{flex:1}
.wz-hint{font-size:13px;color:var(--muted,#64748b);margin:0 0 12px}
.wz-meeting-opt{border:1px solid var(--border,#e6edf3);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.wz-check{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:14px}
.wz-meeting-items{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0 26px}
.wz-chip{font-size:11px;padding:3px 8px;background:var(--bg,#f1f5f9);border-radius:6px;color:var(--muted,#475569)}
.wz-seats{margin:8px 0 0 26px;font-size:13px;color:var(--muted,#64748b)}
.wz-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}
.wz-confirm{display:flex;flex-direction:column;gap:10px}
.wz-confirm-row{display:flex;justify-content:space-between;padding:10px 14px;background:var(--bg,#f8fafc);border-radius:8px;font-size:14px}

/* 弹窗 */
.vp-modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px}
.vp-modal{background:var(--card,#fff);border-radius:16px;width:min(520px,100%);max-height:88vh;overflow:auto;box-shadow:0 20px 60px rgba(15,23,42,.3)}
.vp-modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid var(--border,#e6edf3);font-weight:700}
.vp-modal-x{border:none;background:none;font-size:22px;cursor:pointer;color:var(--muted,#94a3b8);line-height:1}
.vp-modal-body{padding:18px}
.vp-modal-actions{display:flex;justify-content:flex-end;margin-top:16px}


/* ======================== 换届监票大屏 (Phase 4) ======================== */
.xj-mon-toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.xj-mon-toolbar .select{max-width:300px}
.xj-alert{padding:12px 16px;border-radius:12px;font-weight:600;margin-bottom:14px;font-size:14px;animation:fadeIn .3s ease}
.xj-alert--ok{background:linear-gradient(135deg,rgba(16,185,129,.14),rgba(16,185,129,.06));color:#047857;border:1px solid rgba(16,185,129,.3)}
.xj-alert--warn{background:linear-gradient(135deg,rgba(239,68,68,.16),rgba(239,68,68,.06));color:#b91c1c;border:1px solid rgba(239,68,68,.35);box-shadow:0 0 0 4px rgba(239,68,68,.08)}
.xj-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.xj-kpi{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:16px;padding:18px 20px;position:relative;overflow:hidden;box-shadow:0 6px 20px rgba(15,23,42,.05);transition:transform .25s cubic-bezier(.16,1,.3,1)}
.xj-kpi::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--accent,#4f46e5),var(--accent-2,#7c3aed));opacity:.85}
.xj-kpi--ok::before{background:linear-gradient(90deg,#10b981,#34d399)}
.xj-kpi--warn::before{background:linear-gradient(90deg,#ef4444,#f87171)}
.xj-kpi:hover{transform:translateY(-3px)}
.xj-kpi-label{font-size:13px;color:var(--muted,#64748b);font-weight:600}
.xj-kpi-val{font-size:34px;font-weight:800;line-height:1.15;margin:6px 0 2px;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.xj-kpi--ok .xj-kpi-val{color:#047857}
.xj-kpi--warn .xj-kpi-val{color:#b91c1c}
.xj-kpi-sub{font-size:12px;color:var(--muted,#94a3b8)}
.xj-card{margin-bottom:16px;border-radius:16px;padding:16px 18px}
.xj-prog-row{display:grid;grid-template-columns:minmax(120px,1.2fr) 3fr auto;gap:14px;align-items:center;padding:9px 0;border-bottom:1px dashed var(--border,#eef2f7)}
.xj-prog-row:last-child{border-bottom:none}
.xj-prog-name{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xj-prog-bar{height:10px;background:var(--bg,#f1f5f9);border-radius:999px;overflow:hidden;box-shadow:inset 0 1px 2px rgba(15,23,42,.06)}
.xj-prog-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent,#4f46e5),var(--accent-2,#7c3aed));transition:width .6s cubic-bezier(.16,1,.3,1)}
.xj-prog-num{font-size:13px;font-weight:700;color:var(--muted,#475569);white-space:nowrap;font-variant-numeric:tabular-nums}
.xj-trend{width:100%;height:190px;display:block;margin-top:6px}
.xj-trend .xj-grid{stroke:var(--border,#e6edf3);stroke-width:1}
.xj-trend .xj-axis{fill:var(--muted,#94a3b8);font-size:11px;font-family:inherit}
.xj-trend-foot{font-size:12px;color:var(--muted,#94a3b8);margin-top:6px;text-align:right}
.xj-feed-row{display:flex;gap:12px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--border,#eef2f7);font-size:13px}
.xj-feed-row:last-child{border-bottom:none}
.xj-feed-time{font-variant-numeric:tabular-nums;color:var(--muted,#94a3b8);width:72px;flex:none}
.xj-feed-ok{color:#047857;font-weight:700;flex:none}
.xj-feed-item{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:760px){.xj-kpis{grid-template-columns:repeat(2,1fr)}.xj-prog-row{grid-template-columns:1fr;gap:4px}.xj-prog-num{text-align:left}}

/* ===================== 监票大屏（动态监票） ===================== */
.vb-mon-wrap{margin:0;padding:0}
.vb-mon-screen{
  --mon-card:rgba(255,255,255,.05); --mon-line:rgba(255,255,255,.10);
  background:
    radial-gradient(1200px 600px at 15% -10%, rgba(79,70,229,.25), transparent 60%),
    radial-gradient(900px 500px at 100% 0%, rgba(16,185,129,.18), transparent 55%),
    linear-gradient(180deg,#0b1020,#0a0e1c);
  color:#e8edf7; border-radius:18px; padding:26px 30px 18px; min-height:560px;
  display:flex; flex-direction:column; gap:18px; overflow:hidden;
}
/* 白天主题 */
.vb-mon-screen[data-theme="day"]{
  --mon-card:rgba(255,255,255,.55); --mon-line:rgba(0,0,0,.08);
  background:
    radial-gradient(1200px 600px at 15% -10%, rgba(59,130,246,.12), transparent 60%),
    radial-gradient(900px 500px at 100% 0%, rgba(16,185,129,.08), transparent 55%),
    linear-gradient(180deg,#f8fafc,#eef2ff);
  color:#1e293b;
}
.vb-mon-screen[data-theme="day"] .vb-mon-title{color:#0f172a}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-label{color:#475569}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-subtle{color:#64748b}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-num{background:linear-gradient(180deg,#0f172a,#4f46e5);-webkit-background-clip:text;background-clip:text;color:transparent}
.vb-mon-screen[data-theme="day"] .vb-mon-update{color:#64748b}
.vb-mon-screen[data-theme="day"] .vb-mon-card-idx{color:#475569;background:rgba(0,0,0,.06)}
.vb-mon-screen[data-theme="day"] .vb-mon-num{background:rgba(0,0,0,.05)}
.vb-mon-screen[data-theme="day"] .vb-mon-num span{color:#334155;font-weight:600}
.vb-mon-screen[data-theme="day"] .vb-mon-agree b{color:#059669}
.vb-mon-screen[data-theme="day"] .vb-mon-disagree b{color:#dc2626}
.vb-mon-screen[data-theme="day"] .vb-mon-abstain b{color:#475569}
.vb-mon-screen[data-theme="day"] .vb-mon-other b{color:#7c3aed}
.vb-mon-screen[data-theme="day"] .vb-mon-total b{color:#0f172a}
.vb-mon-screen[data-theme="day"] .vb-mon-tick{color:#334155}
.vb-mon-screen[data-theme="day"] .vb-mon-tick-sep{color:#94a3b8}
.vb-mon-screen[data-theme="day"] .vb-mon-ticker{border-top-color:var(--mon-line)}
.vb-mon-screen[data-theme="day"] .vb-mon-badge{background:rgba(16,185,129,.14);color:#047857;border-color:rgba(16,185,129,.4)}
.vb-mon-screen[data-theme="day"] .vb-mon-dot{background:#10b981}
.vb-mon-screen[data-theme="day"] .vb-mon-bar{background:rgba(0,0,0,.08)}
.vb-mon-screen[data-theme="day"] .vb-mon-bar-agree{background:linear-gradient(90deg,#059669,#10b981)}
.vb-mon-screen[data-theme="day"] .vb-mon-bar-disagree{background:linear-gradient(90deg,#dc2626,#ef4444)}
.vb-mon-screen[data-theme="day"] .vb-mon-bar-abstain{background:linear-gradient(90deg,#475569,#64748b)}
.vb-mon-screen[data-theme="day"] .vb-mon-flag{color:#92400e;background:rgba(251,191,36,.22)}
/* 夜晚主题（默认） */
.vb-mon-screen[data-theme="night"] .vb-mon-title{color:#e8edf7}
.vb-mon-screen[data-theme="night"] .vb-mon-hero-num{background:linear-gradient(180deg,#fff,#9ecbff);-webkit-background-clip:text;background-clip:text;color:transparent}
.vb-mon-top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.vb-mon-title{font-size:24px;font-weight:800;letter-spacing:.5px}
.vb-mon-meta{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.vb-mon-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(16,185,129,.16);color:#6ee7b7;border:1px solid rgba(16,185,129,.4);padding:6px 12px;border-radius:999px;font-size:13px;font-weight:700}
.vb-mon-dot{width:9px;height:9px;border-radius:50%;background:#34d399;animation:pulseDot 1.6s infinite}
@keyframes pulseDot{0%{box-shadow:0 0 0 0 rgba(52,211,153,.7)}70%{box-shadow:0 0 0 10px rgba(52,211,153,0)}100%{box-shadow:0 0 0 0 rgba(52,211,153,0)}}
.vb-mon-update{font-size:12px;color:#9fb0c9;font-variant-numeric:tabular-nums}
.vb-mon-hero{text-align:center;padding:10px 0 4px}
.vb-mon-hero-label{font-size:14px;color:#9fb0c9;letter-spacing:2px}
.vb-mon-hero-num{font-size:84px;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;background:linear-gradient(180deg,#fff,#9ecbff);-webkit-background-clip:text;background-clip:text;color:transparent;margin:4px 0}
.vb-mon-progress{height:12px;background:rgba(255,255,255,.08);border-radius:999px;overflow:hidden;max-width:620px;margin:10px auto 6px}
.vb-mon-progress-fill{height:100%;background:linear-gradient(90deg,#4f46e5,#22d3ee);border-radius:999px;transition:width .6s cubic-bezier(.16,1,.3,1)}
.vb-mon-hero-sub{font-size:13px;color:#9fb0c9}
/* 网格列数控制 */
.vb-mon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.vb-mon-grid[data-cols="1"]{grid-template-columns:1fr}
.vb-mon-grid[data-cols="2"]{grid-template-columns:repeat(2,1fr)}
.vb-mon-grid[data-cols="3"]{grid-template-columns:repeat(3,1fr)}
.vb-mon-grid[data-cols="4"]{grid-template-columns:repeat(4,1fr)}
.vb-mon-card{background:var(--mon-card);border:1px solid var(--mon-line);border-radius:14px;padding:14px 16px;backdrop-filter:blur(6px)}
.vb-mon-card.is-close{border-color:rgba(251,191,36,.6);box-shadow:0 0 0 1px rgba(251,191,36,.25),0 0 24px rgba(251,191,36,.18)}
.vb-mon-card-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.vb-mon-card-idx{font-size:12px;color:#9fb0c9;background:rgba(255,255,255,.07);padding:2px 8px;border-radius:6px}
.vb-mon-card-name{font-weight:700;font-size:15px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vb-mon-flag{font-size:11px;color:#fbbf24;background:rgba(251,191,36,.16);padding:2px 8px;border-radius:6px;font-weight:700}
.vb-mon-bar{height:14px;display:flex;border-radius:999px;overflow:hidden;background:rgba(255,255,255,.06)}
.vb-mon-bar-agree{background:linear-gradient(90deg,#10b981,#34d399)}
.vb-mon-bar-disagree{background:linear-gradient(90deg,#ef4444,#f87171)}
.vb-mon-bar-abstain{background:linear-gradient(90deg,#64748b,#94a3b8)}
.vb-mon-bar-other{background:linear-gradient(90deg,#a855f7,#c084fc)}
.vb-mon-card-nums{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.vb-mon-num{flex:1;min-width:54px;text-align:center;background:rgba(255,255,255,.04);border-radius:10px;padding:8px 4px}
.vb-mon-num b{display:block;font-size:24px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.1}
.vb-mon-num span{font-size:16px;color:#9fb0c9;white-space:nowrap}
.vb-mon-agree b{color:#6ee7b7}.vb-mon-disagree b{color:#fca5a5}.vb-mon-abstain b{color:#cbd5e1}.vb-mon-other b{color:#d8b4fe}.vb-mon-total b{color:#fff}
/* 监票卡片底部「通过率」 */
.vb-mon-card-foot{margin-top:10px;display:flex;justify-content:flex-end}
.vb-mon-pass{font-size:12px;font-weight:600;color:#93c5fd}
.vb-mon-ticker{overflow:hidden;white-space:nowrap;border-top:1px solid var(--mon-line);padding-top:10px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.vb-mon-ticker-track{display:inline-block;padding-left:100%;animation:tickScroll 28s linear infinite}
@keyframes tickScroll{from{transform:translateX(0)}to{transform:translateX(-100%)}}
.vb-mon-tick{display:inline-block;font-size:13px;color:#cbd5e1;margin:0 6px;font-variant-numeric:tabular-nums}
.vb-mon-tick-sep{color:#475569;margin:0 4px}
.vb-mon-tick-ag{color:#6ee7b7}.vb-mon-tick-dis{color:#fca5a5}.vb-mon-tick-ab{color:#cbd5e1}.vb-mon-tick-ot{color:#d8b4fe}
/* 监票汇总条 */
.vb-mon-sum{display:flex;gap:10px;justify-content:center;margin-top:10px;flex-wrap:wrap}
.vb-mon-sum-item{min-width:90px;text-align:center;background:rgba(255,255,255,.06);border-radius:12px;padding:10px 14px}
.vb-mon-sum-item b{display:block;font-size:28px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.1}
.vb-mon-sum-item span{font-size:12px;color:#9fb0c9}
/* 卡片分组标签与底部 */
.vb-mon-card-group{font-size:11px;color:#94a3b8;background:rgba(255,255,255,.06);padding:2px 8px;border-radius:6px;margin-right:4px}
/* 监票配置面板 */
.vb-mon-config{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:14px;padding:14px 16px;margin-bottom:14px}
.vb-mon-config-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.vb-mon-config-row+.vb-mon-config-row{margin-top:10px}
.vb-mon-config-label{font-size:13px;color:var(--muted,#64748b);font-weight:600;white-space:nowrap}
.vb-mon-theme-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid var(--border,#e6edf3);background:var(--card,#fff);font-size:13px;cursor:pointer;transition:all .2s}
.vb-mon-theme-btn.active{border-color:#4f46e5;background:#eef2ff;color:#3730a3;font-weight:700}
.vb-mon-cols-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:1px solid var(--border,#e6edf3);background:var(--card,#fff);font-size:13px;cursor:pointer;transition:all .2s}
.vb-mon-cols-btn.active{border-color:#4f46e5;background:#eef2ff;color:#3730a3;font-weight:700}
.vb-mon-topic-chk{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:8px;border:1px solid var(--border,#e6edf3);background:var(--card,#fff);font-size:13px;cursor:pointer;transition:all .2s}
.vb-mon-topic-chk input{margin:0}
.vb-mon-topic-chk.active{border-color:#4f46e5;background:#eef2ff;color:#3730a3;font-weight:600}
.vb-mon-config-actions{display:flex;gap:10px;margin-top:10px}
.vb-mon-url{font-size:12px;color:var(--muted,#64748b);background:#f8fafc;border:1px dashed var(--border,#e6edf3);border-radius:8px;padding:8px 10px;word-break:break-all;flex:1}
.vb-mon-copy-btn{padding:6px 12px;border-radius:8px;border:1px solid var(--border,#e6edf3);background:var(--card,#fff);font-size:13px;cursor:pointer}
.vb-mon-copy-btn:active{transform:scale(.96)}

/* 倒计时头部：左中右三栏 */
.vb-mon-hero-countdown{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;padding:16px 20px;background:rgba(255,255,255,.04);border:1px solid var(--mon-line);border-radius:18px}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-countdown{background:rgba(255,255,255,.55);border-color:rgba(0,0,0,.08)}
/* 五栏等宽布局：参会代表数 · 实时总票数 · 倒计时 · 进度环 · 投票控制 */
.vb-mon-hero-5col{grid-template-columns:repeat(5,1fr);gap:14px}
.vb-mon-hero-cell{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:10px;text-align:center;min-width:0;padding:6px 0}
.vb-mon-hero-label{font-size:14px;color:#9fb0c9;letter-spacing:2px;min-height:20px;display:flex;align-items:center;justify-content:center}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-label{color:#475569}
/* 三项统计数字统一字号 + 顶端对齐，保证格式对齐 */
.vb-mon-hero-attendee .vb-mon-hero-num,
.vb-mon-hero-left .vb-mon-hero-num,
.vb-mon-hero-middle .vb-mon-cd-time{font-size:clamp(40px,4.6vw,78px);font-weight:900;line-height:1;font-variant-numeric:tabular-nums;background:linear-gradient(180deg,#fff,#9ecbff);-webkit-background-clip:text;background-clip:text;color:transparent;margin:0}
.vb-mon-hero-right{display:flex;justify-content:center}
/* 进度环在五栏中缩小至与数字等高，标签对齐 */
.vb-mon-hero-5col .vb-mon-cd-ring{width:78px;height:78px}
/* 投票控制按钮列 */
.vb-mon-hero-votebtn .vb-mon-cd-btn{margin-top:0;min-width:120px;padding:14px 18px;font-size:16px;font-weight:700;border-radius:12px}
/* 按钮插槽与「进度」环等高居中，使按钮中心与圆内暂停按钮平齐 */
.vb-mon-hero-votebtn .vb-mon-cd-btn-slot{height:78px;display:flex;align-items:center;justify-content:center}
.vb-mon-hero-subtle{font-size:13px;opacity:.8}
.vb-mon-hero-num{font-size:clamp(40px,5.2vw,84px);font-weight:900;line-height:1;font-variant-numeric:tabular-nums;background:linear-gradient(180deg,#fff,#9ecbff);-webkit-background-clip:text;background-clip:text;color:transparent;margin:4px 0}
.vb-mon-screen[data-theme="day"] .vb-mon-hero-num{background:linear-gradient(180deg,#0f172a,#4f46e5);-webkit-background-clip:text;background-clip:text;color:transparent}
.vb-mon-cd-time{font-size:clamp(40px,5.2vw,84px);font-weight:900;line-height:1;font-variant-numeric:tabular-nums;background:linear-gradient(180deg,#fff,#9ecbff);-webkit-background-clip:text;background-clip:text;color:transparent}
.vb-mon-screen[data-theme="day"] .vb-mon-cd-time{background:linear-gradient(180deg,#0f172a,#4f46e5);-webkit-background-clip:text;background-clip:text;color:transparent}
.vb-mon-cd-btn{margin-top:4px;min-width:120px;padding:8px 14px;font-size:15px;font-weight:700;border-radius:10px;border:1px solid rgba(255,255,255,.2);background:linear-gradient(180deg,#6366f1,#4f46e5);color:#fff;cursor:pointer;transition:transform .2s,filter .2s,box-shadow .2s;box-shadow:0 6px 18px rgba(79,70,229,.35)}
.vb-mon-cd-btn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.vb-mon-cd-btn:active{transform:translateY(0)}
.vb-mon-cd-btn.is-ended,.vb-mon-cd-btn:disabled{opacity:.45;filter:grayscale(1);cursor:not-allowed;pointer-events:none;box-shadow:none;background:linear-gradient(180deg,#64748b,#475569)}
.vb-mon-cd-ring{position:relative;width:110px;height:110px}
.vb-mon-cd-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.vb-mon-cd-ring circle{fill:none;stroke-width:8;stroke-linecap:round}
.vb-mon-cd-track{stroke:rgba(255,255,255,.12)}
.vb-mon-screen[data-theme="day"] .vb-mon-cd-track{stroke:rgba(0,0,0,.1)}
.vb-mon-cd-progress{stroke:#22d3ee;transition:stroke-dashoffset 1s linear}
.vb-mon-screen[data-theme="day"] .vb-mon-cd-progress{stroke:#0ea5e9}
.vb-mon-cd-icon{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:5px}
.vb-mon-cd-icon span{width:6px;height:18px;background:#e2e8f0;border-radius:2px}
.vb-mon-screen[data-theme="day"] .vb-mon-cd-icon span{background:#475569}
/* 环形点击暂停 */
.vb-mon-cd-ring-click{cursor:pointer;transition:transform .2s,filter .2s}
.vb-mon-cd-ring-click:hover{transform:scale(1.04);filter:drop-shadow(0 0 10px rgba(34,211,238,.5))}
.vb-mon-cd-ring.is-paused .vb-mon-cd-progress{stroke:#f59e0b}
.vb-mon-cd-ring.is-paused::after{content:"已暂停";position:absolute;left:50%;bottom:-18px;transform:translateX(-50%);font-size:11px;color:#f59e0b;white-space:nowrap}

/* 矩阵子议题区域：整体情况在头，候选项缩略展示 + 右侧滚动条 */
.vb-mon-matrix-wrap{margin-top:16px;display:flex;flex-direction:column;gap:14px}
.vb-mon-matrix-sec{background:rgba(255,255,255,.04);border:1px solid var(--mon-line);border-radius:16px;padding:14px 16px}
.vb-mon-screen[data-theme="day"] .vb-mon-matrix-sec{background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.08)}
/* 矩阵整体情况行（独立一排，左对齐，与题目对齐） */
.vb-mon-matrix-overall{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:12px 16px;background:rgba(255,255,255,.06);border:1px solid var(--mon-line);border-radius:14px;margin-bottom:12px}
.vb-mon-screen[data-theme="day"] .vb-mon-matrix-overall{background:rgba(255,255,255,.7);border-color:rgba(0,0,0,.08)}
/* 左侧：题目标题 + 通过率（题目左下角） */
.vb-mon-matrix-overall-head{display:flex;flex-direction:column;gap:5px;flex:1;min-width:200px}
.vb-mon-matrix-overall-name{font-weight:800;font-size:16px;color:#e8edf7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vb-mon-screen[data-theme="day"] .vb-mon-matrix-overall-name{color:#1e293b}
/* ★ 矩阵总统计通过率：置于左侧题目左下角（与单选卡通过率口径一致） */
.vb-mon-matrix-overall-pass{font-size:13px;font-weight:600;color:#93c5fd;letter-spacing:.3px}
.vb-mon-screen[data-theme="day"] .vb-mon-matrix-overall-pass{color:#1d4ed8}
.vb-mon-matrix-overall-nums{display:flex;gap:8px;flex-wrap:wrap}
.vb-mon-matrix-overall-nums .vb-mon-num{flex:1;min-width:108px;padding:8px 6px;text-align:center;background:rgba(255,255,255,.04);border-radius:10px}
.vb-mon-matrix-rows{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;max-height:calc(var(--rows,2) * 92px);overflow-y:auto;padding-right:6px}
.vb-mon-mcard{background:rgba(255,255,255,.06);border:1px solid var(--mon-line);border-radius:12px;padding:10px 14px;display:flex;flex-direction:column;gap:8px}
.vb-mon-screen[data-theme="day"] .vb-mon-mcard{background:rgba(255,255,255,.7);border-color:rgba(0,0,0,.08)}
.vb-mon-mcard-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.vb-mon-mcard-name{font-weight:700;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#e8edf7}
.vb-mon-screen[data-theme="day"] .vb-mon-mcard-name{color:#1e293b}
.vb-mon-mcard-total{font-size:15px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums;background:rgba(255,255,255,.1);border-radius:8px;padding:2px 10px;white-space:nowrap}
.vb-mon-screen[data-theme="day"] .vb-mon-mcard-total{color:#0f172a;background:rgba(0,0,0,.06)}
.vb-mon-mcard-nums{display:flex;gap:6px}
.vb-mon-mcard-nums .vb-mon-num{flex:1;min-width:54px;padding:8px 4px;text-align:center;background:rgba(255,255,255,.04);border-radius:10px}
/* 装饰性满行绿条（与投票进度无关，始终满格） */
.vb-mon-deco-bar{height:6px;border-radius:4px;width:100%;background:linear-gradient(90deg,#22c55e,#16a34a);box-shadow:0 0 8px rgba(34,197,94,.45)}

/* 数据报表 · 矩阵列表总统计（浅色主题，与监票大屏同口径同统计） */
.vb-report-matrix-list{margin-top:12px;display:flex;flex-direction:column;gap:14px}
.vb-report-matrix-sec{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:14px;padding:12px 16px}
.vb-report-matrix-sec-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.vb-report-matrix-sec-name{font-weight:700;font-size:15px;color:var(--text,#1e293b)}
.vb-report-matrix-sec-sub{font-size:13px;color:var(--muted,#64748b);font-variant-numeric:tabular-nums}
.vb-report-matrix-rows{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.vb-report-mcard{background:var(--bg-soft,#f8fafc);border:1px solid var(--border,#e6edf3);border-radius:12px;padding:10px 14px;display:flex;flex-direction:column;gap:6px}
.vb-report-mcard-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.vb-report-mcard-name{font-weight:600;font-size:14px;color:var(--text,#1e293b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vb-report-mcard-ag{font-size:18px;font-weight:800;color:#16a34a;font-variant-numeric:tabular-nums}
.vb-report-mcard-sub{font-size:12px;color:var(--muted,#64748b);font-variant-numeric:tabular-nums}
.vb-report-mcard-sub .dis{color:#dc2626;font-weight:600}
.vb-report-mcard-sub .abs{color:#d97706;font-weight:600}

/* 配置面板：垂直议题列表 + 倒计时设置 */
.vb-mon-topic-row{align-items:flex-start}
.vb-mon-topic-list{display:flex;flex-direction:column;align-items:flex-start;gap:8px;flex:1}
.vb-mon-topic-chk{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:8px;border:1px solid var(--border,#e6edf3);background:var(--card,#fff);font-size:13px;cursor:pointer;transition:all .2s;width:100%;max-width:520px}
.vb-mon-topic-chk input{margin:0;flex-shrink:0}
.vb-mon-topic-chk.active{border-color:#4f46e5;background:#eef2ff;color:#3730a3;font-weight:600}
.vb-mon-countdown-config{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.vb-mon-cd-label{font-size:12px;color:var(--muted,#64748b)}
.vb-mon-cd-input{width:80px;text-align:center}

@media (max-width:760px){
  .vb-mon-hero-countdown{grid-template-columns:1fr;gap:18px;text-align:center}
  .vb-mon-hero-5col{grid-template-columns:1fr 1fr;gap:14px}
  .vb-mon-hero-left,.vb-mon-hero-right,.vb-mon-hero-votebtn{justify-content:center;text-align:center}
  .vb-mon-hero-5col .vb-mon-hero-num,.vb-mon-hero-5col .vb-mon-cd-time{font-size:52px}
  .vb-mon-hero-5col .vb-mon-cd-ring{width:72px;height:72px}
  .vb-mon-hero-votebtn .vb-mon-cd-btn-slot{height:72px}
  .vb-mon-grid{grid-template-columns:1fr}
  .vb-tally-maprow{flex-wrap:wrap}
  .vb-tally-sel{max-width:none}
}

/* ===================== 计票结果（Word 模版） ===================== */
.vb-tally{display:flex;flex-direction:column;gap:22px;width:100%;max-width:1180px;margin:0 auto}
.vb-tally-section{background:var(--card,#fff);border:1px solid var(--border,#e6edf3);border-radius:14px;padding:18px 20px}
.vb-tally-info{margin-top:10px;font-size:13px;color:var(--muted,#64748b)}
.vb-file{margin-top:10px}
.vb-tally-maprow{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px dashed var(--border,#eef2f7)}
.vb-tally-maprow:last-child{border-bottom:none}
.vb-tally-token{background:#eef2ff;color:#3730a3;border:1px solid #c7d2fe;padding:4px 10px;border-radius:8px;font-size:13px;font-weight:700;white-space:nowrap}
.vb-tally-arrow{color:var(--muted,#94a3b8)}
.vb-tally-sel{flex:1;max-width:420px}
.vb-tally-actions label{margin-bottom:8px;display:inline-flex}
.vb-tally-cheatsheet code{display:inline-block;background:#f1f5f9;border:1px solid #e2e8f0;color:#0f172a;padding:3px 8px;border-radius:7px;font-size:12px;margin:3px 4px 3px 0}
.vb-tally-tokens{line-height:2.2}
/* ===== 审计报告生成（v2 内置模板 + 议题勾选）===== */
.vb-audit-meta{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.vb-audit-meta label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted,#64748b);font-weight:600}
.vb-audit-meta input{font-size:14px;padding:8px 10px;border:1px solid var(--border,#e2e8f0);border-radius:8px;background:var(--bg,#fff);color:var(--text,#0f172a)}
#vbAuditTopics{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.vb-audit-topic{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:9px 12px;border:1px solid var(--border,#eef2f7);border-radius:10px;background:rgba(127,127,127,.03)}
.vb-audit-label{flex:1;min-width:200px;font-size:14px;font-weight:600;color:var(--text,#0f172a)}
.vb-audit-type{font-size:13px;padding:6px 8px;border:1px solid var(--border,#e2e8f0);border-radius:8px;background:var(--bg,#fff);color:var(--text,#0f172a)}
.vb-audit-concl{font-size:13px;padding:6px 10px;border:1px solid var(--border,#e2e8f0);border-radius:8px;min-width:160px;background:var(--bg,#fff);color:var(--text,#0f172a)}
.vb-audit-preview{width:210mm;min-height:297mm;padding:20mm 18mm;margin:0 auto;border:1px solid var(--border,#e6edf3);background:#fff;color:#111;font-family:"SimSun","Songti SC",serif;line-height:1.9;box-shadow:0 2px 10px rgba(0,0,0,.08)}
.vb-audit-preview[contenteditable="true"]{outline:none;cursor:text;transition:box-shadow .15s,border-color .15s}
.vb-audit-preview[contenteditable="true"]:hover{border-color:#94a3b8}
.vb-audit-preview[contenteditable="true"]:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.vb-audit-preview[contenteditable="true"]:empty:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none}
/* 实时预览：A4 分页符（屏幕显示虚线，打印时强制换页） */
.vb-print-page-break{text-align:center;color:#94a3b8;border-top:2px dashed #cbd5e1;margin:24px 0;padding-top:8px;font-size:12px}
@media print{.vb-print-page-break{break-after:page;page-break-after:always;border:none;height:0;margin:0;padding:0;visibility:hidden}}
.vb-audit-title{text-align:center;font-size:22px;margin:0 0 6px;font-weight:800}
.vb-audit-meeting{text-align:center;font-size:15px;margin-bottom:16px;color:#334155}
.vb-audit-line{font-size:15px;margin:8px 0;text-indent:2em}
.vb-audit-cap{font-size:16px;margin:18px 0 8px;font-weight:700}
.vb-audit-tbl{border-collapse:collapse;width:100%;font-size:14px;margin-bottom:6px}
.vb-audit-tbl td,.vb-audit-tbl th{border:1px solid #333;padding:7px 9px;text-align:center}
.vb-audit-unit{font-size:14px;margin:10px 0 4px;font-weight:600}
.vb-audit-foot{text-align:right;font-size:15px;margin-top:8px}
@media (max-width:760px){.vb-mon-hero-num{font-size:56px}.vb-mon-grid{grid-template-columns:1fr}.vb-tally-maprow{flex-wrap:wrap}.vb-tally-sel{max-width:none}}

/* 监票设置：五个设置框同排，代表人数为独立板块 */
.vb-mon-config--toolbar{grid-template-columns:repeat(4,minmax(0,1fr)) minmax(320px,1.35fr);grid-auto-rows:112px}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){grid-column:auto;grid-row:1;height:112px;min-height:112px;gap:8px}
.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:5;grid-row:1}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(4){grid-column:4;grid-row:1}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(5){grid-column:3;grid-row:1}
@media(max-width:1100px){.vb-mon-config--toolbar{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:112px}.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n),.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:auto;grid-row:auto}}
@media(max-width:900px){.vb-mon-config--toolbar{grid-template-columns:1fr}.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){height:112px;min-height:112px}}


/* ===== 监票大屏：后台内嵌前台预览（2026-08-09 #10）===== */
/* 后台「监票大屏」Tab 不再自渲染屏幕，改为 iframe 内嵌前台 monitor.html?backend=1&embed=1。
   这样「前台是什么样，后台就是什么样」，且后台不再有第二套渲染引擎产生显示偏差。 */
.vb-mon-preview-box{
  margin-top:14px;border:1px solid var(--line,rgba(0,0,0,.1));border-radius:14px;overflow:hidden;
  background:#0b1020;box-shadow:0 6px 24px rgba(15,23,42,.12);
}
.vb-mon-preview-head{
  display:flex;align-items:center;gap:12px;padding:8px 14px;
  background:rgba(99,102,241,.10);border-bottom:1px solid rgba(99,102,241,.22);
}
.vb-mon-preview-tag{font-size:12px;font-weight:800;color:#4f46e5;letter-spacing:.02em;white-space:nowrap}
.vb-mon-preview-note{font-size:12px;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vb-mon-preview-head .vb-mon-update{margin-left:auto;font-size:12px;color:#64748b;white-space:nowrap}
.vb-mon-preview{
  display:block;width:100%;height:76vh;min-height:560px;border:0;background:#0b1020;
}
.vb-mon-preview:fullscreen{height:100vh;min-height:100vh}
/* 「清空数据」是不可撤销操作，给出危险色提示 */
.vb-mon-danger{color:#dc2626 !important;border-color:rgba(220,38,38,.35) !important}
.vb-mon-danger:hover{background:rgba(220,38,38,.08) !important}
@media (max-width:900px){
  .vb-mon-preview{height:62vh;min-height:420px}
  .vb-mon-preview-note{display:none}
}

/* 数据报表：矩阵「总统计」行高亮（用户 #7），主题无关的半透明琥珀色叠加 */
.vb-report-table tr.vb-rpt-mtotal > td{background:rgba(245,158,11,.16);font-weight:700}
.vb-report-table tr.vb-rpt-mtotal > td:first-child,
.vb-report-table tr.vb-rpt-mtotal > td:nth-child(2){color:var(--text,#0f172a)}

/* 倒计时投票时长：时/分/秒三维选择器 (2026-08-11) */
.vb-mon-cd-sel{display:inline-block;width:74px;padding:6px 8px;margin:0 4px 0 0;border:1px solid var(--border,#d0d7de);border-radius:8px;background:var(--input-bg,#fff);color:var(--text,#1f2328);font-size:14px;font-variant-numeric:tabular-nums;cursor:pointer}
.vb-mon-cd-unit{font-size:13px;color:var(--text-sub,#57606a);margin:0 6px 0 -2px}
.vb-mon-cd-preview{margin:0 8px;font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:.5px;color:var(--accent,#0969da);font-size:15px;white-space:nowrap}

/* 数据报表：矩阵投票头行（议题名+总统计）—— 浅粉红/玫瑰色，与候选人行形成对比 */
.vb-report-table tr.vb-rpt-mhead > td{background:rgba(96,165,250,.28);font-weight:700}
/* 数据报表：矩阵投票细项行（候选人/选项）—— 浅黄色 */
.vb-report-table tr.vb-rpt-mitem > td{background:rgba(250,204,21,.18)}
.vb-status-current{cursor:default!important;transform:none!important;box-shadow:0 2px 8px rgba(15,23,42,.12)!important}
.vb-status-current small{font-size:10px;opacity:.78;font-weight:500}
.vb-status-next{opacity:.86}
.vb-status-next:hover{opacity:1}

/* 监票控制台：把配置、控制和链接分成可扫描的控制区，减少横向空白。 */
.vb-mon-config{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;padding:12px;background:var(--surface,#fff);border:1px solid var(--border,#e5e7eb);border-radius:12px;margin-bottom:16px;align-items:start}
.vb-mon-config-row{min-width:0;padding:10px;border:1px solid var(--border,#e5e7eb);border-radius:10px;background:var(--surface-2,#f8fafc);align-self:start}
.vb-mon-config-row:nth-child(1){grid-column:span 6}.vb-mon-config-row:nth-child(2){grid-column:span 6}
.vb-mon-config-row:nth-child(3){grid-column:1 / span 7;grid-row:2 / span 3}
.vb-mon-config-row:nth-child(4){grid-column:8 / -1;grid-row:2}
.vb-mon-config-row:nth-child(5){grid-column:8 / -1;grid-row:3}
.vb-mon-config-row:nth-child(6){grid-column:8 / -1;grid-row:4}
.vb-mon-config-actions{grid-column:1 / -1;grid-row:5}
.vb-mon-topic-row{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:12px;align-items:start}
.vb-mon-topic-row>.vb-mon-config-label{grid-column:1;grid-row:1;margin:0;padding-top:8px}
.vb-mon-topic-row>.vb-mon-topic-tools{grid-column:2;grid-row:1;margin:0;justify-content:flex-end}
.vb-mon-topic-row>.vb-mon-topic-list{grid-column:1 / -1;grid-row:2}
.vb-mon-config-label{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--text,#1f2937);margin-bottom:8px}
.vb-mon-config-row:nth-child(1)>.vb-mon-config-label,.vb-mon-config-row:nth-child(2)>.vb-mon-config-label,.vb-mon-config-row:nth-child(5)>.vb-mon-config-label,.vb-mon-config-row:nth-child(6)>.vb-mon-config-label{display:inline-flex;margin:0 10px 0 0;vertical-align:middle}
.vb-mon-config-label small{font-weight:500;color:var(--text-2,#64748b)}
.vb-mon-topic-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px;max-height:420px;overflow:visible;padding-right:4px}
.vb-mon-topic-tools{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.vb-mon-topic-search{width:min(360px,100%);min-width:160px}
.vb-mon-topic-chk{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:9px 10px;border-radius:8px;cursor:grab;border:1px solid transparent}
.vb-mon-topic-chk:active{cursor:grabbing}.vb-mon-topic-chk.is-dragging{opacity:.45}.vb-mon-topic-drag{color:var(--text-2,#64748b);margin-right:4px;letter-spacing:-3px}
.vb-mon-topic-chk.active{background:#eef2ff;border-color:#6366f1}
.vb-mon-countdown-card{background:linear-gradient(135deg,#f8fbff,#f8fafc)}
.vb-mon-field-help{display:block;flex-basis:100%;color:var(--text-2,#64748b);font-size:12px;line-height:1.5}
.vb-mon-danger-action{background:#dc2626!important;border-color:#dc2626!important;color:#fff!important}
.vb-mon-danger-action:hover{background:#b91c1c!important}
.vb-mon-config-actions{display:flex;align-items:center;gap:8px;min-width:0;padding-top:4px}
.vb-mon-entry-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;margin-bottom:10px;background:var(--surface,#fff);border:1px solid var(--border,#e5e7eb);border-radius:10px}
.vb-mon-entry-bar strong{font-size:15px;color:var(--text,#1f2937)}
.vb-mon-entry-bar span{margin-left:10px;font-size:12px;color:var(--text-2,#64748b)}
.vb-mon-entry-actions{display:flex;gap:8px;flex:0 0 auto}
.vb-mon-link-state{font-size:12px;color:var(--text-2,#64748b);white-space:nowrap}
.vb-mon-url{flex:1;min-width:120px;overflow:hidden;text-overflow:ellipsis}
@media (max-width:900px){.vb-mon-config{grid-template-columns:1fr}.vb-mon-config-row:nth-child(n),.vb-mon-config-row:nth-child(3),.vb-mon-config-actions{grid-column:auto;grid-row:auto}.vb-mon-config-actions{flex-wrap:wrap}.vb-mon-url{flex-basis:100%;order:3}.vb-mon-entry-bar{align-items:flex-start;flex-direction:column}.vb-mon-entry-bar span{display:block;margin:4px 0 0}.vb-mon-entry-actions{width:100%}}

/* 监票链接行最终覆盖：跨满工具栏，输入框占据按钮之外的全部空间。 */
.vb-mon-config--toolbar > .vb-mon-config-actions{display:flex!important;grid-column:1 / -1!important;width:100%!important;min-width:0!important}
.vb-mon-config--toolbar > .vb-mon-config-actions > .vb-mon-url{flex:1 1 0!important;width:auto!important;max-width:none!important;min-width:0!important}
/* 投票工作台：控制、监票设置与结果采用单一纵向工作区，避免报表横向错位 */
.vb-workbench-pane{display:grid;gap:14px}
.vb-report-controlbar,.vb-report-monitor-settings,.vb-report-results{background:#fff;border:1px solid rgba(148,163,184,.28);border-radius:8px;padding:16px}
.vb-report-controlbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.vb-report-controlbar strong{margin-left:8px;color:#2563eb}
.vb-report-kicker{font-weight:700;color:#0f172a}
.vb-report-actions{display:flex;gap:8px;margin-left:auto}
.vb-report-attendee{display:flex;align-items:center;gap:8px;font-weight:600}
.vb-report-attendee input{width:110px}
.vb-report-section-title{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.vb-report-section-title>span{font-size:12px;color:#64748b;font-weight:400}
.vb-report-section-title button{margin-left:auto}
.vb-report-monitor-grid{display:grid;grid-template-columns:1fr 1fr 2fr;gap:16px;align-items:center}
.vb-report-monitor-grid label{display:flex;align-items:center;gap:8px;font-weight:600}
.vb-report-monitor-grid input{width:76px}
.vb-report-monitor-hint{color:#64748b;font-size:12px}
.vb-report-results .vb-report-block{margin:0}
@media(max-width:900px){.vb-report-monitor-grid{grid-template-columns:1fr}.vb-report-actions{margin-left:0}.vb-report-section-title{align-items:flex-start;flex-wrap:wrap}}

/* 表单设置：单栏设置工作区，统一分组、标签基线和保存节奏 */
.vb-settings-page{max-width:1180px;margin:0 auto;padding:8px 18px 82px}
.vb-settings-page>.vb-banner-row{margin-bottom:14px;padding:14px 16px;background:#fff;border:1px solid #dfe5ec;border-radius:8px}
.vb-settings-page>.vb-section-h{display:flex;align-items:center;min-height:42px;margin:14px 0 0;padding:0 14px;background:#f8fafc;border:1px solid #dfe5ec;border-bottom:0;border-radius:8px 8px 0 0;font-size:15px;color:#0f172a}
.vb-settings-page>.vb-section-h::before{content:"";display:inline-block;width:3px;height:16px;margin-right:9px;border-radius:2px;background:#2563eb}
.vb-settings-page>.vb-setting-group{margin:0;padding:14px 16px;background:#fff;border:1px solid #dfe5ec;border-radius:0 0 8px 8px}
.vb-settings-page>.vb-setting-group+.vb-section-h{margin-top:12px}
.vb-settings-page .vb-setting-row{min-height:38px;padding:6px 0;border-bottom:1px solid #f1f5f9}
.vb-settings-page .vb-setting-row:last-child{border-bottom:0}
.vb-settings-page .vb-setting-row>label:first-child{min-width:150px;color:#334155;font-weight:600}
.is-vote-detail .vb-settings-page .vb-setting-group .vb-setting-row:has(.switch){justify-content:flex-start;gap:14px}
.is-vote-detail .vb-settings-page .vb-setting-group .vb-setting-row:has(.switch)>.cell-sub{flex:1;min-width:0;margin-left:0!important}
.vb-settings-page .vb-setting-row .input{min-height:36px}
.vb-settings-page .cell-sub{color:#64748b}
.vb-settings-savebar{position:sticky;bottom:12px;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:16px;margin:18px 0 0;padding:12px 16px;background:#fff;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.10)}
.vb-settings-savebar strong{display:block;color:#0f172a;font-size:13px}
.vb-settings-savebar #settingsSaveState[data-state="有未保存修改"]{color:#b45309}.vb-settings-savebar #settingsSaveState[data-state="保存失败"]{color:#b91c1c}.vb-settings-savebar #settingsSaveState[data-state="已保存"]{color:#047857}
.vb-settings-save-actions{display:flex;gap:8px;flex-shrink:0}
.vb-top-save-state{font-size:12px;color:#64748b;white-space:nowrap}.vb-top-save-state:empty{display:none}
@media(min-width:980px){.vb-settings-page>.vb-setting-group{display:grid;grid-template-columns:minmax(0,1fr);}.vb-settings-page>.vb-setting-group .vb-setting-row{display:flex;align-items:center;gap:14px}.vb-settings-page>.vb-setting-group .vb-setting-row[style*="flex-start"]{align-items:flex-start}}
@media(max-width:700px){.vb-settings-page{padding-left:10px;padding-right:10px}.vb-settings-page .vb-setting-row{align-items:flex-start;flex-wrap:wrap}.vb-settings-page .vb-setting-row>label:first-child{width:100%}}
.vb-publish-page{max-width:1180px;margin:0 auto;padding:8px 18px 82px}
.vb-publish-checklist{background:#fff;border:1px solid #dfe5ec;border-radius:8px;padding:14px 16px;margin-bottom:12px}
.vb-publish-head{display:flex;align-items:center;gap:12px;padding-bottom:10px;border-bottom:1px solid #eef2f7}
.vb-publish-head h3{margin:0;font-size:15px;color:#0f172a}
.vb-publish-head h3:before{content:"";display:inline-block;width:3px;height:16px;margin-right:9px;vertical-align:-3px;border-radius:2px;background:#2563eb}
.vb-publish-head span{margin-left:auto;color:#64748b;font-size:12px}
.vb-publish-checklist .vb-publish-check{display:flex;align-items:center;gap:9px;min-height:34px;padding:0;border:0;border-bottom:1px solid #f1f5f9;border-radius:0;background:transparent;font-size:13px}
.vb-publish-checklist .vb-publish-check:last-of-type{border-bottom:0}
.vb-publish-checklist .vb-publish-check>span{width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:inherit;background:#e2e8f0}
.vb-publish-checklist .vb-publish-check.is-ok>span{background:#dcfce7;color:#15803d}
.vb-publish-checklist .vb-publish-check.is-warn>span{background:#fef3c7;color:#b45309}
.vb-publish-checklist .vb-publish-check em{margin-left:auto;font-style:normal;color:#15803d;font-size:12px}
.vb-publish-checklist .vb-publish-check.is-warn em{color:#b45309}
.vb-publish-checklist>p{margin:9px 0 0}
@media(max-width:700px){.vb-publish-page{padding-left:10px;padding-right:10px}.vb-publish-checklist{padding:12px}.vb-publish-checklist .vb-publish-check{min-height:38px}}

/* 投票工作台：统一标题、基线和操作尺寸，避免控制区出现两套视觉语言 */
.vb-workbench-pane{gap:12px;padding:0 2px 24px}
.vb-workbench-section{background:var(--surface-solid);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.vb-workbench-section-head{min-height:48px;display:flex;align-items:center;gap:16px;padding:0 16px;border-bottom:1px solid var(--border);background:var(--surface-2)}
.vb-workbench-section-head h3{margin:0;font-size:var(--type-section-title);line-height:1.4;font-weight:700;color:var(--heading-color);white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}
.vb-control-title{min-width:0;display:flex;align-items:center;gap:8px}
.vb-control-title h3{flex:0 0 auto;overflow:visible;text-overflow:clip}
.vb-control-title span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vb-workbench-section-head h3::before{content:"";display:inline-block;width:3px;height:17px;margin-right:9px;vertical-align:-3px;border-radius:2px;background:var(--accent)}
.vb-report-results .vb-report-block:first-child .vb-report-table{table-layout:fixed;width:100%}
.vb-report-results .vb-report-block:first-child .vb-report-table th:first-child,
.vb-report-results .vb-report-block:first-child .vb-report-table td:first-child{width:54px}
.vb-report-results .vb-report-block:first-child .vb-report-table th:nth-child(n+3),
.vb-report-results .vb-report-block:first-child .vb-report-table td:nth-child(n+3){width:56px}
.vb-workbench-section-head .btn{margin-left:auto}
.vb-report-layout>.vb-workbench-control,
.vb-report-layout>.vb-report-monitor-settings{display:flex;flex-direction:column;background:#fff;border:1px solid #dfe5ec;border-radius:8px;overflow:hidden}
.vb-report-layout>.vb-workbench-control>.vb-workbench-section-head,
.vb-report-layout>.vb-report-monitor-settings>.vb-workbench-section-head{flex:0 0 48px;box-sizing:border-box;background:#f8fafc;border-bottom:1px solid #e5eaf0}
.vb-report-layout>.vb-workbench-control>.vb-workbench-control-grid,
.vb-report-layout>.vb-report-monitor-settings>.vb-report-monitor-grid{background:#fff}
.vb-workbench-status{margin-left:auto;color:#64748b;font-size:13px}
.vb-workbench-status b{color:#2563eb;font-weight:700}
.vb-workbench-control-grid{display:grid;grid-template-columns:minmax(300px,1fr) minmax(360px,1.3fr) auto;align-items:center;gap:18px;padding:14px 16px}
.vb-workbench-field{display:flex;align-items:center;gap:8px;min-width:0;white-space:nowrap;font-size:13px;font-weight:600;color:#334155}
.vb-workbench-field input{height:36px;width:96px;padding:0 10px;border:1px solid #cbd5e1;border-radius:6px;font:inherit;font-weight:500;color:#0f172a;background:#fff}
.vb-workbench-field em{font-style:normal;color:#64748b;font-weight:400}
.vb-workbench-field .btn,.vb-workbench-control-grid .btn{height:36px;min-width:84px}
.vb-workbench-attendee{justify-content:flex-start}
.vb-workbench-lifecycle{display:flex;align-items:center;gap:8px;justify-content:center;margin:0}
.vb-workbench-lifecycle .btn{min-width:100px}
.vb-workbench-utility{display:flex;align-items:center;gap:8px;justify-content:flex-end}
.vb-workbench-utility .btn{min-width:84px}
.vb-workbench-section .vb-report-block{margin:0}
.vb-workbench-section .vb-report-table{border:0;border-radius:0}
.vb-workbench-section .vb-report-table th{height:42px;background:#f8fafc}
.vb-workbench-section .vb-report-table td{height:40px}
.vb-report-monitor-settings .vb-report-monitor-grid{display:grid;grid-template-columns:minmax(560px,1fr) minmax(260px,1fr);gap:24px;align-items:center;padding:14px 16px}
.vb-report-monitor-settings .vb-workbench-field{min-height:36px}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-report-monitor-grid>label:first-child{display:grid;grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr) auto;gap:8px;align-items:center}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-report-monitor-grid>label:first-child input{width:100%;min-width:0}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-report-monitor-grid>label:first-child input{width:42px;box-sizing:border-box;padding-left:4px;padding-right:4px}
.vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-report-monitor-grid>label:first-child .btn{grid-column:1/-1;width:100%}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle .btn,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-utility .btn{background:#fff;color:#2563eb;border-color:#93c5fd}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle .btn:hover,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-utility .btn:hover{background:#eff6ff;border-color:#2563eb}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-utility .btn-danger{color:#dc2626;border-color:#fca5a5;background:#fff}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle{display:flex;flex-direction:column;align-items:stretch;gap:8px}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-action-title{font-size:12px;color:#64748b;font-weight:700;line-height:1.2}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-action-buttons{display:flex;flex-direction:column;gap:8px}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-report-monitor-open{grid-column:1/-1;width:100%}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptAttendeeConfirm,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptCountdownConfirm,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptMonitorOpen{height:44px;min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:100%;margin:0}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptAuditExport{background:#fff;color:#2563eb;border:1px solid #93c5fd;box-shadow:none}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptClear{background:#fff;color:#dc2626;border:1px solid #fca5a5;box-shadow:none}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptCdMinutes,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptCdSeconds,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout #rptMatrixRows{text-align:center}
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table th:first-child,
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table td:first-child{width:60px}
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table th:nth-child(3),
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table td:nth-child(3){width:78px}
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table th:nth-child(4),
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table td:nth-child(4){width:92px}
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table th:nth-child(5),
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table td:nth-child(5){width:78px}
.vb-tab-body:has(.vb-report-layout) .vb-report-results .vb-report-block:first-child .vb-report-table th:nth-child(n+3){white-space:nowrap}
@media(max-width:1100px){.vb-workbench-control-grid{grid-template-columns:1fr 1fr}.vb-workbench-utility{justify-content:flex-start}.vb-report-monitor-settings .vb-report-monitor-grid{grid-template-columns:1fr}}
@media(max-width:700px){.vb-workbench-control-grid{grid-template-columns:1fr;gap:12px}.vb-workbench-lifecycle{justify-content:flex-start;flex-wrap:wrap}.vb-workbench-utility{flex-wrap:wrap}.vb-workbench-section-head{min-height:44px}.vb-report-monitor-settings .vb-workbench-field{flex-wrap:wrap}}
@media(min-width:901px) and (max-width:1100px){
  .vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-workbench-section-head{align-items:stretch;flex-direction:column;gap:8px;padding-top:10px;padding-bottom:10px}
  .vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-workbench-section-head h3{flex:0 0 auto}
  .vb-tab-body:has(.vb-report-layout) .vb-report-monitor-settings .vb-workbench-section-head .btn{margin-left:0;width:100%}
}

/* 投票控制页：监票大屏已独立为 Tab，本页只保留控制与结果两栏。 */
.vb-tab-body:has(.vb-report-layout) .vb-report-layout{display:grid;grid-template-columns:minmax(300px,360px) minmax(0,1fr);gap:16px;width:100%;max-width:none;box-sizing:border-box;padding:0;margin:0}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-workbench-control,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-results{grid-column:auto;grid-row:auto;min-width:0;background:#fff;border:1px solid #dfe5ec;border-radius:8px;box-shadow:none;overflow:hidden}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-section-head,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-report-results .vb-workbench-section-head{min-height:48px;height:48px;box-sizing:border-box;padding:0 16px;background:#f8fafc;border-bottom:1px solid #e5eaf0}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-section-head h3,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-report-results .vb-workbench-section-head h3{font-size:16px;line-height:1;font-weight:700}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-workbench-control .vb-workbench-control-grid{padding:16px;box-sizing:border-box}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout>.vb-report-results #rptServerPane{background:#fff;padding:0 16px 16px;box-sizing:border-box}
@media(max-width:900px){.vb-tab-body:has(.vb-report-layout) .vb-report-layout{display:block;padding:0}.vb-tab-body:has(.vb-report-layout) .vb-report-layout>section{margin-bottom:16px}}

/* 监票设置最终对齐：四张卡片明确绑定四列，共享同一条顶部/底部基线并收紧高度。 */
.vb-mon-config--toolbar{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(420px,1.55fr);grid-template-rows:112px auto;grid-auto-rows:unset;align-items:stretch}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){grid-row:1!important;height:112px!important;min-height:112px!important;box-sizing:border-box;align-self:stretch}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){margin-top:0!important}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(1){grid-column:1!important}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(2){grid-column:2!important}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(4){grid-column:3!important}
.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:4!important;grid-row:1!important}
.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:4!important;grid-row:1!important}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(3){grid-column:3!important;grid-row:1!important}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(4){grid-column:4!important;grid-row:1!important}
.vb-mon-config--toolbar .vb-mon-config-row>.vb-mon-config-label{height:20px;line-height:20px;flex:none;white-space:nowrap}
.vb-mon-config--toolbar .vb-mon-config-row>.flex,
.vb-mon-config--toolbar .vb-mon-config-row>.vb-mon-config-content,
.vb-mon-config--toolbar .vb-mon-config-row>.vb-mon-countdown-config{width:100%;min-height:36px;box-sizing:border-box;align-items:center}
.vb-mon-config--toolbar .vb-mon-theme-btn{height:36px;box-sizing:border-box;display:inline-flex;align-items:center}
.vb-mon-config--toolbar .vb-mon-cols-btn{width:36px;height:36px;box-sizing:border-box}
.vb-mon-config--toolbar .vb-mon-countdown-config .btn{height:36px;min-height:36px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
.vb-mon-config--toolbar .vb-mon-matrix-controls{flex-wrap:nowrap!important;white-space:nowrap}
.vb-mon-config--toolbar .vb-mon-matrix-controls #vbMonMatrixRows{width:90px;min-width:90px;height:36px;box-sizing:border-box}
.vb-mon-config--toolbar .vb-mon-matrix-controls #vbMonMatrixRowsConfirm{width:72px;min-width:72px;height:36px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
.vb-mon-config--toolbar .vb-mon-config-actions{grid-column:1/-1!important;grid-row:2!important;min-height:40px;height:40px;padding:4px 12px;box-sizing:border-box}
@media(max-width:1100px){.vb-mon-config--toolbar{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none}.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n),.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:auto!important;grid-row:auto!important}}
@media(max-width:900px){.vb-mon-config--toolbar{grid-template-columns:1fr}.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){height:112px!important;min-height:112px!important}}

/* 方案三最终覆盖：四个配置卡采用两行结构，前三个等宽，倒计时固定在最右侧并加宽。 */
.vb-mon-config--toolbar{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(420px,1.55fr);grid-auto-rows:132px;align-items:stretch}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){grid-column:auto;grid-row:1;height:132px;min-height:132px;align-self:stretch;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;overflow:hidden}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n)>.vb-mon-config-label{display:block;margin:0;line-height:20px}
.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card{grid-column:4;grid-row:1}
.vb-mon-config--toolbar .vb-mon-config-row:nth-child(4){grid-column:3;grid-row:1}
.vb-mon-config--toolbar .vb-mon-config-content{min-width:0;display:flex;align-items:center;gap:10px}
.vb-mon-config--toolbar .vb-mon-countdown-config{align-items:center;align-content:center}
.vb-mon-config--toolbar .vb-mon-attendee-label{margin-left:auto!important}
.vb-mon-config--toolbar .vb-mon-attendee-controls{width:auto!important;flex:0 0 auto;flex-wrap:nowrap;gap:8px}
.vb-mon-config--toolbar #vbMonAttendee{width:90px;min-width:90px;height:36px;box-sizing:border-box}
.vb-mon-config--toolbar #vbMonAttendeeConfirm{height:36px;min-width:60px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
.vb-mon-config--toolbar .vb-mon-matrix-controls{flex-wrap:wrap}
.vb-mon-config--toolbar .vb-mon-config-actions{grid-column:1/-1;grid-row:auto;height:auto;min-height:56px;overflow:visible}
.vb-mon-config--toolbar .vb-mon-config-actions{width:100%;box-sizing:border-box;grid-template-columns:auto minmax(0,1fr) auto auto auto auto}
.vb-mon-config--toolbar .vb-mon-config-actions .vb-mon-url{width:auto;min-width:0;max-width:none;flex:1 1 auto;box-sizing:border-box}
.vb-mon-config--toolbar .vb-mon-theme-btn.active[data-theme="night"]{background:#111827;border-color:#111827;color:#fff}
.vb-mon-config--toolbar .vb-mon-theme-btn.active[data-theme="day"]{background:#2563eb;border-color:#2563eb;color:#fff}
@media(max-width:1100px){.vb-mon-config--toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.vb-mon-config--toolbar .vb-mon-config-row.vb-mon-countdown-card,.vb-mon-config--toolbar .vb-mon-config-row:nth-child(4){grid-column:auto;grid-row:auto}}
@media(max-width:900px){.vb-mon-config--toolbar{grid-template-columns:1fr}.vb-mon-config--toolbar .vb-mon-config-row:nth-child(n){height:132px;min-height:132px;grid-column:auto;grid-row:auto}}

/* ---------- 全站文字规范最终层 ----------
   所有后台模块共用同一组标题/正文等级；投票按钮预览等用户自定义样式不在此覆盖。 */
.topbar h1,
.section-bar h3,
.card-title,
.section-title,
.vb-workbench-section-head h3,
.vb-publish-head h3,
.vb-result-title,
.vb-settings-title,
.vb-pane-title,
.vb-settings-head,
.ta-section-title {
  color: var(--heading-color);
  font-family: var(--font-sans);
  font-weight: var(--type-title-weight);
  letter-spacing: 0;
}
.section-bar h3,
.vb-workbench-section-head h3,
.vb-publish-head h3,
.vb-result-title,
.vb-settings-title,
.vb-pane-title,
.vb-settings-head { font-size: var(--type-section-title); line-height: 1.4; }
.card-title { font-size: var(--type-card-title); line-height: 1.4; }
.section-title { font-size: var(--type-section-title); line-height: 1.4; }
.topbar h1 { font-size: var(--type-page-title); line-height: 1.35; }

body,
input,
select,
textarea,
button,
.vb-field-body,
.vb-setting-row,
.vb-publish-checklist,
.vb-report-results,
.vb-result-desc {
  font-family: var(--font-sans);
}
.vb-field-body,
.vb-setting-row,
.vb-publish-checklist,
.vb-report-results,
.vb-result-desc { color: var(--body-color); line-height: var(--type-body-leading); }
.vb-section-h { font-size: var(--type-card-title); font-weight: var(--type-title-weight); line-height: 1.4; }
.vb-section-h,
.vb-section-h + .vb-setting-group { color: var(--heading-color); }
.vb-settings-page>.vb-section-h,
.vb-settings-page>.vb-publish-head h3,
.vb-report-layout .vb-workbench-section-head h3,
.vb-report-layout .vb-report-section-title h3 { font-size: var(--type-section-title); font-weight: var(--type-title-weight); color: var(--heading-color); }
.vb-setting-row label,
.vb-field-help,
.vb-section-desc,
.vb-publish-head span,
.vb-publish-checklist>p,
.vb-result-card-label,
.vb-result-card-sub,
.muted { color: var(--helper-color); }
.vb-palette-group h4,
.vb-setting-group h5,
.vb-report-section-title>span { font-size: var(--type-helper); line-height: 1.5; color: var(--helper-color); }

/* 深色主题下禁止投票模块标题退回浅色主题的硬编码颜色。 */
[data-theme="dark"] .vb-settings-page>.vb-section-h,
[data-theme="dark"] .vb-publish-head h3,
[data-theme="dark"] .vb-workbench-section-head h3,
[data-theme="dark"] .vb-result-card-num { color: var(--heading-color); }

.vb-page-intro { font-size: var(--type-body); line-height: var(--type-body-leading); }
.vb-status-icon { margin: 0 0 12px; color: var(--accent); font-size: 40px; line-height: 1; }
.vb-status-title { margin: 0 0 10px; color: var(--heading-color); font-size: var(--type-section-title); font-weight: var(--type-title-weight); line-height: 1.4; }
.vb-status-desc { margin: 0; color: var(--helper-color); font-size: var(--type-body); line-height: var(--type-body-leading); }

/* 投票来源页与投票发布管理共用同一套区块容器与标题栏。 */
.vb-settings-page,
.vb-publish-page,
.vb-tracking-page { max-width: var(--page-width); margin-left: auto; margin-right: auto; }
.vb-tracking-card { margin-bottom: 12px; }
.vb-tracking-intro { margin: 10px 0 14px; font-size: var(--type-caption); line-height: 1.5; }
.vb-tracking-form { display: grid; grid-template-columns: minmax(150px, 190px) minmax(180px, 220px) minmax(260px, 1fr) auto auto auto; align-items: end; gap: 10px; }
.vb-tracking-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.vb-tracking-field > span { color: var(--helper-color); font-size: var(--type-helper); line-height: 1.4; }
.vb-tracking-field .input { width: 100%; max-width: none; min-height: 36px; }
.vb-tracking-add { min-height: 36px; height: 36px; width: 96px; justify-self: start; white-space: nowrap; }
.vb-tracking-copy { flex: 0 0 32px; }
.vb-track-link-input { width: 100%; max-width: none; min-height: 34px; padding-right: 10px; font-family: var(--font-mono); font-size: var(--type-helper); color: var(--body-color); text-overflow: ellipsis; }
.vb-track-actions { display: flex; align-items: center; gap: 4px; }
.vb-track-actions .vb-iconbtn { margin-right: 0; width: 32px; height: 32px; padding: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 15px; }
.vb-track-qr-btn { color: var(--accent); font-size: 17px !important; }
.vb-tracking-table-wrap { overflow-x: auto; }
.vb-tracking-table { width: 100%; table-layout: fixed; font-size: var(--type-body); }
.vb-tracking-table th { font-weight: var(--type-title-weight); color: var(--heading-color); }
.vb-tracking-table th:nth-child(1) { width: 16%; }
.vb-tracking-table th:nth-child(2) { width: 15%; }
.vb-tracking-table th:nth-child(3) { width: 34%; }
.vb-tracking-table th:nth-child(4) { width: 31%; }
.vb-tracking-table th:nth-child(5) { width: 12%; }
.vb-track-name { font-weight: 600; color: var(--body-color); }
.vb-track-code { font-family: var(--font-mono); font-size: var(--type-helper); color: var(--helper-color); }
.vb-track-url { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vb-track-url a { color: var(--accent); font-size: var(--type-helper); }
.vb-track-url .vb-track-link-input { width: 100%; max-width: none; min-height: 34px; padding-right: 10px; font-family: var(--font-mono); font-size: var(--type-helper); color: var(--body-color); text-overflow: ellipsis; }
.vb-track-actions { white-space: nowrap; }
.vb-track-count { text-align: center; color: var(--heading-color); }
.vb-tracking-table tfoot tr { border-top: 2px solid var(--border-strong); }
.vb-track-unattributed { padding: 8px 10px; text-align: right; }
@media (max-width: 760px) {
  .vb-tracking-form { grid-template-columns: 1fr; align-items: stretch; }
  .vb-tracking-add { width: 100%; justify-self: stretch; }
  .vb-tracking-copy, .vb-track-qr-btn { justify-self: start; }
  .vb-tracking-table { min-width: 760px; }
}

/* 第四阶段：投票后台发布页与工作台共用同一套标题和容器语义。 */
.is-vote-detail .vb-publish-head h3,
.is-vote-detail .vb-publish-page > .vb-section-h {
  color: var(--heading-color);
}
.is-vote-detail .vb-publish-head span,
.is-vote-detail .vb-publish-page > .vb-section-h::before {
  color: var(--accent);
}
.is-vote-detail .vb-publish-page > .vb-section-h::before {
  background: var(--accent);
}
.is-vote-detail .vb-publish-page > .vb-section-h,
.is-vote-detail .vb-publish-check,
.is-vote-detail .vb-publish-page > .vb-setting-group {
  background: var(--surface-2);
  border-color: var(--border);
}

/* 投票控制与投票结果使用同一管理端区块表面；避免历史样式残留造成边距、底色和标题栏不一致。 */
.vb-tab-body:has(.vb-report-layout) .vb-report-layout > .vb-workbench-control,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout > .vb-report-results {
  background: var(--surface-solid);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: none;
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-section-head {
  background: var(--surface-2);
  border-bottom-color: var(--border);
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-field {
  color: var(--body-color);
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-field input {
  border-color: var(--border-strong);
  color: var(--text);
  background: var(--surface-solid);
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-status b {
  color: var(--accent);
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-utility {
  border-top-color: var(--border);
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle .btn-primary {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-lifecycle .btn-danger,
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-workbench-utility .btn-danger {
  background: var(--surface-solid);
  border-color: #ef4444;
  color: #dc2626;
}
.vb-tab-body:has(.vb-report-layout) .vb-report-layout .btn:disabled {
  cursor: not-allowed;
  opacity: .55;
}
@media (max-width: 900px) {
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout { display: block; }
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout > section { margin-bottom: 16px; }
  .vb-tab-body:has(.vb-report-layout) .vb-report-layout .vb-report-table { min-width: 640px; }
}

/* 监票链接行最终规则，必须位于所有旧版布局覆盖之后。 */
.vb-mon-config--toolbar > .vb-mon-config-actions {
  grid-column: 1 / -1 !important;
  width: auto !important;
  min-width: 0 !important;
}
.vb-mon-config--toolbar > .vb-mon-config-actions > .vb-mon-url {
  flex: 1 1 0 !important;
  width: auto !important;
  max-width: none !important;
  min-width: 0 !important;
}
@media (min-width: 1101px) {
  .vb-mon-config--toolbar { grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(420px, 1.55fr) minmax(180px, .65fr) !important; }
  .vb-mon-config--toolbar > .vb-mon-config-actions { grid-column: 1 / 6 !important; }
}

/* ---------- 公共壳层视觉契约 v1 ----------
   仅约束后台壳层的常用控件，业务组件可通过更具体的类名保留自己的交互状态。 */
:where(.app, .admin-shell) {
  --control-height: 40px;
  --control-radius: var(--radius-sm);
}

:where(.btn, button.btn, .toolbar button, .topbar button) {
  min-height: var(--control-height);
  border-radius: var(--control-radius);
  font-family: var(--font-sans);
  letter-spacing: 0;
  transition: background-color .18s var(--ease), border-color .18s var(--ease),
    color .18s var(--ease), box-shadow .18s var(--ease), transform .18s var(--ease);
}

:where(.btn-primary, .btn-success) {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}

:where(.btn-primary, .btn-success):hover:not(:disabled) {
  background: var(--accent-2);
  border-color: var(--accent-2);
}

:where(.input, .select, .textarea, input, select, textarea):focus-visible {
  outline: 0;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent);
}

:where(.input, .select, .textarea) {
  border-color: var(--border-strong);
  border-radius: var(--control-radius);
  background: var(--surface-solid);
}

:where(.card, .panel, .section, .surface-panel) {
  border-color: var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}

:where(.nav-item, .nav-group) { font-family: var(--font-sans); }
:where(.nav-item) { min-height: 40px; box-sizing: border-box; }
:where(.nav-item .nav-ico) { color: currentColor; }

@media (max-width: 900px) {
  .content,
  .content.content--wide,
  main.content:has(.perm-page) { padding-left: var(--sp-4); padding-right: var(--sp-4); }
  .topbar { padding-left: var(--sp-4); padding-right: var(--sp-4); }
}
