/* 全局样式  国家级标准 */
html, body { background: #F0F2F8; font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: calc(3.733333333333334vw); color: #111827; line-height: 1.5; }

/* Layout */
.page-wrap { padding: calc(1.6vw) calc(2.666666666666667vw); min-height: 100vh; box-sizing: border-box; padding-bottom: calc(16vw); }
.container { padding: calc(3.2vw); }
.flex { display: flex; }
.flex-center { display: flex; align-items: center; justify-content: center; }
.flex-between { display: flex; align-items: center; justify-content: space-between; }
.flex-start { display: flex; align-items: center; }
.flex-1 { flex: 1; min-width: 0; }
.gap-8 { gap: calc(1.0666666666666667vw); }
.gap-12 { gap: calc(1.6vw); }
.gap-16 { gap: calc(2.1333333333333333vw); }
.gap-24 { gap: calc(3.2vw); }

/* Text */
.text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.text-ellipsis-2 { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-all; }
.text-muted { color: #6B7280; }
.text-center { text-align: center; }

/* Card */
.card { background: #fff; border-radius: calc(3.2vw); box-shadow: 0 2px 12px rgba(0,0,0,0.06); }
.card-tap:active { background: #F9FAFB; transform: scale(0.985); transition: transform 0.15s; }

/* Tags */
.tag { display: inline-flex; align-items: center; padding: calc(0.8vw) calc(2.1333333333333333vw); border-radius: calc(1333.2vw); font-size: calc(2.933333333333333vw); font-weight: 600; }
.tag-primary { background: #E0E7FF; color: #3730A3; }
.tag-warning { background: #FEF3C7; color: #92400E; }
.tag-success { background: #D1FAE5; color: #065F46; }
.tag-danger { background: #FEE2E2; color: #991B1B; }
.tag-gray { background: #E5E7EB; color: #374151; }
.tag-info { background: #DBEAFE; color: #1E40AF; }

/* Tabs */
.tabs { display: flex; gap: calc(1.0666666666666667vw); margin-bottom: calc(3.2vw); padding: calc(1.0666666666666667vw); background: #E5E7EB; border-radius: calc(2.666666666666667vw); }
.tab { flex: 1; text-align: center; padding: calc(2.1333333333333333vw) 0; border-radius: calc(1.866666666666667vw); font-size: calc(3.4666666666666663vw); color: #6B7280; font-weight: 600; transition: all 0.2s; }
.tab.active { background: #fff; color: #4F6EF7; font-weight: 700; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }

/* Category bar */
.cate-bar { white-space: nowrap; margin-bottom: calc(3.2vw); padding: calc(0.5333333333333333vw) 0; }
.cate-item { display: inline-block; padding: calc(1.866666666666667vw) calc(3.733333333333334vw); margin-right: calc(1.6vw); border-radius: calc(3.2vw); font-size: calc(3.4666666666666663vw); color: #374151; background: #E5E7EB; font-weight: 600; transition: all 0.15s; }
.cate-item.active { background: #4F6EF7; color: #fff; box-shadow: 0 4px 12px rgba(79,110,247,0.35); }

/* Search */
.search-bar { margin-bottom: calc(3.2vw); }
.search-input { display: flex; align-items: center; background: #E5E7EB; border-radius: calc(2.4vw); padding: 0 calc(3.2vw); height: calc(10.666666666666668vw); }
.search-icon { font-size: calc(4.266666666666667vw); margin-right: calc(1.6vw); }
.search-field { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; background: transparent; }
.search-clear { font-size: calc(4.266666666666667vw); color: #6B7280; padding: calc(1.6vw); }
.search-clear:active { color: #DC2626; }

/* FAB */
.fab { position: fixed; bottom: calc(24vw); right: calc(4.8vw); width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%; background: linear-gradient(135deg, #4F6EF7, #7C3AED); color: #fff; font-size: calc(6.4vw); font-weight: 300; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 32px rgba(79,110,247,0.45); z-index: 99; transition: transform 0.2s; }
.fab:active { transform: scale(0.88); }
.fab-icon { line-height: 1; }

/* Section title */
.section-title { font-size: calc(4.533333333333333vw); font-weight: 800; color: #111827; display: flex; align-items: center; }
.section-title::before { content: ""; width: calc(1.0666666666666667vw); height: calc(4.266666666666667vw); background: linear-gradient(180deg, #4F6EF7, #7C3AED); border-radius: calc(0.5333333333333333vw); margin-right: calc(1.866666666666667vw); }
.more { font-size: calc(3.4666666666666663vw); color: #4F6EF7; font-weight: 600; }
.more:active { opacity: 0.6; }

/* Load tip */
.load-tip { text-align: center; padding: calc(3.733333333333334vw) 0; font-size: calc(3.2vw); color: #6B7280; }
.loadmore-tip { text-align: center; padding: calc(3.733333333333334vw) 0; font-size: calc(3.2vw); color: #6B7280; }

/* Skeleton */
.skeleton-line { height: calc(3.2vw); background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 50%, #E5E7EB 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: calc(0.8vw); margin-bottom: calc(2.1333333333333333vw); }
.skeleton-card { padding: calc(3.733333333333334vw); background: #fff; border-radius: calc(3.2vw); margin-bottom: calc(2.666666666666667vw); }
.skeleton-cover { width: 100%; height: calc(32vw); background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 50%, #E5E7EB 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: calc(2.1333333333333333vw); margin-bottom: calc(2.666666666666667vw); }
@keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }

/* Button reset */
button { padding: 0; margin: 0; background: transparent; border: none; font-size: inherit; line-height: inherit; }
button::after { border: none; }

/* Buttons */
.btn { display: inline-flex; align-items: center; justify-content: center; padding: 0 calc(4.8vw); height: calc(10.666666666666668vw); border-radius: calc(5.333333333333334vw); font-size: calc(4vw); font-weight: 600; border: none; transition: all 0.15s; }
.btn::after { border: none; }
.btn-primary { background: linear-gradient(135deg, #4F6EF7, #7C3AED); color: #fff; box-shadow: 0 4px 16px rgba(79,110,247,0.35); }
.btn-primary[disabled] { background: #C7D2FE; color: #fff; box-shadow: none; }
.btn-primary:active { opacity: 0.8; }
.btn-ghost { background: #EEF1FE; color: #4F6EF7; }
.btn-ghost:active { background: #E0E7FF; }
.btn-danger { background: #FEE2E2; color: #DC2626; }
.btn-danger:active { background: #FECACA; }
.btn-block { display: flex; width: 100%; }
.btn-sm { height: calc(8.533333333333333vw); padding: 0 calc(3.2vw); font-size: calc(3.4666666666666663vw); border-radius: calc(4.266666666666667vw); }

/* Hero gradient common */
.hero-gradient { background: linear-gradient(160deg, #0F172A 0%, #1E3A5F 30%, #3730A3 60%, #4F6EF7 100%); }

/* Safe area bottom helpers */
.safe-bottom { padding-bottom: calc(env(safe-area-inset-bottom) + calc(2.1333333333333333vw)); }


/* ============================================
   全局过渡动画体系 v3 — 国家级标准
   ============================================ */

/* CSS 变量：缓动曲线、时长 */
html, body {
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --ease-back: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ease-spring: cubic-bezier(0.22, 1.2, 0.36, 1);
  --ease-smooth: cubic-bezier(0.65, 0, 0.35, 1);
  --ease-expo: cubic-bezier(0.19, 1, 0.22, 1);
  --d-fast: 0.15s;
  --d-normal: 0.35s;
  --d-slow: 0.5s;
  --d-page: 0.45s;
}

/* ===== 页面入场 ===== */
.animate-page {
  animation: pageEnter var(--d-page) var(--ease-out) both;
}
@keyframes pageEnter {
  0%   { opacity: 0; transform: translateY(calc(3.733333333333334vw)) scale(0.99); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

/* 页面离场（配合 navigateTo） */
.animate-page-out {
  animation: pageLeave 0.18s var(--ease-in) both;
}
@keyframes pageLeave {
  from { opacity: 1; transform: translateY(0); }
  to   { opacity: 0; transform: translateY(-calc(1.0666666666666667vw)); }
}

/* ===== fade 系列 ===== */
.fade-in       { animation: fiFade   var(--d-normal) var(--ease-out) both; }
.fade-in-up    { animation: fiUp     var(--d-normal) var(--ease-out) both; }
.fade-in-down  { animation: fiDown   var(--d-normal) var(--ease-out) both; }
.fade-in-left  { animation: fiLeft   var(--d-normal) var(--ease-out) both; }
.fade-in-right { animation: fiRight  var(--d-normal) var(--ease-out) both; }
.fade-in-fast  { animation: fiFade   0.18s var(--ease-out) both; }
.fade-in-slow  { animation: fiFade   0.55s var(--ease-out) both; }
.scale-in      { animation: fiScale  var(--d-normal) var(--ease-back) both; }
.pop-in        { animation: fiPop    0.32s var(--ease-back) both; }
.pop-in-fast   { animation: fiPop    0.2s var(--ease-back) both; }
.glide-in-up   { animation: glideUp  0.4s var(--ease-expo) both; }
.glide-in-down { animation: glideDown 0.35s var(--ease-expo) both; }

@keyframes fiFade  { from { opacity: 0; } to { opacity: 1; } }
@keyframes fiUp    { from { opacity: 0; transform: translateY(calc(3.2vw)); } to { opacity: 1; transform: translateY(0); } }
@keyframes fiDown  { from { opacity: 0; transform: translateY(-calc(3.2vw)); } to { opacity: 1; transform: translateY(0); } }
@keyframes fiLeft  { from { opacity: 0; transform: translateX(-calc(3.2vw)); } to { opacity: 1; transform: translateX(0); } }
@keyframes fiRight { from { opacity: 0; transform: translateX(calc(3.2vw)); } to { opacity: 1; transform: translateX(0); } }
@keyframes fiScale { from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: scale(1); } }
@keyframes fiPop {
  0%   { opacity: 0; transform: scale(0.75); }
  60%  { opacity: 1; transform: scale(1.06); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes glideUp {
  from { opacity: 0; transform: translateY(calc(8vw)); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes glideDown {
  from { opacity: 0; transform: translateY(-calc(5.333333333333334vw)); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ===== 交错入场 ===== */
.stagger-1  { animation-delay: 0.05s; }  .stagger-11 { animation-delay: 0.55s; }
.stagger-2  { animation-delay: 0.10s; }  .stagger-12 { animation-delay: 0.60s; }
.stagger-3  { animation-delay: 0.15s; }  .stagger-13 { animation-delay: 0.65s; }
.stagger-4  { animation-delay: 0.20s; }  .stagger-14 { animation-delay: 0.70s; }
.stagger-5  { animation-delay: 0.25s; }  .stagger-15 { animation-delay: 0.75s; }
.stagger-6  { animation-delay: 0.30s; }  .stagger-16 { animation-delay: 0.80s; }
.stagger-7  { animation-delay: 0.35s; }  .stagger-17 { animation-delay: 0.85s; }
.stagger-8  { animation-delay: 0.40s; }  .stagger-18 { animation-delay: 0.90s; }
.stagger-9  { animation-delay: 0.45s; }  .stagger-19 { animation-delay: 0.95s; }
.stagger-10 { animation-delay: 0.50s; }  .stagger-20 { animation-delay: 1.00s; }

/* ===== 卡片交互 ===== */
.card-hover {
  transition: transform 0.18s var(--ease-back), box-shadow 0.18s var(--ease-out);
}
.card-hover:active {
  transform: scale(0.97);
  box-shadow: 0 1px 4px rgba(0,0,0,0.04);
}

.tap-sink {
  transition: transform 0.1s var(--ease-out), box-shadow 0.1s var(--ease-out);
}
.tap-sink:active { transform: scale(0.96); box-shadow: 0 0 0 0 transparent; }

.tap-lift {
  transition: transform 0.18s var(--ease-back), box-shadow 0.18s var(--ease-out);
}
.tap-lift:active {
  transform: scale(1.02) translateY(-calc(0.26666666666666666vw));
  box-shadow: 0 8px 24px rgba(0,0,0,0.1);
}

/* ===== 按钮触感 ===== */
.btn-tap {
  position: relative; overflow: hidden;
  transition: transform 0.12s var(--ease-back), opacity 0.12s;
}
.btn-tap:active { transform: scale(0.94); opacity: 0.85; }

/* ===== FAB 脉冲 ===== */
.pulse-ring {
  animation: pulseRing 2.6s var(--ease-smooth) infinite;
}
@keyframes pulseRing {
  0%, 100% { box-shadow: 0 8px 28px rgba(79,110,247,0.4), 0 0 0 0 rgba(79,110,247,0.3); }
  50%      { box-shadow: 0 8px 28px rgba(79,110,247,0.4), 0 0 0 calc(2.933333333333333vw) rgba(79,110,247,0); }
}

/* ===== 呼吸 ===== */
.breathe { animation: breathe 3s var(--ease-smooth) infinite; }
@keyframes breathe { 0%,100%{opacity:1} 50%{opacity:0.65} }

/* ===== 数字弹跳 ===== */
.bounce { animation: bounce 0.45s var(--ease-back); }
@keyframes bounce {
  0%   { transform: scale(1); }
  30%  { transform: scale(1.22); }
  55%  { transform: scale(0.92); }
  100% { transform: scale(1); }
}

/* ===== 旋转 ===== */
.spin { animation: spin 1s linear infinite; }
@keyframes spin { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }

/* ===== 骨架屏 ===== */
.skeleton-line {
  height: calc(3.2vw); border-radius: calc(0.8vw); margin-bottom: calc(2.1333333333333333vw);
  background: linear-gradient(100deg, #ECEDF0 25%, #F5F6F8 40%, #ECEDF0 55%);
  background-size: 300% 100%;
  animation: shimmer 1.8s var(--ease-smooth) infinite;
}
.skeleton-card {
  padding: calc(3.733333333333334vw); background: #fff; border-radius: calc(3.2vw); margin-bottom: calc(2.666666666666667vw);
  animation: fiUp 0.3s var(--ease-out) both;
}
.skeleton-cover {
  width: 100%; height: calc(32vw); border-radius: calc(2.1333333333333333vw); margin-bottom: calc(2.666666666666667vw);
  background: linear-gradient(100deg, #ECEDF0 25%, #F5F6F8 40%, #ECEDF0 55%);
  background-size: 300% 100%;
  animation: shimmer 1.8s var(--ease-smooth) infinite;
}
@keyframes shimmer {
  0%   { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

/* ===== 空状态入场 ===== */
.state-enter { animation: fiPop 0.32s var(--ease-back) both; }

/* ===== 列表项滑入 ===== */
.slide-enter {
  animation: slideIn 0.28s var(--ease-expo) both;
}
@keyframes slideIn {
  from { opacity: 0; transform: translateX(-calc(3.2vw)); }
  to   { opacity: 1; transform: translateX(0); }
}

/* ===== 导航过渡 ===== */
.nav-transition {
  transition: background 0.3s var(--ease-out), box-shadow 0.3s var(--ease-out);
}

/* ===== 高亮闪烁 ===== */
.highlight-flash {
  animation: hlFlash 1.5s var(--ease-smooth);
}
@keyframes hlFlash {
  0%   { box-shadow: 0 0 0 0 rgba(79,110,247,0.5); }
  40%  { box-shadow: 0 0 0 calc(2.1333333333333333vw) rgba(79,110,247,0); }
  100% { box-shadow: 0 0 0 0 rgba(79,110,247,0); }
}

/* ===== 通用过渡增强 ===== */
.t-smooth {
  transition: all 0.2s var(--ease-expo);
}
.t-color {
  transition: color 0.2s var(--ease-expo),
              background 0.2s var(--ease-expo),
              border-color 0.2s var(--ease-expo);
}
.t-transform {
  transition: transform 0.2s var(--ease-back);
}
.t-opacity {
  transition: opacity 0.2s var(--ease-expo);
}

/* ===== 管理端顶栏 ===== */
.adm-topbar {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(2.1333333333333333vw); padding: calc(1.866666666666667vw) calc(2.666666666666667vw);
  background: linear-gradient(135deg, #1E3A5F, #3730A3);
  border-radius: calc(2.1333333333333333vw);
  animation: fiDown 0.3s var(--ease-expo) both;
}
.atb-left { display: flex; align-items: center; gap: calc(1.3333333333333335vw); }
.atb-icon { font-size: calc(4vw); }
.atb-title { font-size: calc(3.4666666666666663vw); color: #fff; font-weight: 700; }
.atb-right { padding: calc(1.0666666666666667vw) calc(2.666666666666667vw); background: rgba(255,255,255,0.15); border-radius: calc(2.666666666666667vw); }
.atb-back { font-size: calc(2.933333333333333vw); color: rgba(255,255,255,0.85); font-weight: 600; }
.atb-right:active { background: rgba(255,255,255,0.25); }

/* ===== 弹窗动画 ===== */
.modal-mask {
  position: fixed; inset: 0; z-index: 1000;
  background: rgba(0,0,0,0.45);
  display: flex; align-items: center; justify-content: center;
  animation: maskIn 0.22s var(--ease-out) both;
}
@keyframes maskIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.modal-box {
  width: 85vw; max-height: 75vh;
  background: #fff; border-radius: calc(3.733333333333334vw);
  padding: calc(4.8vw) calc(3.733333333333334vw) calc(3.733333333333334vw);
  display: flex; flex-direction: column;
  animation: modalPop 0.32s var(--ease-back) both;
}
.modal-content {
  width: 85vw; max-height: 70vh;
  background: #fff; border-radius: calc(3.733333333333334vw);
  padding: calc(4.8vw) calc(3.733333333333334vw) calc(3.733333333333334vw);
  animation: modalPop 0.32s var(--ease-back) both;
}
@keyframes modalPop {
  from { opacity: 0; transform: scale(0.88) translateY(calc(3.733333333333334vw)); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
/* 设计令牌 — 国家级水准 */
html, body {
  --primary: #4F6EF7;
  --primary-dark: #3730A3;
  --primary-light: #E0E7FF;
  --accent: #F59E0B;
  --accent-dark: #B45309;
  --success: #059669;
  --danger: #DC2626;
  --text: #111827;
  --text-secondary: #374151;
  --text-muted: #6B7280;
  --bg: #F0F2F8;
  --card: #FFFFFF;
  --card-hover: #F9FAFB;
  --border: #D1D5DB;
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.08);
  --shadow-md: 0 4px 16px rgba(0,0,0,0.1);
  --shadow-lg: 0 8px 32px rgba(0,0,0,0.12);
  --radius-sm: calc(1.0666666666666667vw);
  --radius-md: calc(2.1333333333333333vw);
  --radius-lg: calc(3.2vw);
  --radius-xl: calc(4.266666666666667vw);
  --font-xs: calc(2.666666666666667vw);
  --font-sm: calc(3.2vw);
  --font-md: calc(3.733333333333334vw);
  --font-lg: calc(4.266666666666667vw);
  --font-xl: calc(5.333333333333334vw);
  --font-2xl: calc(6.4vw);
  --font-3xl: calc(7.466666666666668vw);
}

/* pages/admin/audit 内容审核 */
.page-wrap { padding: 0 calc(3.2vw) calc(5.333333333333334vw); }

.tabs {
  display: flex;
  background: #fff;
  border-radius: var(--radius);
  padding: calc(1.0666666666666667vw);
  margin: calc(3.2vw) 0 calc(1.6vw);
  box-shadow: var(--shadow);
}
.tab {
  flex: 1;
  text-align: center;
  padding: calc(2.1333333333333333vw) 0;
  font-size: calc(3.733333333333334vw);
  color: var(--text-secondary);
  border-radius: var(--radius-sm);
}
.tab.active {
  background: var(--primary);
  color: #fff;
  font-weight: 600;
}

/* 待审核/审核历史 切换 */
.tab-bar {
  display: flex;
  background: #fff;
  border-radius: calc(1.6vw);
  margin-bottom: calc(3.2vw);
  overflow: hidden;
}
.tab-item {
  flex: 1;
  text-align: center;
  padding: calc(3.2vw) 0;
  font-size: calc(3.733333333333334vw);
  color: #666;
  transition: all 0.2s;
}
.tab-item.active {
  color: #3a7afe;
  font-weight: 600;
  border-bottom: calc(0.5333333333333333vw) solid #3a7afe;
}
.reject-reason {
  font-size: calc(3.2vw);
  color: #ff453a;
}

.count-tip { font-size: calc(3.2vw); color: var(--text-light); padding: calc(0.5333333333333333vw) calc(0.5333333333333333vw) calc(1.6vw); }

/* 审核卡片 */
.audit-card { padding: calc(3.733333333333334vw); }
.audit-head { margin-bottom: calc(1.6vw); }
.audit-title {
  font-size: calc(4.266666666666667vw);
  font-weight: 700;
  color: var(--text-primary);
}
.audit-summary {
  font-size: calc(3.4666666666666663vw);
  color: var(--text-secondary);
  line-height: 1.6;
  margin-top: calc(1.6vw);
}
.audit-cover {
  width: 100%;
  height: calc(34.66666666666667vw);
  border-radius: var(--radius);
  margin-top: calc(2.1333333333333333vw);
  background: var(--bg-page);
}
.audit-meta {
  font-size: calc(2.933333333333333vw);
  color: var(--text-light);
  margin-top: calc(2.1333333333333333vw);
}
.audit-history-row {
  margin-top: calc(1.6vw);
}
.audit-ops {
  display: flex;
  gap: calc(2.1333333333333333vw);
  margin-top: calc(2.666666666666667vw);
  padding-top: calc(2.666666666666667vw);
  border-top: calc(0.13333333333333333vw) solid var(--border);
}
.op-btn {
  flex: 1;
  text-align: center;
  padding: calc(2.4vw) 0;
  border-radius: var(--radius-sm);
  font-size: calc(3.733333333333334vw);
  font-weight: 600;
}
.op-btn:active { opacity: 0.7; }
.op-pass { background: rgba(52,199,89,0.12); color: var(--success); }
.op-reject { background: rgba(255,69,58,0.1); color: var(--danger); }

.load-tip { text-align: center; color: var(--text-light); font-size: calc(3.2vw); padding: calc(3.2vw) 0; }

/* 管理后台仪表盘 */

.page-wrap { padding: 0 calc(3.2vw) calc(8vw); }

/* Hero */
.adm-hero {
  position: relative; margin: calc(2.666666666666667vw) 0; border-radius: calc(3.2vw); overflow: hidden;
}
.adm-hero-bg {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, #0F172A 0%, #1E3A5F 40%, #3730A3 100%);
}
.adm-hero-inner {
  position: relative; display: flex; align-items: center;
  gap: calc(2.4vw); padding: calc(4.266666666666667vw) calc(3.733333333333334vw);
}
.adm-logo { font-size: calc(7.466666666666668vw); }
.adm-hero-title { font-size: calc(5.066666666666666vw); font-weight: 900; color: #fff; }
.adm-hero-sub { font-size: calc(3.2vw); color: rgba(255,255,255,0.7); font-weight: 500; display: block; }

/* 待办提醒 */
.adm-alert {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(2.666666666666667vw); padding: calc(3.2vw) calc(3.733333333333334vw);
  background: linear-gradient(135deg, #FEF2F2, #FEE2E2);
  border-radius: calc(2.666666666666667vw); border: calc(0.26666666666666666vw) solid #FECACA;
}
.adm-alert-left { display: flex; align-items: center; gap: calc(1.866666666666667vw); }
.adm-alert-icon { font-size: calc(5.333333333333334vw); }
.adm-alert-num { font-size: calc(5.866666666666666vw); font-weight: 900; color: #DC2626; }
.adm-alert-text { font-size: calc(3.2vw); color: #991B1B; font-weight: 600; display: block; }
.adm-alert-go { font-size: calc(3.4666666666666663vw); color: #DC2626; font-weight: 700; flex-shrink: 0; }

/* 核心数据 */
.adm-stats {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: calc(1.866666666666667vw); margin-bottom: calc(3.2vw);
}
.adm-stat {
  background: #fff; border-radius: calc(2.666666666666667vw); padding: calc(3.2vw) calc(2.1333333333333333vw);
  text-align: center; box-shadow: 0 2px 12px rgba(0,0,0,0.04);
  transition: transform 0.15s;
}
.adm-stat:active { transform: scale(0.95); }
.adm-stat-icon {
  width: calc(8vw); height: calc(8vw); border-radius: calc(2.1333333333333333vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(4vw); margin: 0 auto calc(1.3333333333333335vw);
}
.adm-stat-num { font-size: calc(4.8vw); font-weight: 900; color: #111827; }
.adm-stat-lbl { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 600; margin-top: calc(0.26666666666666666vw); }

/* 分区 */
.adm-section { margin-bottom: calc(1.0666666666666667vw); }
.adm-sec-title {
  font-size: calc(3.733333333333334vw); font-weight: 800; color: #374151;
  margin-bottom: calc(1.866666666666667vw); padding-left: calc(0.5333333333333333vw);
}
.adm-sec-title::before {
  content: ''; display: inline-block; width: calc(0.8vw); height: calc(3.2vw);
  background: linear-gradient(180deg, #4F6EF7, #7C3AED);
  border-radius: calc(0.4vw); margin-right: calc(1.3333333333333335vw); vertical-align: -calc(0.4vw);
}

/* 功能网格 */
.adm-grid {
  display: grid; grid-template-columns: repeat(2, 1fr);
  gap: calc(1.866666666666667vw); margin-bottom: calc(3.2vw);
}
.adm-card {
  background: #fff; border-radius: calc(2.666666666666667vw); padding: calc(3.2vw) calc(2.666666666666667vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.04);
  text-align: center; transition: transform 0.15s;
}
.adm-card:active { transform: scale(0.96); }
.adm-card-icon {
  width: calc(8.533333333333333vw); height: calc(8.533333333333333vw); border-radius: calc(2.4vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(4.266666666666667vw); margin: 0 auto calc(1.6vw);
}
.adm-card-name { font-size: calc(3.4666666666666663vw); font-weight: 700; color: #111827; margin-bottom: calc(0.8vw); }
.adm-card-stat { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 500; }
.adm-warn { color: #DC2626 !important; font-weight: 700 !important; }

/* 学院面板 */
.mask {
  position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 100;
  display: flex; align-items: flex-end;
}
.dept-panel {
  width: 100%; background: #fff; border-radius: calc(3.733333333333334vw) calc(3.733333333333334vw) 0 0;
  max-height: 80vh; display: flex; flex-direction: column;
  animation: slideUp 0.3s ease-out;
}
@keyframes slideUp { from { transform: translateY(100%) } to { transform: translateY(0) } }
.panel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(3.733333333333334vw) calc(4.266666666666667vw); border-bottom: calc(0.13333333333333333vw) solid #E5E7EB;
}
.panel-title { font-size: calc(4.266666666666667vw); font-weight: 700; }
.panel-close { font-size: calc(4.8vw); color: #9CA3AF; padding: 0 calc(1.0666666666666667vw); }
.panel-body { flex: 1; padding: calc(1.6vw) calc(4.266666666666667vw); max-height: 60vh; }
.dept-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(3.2vw) 0; border-bottom: calc(0.13333333333333333vw) solid #F3F4F6;
}
.dept-name { font-size: calc(4vw); font-weight: 600; color: #111827; }
.dept-ops { display: flex; gap: calc(1.6vw); }
.op-edit, .op-del {
  font-size: calc(3.2vw); padding: calc(1.0666666666666667vw) calc(2.4vw); border-radius: calc(2.666666666666667vw); font-weight: 500;
}
.op-edit { background: #EEF2FF; color: #4F6EF7; }
.op-del { background: #FEE2E2; color: #DC2626; }
.panel-foot {
  padding: calc(3.2vw) calc(4.266666666666667vw);
  padding-bottom: calc(env(safe-area-inset-bottom) + calc(3.2vw));
}
.empty-tip { text-align: center; padding: calc(5.333333333333334vw) 0; color: #9CA3AF; font-size: calc(3.4666666666666663vw); }

/* 用户管理 v2 — 精致卡片 */
.page-wrap { padding: 0 calc(3.2vw) calc(16vw); }

/* 顶栏 */
.topbar { padding: calc(3.733333333333334vw) 0 calc(2.1333333333333333vw); }
.topbar-title { font-size: calc(5.066666666666666vw); font-weight: 900; color: #111827; }
.header-row { display: flex; align-items: center; gap: calc(2.1333333333333333vw); }
.stat-chip {
  padding: calc(1.0666666666666667vw) calc(2.4vw); background: #EEF2FF; color: #4F6EF7;
  border-radius: calc(2.666666666666667vw); font-size: calc(3.2vw); font-weight: 700;
}
.export-btn {
  padding: calc(1.3333333333333335vw) calc(3.2vw); background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; border-radius: calc(3.2vw); font-size: calc(3.2vw); font-weight: 700;
  box-shadow: 0 4px 12px rgba(79,110,247,0.3);
}
.export-btn:active { opacity: 0.8; }

/* 搜索卡片 */
.search-card { padding: calc(2.666666666666667vw) calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }
.search-row { display: flex; align-items: center; padding-bottom: calc(2.1333333333333333vw); border-bottom: calc(0.13333333333333333vw) solid #F3F4F6; }
.search-icon { font-size: calc(4vw); margin-right: calc(1.6vw); color: #9CA3AF; }
.search-input { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-clear { color: #9CA3AF; font-size: calc(4vw); padding: calc(0.5333333333333333vw) calc(1.0666666666666667vw); }

.filter-row { display: flex; align-items: center; padding-top: calc(1.866666666666667vw); }
.filter-label {
  font-size: calc(3.2vw); color: #9CA3AF; font-weight: 600;
  width: calc(10.666666666666668vw); flex-shrink: 0;
}
.filter-scroll { white-space: nowrap; flex: 1; }
.tag-item {
  display: inline-flex; align-items: center;
  padding: calc(1.3333333333333335vw) calc(3.2vw); margin-right: calc(1.6vw);
  border-radius: calc(2.666666666666667vw); font-size: calc(3.2vw); font-weight: 600;
  background: #F3F4F6; color: #6B7280;
  transition: all 0.2s;
}
.tag-item.active {
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; box-shadow: 0 4px 12px rgba(79,110,247,0.3);
}

/* 用户卡片 */
.user-list { margin-top: calc(0.5333333333333333vw); }
.user-card { padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }
.user-body { display: flex; align-items: flex-start; }
.user-avatar {
  width: calc(11.733333333333333vw); height: calc(11.733333333333333vw); border-radius: 50%;
  background: #EEF2FF; margin-right: calc(2.666666666666667vw); flex-shrink: 0;
  border: calc(0.26666666666666666vw) solid #E5E7EB;
}
.user-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: calc(1.0666666666666667vw); }
.user-top { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: calc(1.0666666666666667vw); }
.user-name { font-size: calc(4.266666666666667vw); font-weight: 800; color: #111827; }
.user-badges { display: flex; gap: calc(0.8vw); flex-shrink: 0; }
.role-badge {
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(1.6vw);
  font-size: calc(2.666666666666667vw); font-weight: 700;
}
.rb-admin { background: #FEF3C7; color: #92400E; }
.rb-judge { background: #D1FAE5; color: #065F46; }
.rb-member { background: #EEF2FF; color: #3730A3; }
.status-badge {
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(1.6vw);
  font-size: calc(2.666666666666667vw); font-weight: 700;
}
.sb-on { background: #D1FAE5; color: #065F46; }
.sb-off { background: #FEE2E2; color: #991B1B; }

.user-detail { font-size: calc(3.2vw); color: #6B7280; display: flex; align-items: center; flex-wrap: wrap; }
.ud-sep { margin: 0 calc(0.8vw); color: #D1D5DB; }
.ud-id { color: #9CA3AF; font-family: monospace; }

.user-phone-row {
  display: inline-flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.3333333333333335vw) calc(2.1333333333333333vw); background: #F0F4FF; border-radius: calc(1.866666666666667vw);
  align-self: flex-start;
}
.user-phone-row:active { background: #DBE4FF; }
.ph-icon { font-size: calc(2.933333333333333vw); }
.ph-num { font-size: calc(3.2vw); color: #4F6EF7; font-weight: 600; }
.ph-copy { font-size: calc(2.666666666666667vw); color: #9CA3AF; padding: calc(0.26666666666666666vw) calc(1.3333333333333335vw); border-radius: calc(1.3333333333333335vw); background: #fff; }

/* 操作按钮 */
.user-actions {
  display: flex; gap: calc(1.866666666666667vw); margin-top: calc(2.4vw); padding-top: calc(2.4vw);
  border-top: calc(0.13333333333333333vw) solid #F3F4F6;
}
.act-btn {
  flex: 1; text-align: center; padding: calc(2.1333333333333333vw) 0;
  border-radius: calc(2.1333333333333333vw); font-size: calc(3.2vw); font-weight: 700;
  transition: transform 0.15s, opacity 0.15s;
}
.act-btn:active { transform: scale(0.95); opacity: 0.8; }
.act-role { background: #EEF2FF; color: #4F6EF7; }
.act-disable { background: #FEE2E2; color: #DC2626; }
.act-enable { background: #D1FAE5; color: #059669; }

.load-tip { text-align: center; color: #C4C8D0; font-size: calc(3.2vw); padding: calc(3.733333333333334vw) 0; }
/* 公告详情 - 优化版 */

.page-wrap { padding: 0 0 calc(8vw); }

/* 封面 */
.det-cover { width: 100%; height: calc(53.333333333333336vw); overflow: hidden; }
.det-cover-img { width: 100%; height: 100%; }

/* 标题卡片 */
.det-card {
  margin: -calc(4vw) calc(3.2vw) 0;
  padding: calc(4.266666666666667vw) calc(3.733333333333334vw);
  background: #fff; border-radius: calc(3.733333333333334vw) calc(3.733333333333334vw) 0 0;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.06);
  position: relative; z-index: 2;
}
.det-tags { display: flex; gap: calc(1.0666666666666667vw); margin-bottom: calc(1.866666666666667vw); }
.det-tag {
  display: inline-flex; padding: calc(0.5333333333333333vw) calc(1.866666666666667vw);
  border-radius: calc(1333.2vw); font-size: calc(2.933333333333333vw); font-weight: 700;
}
.tag-pin { background: #FEF3C7; color: #92400E; }
.det-tag.tag-warning { background: #FEF3C7; color: #92400E; }
.det-tag.tag-success { background: #D1FAE5; color: #065F46; }
.det-tag.tag-danger { background: #FEE2E2; color: #DC2626; }

.det-title {
  font-size: calc(5.333333333333334vw); font-weight: 800; color: #111827;
  line-height: 1.4; margin-bottom: calc(2.4vw);
}
.det-meta {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  font-size: calc(3.2vw); color: #9CA3AF;
}
.det-author { font-weight: 600; color: #6B7280; }
.det-dot { color: #D1D5DB; }

/* 驳回 */
.det-reject {
  margin: calc(2.1333333333333333vw) calc(3.2vw); padding: calc(2.666666666666667vw) calc(3.2vw);
  background: #FEF2F2; border-radius: calc(2.1333333333333333vw);
  border-left: calc(0.8vw) solid #DC2626;
}
.rej-label { font-size: calc(3.4666666666666663vw); color: #DC2626; font-weight: 600; }
.rej-text { font-size: calc(3.4666666666666663vw); color: #6B7280; margin-top: calc(0.8vw); }

/* 正文 */
.det-content { padding: calc(3.733333333333334vw) calc(3.2vw); }
.dc-text {
  font-size: calc(4.266666666666667vw); color: #111827;
  line-height: 2; white-space: pre-wrap; word-break: break-all;
  margin-bottom: calc(3.2vw);
}
.dc-image {
  width: 100%; border-radius: calc(2.1333333333333333vw);
  margin: calc(2.1333333333333333vw) 0 calc(3.2vw); background: #F3F4F6;
}

/* 表格 */
.dc-table { margin: calc(2.1333333333333333vw) 0 calc(3.2vw); }
.dct {
  border: calc(0.26666666666666666vw) solid #E5E7EB; border-radius: calc(1.6vw);
  overflow: hidden;
}
.dct-row { display: flex; border-bottom: calc(0.26666666666666666vw) solid #E5E7EB; }
.dct-row:last-child { border-bottom: none; }
.dct-cell {
  flex: 1; min-width: 0; padding: calc(2.4vw) calc(2.1333333333333333vw);
  font-size: calc(3.733333333333334vw); color: #111827; border-right: calc(0.26666666666666666vw) solid #E5E7EB;
  word-break: break-all;
}
.dct-cell:last-child { border-right: none; }
.dct-head { background: #F9FAFB; }
.dct-hcell { font-weight: 700; color: #6B7280; }

/* 操作栏 */
.det-bar {
  position: fixed; left: 0; right: 0; bottom: 0;
  display: flex; gap: calc(1.6vw); padding: calc(1.866666666666667vw) calc(2.666666666666667vw);
  background: rgba(255,255,255,0.97);
  backdrop-filter: blur(20px);
  border-top: calc(0.13333333333333333vw) solid #F0F1F5;
  z-index: 50;
  padding-bottom: calc(env(safe-area-inset-bottom) + calc(1.3333333333333335vw));
}
.dbtn {
  flex: 1; text-align: center; padding: calc(2.666666666666667vw) 0;
  border-radius: calc(5.333333333333334vw); font-size: calc(3.733333333333334vw); font-weight: 700;
  transition: all 0.15s;
}
.dbtn:active { transform: scale(0.95); }
.dbtn-edit { background: #EEF1FE; color: #4F6EF7; }
.dbtn-pin { background: #FFFBEB; color: #D97706; }
.dbtn-pass { background: #D1FAE5; color: #059669; }
.dbtn-reject { background: #FEF3C7; color: #D97706; }
.dbtn-del { background: #FEE2E2; color: #DC2626; }
/* ===== 详情页体验优化 ===== */
.det-skeleton { padding: 0 0 calc(8vw); }
.sk { background: #F0F1F5; border-radius: calc(1.6vw); }
.sk-cover { width: 100%; height: calc(53.333333333333336vw); border-radius: 0; }
.sk-card { margin: -calc(4vw) calc(3.2vw) 0; padding: calc(4.266666666666667vw) calc(3.733333333333334vw); background: #fff; border-radius: calc(3.733333333333334vw) calc(3.733333333333334vw) 0 0; }
.sk-line { height: calc(4.266666666666667vw); margin-bottom: calc(2.666666666666667vw); }
.sk-text { height: calc(3.733333333333334vw); margin: calc(3.2vw) calc(3.2vw) 0; }
.w40 { width: 40%; }
.w60 { width: 60%; }
.w90 { width: 90%; }
.w100 { width: 100%; }
.det-cover-fail {
  width: 100%; height: calc(53.333333333333336vw);
  display: flex; align-items: center; justify-content: center;
  background: #F3F4F6; color: #9CA3AF; font-size: calc(3.4666666666666663vw);
}
.dc-img-wrap { margin: calc(2.1333333333333333vw) 0 calc(3.2vw); }
.dc-img-wrap .dc-image { margin: 0; }
.dc-img-fail {
  width: 100%; min-height: calc(26.666666666666668vw);
  display: flex; align-items: center; justify-content: center;
  background: #F7F8FB; color: #9CA3AF; font-size: calc(3.4666666666666663vw); border-radius: calc(2.1333333333333333vw);
}
.dbtn-main { flex: 1.8; }
.dbtn-sm { flex: 1; padding: calc(2.1333333333333333vw) 0; font-size: calc(3.2vw); }

/* announcement/edit v3 - Visual Editor */
.page-wrap { padding: calc(3.2vw) calc(3.2vw) calc(16vw); }

.title-input {
  width: 100%; box-sizing: border-box; padding: calc(2.666666666666667vw) 0;
  font-size: calc(4.8vw); font-weight: 700; min-height: calc(11.733333333333333vw);
  background: transparent; color: #1E2130;
  border-bottom: calc(0.26666666666666666vw) solid #F0F1F5;
}
.title-input:focus { border-bottom-color: #4F6EF7; }
/* 封面 */
.edit-cover-row {
  display: flex; align-items: center; gap: calc(2.1333333333333333vw);
  padding: calc(2.1333333333333333vw) calc(3.2vw); border-top: calc(0.13333333333333333vw) solid #F0F1F5;
}
.ecr-label { font-size: calc(3.4666666666666663vw); color: #6B7280; font-weight: 600; flex-shrink: 0; }
.ecr-preview { position: relative; width: calc(16vw); height: calc(10.666666666666668vw); border-radius: calc(1.6vw); overflow: hidden; }
.ecr-img { width: 100%; height: 100%; }
.ecr-change {
  position: absolute; inset: 0; background: rgba(0,0,0,0.4);
  color: #fff; font-size: calc(2.666666666666667vw); display: flex; align-items: center; justify-content: center;
}
.ecr-upload {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.6vw) calc(2.666666666666667vw); background: #F3F4F6; border-radius: calc(1.6vw);
}
.ecr-icon { font-size: calc(4.266666666666667vw); color: #6B7280; font-weight: 300; }
.ecr-text { font-size: calc(3.2vw); color: #6B7280; }
.ecr-remove {
  width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); border-radius: 50%;
  background: #FEE2E2; color: #DC2626; font-size: calc(2.933333333333333vw);
  display: flex; align-items: center; justify-content: center;
}

/* Block editor */
.block-editor { margin-top: calc(2.666666666666667vw); }
.insert-btn {
  display: flex; align-items: center; justify-content: center;
  gap: calc(1.0666666666666667vw); padding: calc(2.666666666666667vw); margin: calc(1.0666666666666667vw) 0;
  border: calc(0.26666666666666666vw) dashed #D1D5DB; border-radius: calc(2.1333333333333333vw);
  color: #4B5563; font-size: calc(3.4666666666666663vw); transition: all 0.2s;
}
.insert-btn:active { border-color: #4F6EF7; color: #4F6EF7; background: #EEF1FE; }
.insert-icon {
  width: calc(4.8vw); height: calc(4.8vw); border-radius: 50%;
  background: #4F6EF7; color: #fff; font-size: calc(3.2vw);
  display: flex; align-items: center; justify-content: center;
}

.block-card { padding: calc(2.666666666666667vw); margin-bottom: 0; }
.block-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(2.1333333333333333vw); padding-bottom: calc(1.6vw);
  border-bottom: calc(0.13333333333333333vw) solid #F0F1F5;
}
.tool-tag { font-size: calc(2.933333333333333vw); color: #4B5563; font-weight: 500; }
.tool-actions { display: flex; gap: calc(0.5333333333333333vw); }
.tool-btn {
  width: calc(6.4vw); height: calc(6.4vw); border-radius: calc(1.6vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(3.2vw); color: #4B5563; background: #F7F8FB;
}
.tool-btn:active { background: #EEF1FE; color: #4F6EF7; }
.tool-btn.disabled { opacity: 0.3; }
.tool-del { color: #EF4444; }
.tool-del:active { background: #FEF2F2; }

.block-textarea {
  width: 100%; min-height: calc(21.333333333333336vw); font-size: calc(4vw);
  line-height: 1.8; color: #1E2130; background: #F7F8FB;
  border-radius: calc(1.6vw); padding: calc(2.666666666666667vw);
}

.block-image-wrap { position: relative; }
.block-image { width: 100%; border-radius: calc(1.6vw); }
.img-reupload {
  position: absolute; bottom: calc(2.1333333333333333vw); right: calc(2.1333333333333333vw);
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw); background: rgba(0,0,0,0.6); color: #fff;
  border-radius: calc(3.2vw); font-size: calc(3.2vw);
}
.img-placeholder {
  display: flex; flex-direction: column; align-items: center;
  justify-content: center; height: calc(40vw);
  background: #F7F8FB; border: calc(0.26666666666666666vw) dashed #D1D5DB;
  border-radius: calc(1.6vw); color: #4B5563;
}
.add-icon { font-size: calc(7.466666666666668vw); color: #4F6EF7; margin-bottom: calc(1.0666666666666667vw); }
.add-text { font-size: calc(3.4666666666666663vw); }

/* Table */
.block-table-wrap { overflow-x: auto; }
.btable { border: calc(0.13333333333333333vw) solid #E8EAF0; border-radius: calc(1.6vw); overflow: hidden; }
.brow { display: flex; }
.brow-header { background: #F7F8FB; }
.bcell { flex: 1; border-right: calc(0.13333333333333333vw) solid #E8EAF0; border-bottom: calc(0.13333333333333333vw) solid #E8EAF0; }
.bcell:last-child { border-right: none; }
.brow:last-child .bcell { border-bottom: none; }
.cell-input {
  width: 100%; padding: calc(1.6vw) calc(2.1333333333333333vw); font-size: calc(3.4666666666666663vw);
  text-align: center; min-height: calc(8vw);
}
.table-tools { display: flex; gap: calc(1.0666666666666667vw); margin-top: calc(1.6vw); }
.ttool {
  padding: calc(1.0666666666666667vw) calc(2.666666666666667vw); background: #F7F8FB; border-radius: calc(2.666666666666667vw);
  font-size: calc(3.2vw); color: #4B5563;
}
.ttool:active { background: #EEF1FE; color: #4F6EF7; }

.audit-tip {
  margin-top: calc(3.2vw); padding: calc(2.666666666666667vw); background: #FFF7ED;
  border-radius: calc(1.6vw); font-size: calc(3.2vw); color: #9A3412;
  text-align: center;
}

.submit-bar {
  position: fixed; bottom: 0; left: 0; right: 0;
  padding: calc(2.1333333333333333vw) calc(3.2vw); padding-bottom: calc(env(safe-area-inset-bottom) + calc(2.1333333333333333vw));
  background: #fff; box-shadow: 0 -calc(0.26666666666666666vw) calc(2.666666666666667vw) rgba(0,0,0,0.04); z-index: 10;
}
/* ===== 编辑页体验优化 ===== */
.title-row { position: relative; display: flex; align-items: center; }
.title-row .title-input { padding-right: calc(13.333333333333334vw); }
.title-count {
  position: absolute; right: calc(0.5333333333333333vw); bottom: calc(3.2vw);
  font-size: calc(2.933333333333333vw); color: #9CA3AF; line-height: 1;
}
.ecr-left { display: flex; flex-direction: column; gap: calc(0.26666666666666666vw); margin-right: auto; }
.ecr-hint { font-size: calc(2.666666666666667vw); color: #9CA3AF; }
.be-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 calc(0.5333333333333333vw); margin-bottom: calc(1.6vw);
}
.be-title { font-size: calc(4vw); font-weight: 700; color: #1E2130; }
.be-count { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.add-hint { font-size: calc(2.666666666666667vw); color: #9CA3AF; margin-top: calc(0.5333333333333333vw); }

/* 公告列表 - 优化版 */

.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* 搜索 */
.search-bar { margin-bottom: calc(2.666666666666667vw); }
.search-input {
  display: flex; align-items: center;
  background: #fff; border-radius: calc(5.333333333333334vw);
  padding: 0 calc(3.2vw); height: calc(10.666666666666668vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.05);
}
.search-icon { font-size: calc(4.266666666666667vw); margin-right: calc(1.6vw); color: #9CA3AF; }
.search-field { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-clear { font-size: calc(4vw); color: #9CA3AF; padding: calc(1.3333333333333335vw); }
.search-clear:active { color: #DC2626; }

/* Tab */
.tabs {
  display: flex; gap: calc(1.0666666666666667vw); margin-bottom: calc(2.666666666666667vw);
  padding: calc(1.0666666666666667vw); background: #E5E7EB; border-radius: calc(2.666666666666667vw);
}
.tab {
  flex: 1; text-align: center; padding: calc(2.1333333333333333vw) 0;
  border-radius: calc(1.866666666666667vw); font-size: calc(3.4666666666666663vw); color: #6B7280;
  font-weight: 600; transition: all 0.2s;
}
.tab.active { background: #fff; color: #4F6EF7; font-weight: 700; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }

/* 卡片 */
.ann-card {
  position: relative; margin-bottom: calc(2.666666666666667vw);
  background: #fff; border-radius: calc(3.2vw);
  overflow: hidden;
  box-shadow: 0 2px 16px rgba(0,0,0,0.05);
  transition: transform 0.15s, box-shadow 0.15s;
}
.ann-card:active { transform: scale(0.98); box-shadow: 0 4px 20px rgba(0,0,0,0.08); }

/* 置顶卡片 */
.ann-pinned {
  border: calc(0.26666666666666666vw) solid #FDE68A;
  box-shadow: 0 2px 16px rgba(245,158,11,0.1);
}
.ann-pin-bar {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.3333333333333335vw) calc(3.2vw);
  background: linear-gradient(135deg, #FFFBEB, #FEF3C7);
  border-bottom: calc(0.13333333333333333vw) solid #FDE68A;
}
.pin-icon { font-size: calc(3.733333333333334vw); }
.pin-text { font-size: calc(2.933333333333333vw); color: #92400E; font-weight: 700; }

.ann-body { padding: calc(3.2vw); }

/* 封面 */
.ann-cover {
  width: 100%; height: calc(42.66666666666667vw); border-radius: calc(2.1333333333333333vw);
  margin-bottom: calc(2.4vw); background: #F3F4F6;
}

/* 标题 */
.ann-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: calc(1.6vw); margin-bottom: calc(1.3333333333333335vw);
}
.ann-title {
  flex: 1; font-size: calc(4.266666666666667vw); font-weight: 700; color: #111827;
  line-height: 1.5;
}

/* 状态标签 */
.ann-badges { display: flex; gap: calc(0.8vw); flex-shrink: 0; }
.ann-badge {
  display: inline-flex; padding: calc(0.5333333333333333vw) calc(1.866666666666667vw);
  border-radius: calc(1333.2vw); font-size: calc(2.666666666666667vw); font-weight: 700;
}
.ann-badge.tag-warning { background: #FEF3C7; color: #92400E; }
.ann-badge.tag-success { background: #D1FAE5; color: #065F46; }
.ann-badge.tag-danger { background: #FEE2E2; color: #DC2626; }

/* 摘要 */
.ann-summary {
  font-size: calc(3.4666666666666663vw); color: #6B7280; line-height: 1.7;
  margin-bottom: calc(1.866666666666667vw);
}

/* 底部 */
.ann-foot {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  font-size: calc(2.933333333333333vw); color: #9CA3AF;
}
.ann-author { font-weight: 600; color: #6B7280; }
.ann-dot { color: #D1D5DB; }
.ann-menu {
  margin-left: auto; width: calc(6.4vw); height: calc(6.4vw);
  border-radius: 50%; display: flex; align-items: center;
  justify-content: center; font-size: calc(4.266666666666667vw); color: #6B7280;
  font-weight: 700;
}
.ann-menu:active { background: #F3F4F6; }

/* 空状态 */
.empty-state { text-align: center; padding: calc(10.666666666666668vw) calc(5.333333333333334vw) calc(5.333333333333334vw); }
.empty-icon { font-size: calc(10.666666666666668vw); margin-bottom: calc(2.1333333333333333vw); }
.empty-title { font-size: calc(4.266666666666667vw); font-weight: 700; color: #374151; margin-bottom: calc(1.0666666666666667vw); }
.empty-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; margin-bottom: calc(3.733333333333334vw); }
.empty-btn {
  display: inline-block; padding: calc(2.4vw) calc(6.4vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; border-radius: calc(5.333333333333334vw); font-size: calc(3.733333333333334vw); font-weight: 700;
  box-shadow: 0 6px 20px rgba(79,110,247,0.3);
}
.empty-btn:active { transform: scale(0.95); }

.load-tip { text-align: center; padding: calc(3.733333333333334vw) 0; font-size: calc(3.2vw); color: #9CA3AF; }

.fab {
  position: fixed; bottom: calc(24vw); right: calc(4.8vw);
  width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(6.4vw); font-weight: 300;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 32px rgba(79,110,247,0.45);
  z-index: 99;
}
.fab:active { transform: scale(0.88); }

/* pages/article/detail — 国家级标准 */
.page-wrap { padding-bottom: calc(26.666666666666668vw); }

/* Container fallback */
.container { padding: 0 calc(3.2vw); }

/* 封面 */
.cover-wrap { width: 100%; height: calc(53.333333333333336vw); overflow: hidden; }
.cover { width: 100%; height: 100%; }

/* 标题区 */
.head { padding-top: calc(1.0666666666666667vw); }
.title-row { display: flex; gap: calc(1.3333333333333335vw); margin-bottom: calc(2.1333333333333333vw); }
.article-title { font-size: calc(5.333333333333334vw); font-weight: 700; color: #111827; line-height: 1.4; }
.author-row { display: flex; align-items: center; margin-top: calc(2.666666666666667vw); font-size: calc(3.2vw); color: #6B7280; }
.avatar-sm { width: calc(7.466666666666668vw); height: calc(7.466666666666668vw); border-radius: 50%; margin-right: calc(1.6vw); background: #EEF2FF; font-size: calc(3.2vw); color: #4F6EF7; font-weight: 600; }
.avatar-grad { background: linear-gradient(135deg, #667eea, #764ba2); color: #fff; }
.author-name { font-size: calc(3.4666666666666663vw); color: #111827; font-weight: 500; }
.dot { margin: 0 calc(1.0666666666666667vw); color: #9CA3AF; }
.time { color: #9CA3AF; }

/* 正文 */
.content { font-size: calc(4vw); line-height: 1.8; color: #111827; margin-top: calc(4.266666666666667vw); padding: calc(3.2vw) 0; white-space: pre-wrap; word-break: break-all; overflow: hidden; }
.images { margin-top: calc(3.2vw); display: flex; flex-direction: column; gap: calc(2.1333333333333333vw); }
.content-img { width: 100%; border-radius: calc(2.1333333333333333vw); }

/* 驳回理由 */
.reject-box { margin-top: calc(4.266666666666667vw); padding: calc(3.2vw); background: #FEF2F2; border-radius: calc(2.1333333333333333vw); border-left: calc(0.8vw) solid #DC2626; }
.reject-label { font-size: calc(3.4666666666666663vw); color: #DC2626; font-weight: 600; }
.reject-text { font-size: calc(3.4666666666666663vw); color: #6B7280; word-break: break-all; margin-top: calc(1.0666666666666667vw); }

/* 评论区 */
.comment-section { margin-top: calc(2.1333333333333333vw); }
.comment-item { display: flex; padding: calc(3.2vw) 0; border-bottom: calc(0.13333333333333333vw) solid #F0F1F5; }
.comment-item:last-child { border-bottom: none; }
.comment-body { flex: 1; margin-left: calc(2.1333333333333333vw); min-width: 0; }
.comment-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: calc(1.0666666666666667vw); }
.comment-name { font-size: calc(3.4666666666666663vw); font-weight: 600; color: #111827; }
.comment-right { display: flex; align-items: center; gap: calc(2.1333333333333333vw); }
.comment-time { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.comment-del { font-size: calc(2.933333333333333vw); color: #DC2626; }
.comment-content { font-size: calc(3.733333333333334vw); color: #111827; line-height: 1.5; word-break: break-all; }

.loadmore-tip { text-align: center; color: #9CA3AF; font-size: calc(3.2vw); padding: calc(3.2vw) 0; }
.loading-tip { text-align: center; color: #9CA3AF; padding: calc(16vw) 0; }

/* 底部操作栏 */
.bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(2.1333333333333333vw) calc(3.2vw); background: #fff; border-top: calc(0.13333333333333333vw) solid #F0F1F5; z-index: 50; padding-bottom: calc(env(safe-area-inset-bottom) + calc(1.6vw)); }
.bb-input-wrap { flex: 1; background: #F3F4F6; border-radius: calc(4.8vw); padding: 0 calc(3.733333333333334vw); height: calc(9.6vw); display: flex; align-items: center; }
.bb-input { flex: 1; font-size: calc(3.733333333333334vw); }
.bb-send { flex-shrink: 0; padding: calc(2.1333333333333333vw) calc(4.266666666666667vw); border-radius: calc(4.8vw); background: linear-gradient(135deg, #4F6EF7, #7C3AED); color: #fff; font-size: calc(3.4666666666666663vw); font-weight: 700; }
.bb-actions { display: flex; align-items: center; gap: calc(1.0666666666666667vw); }
.bb-act { display: flex; flex-direction: column; align-items: center; padding: 0 calc(1.6vw); min-width: calc(8.533333333333333vw); }
.bb-ico { font-size: calc(4.8vw); }
.bb-num { font-size: calc(2.666666666666667vw); color: #6B7280; margin-top: calc(0.26666666666666666vw); }
.bb-act.liked .bb-num { color: #DC2626; }
/* 图片加载失败占位 */
.cover-fail {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  background: #F3F4F6; color: #9CA3AF; font-size: calc(3.4666666666666663vw);
}
.img-wrap { display: flex; flex-direction: column; }
.img-fail {
  min-height: calc(26.666666666666668vw);
  display: flex; align-items: center; justify-content: center;
  background: #F7F8FB; color: #9CA3AF; font-size: calc(3.4666666666666663vw);
}

/* 文章编辑器 优化版 */

html, body { background: #F5F6FA; }

.pg { padding-bottom: calc(24vw); }

/* ===== 标题区 ===== */
.ehdr { padding: calc(3.733333333333334vw) calc(4.266666666666667vw) calc(2.1333333333333333vw); }
.etit {
  width: 100%; font-size: calc(5.866666666666666vw); font-weight: 800;
  color: #111827; background: transparent;
  min-height: calc(11.733333333333333vw); line-height: 1.3;
}
.etit::placeholder { color: #C0C4CC; }

.emeta {
  display: flex; align-items: center; gap: calc(1.6vw);
  margin-top: calc(2.1333333333333333vw); flex-wrap: wrap;
}
.ecat {
  display: inline-flex; align-items: center; gap: calc(0.8vw);
  padding: calc(1.866666666666667vw) calc(2.933333333333333vw); background: #fff;
  border-radius: calc(3.2vw); font-size: calc(3.4666666666666663vw); color: #374151;
  font-weight: 600; box-shadow: 0 1px 6px rgba(0,0,0,0.04);
}
.ecat-empty { color: #9CA3AF; }
.ecat-icon { font-size: calc(3.733333333333334vw); }
.ecat-arr { font-size: calc(2.4vw); margin-left: calc(0.5333333333333333vw); color: #C0C4CC; }

/* 封面 */
.ecov {
  width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: calc(2.666666666666667vw);
  overflow: hidden; background: #fff;
  box-shadow: 0 1px 6px rgba(0,0,0,0.04);
  flex-shrink: 0;
}
.ecov-img { width: 100%; height: 100%; }
.ecov-placeholder {
  width: 100%; height: 100%; display: flex;
  flex-direction: column; align-items: center; justify-content: center;
  gap: calc(0.26666666666666666vw); background: #F8F9FC;
}
.ecov-add-icon { font-size: calc(3.733333333333334vw); }
.ecov-add-txt { font-size: calc(2.1333333333333333vw); color: #9CA3AF; }
.ecov-x {
  width: calc(4.8vw); height: calc(4.8vw); border-radius: 50%;
  background: rgba(0,0,0,0.45); color: #fff; font-size: calc(2.4vw);
  display: flex; align-items: center; justify-content: center;
}
.ecov-tip { font-size: calc(2.933333333333333vw); color: #9CA3AF; }

/* ===== 导入 ===== */
.eimp {
  display: flex; align-items: center; justify-content: space-between;
  margin: calc(1.3333333333333335vw) calc(4.266666666666667vw) calc(1.866666666666667vw);
  padding: calc(2.4vw) calc(2.933333333333333vw); background: #fff;
  border-radius: calc(2.1333333333333333vw);
  box-shadow: 0 1px 6px rgba(0,0,0,0.03);
}
.eimp-left { display: flex; align-items: center; gap: calc(1.3333333333333335vw); }
.eimp-icon { font-size: calc(4.266666666666667vw); }
.eimp-t { font-size: calc(3.4666666666666663vw); color: #4F6EF7; font-weight: 600; }
.eimp-arrow { font-size: calc(4.266666666666667vw); color: #C0C4CC; }

/* ===== 正文 ===== */
.ebody { padding: 0 calc(4.266666666666667vw); }
.etxt {
  width: 100%; min-height: calc(69.33333333333334vw);
  font-size: calc(4.533333333333333vw); line-height: 2.0; color: #2D2D3A;
  background: transparent;
}
.etxt::placeholder { color: #C0C4CC; font-size: calc(4.266666666666667vw); }
.etxt-bold { font-weight: 700; }

/* ===== 配图 ===== */
.eimgs { display: flex; flex-wrap: wrap; gap: calc(1.6vw); padding: calc(2.666666666666667vw) calc(4.266666666666667vw); }
.eimg {
  position: relative; width: calc((100% - calc(3.2vw)) / 3);
  height: 0; padding-bottom: calc((100% - calc(3.2vw)) / 3);
  border-radius: calc(1.866666666666667vw); overflow: hidden;
}
.eimg-pic { position: absolute; inset: 0; width: 100%; height: 100%; }
.eimg-x {
  position: absolute; top: calc(0.8vw); right: calc(0.8vw);
  width: calc(5.066666666666666vw); height: calc(5.066666666666666vw); border-radius: 50%;
  background: rgba(0,0,0,0.5); color: #fff; font-size: calc(2.666666666666667vw);
  display: flex; align-items: center; justify-content: center;
  backdrop-filter: blur(4px);
}
.eimg-add {
  border: calc(0.26666666666666666vw) dashed #D5D8E0; background: #F8F9FC;
  display: flex; align-items: center; justify-content: center;
}
.eimg-plus { font-size: calc(6.933333333333333vw); color: #C0C4CC; font-weight: 300; }

/* ===== 底部工具栏 ===== */
.ebar {
  position: fixed; bottom: 0; left: 0; right: 0;
  background: rgba(255,255,255,0.98);
  backdrop-filter: blur(28px);
  border-top: calc(0.13333333333333333vw) solid #EEEFF3;
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  padding: calc(1.0666666666666667vw) calc(1.866666666666667vw); z-index: 50;
}
.ebar-scroll { flex: 1; min-width: 0; }
.ebar-inner { display: flex; align-items: center; gap: calc(0.26666666666666666vw); white-space: nowrap; }
.ebtn {
  display: inline-flex; flex-direction: column; align-items: center;
  justify-content: center; gap: calc(0.26666666666666666vw);
  width: calc(12vw); height: calc(11.200000000000001vw); border-radius: calc(2.1333333333333333vw);
  flex-shrink: 0; transition: all 0.15s;
}
.ebtn:active { background: #F3F4F8; transform: scale(0.93); }
.ebtn-on { background: #EEF1FE; }
.ebtn-icon {
  font-size: calc(4vw); font-weight: 800; color: #4B5563; line-height: 1;
}
.ebtn-on .ebtn-icon { color: #4F6EF7; }
.ebtn-lbl {
  font-size: calc(2.4vw); color: #9CA3AF; font-weight: 500; line-height: 1;
}
.ebtn-on .ebtn-lbl { color: #4F6EF7; }

.ebar-right { display: flex; align-items: center; gap: calc(1.3333333333333335vw); flex-shrink: 0; }
.ebar-cnt { font-size: calc(2.933333333333333vw); color: #9CA3AF; min-width: calc(6.4vw); text-align: right; }
.ebar-save {
  padding: 0 calc(4.266666666666667vw); height: calc(8.533333333333333vw); border-radius: calc(4.266666666666667vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; font-size: calc(3.4666666666666663vw); font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  border: none; box-shadow: 0 calc(0.5333333333333333vw) calc(2.1333333333333333vw) rgba(79,110,247,0.35);
  transition: all 0.2s;
}
.ebar-save::after { border: none; }
.ebar-save:active { transform: scale(0.95); opacity: 0.9; }
.ebar-save[disabled] { background: #C7D2FE; box-shadow: none; }

/* ===== 安全区 ===== */
.safe-bottom { padding-bottom: calc(calc(1.866666666666667vw) + env(safe-area-inset-bottom)); }
/* 文章列表 — 国家级标准 v2 */
.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* 头部 */
.list-header {
  padding: 0 0 calc(1.0666666666666667vw);
}
.search-bar { margin-bottom: calc(2.666666666666667vw); }
.search-input {
  display: flex; align-items: center;
  background: #F3F4F6; border-radius: calc(5.866666666666666vw);
  padding: 0 calc(3.733333333333334vw); height: calc(10.666666666666668vw);
  transition: background 0.2s, box-shadow 0.2s;
}
.search-input:focus-within {
  background: #fff;
  box-shadow: 0 2px 16px rgba(79,110,247,0.15);
}
.search-icon { font-size: calc(4.266666666666667vw); margin-right: calc(1.6vw); color: #9CA3AF; }
.search-field { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-clear { font-size: calc(4.266666666666667vw); color: #9CA3AF; padding: calc(1.6vw); border-radius: 50%; }
.search-clear:active { color: #DC2626; background: #FEE2E2; }

.cate-bar {
  white-space: nowrap; margin-bottom: calc(2.666666666666667vw);
  padding: calc(0.26666666666666666vw) 0;
}
.cate-item {
  display: inline-block; padding: calc(1.866666666666667vw) calc(3.733333333333334vw); margin-right: calc(1.866666666666667vw);
  border-radius: calc(3.2vw); font-size: calc(3.4666666666666663vw); color: #6B7280;
  background: #F3F4F6; font-weight: 600;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.cate-item.active {
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff;
  box-shadow: 0 4px 16px rgba(79,110,247,0.3);
  transform: scale(1.03);
}

/* 骨架屏 */
.skeleton-list { padding-top: calc(2.1333333333333333vw); }
.sk-card {
  display: flex; gap: calc(2.666666666666667vw);
  padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw);
  background: #fff; border-radius: calc(2.933333333333333vw);
  animation: skPulse 1.5s ease-in-out infinite;
  opacity: 0;
  animation: skFadeIn 0.3s ease both, skPulse 1.5s ease-in-out 0.3s infinite;
}
@keyframes skFadeIn {
  from { opacity: 0; transform: translateY(calc(2.1333333333333333vw)); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes skPulse {
  0%, 100% { background: #F9FAFB; }
  50% { background: #F3F4F6; }
}
.sk-cover {
  width: calc(24vw); height: calc(24vw); border-radius: calc(2.1333333333333333vw);
  background: #E5E7EB; flex-shrink: 0;
}
.sk-body { flex: 1; display: flex; flex-direction: column; gap: calc(1.6vw); padding-top: calc(1.0666666666666667vw); }
.sk-line {
  height: calc(2.666666666666667vw); border-radius: calc(0.8vw);
  background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 50%, #E5E7EB 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s ease-in-out infinite;
}
.sk-line.w80 { width: 80%; }
.sk-line.w60 { width: 60%; }
.sk-line.w40 { width: 40%; }
.sk-line.w30 { width: 30%; }
.sk-short { height: calc(2.1333333333333333vw); margin-top: calc(1.0666666666666667vw); }
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* 文章卡片 */
.article-card {
  display: flex; gap: calc(2.666666666666667vw);
  padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw);
  background: #fff; border-radius: calc(2.933333333333333vw);
  box-shadow: 0 1px 8px rgba(0,0,0,0.04);
  transition: transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1),
              box-shadow 0.18s ease;
}
.article-card:active {
  transform: scale(0.975);
  box-shadow: 0 4px 20px rgba(0,0,0,0.1);
}
.cover-wrap {
  width: calc(24vw); height: calc(24vw); border-radius: calc(2.1333333333333333vw);
  overflow: hidden; flex-shrink: 0;
}
.cover-img { width: 100%; height: 100%; display: block; }
.cover-placeholder {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(6.933333333333333vw);
}
.cover-grad-0 { background: linear-gradient(135deg, #DBEAFE, #BFDBFE); }
.cover-grad-1 { background: linear-gradient(135deg, #FEF3C7, #FDE68A); }
.cover-grad-2 { background: linear-gradient(135deg, #D1FAE5, #A7F3D0); }
.cover-grad-3 { background: linear-gradient(135deg, #EDE9FE, #DDD6FE); }
.cover-grad-4 { background: linear-gradient(135deg, #FCE7F3, #FBCFE8); }

.article-body {
  flex: 1; min-width: 0;
  display: flex; flex-direction: column;
  gap: calc(1.0666666666666667vw);
}
.article-title {
  font-size: calc(4vw); font-weight: 700; color: #111827;
  line-height: 1.4;
}
.article-summary {
  font-size: calc(3.2vw); color: #9CA3AF;
  line-height: 1.5;
}
.article-tags { display: flex; gap: calc(1.0666666666666667vw); flex-wrap: wrap; }
.article-tags .tag { padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); font-size: calc(2.666666666666667vw); font-weight: 600; }
.article-tags .tag-primary { background: #E0E7FF; color: #4338CA; }
.article-tags .tag-warning { background: #FEF3C7; color: #B45309; }
.article-tags .tag-danger { background: #FEE2E2; color: #DC2626; }

.article-foot {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: auto;
}
.foot-author { font-size: calc(2.933333333333333vw); color: #B0B7C3; }
.foot-stats { display: flex; gap: calc(2.1333333333333333vw); }
.stat { font-size: calc(2.933333333333333vw); color: #B0B7C3; }

.loadmore-tip {
  text-align: center; padding: calc(3.2vw) 0;
  font-size: calc(3.2vw); color: #C4C8D0;
}

/* 空状态 */
.empty-state {
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: calc(13.333333333333334vw) calc(6.4vw) calc(8vw);
}
.empty-icon { font-size: calc(12.8vw); margin-bottom: calc(2.666666666666667vw); }
.empty-title { font-size: calc(4.533333333333333vw); font-weight: 800; color: #111827; margin-bottom: calc(1.3333333333333335vw); }
.empty-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; text-align: center; margin-bottom: calc(4.266666666666667vw); line-height: 1.6; }
.empty-btn {
  padding: calc(2.4vw) calc(6.4vw); border-radius: calc(5.866666666666666vw);
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(3.733333333333334vw); font-weight: 700;
  box-shadow: 0 6px 20px rgba(79,110,247,0.35);
}
.empty-btn:active { opacity: 0.85; transform: scale(0.96); }

/* FAB */
.fab {
  position: fixed; bottom: calc(24vw); right: calc(4.8vw);
  width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(6.4vw); font-weight: 300;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 32px rgba(79,110,247,0.45);
  z-index: 1000;
}
.fab:active { transform: scale(0.88); }
/* 图片加载失败占位 */
.cover-fail {
  width: 100%; height: 100%;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: #F3F4F6; color: #9CA3AF; font-size: calc(3.2vw); line-height: 1.6; text-align: center;
}

/* 大赛详情 — 国家级竞赛平台 */
.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* Hero */
.hero { position: relative; margin: -calc(2.666666666666667vw) -calc(2.666666666666667vw) 0; }
.hero-img { width: 100%; height: calc(64vw); display: block; }
.hero-bg { width: 100%; height: calc(64vw); background: linear-gradient(160deg, #0F172A 0%, #1E3A5F 25%, #3730A3 55%, #4F6EF7 80%, #7C3AED 100%); }
.hero-mask { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.15) 50%, transparent 100%); }
.hero-content { position: absolute; bottom: 0; left: 0; right: 0; padding: calc(5.866666666666666vw) calc(4.8vw); }
.hero-status { display: flex; align-items: center; margin-bottom: calc(2.1333333333333333vw); }
.status-dot { width: calc(1.866666666666667vw); height: calc(1.866666666666667vw); border-radius: 50%; margin-right: calc(1.3333333333333335vw); box-shadow: 0 0 calc(2.1333333333333333vw) currentColor; }
.hero-status text { font-size: calc(3.4666666666666663vw); color: rgba(255,255,255,0.9); font-weight: 600; }
.hero-name { font-size: calc(6.4vw); font-weight: 900; color: #fff; line-height: 1.2; margin-bottom: calc(1.6vw); text-shadow: 0 2px 16px rgba(0,0,0,0.4); }
.hero-works { font-size: calc(3.4666666666666663vw); color: rgba(255,255,255,0.7); font-weight: 500; }

/* Countdown bar */
.countdown-bar {
  margin: calc(2.666666666666667vw) calc(2.666666666666667vw) 0; padding: calc(2.666666666666667vw) calc(3.733333333333334vw);
  background: linear-gradient(135deg, #EFF6FF, #F0F4FF);
  border-radius: calc(2.666666666666667vw); display: flex; align-items: center;
  gap: calc(1.6vw); border: calc(0.13333333333333333vw) solid #DBE4FF;
}
.cd-urgent {
  background: linear-gradient(135deg, #FFF1F0, #FFF7ED);
  border-color: #FFD6D0;
}
.cd-icon { font-size: calc(4vw); }
.cd-text { font-size: calc(3.733333333333334vw); font-weight: 700; color: #4F6EF7; }
.cd-urgent .cd-text { color: #FF453A; }

/* Card */
.card { background: #fff; border-radius: calc(3.733333333333334vw); padding: calc(4.266666666666667vw); margin-bottom: calc(3.2vw); box-shadow: 0 2px 20px rgba(0,0,0,0.06); }

/* Section title */
.section-title { font-size: calc(4.533333333333333vw); font-weight: 800; color: #111827; margin-bottom: calc(3.733333333333334vw); display: flex; align-items: center; }
.section-title::before { content: ''; width: calc(1.0666666666666667vw); height: calc(4vw); background: linear-gradient(180deg, #4F6EF7, #7C3AED); border-radius: calc(0.5333333333333333vw); margin-right: calc(1.866666666666667vw); }

/* Info list */
.info-list { display: flex; flex-direction: column; gap: calc(2.1333333333333333vw); }
.info-item {
  display: flex; flex-direction: column;
  padding: calc(3.2vw) calc(3.733333333333334vw);
  background: #F8FAFC; border-radius: calc(2.1333333333333333vw);
  border-left: calc(0.8vw) solid #E0E7FF;
}
.info-label { font-size: calc(3.2vw); color: #6B7280; font-weight: 500; margin-bottom: calc(1.0666666666666667vw); letter-spacing: calc(0.13333333333333333vw); }
.info-value { font-size: calc(4vw); color: #111827; font-weight: 700; line-height: 1.4; word-break: break-all; }

/* Entry grid */
.entry-grid { display: flex; gap: calc(2.1333333333333333vw); }
.entry-item { flex: 1; text-align: center; padding: calc(4.266666666666667vw) calc(2.1333333333333333vw); border-radius: calc(2.666666666666667vw); background: #F3F4F6; transition: transform 0.15s; }
.entry-item:active { transform: scale(0.95); }
.entry-card { }
.entry-icon { font-size: calc(5.866666666666666vw); margin-bottom: calc(1.6vw); display: block; }
.ei-1 { }
.ei-2 { }
.ei-3 { }
.ei-4 { }

/* Reg status */
.reg-status-card { border: 2px solid #E5E7EB; }
.reg-status-row { display: flex; align-items: center; justify-content: space-between; padding: calc(1.866666666666667vw) 0; }
.reg-status-badge { padding: calc(1.3333333333333335vw) calc(3.733333333333334vw); border-radius: calc(1333.2vw); font-size: calc(3.4666666666666663vw); font-weight: 700; color: #fff; }
.reg-status-time { font-size: calc(3.4666666666666663vw); color: #6B7280; font-weight: 500; }

/* Rich text */
.rich-text { font-size: calc(4vw); color: #374151; line-height: 1.9; white-space: pre-wrap; word-break: break-all; }

/* Winners */
.winners-list { display: flex; gap: calc(2.1333333333333333vw); overflow-x: auto; padding: calc(1.0666666666666667vw) 0 calc(2.1333333333333333vw); }
.winner-row { display: flex; align-items: center; gap: calc(2.4vw); flex-shrink: 0; min-width: calc(40vw); padding: calc(2.666666666666667vw); background: #F9FAFB; border-radius: calc(2.666666666666667vw); border: 1px solid #E5E7EB; }
.wr-medal { width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: calc(5.333333333333334vw); color: #fff; font-weight: 900; flex-shrink: 0; box-shadow: 0 4px 16px rgba(0,0,0,0.15); }
.wr-info { flex: 1; min-width: 0; }
.wr-title { font-size: calc(3.733333333333334vw); font-weight: 700; color: #111827; margin-bottom: calc(0.8vw); }
.wr-author { font-size: calc(3.2vw); color: #6B7280; }
.wr-right { text-align: center; flex-shrink: 0; }
.wr-score { font-size: calc(4.8vw); font-weight: 900; color: #D97706; }
.wr-award { font-size: calc(2.933333333333333vw); color: #6B7280; margin-top: calc(0.5333333333333333vw); }

/* Admin tools */
.admin-card { margin-top: calc(3.2vw); }

/* Admin group */
.admin-group { margin-bottom: calc(3.2vw); }
.admin-group:last-child { margin-bottom: 0; }
.admin-group-title {
  font-size: calc(3.2vw); color: #9CA3AF; font-weight: 600;
  letter-spacing: calc(0.26666666666666666vw); margin-bottom: calc(2.1333333333333333vw); padding-left: calc(0.5333333333333333vw);
}
.admin-row { display: flex; gap: calc(1.6vw); flex-wrap: wrap; }

/* Admin buttons */
.admin-btn {
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  padding: calc(2.666666666666667vw) calc(3.733333333333334vw); border-radius: calc(2.666666666666667vw);
  font-size: calc(3.733333333333334vw); font-weight: 600;
  background: #F3F4F6; color: #374151;
  border: calc(0.26666666666666666vw) solid transparent;
  transition: all 0.15s;
}
.admin-btn:active { background: #E5E7EB; transform: scale(0.96); }
.admin-btn-primary { background: #EEF2FF; color: #4F6EF7; border-color: #C7D2FE; }
.admin-btn-primary:active { background: #E0E7FF; }
.admin-btn-warn { background: #FFF7ED; color: #EA580C; border-color: #FED7AA; }
.admin-btn-warn:active { background: #FFEDD5; }
.admin-btn-danger { background: #FEF2F2; color: #DC2626; border-color: #FECACA; }
.admin-btn-danger:active { background: #FEE2E2; }
.ab-icon { font-size: calc(4.266666666666667vw); line-height: 1; }
.ab-text { white-space: nowrap; }

/* Bottom bar */
.bottom-pad { height: calc(18.666666666666668vw); }

/* Tags */
.tag { display: inline-flex; align-items: center; padding: calc(0.8vw) calc(2.4vw); border-radius: calc(1333.2vw); font-size: calc(3.2vw); font-weight: 700; }
.tag-primary { background: #E0E7FF; color: #3730A3; }
.tag-warning { background: #FEF3C7; color: #92400E; }
.tag-success { background: #D1FAE5; color: #065F46; }
.tag-gray { background: #E5E7EB; color: #374151; }

/* ===== 进度时间轴 ===== */
.tl-card { padding: calc(3.733333333333334vw) calc(2.666666666666667vw); margin-bottom: calc(2.666666666666667vw); }
.tl-track { display:flex; align-items:flex-start; justify-content:center; }
.tl-node { display:flex; flex-direction:column; align-items:center; width:calc(13.333333333333334vw); }
.tl-dot {
  width: calc(3.733333333333334vw); height: calc(3.733333333333334vw); border-radius:50%;
  background: #E5E7EB; border: calc(0.4vw) solid #D1D5DB;
  transition: all 0.4s cubic-bezier(0.34,1.56,0.64,1);
  position:relative; z-index:1;
}
.tl-node.active .tl-dot {
  background: #4F6EF7; border-color: #4F6EF7;
  box-shadow: 0 0 0 calc(1.0666666666666667vw) rgba(79,110,247,0.15);
  animation: tlPulse 2s ease-in-out infinite;
}
.tl-node.done .tl-dot { background: #34c759; border-color: #34c759; }
@keyframes tlPulse {
  0%,100% { box-shadow: 0 0 0 calc(1.0666666666666667vw) rgba(79,110,247,0.15); }
  50% { box-shadow: 0 0 0 calc(2.4vw) rgba(79,110,247,0.05); }
}
.tl-label { font-size:calc(2.666666666666667vw); color:#9CA3AF; margin-top:calc(1.0666666666666667vw); font-weight:600; text-align:center; }
.tl-node.active .tl-label { color:#4F6EF7; font-weight:700; }
.tl-node.done .tl-label { color:#34c759; }
.tl-line {
  flex:1; height:calc(0.5333333333333333vw); margin-top:calc(1.6vw);
  background: #E5E7EB; min-width:calc(3.2vw);
  transition: background 0.4s;
}
.tl-line.done { background: #34c759; }

/* ===== 评选动态仪表盘 ===== */
.dash-row { display:flex; justify-content:space-around; padding:calc(1.3333333333333335vw) 0 calc(3.2vw); }
.dash-item { text-align:center; flex:1; }
.dash-num { font-size:calc(5.866666666666666vw); font-weight:900; line-height:1.2; }
.dash-num.blue { color:#4F6EF7; }
.dash-num.green { color:#34c759; }
.dash-num.amber { color:#F59E0B; }
.dash-label { font-size:calc(3.2vw); color:#9CA3AF; margin-top:calc(0.8vw); font-weight:500; }
.progress-wrap { margin-top:calc(1.0666666666666667vw); }
.progress-label { display:flex; justify-content:space-between; font-size:calc(3.4666666666666663vw); color:#6B7280; margin-bottom:calc(1.3333333333333335vw); font-weight:500; }
.progress-bar { height:calc(1.6vw); background:#EEF1F6; border-radius:calc(0.8vw); overflow:hidden; }
.progress-fill {
  height:100%; border-radius:calc(0.8vw);
  background:linear-gradient(90deg,#34c759,#4F6EF7);
  transition:width 0.5s cubic-bezier(0.16,1,0.3,1);
}
.status-indicator { display:flex; align-items:center; margin-top:calc(2.666666666666667vw); font-size:calc(3.4666666666666663vw); color:#6B7280; gap:calc(0.8vw); }

/* ===== 入口提示 ===== */
.entry-hint {
  margin-top:calc(2.1333333333333333vw); padding:calc(2.1333333333333333vw) calc(2.666666666666667vw);
  background:#FFF7ED; border-radius:calc(1.866666666666667vw);
  font-size:calc(3.4666666666666663vw); color:#F59E0B; text-align:center; font-weight:500;
}

/* ===== 获奖名单行 ===== */
.winners-list { padding-top:calc(1.0666666666666667vw); }
.winner-row {
  display:flex; align-items:center; gap:calc(2.1333333333333333vw);
  padding:calc(2.4vw) 0; border-bottom:calc(0.13333333333333333vw) solid #F3F4F6;
  transition:background 0.12s;
}
.winner-row:last-child { border-bottom:none; }
.winner-row:active { background:#F9FAFB; }
.wr-medal { font-size:calc(5.866666666666666vw); width:calc(8.533333333333333vw); text-align:center; flex-shrink:0; }
.wr-info { min-width:0; }
.wr-title { font-size:calc(3.733333333333334vw); font-weight:700; color:#111827; }
.wr-author { font-size:calc(3.2vw); color:#9CA3AF; margin-top:calc(0.5333333333333333vw); }
.wr-right { text-align:right; flex-shrink:0; }
.wr-award {
  font-size:calc(2.933333333333333vw); color:#FF9F0A; font-weight:700;
  padding:calc(0.5333333333333333vw) calc(1.866666666666667vw); background:#FFFBEB; border-radius:calc(1.3333333333333335vw); margin-bottom:calc(0.5333333333333333vw);
}
.wr-score { font-size:calc(3.733333333333334vw); font-weight:900; color:#4F6EF7; }
/* 大赛编辑 — 国家级标准 v2 */
.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* 表单卡片 */
.form-card {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw); margin-bottom: calc(2.666666666666667vw);
  box-shadow: 0 2px 16px rgba(0,0,0,0.05);
}
.fc-head {
  display: flex; align-items: center; gap: calc(1.6vw);
  margin-bottom: calc(3.2vw); padding-bottom: calc(2.4vw);
  border-bottom: calc(0.13333333333333333vw) solid #F3F4F6;
}
.fc-icon { font-size: calc(4.266666666666667vw); }
.fc-title { font-size: calc(4.266666666666667vw); font-weight: 800; color: #111827; }
.fc-optional {
  font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 500;
  margin-left: calc(1.0666666666666667vw);
}

/* 封面 */
.cover-upload {
  width: 100%; height: calc(42.66666666666667vw); border-radius: calc(2.666666666666667vw);
  background: #F8F9FC; border: calc(0.26666666666666666vw) dashed #D5D8E0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  transition: border-color 0.2s, background 0.2s;
}
.cover-upload:active { border-color: #4F6EF7; background: #EEF1FE; }
.cu-icon { font-size: calc(7.466666666666668vw); margin-bottom: calc(1.6vw); }
.cu-text { font-size: calc(3.733333333333334vw); color: #4B5563; font-weight: 600; margin-bottom: calc(0.8vw); }
.cu-tip { font-size: calc(2.933333333333333vw); color: #B0B7C3; }
.cover-zone {
  position: relative; width: 100%; height: calc(42.66666666666667vw);
  border-radius: calc(2.666666666666667vw); overflow: hidden;
}
.cover-preview { width: 100%; height: 100%; display: block; }
.cover-change {
  position: absolute; bottom: calc(2.1333333333333333vw); left: 50%; transform: translateX(-50%);
  padding: calc(1.3333333333333335vw) calc(3.733333333333334vw); background: rgba(0,0,0,0.55);
  color: #fff; font-size: calc(3.2vw); border-radius: calc(4.266666666666667vw);
  backdrop-filter: blur(8px);
}
.cover-remove {
  position: absolute; top: calc(1.6vw); right: calc(1.6vw);
  width: calc(6.4vw); height: calc(6.4vw); border-radius: 50%;
  background: rgba(0,0,0,0.45); color: #fff;
  font-size: calc(3.2vw); display: flex; align-items: center; justify-content: center;
  backdrop-filter: blur(8px);
}

/* 表单项 */
.fi {
  margin-bottom: calc(3.2vw);
}
.fi-last { margin-bottom: 0; }
.fi-label {
  font-size: calc(3.733333333333334vw); font-weight: 700; color: #374151;
  margin-bottom: calc(1.6vw);
}
.fi-req { color: #EF4444; font-weight: 800; }
.fi-input {
  width: 100%; height: calc(11.733333333333333vw); padding: 0 calc(3.2vw);
  background: #F3F4F6; border-radius: calc(2.1333333333333333vw);
  font-size: calc(3.733333333333334vw); color: #111827;
  box-sizing: border-box; border: calc(0.26666666666666666vw) solid transparent;
  transition: all 0.2s;
}
.fi-input:focus { border-color: #4F6EF7; background: #fff; }
.fi-textarea {
  width: 100%; min-height: calc(24vw); padding: calc(2.666666666666667vw) calc(3.2vw);
  background: #F3F4F6; border-radius: calc(2.1333333333333333vw);
  font-size: calc(3.733333333333334vw); color: #111827; line-height: 1.8;
  box-sizing: border-box; border: calc(0.26666666666666666vw) solid transparent;
  transition: all 0.2s;
}
.fi-textarea:focus { border-color: #4F6EF7; background: #fff; }

/* Picker */
.fi-picker {
  width: 100%; height: calc(11.733333333333333vw); padding: 0 calc(3.2vw);
  background: #F3F4F6; border-radius: calc(2.1333333333333333vw);
  display: flex; align-items: center; justify-content: space-between;
  font-size: calc(3.733333333333334vw); color: #111827; font-weight: 500;
  box-sizing: border-box;
}
.fi-arrow { font-size: calc(4.266666666666667vw); color: #B0B7C3; }
.fi-placeholder { color: #B0B7C3; }

/* 双列 */
.fi-row { display: flex; gap: calc(2.1333333333333333vw); margin-bottom: calc(3.2vw); }
.fi-row.fi-last { margin-bottom: 0; }
.fi-half { flex: 1; min-width: 0; }
.fi-half .fi-label { white-space: nowrap; }

/* 类别标签 */
.cat-list { display: flex; flex-wrap: wrap; gap: calc(1.6vw); margin-bottom: calc(2.4vw); }
.cat-tag {
  display: inline-flex; align-items: center; gap: calc(0.8vw);
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw); border-radius: calc(2.933333333333333vw);
  background: #EEF1FE; color: #4F6EF7;
  font-size: calc(3.2vw); font-weight: 600;
}
.cat-x {
  font-size: calc(2.666666666666667vw); color: #8B9DC9;
  padding: calc(0.26666666666666666vw) calc(0.8vw); border-radius: 50%;
}
.cat-x:active { background: rgba(79,110,247,0.15); }
.cat-empty {
  font-size: calc(3.2vw); color: #B0B7C3;
  padding: calc(2.1333333333333333vw) 0; margin-bottom: calc(2.1333333333333333vw);
  text-align: center;
}
.cat-add-row { display: flex; gap: calc(1.6vw); align-items: center; }
.cat-input { flex: 1; }
.cat-btn {
  flex-shrink: 0; padding: 0 calc(4.266666666666667vw); height: calc(11.733333333333333vw);
  border-radius: calc(2.1333333333333333vw); background: #4F6EF7; color: #fff;
  font-size: calc(3.733333333333334vw); font-weight: 700;
  display: flex; align-items: center;
  white-space: nowrap;
  box-shadow: 0 4px 14px rgba(79,110,247,0.3);
}
.cat-btn:active { opacity: 0.85; }

/* 提交按钮 */
.submit-wrap { padding: calc(3.733333333333334vw) 0; }
.submit-btn {
  width: 100%; height: calc(13.333333333333334vw); border-radius: calc(6.666666666666667vw);
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(4.533333333333333vw); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  border: none;
  box-shadow: 0 8px 28px rgba(79,110,247,0.4);
  transition: all 0.2s;
}
.submit-btn::after { border: none; }
.submit-btn:active { opacity: 0.85; transform: scale(0.97); }
.submit-btn[disabled] { background: #D1D5DB; color: #9CA3AF; box-shadow: none; }

/* 大赛列表 — 国家级竞赛平台 v3 */
.page-wrap { padding-bottom: calc(18.666666666666668vw); }

.title-bar { padding: calc(2.666666666666667vw) 0 calc(2.1333333333333333vw); }
.title-main { font-size: calc(5.6000000000000005vw); font-weight: 900; color: #111827; }
.title-sub { font-size: calc(3.4666666666666663vw); color: #9CA3AF; margin-top: calc(0.8vw); font-weight: 500; }

/* 状态筛选 */
.status-filter {
  white-space: nowrap; margin-bottom: calc(3.2vw); padding: calc(0.5333333333333333vw) 0;
}
.sf-item {
  display: inline-block; padding: calc(1.866666666666667vw) calc(3.733333333333334vw); margin-right: calc(1.6vw);
  border-radius: calc(3.2vw); font-size: calc(3.4666666666666663vw); color: #6B7280;
  background: #F3F4F6; font-weight: 600;
  transition: all 0.2s cubic-bezier(0.34,1.56,0.64,1);
}
.sf-item.active {
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; box-shadow: 0 4px 14px rgba(79,110,247,0.35);
  transform: scale(1.04);
}
.sf-item:active { transform: scale(0.95); }

/* 骨架屏 */
.comp-skeleton { padding-top: calc(1.0666666666666667vw); }
.cs-card {
  margin-bottom: calc(2.666666666666667vw); border-radius: calc(2.933333333333333vw); overflow: hidden;
  background: #fff; box-shadow: 0 1px 8px rgba(0,0,0,0.04);
  animation: skFadeIn 0.3s ease both, skPulse 1.5s ease-in-out 0.3s infinite;
}
@keyframes skFadeIn {
  from { opacity:0; transform: translateY(calc(2.1333333333333333vw)); }
  to { opacity:1; transform: translateY(0); }
}
@keyframes skPulse {
  0%,100% { background:#F9FAFB; }
  50% { background:#F3F4F6; }
}
.cs-cover {
  width:100%; height:calc(32vw);
  background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 50%, #E5E7EB 75%);
  background-size:200% 100%;
  animation: shimmer 1.5s ease-in-out infinite;
}
.cs-body { padding:calc(3.2vw); display:flex; flex-direction:column; gap:calc(1.6vw); }
.cs-line {
  height:calc(2.4vw); border-radius:calc(0.8vw);
  background: linear-gradient(90deg, #E5E7EB 25%, #F3F4F6 50%, #E5E7EB 75%);
  background-size:200% 100%;
  animation: shimmer 1.5s ease-in-out infinite;
}
.cs-line.w70 { width:70%; }
.cs-line.w50 { width:50%; }
.cs-line.w30 { width:30%; }
@keyframes shimmer {
  0% { background-position:-200% 0; }
  100% { background-position:200% 0; }
}

/* 大赛卡片 */
.comp-card {
  margin-bottom:calc(2.666666666666667vw); border-radius:calc(2.933333333333333vw); overflow:hidden;
  background:#fff; box-shadow: 0 2px 16px rgba(0,0,0,0.06);
  transition: transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.18s;
}
.comp-card:active {
  transform: scale(0.975);
  box-shadow: 0 4px 24px rgba(0,0,0,0.12);
}
.comp-cover {
  position:relative; width:100%; height:calc(34.66666666666667vw); overflow:hidden;
}
.cover-img { width:100%; height:100%; display:block; }
.cover-mask {
  position:absolute; inset:0;
  background: linear-gradient(to top, rgba(0,0,0,0.55) 0%, transparent 55%);
}
.cover-status {
  position:absolute; top:calc(2.4vw); right:calc(2.4vw);
  display:flex; align-items:center;
  padding:calc(1.0666666666666667vw) calc(2.666666666666667vw);
  background:rgba(255,255,255,0.95);
  border-radius:calc(2.933333333333333vw);
  font-size:calc(2.933333333333333vw); color:#111827; font-weight:700;
  backdrop-filter: blur(10px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
.cover-status .dot {
  width:calc(1.3333333333333335vw); height:calc(1.3333333333333335vw); border-radius:50%; margin-right:calc(1.0666666666666667vw);
}
.comp-cover-empty {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:calc(5.333333333333334vw);
  background: linear-gradient(135deg, #6366F1, #8B5CF6);
}
.cover-icon { font-size:calc(8.533333333333333vw); }

.comp-body { padding:calc(3.2vw) calc(3.733333333333334vw); }
.comp-name {
  font-size:calc(4.266666666666667vw); font-weight:800; color:#111827;
  line-height:1.35; margin-bottom:calc(1.0666666666666667vw);
}
.comp-desc {
  font-size:calc(3.2vw); color:#9CA3AF;
  line-height:1.55; margin-bottom:calc(2.1333333333333333vw);
}
.comp-meta { display:flex; align-items:center; justify-content:space-between; }
.comp-meta-left { flex:1; }
.meta-time { font-size:calc(2.933333333333333vw); color:#B0B7C3; font-weight:500; }
.comp-stats { display:flex; gap:calc(1.6vw); align-items:baseline; }
.comp-works {
  display:flex; align-items:baseline; gap:calc(0.5333333333333333vw);
  padding:calc(1.0666666666666667vw) calc(2.4vw); background:#EEF2FF; border-radius:calc(1.6vw);
}
.works-num { font-size:calc(4.266666666666667vw); font-weight:900; color:#4F6EF7; }
.works-label { font-size:calc(2.933333333333333vw); color:#8B9DC9; font-weight:500; }

.load-tip {
  text-align:center; padding:calc(3.2vw) 0;
  font-size:calc(3.2vw); color:#C4C8D0;
}

/* 空状态 */
.empty-state {
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  padding:calc(10.666666666666668vw) calc(6.4vw);
}
.empty-icon { font-size:calc(12.8vw); margin-bottom:calc(2.666666666666667vw); }
.empty-title { font-size:calc(4.533333333333333vw); font-weight:800; color:#111827; margin-bottom:calc(1.3333333333333335vw); }
.empty-desc { font-size:calc(3.4666666666666663vw); color:#9CA3AF; text-align:center; margin-bottom:calc(3.733333333333334vw); line-height:1.6; }
.empty-btn {
  padding:calc(2.1333333333333333vw) calc(6.4vw); border-radius:calc(5.866666666666666vw);
  background:linear-gradient(135deg, #4F6EF7, #7C3AED);
  color:#fff; font-size:calc(3.733333333333334vw); font-weight:700;
  box-shadow:0 6px 20px rgba(79,110,247,0.35);
}
.empty-btn:active { opacity:0.85; transform:scale(0.96); }

/* FAB */
.fab {
  position:fixed; bottom:calc(24vw); right:calc(4.8vw);
  width:calc(14.399999999999999vw); height:calc(14.399999999999999vw); border-radius:50%;
  background:linear-gradient(135deg, #4F6EF7, #7C3AED);
  color:#fff; font-size:calc(6.4vw); font-weight:300;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 8px 32px rgba(79,110,247,0.45);
  z-index:1000;
}
.fab:active { transform:scale(0.88); }
/* pages/competition/registration - 报名管理 */
.page-wrap { padding: calc(3.2vw) calc(3.2vw) calc(8vw); }

/* 统计卡片 */
.stat-card { padding: calc(3.733333333333334vw) calc(2.1333333333333333vw); margin-bottom: calc(2.1333333333333333vw); }
.stat-grid { display: flex; justify-content: space-around; }
.stat-item { text-align: center; flex: 1; }
.stat-num { font-size: calc(5.866666666666666vw); font-weight: 800; color: #4F6EF7; line-height: 1.1; }
.stat-label { font-size: calc(2.933333333333333vw); color: #6B7280; margin-top: calc(1.3333333333333335vw); }

/* 筛选 */
.filter-bar { padding: calc(1.0666666666666667vw) calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }
.filter-row { display: flex; align-items: center; justify-content: space-between; padding: calc(2.1333333333333333vw) 0; }
.filter-label { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.filter-value { font-size: calc(3.733333333333334vw); color: #4F6EF7; font-weight: 600; }
.picker-arrow { font-size: calc(3.733333333333334vw); color: #9CA3AF; }

/* 搜索 */
.search-bar { display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(1.6vw) calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }
.search-input { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-ph { color: #9CA3AF; }
.search-clear { font-size: calc(4.266666666666667vw); color: #9CA3AF; padding: calc(1.0666666666666667vw) 0 calc(1.0666666666666667vw) calc(2.1333333333333333vw); }

/* 操作栏 */
.action-bar { display: flex; gap: calc(2.1333333333333333vw); padding: calc(2.666666666666667vw) calc(3.2vw); margin-bottom: calc(3.2vw); }
.action-btn {
  flex: 1; display: flex; align-items: center; justify-content: center;
  gap: calc(1.0666666666666667vw); padding: calc(2.666666666666667vw); border-radius: calc(2.1333333333333333vw); font-size: calc(3.733333333333334vw); font-weight: 600;
}
.action-lottery { background: linear-gradient(135deg, #FFF7ED, #FFEDD5); color: #EA580C; }
.action-batch { background: linear-gradient(135deg, #F0FDF4, #DCFCE7); color: #16A34A; }
.action-export { background: linear-gradient(135deg, #EEF1FE, #E0E7FF); color: #4F6EF7; }
.action-btn:active { opacity: 0.85; transform: scale(0.97); }
.action-icon { font-size: calc(4.266666666666667vw); }

/* 列表 */
.reg-list { display: flex; flex-direction: column; gap: calc(2.1333333333333333vw); }
.reg-item { display: flex; align-items: flex-start; padding: calc(3.2vw); }
.reg-item.reg-selected { border: calc(0.4vw) solid #4F6EF7; background: #F5F7FF; }
.reg-check { margin-right: calc(2.1333333333333333vw); padding-top: calc(1.0666666666666667vw); flex-shrink: 0; }
.check-box {
  width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); border-radius: 50%;
  border: calc(0.4vw) solid #D1D5DB; display: flex; align-items: center; justify-content: center;
  font-size: calc(3.4666666666666663vw); color: #fff;
}
.check-on { background: #4F6EF7; border-color: #4F6EF7; }
.check-disabled { opacity: 0.35; }
.reg-main { flex: 1; min-width: 0; }
.reg-header { display: flex; align-items: center; justify-content: space-between; }
.reg-user { display: flex; align-items: center; min-width: 0; flex: 1; }
.reg-avatar-placeholder {
  width: calc(10.133333333333333vw); height: calc(10.133333333333333vw); border-radius: 50%; background: #EEF1FE; color: #4F6EF7;
  font-size: calc(4vw); font-weight: 700; display: flex; align-items: center; justify-content: center;
  margin-right: calc(2.666666666666667vw); flex-shrink: 0;
}
.reg-info { min-width: 0; }
.reg-name { font-size: calc(4vw); font-weight: 600; color: #1E2130; }
.reg-student-id { font-size: calc(3.2vw); color: #6B7280; margin-top: calc(0.5333333333333333vw); }
.reg-badge { padding: calc(0.8vw) calc(2.4vw); border-radius: calc(133.20000000000002vw); font-size: calc(2.933333333333333vw); font-weight: 600; flex-shrink: 0; }
.reg-meta {
  display: flex; flex-wrap: wrap; gap: calc(1.6vw) calc(3.733333333333334vw);
  margin-top: calc(2.666666666666667vw); padding-top: calc(2.666666666666667vw); border-top: calc(0.13333333333333333vw) solid #F0F1F5;
}
.meta-item { display: flex; align-items: center; gap: calc(1.0666666666666667vw); }
.meta-label { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.meta-value { font-size: calc(3.2vw); color: #374151; font-weight: 500; }

/* 审核按钮 */
.reg-actions { display: flex; gap: calc(2.1333333333333333vw); margin-top: calc(2.666666666666667vw); }
.reg-btn { flex: 1; text-align: center; padding: calc(2.1333333333333333vw) 0; border-radius: calc(1.6vw); font-size: calc(3.733333333333334vw); font-weight: 600; }
.reg-btn-pass { background: #ECFDF5; color: #059669; border: calc(0.13333333333333333vw) solid #A7F3D0; }
.reg-btn-reject { background: #FEF2F2; color: #EF4444; border: calc(0.13333333333333333vw) solid #FECACA; }
.reg-btn:active { opacity: 0.85; }

/* 加载更多 */
.load-more { text-align: center; padding: calc(3.2vw); font-size: calc(3.2vw); color: #9CA3AF; }

/* 空状态 */
.empty-wrap { text-align: center; padding: calc(16vw) 0; }
.empty-icon { font-size: calc(12.8vw); margin-bottom: calc(2.666666666666667vw); }
.empty-text { font-size: calc(3.733333333333334vw); color: #9CA3AF; }

/* 底部批量操作栏 */
.batch-bar {
  position: fixed; left: calc(3.2vw); right: calc(3.2vw); bottom: calc(3.2vw);
  display: flex; align-items: center; gap: calc(2.1333333333333333vw);
  background: #fff; border-radius: calc(2.666666666666667vw); padding: calc(2.666666666666667vw) calc(3.2vw);
  box-shadow: 0 calc(1.0666666666666667vw) calc(4vw) rgba(0,0,0,0.12); z-index: 100;
}
.batch-info { flex: 1; font-size: calc(3.4666666666666663vw); color: #374151; font-weight: 600; }
.batch-btn { padding: calc(2.1333333333333333vw) calc(4.266666666666667vw); border-radius: calc(1.866666666666667vw); font-size: calc(3.733333333333334vw); font-weight: 600; }
.batch-pass { background: #ECFDF5; color: #059669; }
.batch-reject { background: #FEF2F2; color: #EF4444; }
.batch-cancel { background: #F3F4F6; color: #6B7280; }
.batch-btn:active { opacity: 0.85; }

/* 成员通讯录 v3 — 直观卡片 */
.page-wrap { padding: 0 calc(3.2vw) calc(16vw); }

/* 顶栏 */
.topbar { padding: calc(3.2vw) 0 calc(2.1333333333333333vw); }
.export-btn {
  padding: calc(1.3333333333333335vw) calc(3.2vw); background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; border-radius: calc(3.2vw); font-size: calc(3.2vw); font-weight: 700;
  box-shadow: 0 4px 12px rgba(79,110,247,0.3);
}
.export-btn:active { opacity: 0.8; }

/* 搜索 */
.search-box { display: flex; align-items: center; padding: calc(2.4vw) calc(3.2vw); margin-bottom: calc(1.866666666666667vw); }
.search-box .search-icon { font-size: calc(4vw); color: #9CA3AF; margin-right: calc(1.6vw); }
.search-box .search-input { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-box .search-clear { font-size: calc(4vw); color: #9CA3AF; padding: calc(1.0666666666666667vw); }

/* 筛选标签 */
.filter-label { font-size: calc(3.2vw); color: #9CA3AF; font-weight: 600; padding: calc(0.8vw) 0; }
.filter-row { white-space: nowrap; padding-bottom: calc(2.1333333333333333vw); }
.tag-item {
  display: inline-flex; padding: calc(1.3333333333333335vw) calc(3.2vw); margin-right: calc(1.6vw);
  border-radius: calc(2.666666666666667vw); font-size: calc(3.2vw); font-weight: 600;
  background: #F3F4F6; color: #6B7280;
  transition: all 0.2s;
}
.tag-item.active {
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; box-shadow: 0 4px 12px rgba(79,110,247,0.3);
}

.count-tip { font-size: calc(3.2vw); color: #9CA3AF; padding: calc(0.5333333333333333vw) 0 calc(2.1333333333333333vw); font-weight: 500; }

/* 成员卡片 */
.member-list { margin-top: calc(0.5333333333333333vw); }
.member-card { padding: 0; margin-bottom: calc(2.1333333333333333vw); overflow: hidden; }
.member-main {
  display: flex; align-items: center; padding: calc(3.2vw);
  transition: background 0.12s;
}
.member-main:active { background: #F9FAFB; }
.avatar {
  width: calc(11.733333333333333vw); height: calc(11.733333333333333vw); border-radius: 50%; flex-shrink: 0;
  background: #EEF2FF; border: calc(0.26666666666666666vw) solid #E5E7EB;
}
.member-info { flex: 1; min-width: 0; margin-left: calc(2.666666666666667vw); }
.member-name {
  font-size: calc(4vw); font-weight: 700; color: #111827;
}
.member-sub {
  font-size: calc(3.2vw); color: #6B7280; margin-top: calc(0.8vw);
  display: flex; align-items: center; flex-wrap: wrap; gap: calc(0.5333333333333333vw);
}
.member-sub .sep { color: #D1D5DB; margin: 0 calc(0.5333333333333333vw); }
.member-id { color: #9CA3AF; font-family: monospace; font-size: calc(2.933333333333333vw); }
.expand-icon {
  font-size: calc(4.8vw); color: #9CA3AF;
  width: calc(8vw); height: calc(8vw); display: flex;
  align-items: center; justify-content: center;
  flex-shrink: 0;
}

/* 展开详情 */
.member-expand {
  padding: 0 calc(3.2vw) calc(3.2vw); border-top: calc(0.13333333333333333vw) solid #F3F4F6;
  animation: expandIn 0.25s cubic-bezier(0.16,1,0.3,1);
}
@keyframes expandIn {
  from { opacity: 0; max-height: 0; padding-bottom: 0; }
  to { opacity: 1; max-height: calc(66.66666666666666vw); }
}
.phone-row {
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  padding: calc(2.4vw) calc(2.666666666666667vw); margin-top: calc(2.4vw);
  background: #F0F4FF; border-radius: calc(2.1333333333333333vw);
}
.phone-row:active { background: #DBE4FF; }
.phone-label { font-size: calc(2.933333333333333vw); color: #6B7280; font-weight: 600; }
.phone-num { font-size: calc(3.4666666666666663vw); color: #4F6EF7; font-weight: 700; flex: 1; }
.phone-copy {
  font-size: calc(2.933333333333333vw); color: #fff; background: #4F6EF7;
  padding: calc(0.8vw) calc(2.1333333333333333vw); border-radius: calc(1.866666666666667vw); font-weight: 500;
}
.info-row {
  display: flex; align-items: center; gap: calc(1.6vw);
  padding: calc(1.866666666666667vw) 0; border-bottom: calc(0.13333333333333333vw) solid #F9FAFB;
}
.info-row:last-child { border-bottom: none; }
.info-label {
  font-size: calc(3.2vw); color: #9CA3AF; font-weight: 500;
  width: calc(20vw); flex-shrink: 0; white-space: nowrap;
}
.info-val {
  font-size: calc(3.4666666666666663vw); color: #374151; font-weight: 600;
  flex: 1; min-width: 0; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}

/* 管理员操作 */
.admin-actions {
  display: flex; gap: calc(1.866666666666667vw); padding: 0 calc(3.2vw) calc(2.666666666666667vw);
}
.admin-btn {
  flex: 1; text-align: center; padding: calc(1.866666666666667vw) 0;
  border-radius: calc(2.1333333333333333vw); font-size: calc(3.2vw); font-weight: 700;
  background: #EEF2FF; color: #4F6EF7;
}
.admin-btn:active { opacity: 0.7; }
.btn-disable { background: #FEE2E2; color: #DC2626; }
.btn-enable { background: #D1FAE5; color: #059669; }

/* 标签微调 */
.tag {
  display: inline-flex; align-items: center;
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(1.6vw);
  font-size: calc(2.666666666666667vw); font-weight: 700; flex-shrink: 0;
}

.load-tip { text-align: center; color: #C4C8D0; font-size: calc(3.2vw); padding: calc(3.733333333333334vw) 0; }
/* 首页 — 国家级视觉冲击 v2 */
/* === 开屏动画 === */
.splash-screen {
  position: fixed; inset: 0; z-index: 1000;
  background: linear-gradient(160deg, #0F172A 0%, #1E3A5F 30%, #3730A3 60%, #4F6EF7 100%);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.splash-screen.hide {
  opacity: 0; transform: scale(1.05);
  pointer-events: none;
}
.splash-logo {
  font-size: calc(12.8vw);
  animation: splashBounce 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
@keyframes splashBounce {
  0% { opacity: 0; transform: scale(0.3) translateY(-calc(5.333333333333334vw)); }
  60% { transform: scale(1.1) translateY(calc(1.0666666666666667vw)); }
  100% { opacity: 1; transform: scale(1) translateY(0); }
}
.splash-name {
  font-size: calc(6.4vw); font-weight: 900; color: #fff;
  margin-top: calc(2.1333333333333333vw); letter-spacing: calc(0.5333333333333333vw);
  animation: splashFadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.3s both;
}
.splash-sub {
  font-size: calc(3.4666666666666663vw); color: rgba(255,255,255,0.75);
  margin-top: calc(1.3333333333333335vw); font-weight: 500;
  animation: splashFadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.5s both;
}
@keyframes splashFadeUp {
  from { opacity: 0; transform: translateY(calc(4vw)); }
  to { opacity: 1; transform: translateY(0); }
}
.splash-loader {
  width: calc(26.666666666666668vw); height: calc(0.5333333333333333vw);
  background: rgba(255,255,255,0.2);
  border-radius: calc(0.26666666666666666vw);
  margin-top: calc(5.333333333333334vw); overflow: hidden;
  animation: splashFadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.7s both;
}
.splash-bar {
  height: 100%; width: 40%;
  background: #fff; border-radius: calc(0.26666666666666666vw);
  animation: splashProgress 1.2s cubic-bezier(0.4, 0, 0.2, 1) 0.8s both;
}
@keyframes splashProgress {
  0% { width: 0%; margin-left: 0; }
  50% { width: 60%; margin-left: 20%; }
  100% { width: 40%; margin-left: 55%; }
}



/* ===== Hero 动态天空 ===== */
.hero-sky {
  position: relative;
  margin: -calc(2.666666666666667vw) -calc(2.666666666666667vw) 0;
  overflow: visible;
  min-height: calc(29.333333333333332vw);
  padding-bottom: calc(4.8vw);
  transition: background 1.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.hero-inner {
  position: relative; z-index: 3;
  padding: calc(2.933333333333333vw) calc(3.2vw) calc(1.6vw);
  display: flex; flex-direction: column;
  gap: calc(1.3333333333333335vw);
}

/* 用户信息卡片 */
.hero-card {
  display: flex; align-items: center; gap: calc(2.4vw);
  padding: calc(2.1333333333333333vw) calc(2.1333333333333333vw);
  background: rgba(255,255,255,0.12);
  backdrop-filter: blur(12px);
  border-radius: calc(2.933333333333333vw);
  border: calc(0.13333333333333333vw) solid rgba(255,255,255,0.15);
  animation: cardSlideIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
}
@keyframes cardSlideIn {
  from { opacity: 0; transform: translateY(-calc(2.666666666666667vw)); }
  to { opacity: 1; transform: translateY(0); }
}
.hero-avatar {
  width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%;
  border: calc(0.4vw) solid rgba(255,255,255,0.5);
  flex-shrink: 0;
  box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.hero-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: calc(0.5333333333333333vw); }
.hero-name-row { display: flex; align-items: center; gap: calc(1.3333333333333335vw); flex-wrap: wrap; }
.hero-name {
  font-size: calc(5.066666666666666vw); font-weight: 800; color: #fff;
  line-height: 1.2;
  text-shadow: 0 1px 8px rgba(0,0,0,0.15);
}
.hero-role {
  display: inline-flex; align-items: center;
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(1333.2vw);
  font-size: calc(2.933333333333333vw); font-weight: 700;
  flex-shrink: 0;
}
.hero-greet {
  font-size: calc(3.4666666666666663vw); color: rgba(255,255,255,0.75);
  font-weight: 500;
}
.hero-detail {
  font-size: calc(3.2vw); color: rgba(255,255,255,0.6);
  font-weight: 500;
}
.hero-arrow {
  font-size: calc(5.333333333333334vw); color: rgba(255,255,255,0.5);
  font-weight: 300; flex-shrink: 0;
  padding: 0 calc(1.0666666666666667vw);
}

.warm-tip {
  padding: calc(1.6vw) calc(2.666666666666667vw);
  background: rgba(255,255,255,0.1);
  backdrop-filter: blur(10px);
  border-radius: calc(2.1333333333333333vw);
  font-size: calc(3.2vw); color: rgba(255,255,255,0.85);
  line-height: 1.5;
  animation: warmFadeIn 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.4s both;
}
@keyframes warmFadeIn {
  from { opacity: 0; transform: translateY(calc(1.6vw)); }
  to { opacity: 1; transform: translateY(0); }
}

/* === 光粒子 === */
.particles { position: absolute; inset: 0; z-index: 1; overflow: hidden; }
.pt {
  position: absolute; width: calc(0.5333333333333333vw); height: calc(0.5333333333333333vw);
  border-radius: 50%; background: rgba(255,255,255,0.5);
  animation: particleFloat linear infinite;
}
.pt.p1 { top: 15%; left: 10%; animation-duration: 8s; animation-delay: 0s; width: calc(0.8vw); height: calc(0.8vw); }
.pt.p2 { top: 25%; left: 30%; animation-duration: 10s; animation-delay: 2s; }
.pt.p3 { top: 10%; left: 55%; animation-duration: 7s; animation-delay: 1s; width: calc(0.6666666666666667vw); height: calc(0.6666666666666667vw); }
.pt.p4 { top: 35%; left: 75%; animation-duration: 9s; animation-delay: 3s; }
.pt.p5 { top: 20%; left: 85%; animation-duration: 11s; animation-delay: 0.5s; width: calc(0.4vw); height: calc(0.4vw); }
.pt.p6 { top: 45%; left: 20%; animation-duration: 8.5s; animation-delay: 4s; }
.pt.p7 { top: 50%; left: 60%; animation-duration: 7.5s; animation-delay: 1.5s; width: calc(0.4vw); height: calc(0.4vw); }
.pt.p8 { top: 30%; left: 45%; animation-duration: 9.5s; animation-delay: 2.5s; }
@keyframes particleFloat {
  0% { opacity: 0; transform: translateY(calc(8vw)) translateX(0); }
  20% { opacity: 1; }
  80% { opacity: 0.6; }
  100% { opacity: 0; transform: translateY(-calc(5.333333333333334vw)) translateX(calc(2.666666666666667vw)); }
}

/* === 装饰光斑 === */
.hero-blob {
  position: absolute; border-radius: 50%; z-index: 0;
  filter: blur(calc(5.333333333333334vw));
}
.hero-blob.b1 {
  width: calc(26.666666666666668vw); height: calc(26.666666666666668vw);
  top: -calc(8vw); right: -calc(5.333333333333334vw);
  background: rgba(255,255,255,0.08);
}
.hero-blob.b2 {
  width: calc(18.666666666666668vw); height: calc(18.666666666666668vw);
  bottom: calc(13.333333333333334vw); left: -calc(4vw);
  background: rgba(255,255,255,0.06);
}

/* === 天体 (compact) === */
.celestial { position: absolute; z-index: 2; opacity: 0; transition: opacity 0.8s; }
.celestial.show { opacity: 1; }
.sun {
  width: calc(7.466666666666668vw); height: calc(7.466666666666668vw);
  top: calc(2.933333333333333vw); right: calc(5.866666666666666vw);
  animation: sunFloat 6s ease-in-out infinite;
}
.sun.sunrise { animation: sunRise 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) both, sunFloat 6s ease-in-out 1.5s infinite; }
.sun-core {
  width: calc(7.466666666666668vw); height: calc(7.466666666666668vw); border-radius: 50%;
  background: radial-gradient(circle at 40% 40%, #FFF8DC, #FFD700 40%, #FFA500);
  box-shadow: 0 0 calc(4vw) rgba(255,200,50,0.5), 0 0 calc(8vw) rgba(255,180,30,0.25);
}
@keyframes sunRise {
  from { opacity: 0; transform: translateY(calc(6.666666666666667vw)) scale(0.6); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes sunFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-calc(1.3333333333333335vw)); }
}
.moon {
  width: calc(7.466666666666668vw); height: calc(7.466666666666668vw);
  top: calc(2.933333333333333vw); right: calc(5.866666666666666vw);
  animation: moonFloat 8s ease-in-out infinite;
}
.moon.sunset { animation: moonRise 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) both, moonFloat 8s ease-in-out 1.2s infinite; }
.moon-disc {
  position: relative;
  width: calc(4.266666666666667vw); height: calc(4.266666666666667vw); border-radius: 50%;
  background: transparent;
  box-shadow: calc(1.866666666666667vw) -calc(0.8vw) 0 0 #FEF3C7;
}
.moon-disc::after {
  content: ''; position: absolute;
  top: -calc(2.4vw); left: -calc(2.4vw);
  width: calc(9.066666666666666vw); height: calc(9.066666666666666vw); border-radius: 50%;
  background: radial-gradient(circle at 70% 30%, rgba(255,245,200,0.3), transparent 60%);
  animation: moonGlowPulse 3s ease-in-out infinite;
}
.moon-disc::before {
  content: ''; position: absolute;
  top: -calc(2.666666666666667vw); left: calc(4.266666666666667vw);
  width: calc(0.8vw); height: calc(0.8vw); border-radius: 50%;
  background: #fff;
  box-shadow: 0 0 calc(1.0666666666666667vw) calc(0.4vw) rgba(255,255,255,0.5);
  animation: starTwinkle 2.5s ease-in-out infinite;
}
@keyframes moonRise {
  from { opacity: 0; transform: translateY(calc(5.333333333333334vw)) scale(0.7) rotate(-15deg); }
  to { opacity: 1; transform: translateY(0) scale(1) rotate(0deg); }
}
@keyframes moonFloat {
  0%, 100% { transform: translateY(0) rotate(-2deg); }
  50% { transform: translateY(-calc(1.3333333333333335vw)) rotate(2deg); }
}
@keyframes moonGlowPulse {
  0%, 100% { opacity: 0.5; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.15); }
}
@keyframes starTwinkle {
  0%, 100% { opacity: 0.2; transform: scale(0.6); }
  50% { opacity: 1; transform: scale(1.8); }
}

/* === 星星 === */
.stars-layer { position: absolute; inset: 0; z-index: 1; opacity: 0; transition: opacity 1s; }
.stars-layer.show { opacity: 1; }
.star {
  position: absolute; width: calc(0.6666666666666667vw); height: calc(0.6666666666666667vw);
  border-radius: 50%; background: #fff;
  animation: twinkle 2s ease-in-out infinite;
  animation-delay: var(--td, 0s);
}
.star.s1 { top: 5%; left: 8%; --td: 0s; }
.star.s2 { top: 12%; left: 22%; --td: 0.3s; width: calc(0.4vw); height: calc(0.4vw); }
.star.s3 { top: 4%; left: 42%; --td: 0.7s; }
.star.s4 { top: 10%; left: 62%; --td: 0.2s; width: calc(0.5333333333333333vw); height: calc(0.5333333333333333vw); }
.star.s5 { top: 18%; left: 78%; --td: 0.9s; }
.star.s6 { top: 22%; left: 12%; --td: 1.2s; width: calc(0.4vw); height: calc(0.4vw); }
.star.s7 { top: 28%; left: 50%; --td: 0.5s; }
.star.s8 { top: 6%; left: 88%; --td: 1.5s; width: calc(0.4vw); height: calc(0.4vw); }
@keyframes twinkle {
  0%, 100% { opacity: 0.15; transform: scale(1); }
  50% { opacity: 1; transform: scale(2); }
}

/* === 波浪曲线 === */
.hero-wave {
  position: absolute; bottom: -calc(0.26666666666666666vw); left: 0; right: 0;
  height: calc(7.466666666666668vw); z-index: 4;
  overflow: hidden;
}
.wave-svg {
  width: 100%; height: 100%;
  background: #F0F2F8;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100'%3E%3Cpath d='M0 50 C240 100 480 0 720 50 C960 100 1200 0 1440 50 L1440 100 L0 100 Z' fill='white'/%3E%3C/svg%3E");
  -webkit-mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100'%3E%3Cpath d='M0 50 C240 100 480 0 720 50 C960 100 1200 0 1440 50 L1440 100 L0 100 Z' fill='white'/%3E%3C/svg%3E");
  mask-size: 100% 100%;
  mask-repeat: no-repeat;
}

/* === 游客横幅 === */
.guest-banner {
  display: flex; align-items: center; justify-content: space-between;
  margin: -calc(1.0666666666666667vw) 0 calc(2.666666666666667vw);
  padding: calc(3.2vw) calc(3.733333333333334vw);
  background: linear-gradient(135deg, #FEF3C7, #FDE68A);
  border-radius: calc(2.666666666666667vw);
  box-shadow: 0 2px 12px rgba(245,158,11,0.2);
}
.guest-info { flex: 1; display: flex; align-items: center; gap: calc(1.3333333333333335vw); min-width: 0; }
.guest-tag { padding: calc(0.8vw) calc(2.4vw); background: #D97706; color: #fff; border-radius: calc(1.866666666666667vw); font-size: calc(2.933333333333333vw); font-weight: 700; }
.guest-text { font-size: calc(3.2vw); color: #78350F; font-weight: 500; }
.guest-btn {
  padding: calc(1.866666666666667vw) calc(3.733333333333334vw); background: #D97706; color: #fff;
  border-radius: calc(3.733333333333334vw); font-size: calc(3.4666666666666663vw); font-weight: 700;
  box-shadow: 0 4px 12px rgba(217,119,6,0.3);
}

/* === 快捷入口 — 玻璃卡片 === */
.quick-section { margin-bottom: calc(3.2vw); }
.quick-grid { display: flex; gap: calc(1.3333333333333335vw); margin-bottom: calc(1.866666666666667vw); }
.quick-card {
  flex: 1; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: calc(3.2vw) calc(1.0666666666666667vw);
  border-radius: calc(2.933333333333333vw);
  background: #fff;
  box-shadow: 0 2px 16px rgba(0,0,0,0.06);
  transition: all 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
  position: relative; overflow: hidden;
}
.quick-card::after {
  content: ''; position: absolute; inset: 0;
  border-radius: calc(2.933333333333333vw);
  background: linear-gradient(135deg, rgba(255,255,255,0.4), rgba(255,255,255,0));
  pointer-events: none;
}
.quick-card:active {
  transform: scale(0.94);
  box-shadow: 0 4px 24px rgba(0,0,0,0.12);
}
.qc-icon {
  position: relative;
  width: calc(9.6vw); height: calc(9.6vw); border-radius: calc(2.666666666666667vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(4.8vw); margin-bottom: calc(1.3333333333333335vw);
}
.qc-1 .qc-icon { background: linear-gradient(135deg, #FEE2E2, #FECACA); }
.qc-2 .qc-icon { background: linear-gradient(135deg, #DBEAFE, #BFDBFE); }
.qc-3 .qc-icon { background: linear-gradient(135deg, #FEF3C7, #FDE68A); }
.qc-4 .qc-icon { background: linear-gradient(135deg, #EDE9FE, #DDD6FE); }
.qc-5 .qc-icon { background: linear-gradient(135deg, #FCE7F3, #FBCFE8); }
.qc-6 .qc-icon { background: linear-gradient(135deg, #D1FAE5, #A7F3D0); }
.qc-7 .qc-icon { background: linear-gradient(135deg, #E0F2FE, #BAE6FD); }
.qc-8 .qc-icon { background: linear-gradient(135deg, #F3F4F6, #E5E7EB); }
.qc-badge {
  position: absolute; top: -calc(1.0666666666666667vw); right: -calc(1.0666666666666667vw);
  min-width: calc(4.266666666666667vw); height: calc(4.266666666666667vw); line-height: calc(4.266666666666667vw);
  text-align: center; background: #EF4444; color: #fff;
  font-size: calc(2.4vw); border-radius: calc(2.1333333333333333vw);
  padding: 0 calc(0.8vw); font-weight: 700;
  border: calc(0.26666666666666666vw) solid #fff;
  animation: bounce 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) 0.3s both;
}
@keyframes bounce {
  0% { transform: scale(0); }
  50% { transform: scale(1.3); }
  100% { transform: scale(1); }
}
.qc-label { font-size: calc(3.2vw); color: #374151; font-weight: 600; }

/* === 数据看板 === */
.stats-dash {
  display: flex; align-items: center;
  margin-bottom: calc(3.2vw); padding: calc(3.2vw) calc(1.6vw);
  background: #fff; border-radius: calc(2.933333333333333vw);
  box-shadow: 0 2px 16px rgba(0,0,0,0.06);
}
.sd-item { flex: 1; text-align: center; }
.sd-num {
  font-size: calc(6.133333333333333vw); font-weight: 900;
  color: #111827; line-height: 1.2;
}
.sd-lbl {
  font-size: calc(2.933333333333333vw); color: #9CA3AF;
  margin-top: calc(0.5333333333333333vw); font-weight: 600;
}
.sd-div {
  width: calc(0.13333333333333333vw); height: calc(6.4vw);
  background: #E5E7EB; flex-shrink: 0;
}

/* === 公告区增强 === */
.ann-section {
  background: linear-gradient(135deg, #3B82F6, #6366F1);
  border-radius: calc(3.2vw); padding: calc(3.733333333333334vw);
  margin-bottom: calc(3.2vw);
  box-shadow: 0 8px 32px rgba(59,130,246,0.3);
}
.ann-section .section-title { color: #fff; font-size: calc(4.533333333333333vw); }
.ann-section .section-title::before { background: #fff; }
.ann-section .more { color: rgba(255,255,255,0.85); font-size: calc(3.4666666666666663vw); }
.ann-item { padding: calc(2.666666666666667vw) 0; border-bottom: calc(0.13333333333333333vw) solid rgba(255,255,255,0.15); transition: background 0.15s; border-radius: calc(1.6vw); padding-left: calc(1.6vw); padding-right: calc(1.6vw); }
.ann-item:last-child { border-bottom: none; }
.ann-item:active { background: rgba(255,255,255,0.1); }
.ann-item .ann-title { color: #fff; font-weight: 700; font-size: calc(3.733333333333334vw); }
.ann-item .ann-meta { color: rgba(255,255,255,0.75); font-size: calc(2.933333333333333vw); margin-top: calc(0.8vw); }
.ann-item .tag { background: rgba(255,255,255,0.2); color: #fff; }
.ann-item .tag-warning { background: rgba(0,0,0,0.15); color: #fff; }

/* === 首次引导 === */
.guide-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.55);
  z-index: 999;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; pointer-events: none;
  transition: opacity 0.35s;
  backdrop-filter: blur(4px);
}
.guide-overlay.show { opacity: 1; pointer-events: auto; }
.guide-card {
  width: calc(74.66666666666667vw); background: #fff;
  border-radius: calc(4.266666666666667vw); padding: calc(6.4vw) calc(5.333333333333334vw) calc(4.8vw);
  text-align: center;
  animation: popIn 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes popIn {
  from { opacity: 0; transform: scale(0.85) translateY(calc(5.333333333333334vw)); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}
.guide-art { font-size: calc(9.6vw); margin-bottom: calc(2.1333333333333333vw); }
.guide-title { font-size: calc(4.8vw); font-weight: 900; color: #111827; margin-bottom: calc(3.733333333333334vw); }
.guide-steps { text-align: left; margin-bottom: calc(4.266666666666667vw); }
.gs-item { display: flex; align-items: flex-start; gap: calc(2.1333333333333333vw); margin-bottom: calc(2.4vw); }
.gs-num {
  width: calc(5.866666666666666vw); height: calc(5.866666666666666vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(3.2vw); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.gs-text { font-size: calc(3.733333333333334vw); color: #4B5563; line-height: 1.5; font-weight: 500; }
.guide-btn {
  width: 100%; background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(4.266666666666667vw); font-weight: 700;
  border-radius: calc(5.866666666666666vw); padding: calc(2.933333333333333vw) 0; border: none;
  box-shadow: 0 6px 24px rgba(79,110,247,0.35);
}
.guide-btn::after { border: none; }

/* === 底部 === */
.footer-tip { text-align: center; padding: calc(4.8vw) 0 calc(2.1333333333333333vw); font-size: calc(3.2vw); color: #9CA3AF; }

/* FAB */
.fab { position: fixed; bottom: calc(24vw); right: calc(4.8vw); width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%; background: linear-gradient(135deg, #4F6EF7, #7C3AED); color: #fff; font-size: calc(6.4vw); font-weight: 300; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 32px rgba(79,110,247,0.45); z-index: 99; transition: transform 0.2s; }
.fab:active { transform: scale(0.88); }

/* 登录页 优化版 */

.login-page {
  min-height: 100vh;
  display: flex; flex-direction: column; align-items: center;
  padding: calc(16vw) calc(6.4vw) calc(10.666666666666668vw);
  background: linear-gradient(170deg, #EEF1FE 0%, #F8F9FC 30%, #FFF 70%);
  position: relative; overflow: hidden;
}

/* 背景装饰圆 */
.lp-bg-circle {
  position: absolute; border-radius: 50%;
  opacity: 0.25; pointer-events: none;
}
.lp-bg-circle.c1 {
  width: calc(66.66666666666666vw); height: calc(66.66666666666666vw);
  background: radial-gradient(circle, #4F6EF7, transparent);
  top: -calc(21.333333333333336vw); right: -calc(16vw);
  animation: lpFloat1 8s ease-in-out infinite;
}
.lp-bg-circle.c2 {
  width: calc(48vw); height: calc(48vw);
  background: radial-gradient(circle, #AF52DE, transparent);
  bottom: calc(40vw); left: -calc(13.333333333333334vw);
  animation: lpFloat2 6s ease-in-out infinite;
}
.lp-bg-circle.c3 {
  width: calc(32vw); height: calc(32vw);
  background: radial-gradient(circle, #34C759, transparent);
  top: calc(66.66666666666666vw); right: -calc(8vw);
  animation: lpFloat3 7s ease-in-out infinite;
}
@keyframes lpFloat1 {
  0%,100% { transform: translate(0,0) scale(1); }
  50%     { transform: translate(-calc(4vw),calc(5.333333333333334vw)) scale(1.08); }
}
@keyframes lpFloat2 {
  0%,100% { transform: translate(0,0) scale(1); }
  50%     { transform: translate(calc(2.666666666666667vw),-calc(4vw)) scale(1.06); }
}
@keyframes lpFloat3 {
  0%,100% { transform: translate(0,0) scale(1); }
  50%     { transform: translate(-calc(2vw),-calc(3.3333333333333335vw)) scale(1.1); }
}

/* Logo区 */
.lp-logo-wrap {
  text-align: center; margin-bottom: calc(8.533333333333333vw);
  position: relative; z-index: 1;
}
.lp-logo {
  width: calc(26.666666666666668vw); height: calc(26.666666666666668vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto calc(4.8vw);
  box-shadow: 0 calc(2.1333333333333333vw) calc(6.4vw) rgba(79,110,247,0.35);
  animation: lpLogoPulse 3s ease-in-out infinite;
}
@keyframes lpLogoPulse {
  0%,100% { box-shadow: 0 calc(2.1333333333333333vw) calc(6.4vw) rgba(79,110,247,0.35); }
  50%     { box-shadow: 0 calc(3.2vw) calc(8.533333333333333vw) rgba(79,110,247,0.55); }
}
.lp-logo-inner {
  width: calc(21.333333333333336vw); height: calc(21.333333333333336vw); border-radius: 50%;
  background: rgba(255,255,255,0.15);
  display: flex; align-items: center; justify-content: center;
  backdrop-filter: blur(4px);
}
.lp-logo-icon { font-size: calc(9.6vw); }

.lp-app-name {
  font-size: calc(5.866666666666666vw); font-weight: 900; color: #111827;
  display: block; margin-bottom: calc(2.1333333333333333vw);
  letter-spacing: calc(0.26666666666666666vw);
}
.lp-tag-row {
  display: flex; align-items: center; justify-content: center; gap: calc(1.0666666666666667vw);
}
.lp-tag {
  font-size: calc(3.4666666666666663vw); color: #6B7280; font-weight: 500;
}
.lp-tag-dot { color: #C0C4CC; }

/* 登录按钮 */
.lp-btn-wrap {
  width: 100%; position: relative; z-index: 1;
}
.lp-login-btn {
  width: 100%; height: calc(13.333333333333334vw); border-radius: calc(3.733333333333334vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; font-size: calc(4.533333333333333vw); font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  gap: calc(1.6vw); border: none;
  box-shadow: 0 8px calc(3.733333333333334vw) rgba(79,110,247,0.35);
  letter-spacing: calc(0.13333333333333333vw);
}
.lp-login-btn::after { border: none; }
.lp-login-btn:active { transform: scale(0.96); opacity: 0.9; }
.lp-btn-icon { font-size: calc(4.8vw); }

.lp-protocol {
  text-align: center; font-size: calc(3.2vw); color: #9CA3AF;
  margin-top: calc(3.2vw); font-weight: 500;
}
.lp-link { color: #4F6EF7; font-weight: 600; }

.lp-switch {
  text-align: center; color: #9CA3AF; font-size: calc(3.4666666666666663vw);
  padding: calc(2.666666666666667vw) 0; margin-top: calc(1.0666666666666667vw);
}

/* 特色功能 */
.lp-features {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: calc(3.733333333333334vw) calc(2.666666666666667vw); width: 100%;
  margin-top: calc(9.6vw); position: relative; z-index: 1;
}
.lp-feat {
  display: flex; flex-direction: column; align-items: center;
  gap: calc(1.6vw); font-size: calc(3.2vw); color: #374151; font-weight: 600;
}
.lp-feat-icon {
  width: calc(11.733333333333333vw); height: calc(11.733333333333333vw); border-radius: calc(3.2vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(5.333333333333334vw);
}
/* 资料云盘 - 优化版 */

.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* 顶部 */
.mat-header {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(2.4vw);
}
.mh-left { display: flex; align-items: center; gap: calc(1.866666666666667vw); }
.mh-icon { font-size: calc(5.866666666666666vw); }
.mh-title { font-size: calc(4.8vw); font-weight: 800; color: #111827; display: block; }
.mh-sub { font-size: calc(3.2vw); color: #9CA3AF; font-weight: 500; display: block; }
.mh-upload-btn {
  display: flex; align-items: center; gap: calc(0.8vw);
  padding: calc(2.1333333333333333vw) calc(3.733333333333334vw); background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; border-radius: calc(4.8vw); font-size: calc(3.4666666666666663vw); font-weight: 700;
  box-shadow: 0 4px 16px rgba(79,110,247,0.3);
}
.mh-upload-btn:active { transform: scale(0.95); }
.mu-icon { font-size: calc(4vw); font-weight: 300; }

/* 搜索 */
.search-bar { margin-bottom: calc(2.1333333333333333vw); }
.search-input {
  display: flex; align-items: center;
  background: #fff; border-radius: calc(5.333333333333334vw);
  padding: 0 calc(3.2vw); height: calc(10.4vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.05);
}
.search-icon { font-size: calc(4vw); margin-right: calc(1.3333333333333335vw); color: #9CA3AF; }
.search-field { flex: 1; font-size: calc(3.733333333333334vw); color: #111827; }
.search-clear { font-size: calc(4vw); color: #9CA3AF; padding: calc(1.3333333333333335vw); }

/* 上传进度 */
.upload-progress {
  display: flex; align-items: center; gap: calc(1.866666666666667vw);
  padding: calc(1.6vw) calc(2.666666666666667vw); margin-bottom: calc(2.1333333333333333vw);
  background: #EEF1FE; border-radius: calc(1.866666666666667vw);
}
.up-bar {
  flex: 1; height: calc(1.0666666666666667vw); background: #C7D2FE;
  border-radius: calc(0.5333333333333333vw); overflow: hidden;
}
.up-fill {
  height: 100%; background: linear-gradient(90deg, #4F6EF7, #6366F1);
  border-radius: calc(0.5333333333333333vw); transition: width 0.3s;
}
.up-text { font-size: calc(2.933333333333333vw); color: #4F6EF7; font-weight: 600; white-space: nowrap; }

/* 文件卡片 */
.mat-card {
  display: flex; align-items: center; gap: calc(2.4vw);
  padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw);
  background: #fff; border-radius: calc(2.666666666666667vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.04);
  transition: transform 0.15s;
}
.mat-card:active { transform: scale(0.98); }

/* 文件类型图标 */
.mat-icon-wrap {
  width: calc(11.733333333333333vw); height: calc(11.733333333333333vw); border-radius: calc(2.666666666666667vw);
  display: flex; flex-direction: column; align-items: center;
  justify-content: center; position: relative; flex-shrink: 0;
}
.mat-icon-emoji { font-size: calc(5.066666666666666vw); line-height: 1; }
.mat-ext {
  font-size: calc(2.1333333333333333vw); font-weight: 700;
  text-transform: uppercase; margin-top: calc(0.26666666666666666vw);
  color: #6B7280;
}

/* 文件信息 */
.mat-info { flex: 1; min-width: 0; }
.mat-name {
  font-size: calc(3.733333333333334vw); font-weight: 700; color: #111827;
  margin-bottom: calc(0.8vw); line-height: 1.4;
}
.mat-row {
  display: flex; align-items: center; gap: calc(0.8vw);
  font-size: calc(2.933333333333333vw); color: #6B7280;
}
.mat-row-sub { color: #9CA3AF; margin-top: calc(0.5333333333333333vw); }
.mat-size { font-weight: 600; color: #374151; }
.mat-dot { color: #D1D5DB; }
.mat-tag {
  display: inline-flex; padding: calc(0.26666666666666666vw) calc(1.6vw);
  background: #F3F4F6; border-radius: calc(1333.2vw);
  font-size: calc(2.666666666666667vw); color: #6B7280; font-weight: 600;
}

/* 操作 */
.mat-op { display: flex; flex-direction: column; align-items: center; gap: calc(1.0666666666666667vw); flex-shrink: 0; }
.mat-dl-btn {
  padding: calc(1.866666666666667vw) calc(3.2vw); background: #EEF1FE; color: #4F6EF7;
  border-radius: calc(3.733333333333334vw); font-size: calc(3.2vw); font-weight: 700;
}
.mat-dl-btn:active { background: #DBE0FE; }
.mat-del-btn {
  width: calc(5.866666666666666vw); height: calc(5.866666666666666vw); border-radius: 50%;
  background: #FEE2E2; display: flex; align-items: center;
  justify-content: center; font-size: calc(3.2vw);
}
.mat-del-btn:active { background: #FECACA; }

/* 空状态 */
.empty-state { text-align: center; padding: calc(10.666666666666668vw) calc(5.333333333333334vw); }
.empty-icon { font-size: calc(10.666666666666668vw); margin-bottom: calc(2.1333333333333333vw); }
.empty-title { font-size: calc(4.266666666666667vw); font-weight: 700; color: #374151; margin-bottom: calc(1.0666666666666667vw); }
.empty-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; margin-bottom: calc(3.733333333333334vw); }
.empty-btn {
  display: inline-block; padding: calc(2.4vw) calc(6.4vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; border-radius: calc(5.333333333333334vw); font-size: calc(3.733333333333334vw); font-weight: 700;
  box-shadow: 0 6px 20px rgba(79,110,247,0.3);
}

.load-tip { text-align: center; padding: calc(3.733333333333334vw) 0; font-size: calc(3.2vw); color: #9CA3AF; }

.fab {
  position: fixed; bottom: calc(24vw); right: calc(4.8vw);
  width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(6.4vw); font-weight: 300;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 32px rgba(79,110,247,0.45);
  z-index: 99;
}
.fab:active { transform: scale(0.88); }
/* ============================================
   消息通知 - 国家级优化版
   ============================================ */

.page-wrap { padding: 0 0 calc(10.666666666666668vw); }

/* ========== 顶部统计条 ========== */
.nt-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(2.666666666666667vw) calc(3.2vw) calc(1.6vw);
}
.nt-topbar-left { display: flex; align-items: center; gap: calc(1.6vw); }
.nt-topbar-title { font-size: calc(4.8vw); font-weight: 800; color: #111827; }
.nt-unread-badge {
  padding: calc(0.5333333333333333vw) calc(2.1333333333333333vw);
  background: linear-gradient(135deg, #FF453A, #FF6B5B);
  color: #fff; font-size: calc(2.933333333333333vw); font-weight: 700;
  border-radius: calc(1333.2vw);
}
.nt-topbar-actions { }
.nt-action-btn {
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw); border-radius: calc(1333.2vw);
  font-size: calc(3.2vw); font-weight: 600; color: #4F6EF7;
  background: rgba(79,110,247,0.08);
  transition: all 0.2s;
}
.nt-action-btn.active { background: #4F6EF7; color: #fff; }

/* ========== 批量操作栏 ========== */
.nt-batch-bar {
  display: flex; align-items: center; justify-content: space-between;
  margin: 0 calc(3.2vw) calc(1.6vw);
  padding: calc(2.1333333333333333vw) calc(2.666666666666667vw);
  background: #1E293B; border-radius: calc(2.1333333333333333vw);
}
.nt-batch-left { display: flex; align-items: center; gap: calc(1.3333333333333335vw); }
.nt-checkbox {
  width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); border-radius: 50%;
  border: calc(0.26666666666666666vw) solid rgba(255,255,255,0.4);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(3.2vw); color: #fff;
  transition: all 0.2s;
}
.nt-checkbox.checked { background: #4F6EF7; border-color: #4F6EF7; }
.nt-batch-label { font-size: calc(3.4666666666666663vw); color: #fff; font-weight: 600; }
.nt-batch-right { display: flex; gap: calc(1.6vw); }
.nt-batch-btn {
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw); border-radius: calc(1333.2vw);
  font-size: calc(3.2vw); font-weight: 600;
}
.nt-batch-read { background: rgba(52,199,89,0.2); color: #34C759; }
.nt-batch-del { background: rgba(255,69,58,0.2); color: #FF6B5B; }

/* ========== 筛选栏 ========== */
.nt-filter-bar {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.0666666666666667vw) calc(3.2vw) calc(2.1333333333333333vw);
  position: sticky; top: 0; z-index: 10;
  background: rgba(248,249,252,0.95);
  backdrop-filter: blur(20px);
}
.nt-filter-scroll { flex: 1; white-space: nowrap; }
.nt-filter-group { display: inline-flex; gap: calc(1.3333333333333335vw); }
.nt-filter-divider {
  display: inline-block; width: calc(0.13333333333333333vw); height: calc(4.266666666666667vw);
  background: #E5E7EB; margin: 0 calc(1.6vw); vertical-align: middle;
}
.nt-filter-tag {
  display: inline-flex; align-items: center; gap: calc(0.8vw);
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw);
  background: #fff; border-radius: calc(1333.2vw);
  font-size: calc(3.2vw); color: #6B7280; font-weight: 600;
  border: calc(0.13333333333333333vw) solid #E5E7EB;
  white-space: nowrap;
  transition: all 0.25s;
}
.nt-filter-tag.tag-active {
  background: #1E293B; color: #fff; border-color: #1E293B;
}
.nt-tag-count {
  font-size: calc(2.666666666666667vw); padding: calc(0.26666666666666666vw) calc(1.3333333333333335vw);
  background: rgba(255,69,58,0.2); color: #FF453A;
  border-radius: calc(1333.2vw); font-weight: 700;
}
.nt-filter-tag.tag-active .nt-tag-count {
  background: rgba(255,69,58,0.3); color: #FF8A80;
}
.nt-read-all {
  flex-shrink: 0; padding: calc(1.3333333333333335vw) calc(2.666666666666667vw);
  font-size: calc(3.2vw); color: #4F6EF7; font-weight: 600;
  white-space: nowrap;
}
.nt-read-all.disabled { color: #C0C4CC; }

/* ========== 时间分组 ========== */
.nt-group { margin-bottom: calc(1.0666666666666667vw); }
.nt-group-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(2.666666666666667vw) calc(3.2vw) calc(1.0666666666666667vw);
}
.nt-group-label { font-size: calc(3.4666666666666663vw); font-weight: 700; color: #9CA3AF; }
.nt-group-count { font-size: calc(2.933333333333333vw); color: #C0C4CC; font-weight: 500; }

/* ========== 卡片容器（滑动） ========== */
.nt-card-wrap { 
  padding: 0 calc(3.2vw) calc(1.6vw);
  overflow: hidden;
}
.nt-card-swipe {
  position: relative;
  transform: translateX(0);
  transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}
.nt-card-swipe.swiped { transform: translateX(-calc(24vw)); }

.nt-swipe-actions {
  position: absolute; right: 0; top: 0; bottom: 0;
  display: flex; align-items: stretch;
  border-radius: calc(2.666666666666667vw); overflow: hidden;
}
.nt-swipe-btn {
  display: flex; align-items: center; justify-content: center;
  width: calc(12vw); font-size: calc(3.2vw); font-weight: 700; color: #fff;
}
.nt-swipe-read { background: #4F6EF7; }
.nt-swipe-del { background: #FF453A; }

/* ========== 卡片本体 ========== */
.nt-card {
  display: flex; align-items: flex-start; gap: calc(2.1333333333333333vw);
  padding: calc(3.2vw); background: #fff;
  border-radius: calc(2.666666666666667vw);
  box-shadow: 0 1px 8px rgba(0,0,0,0.03);
  position: relative; z-index: 1;
  transition: all 0.2s;
}
.nt-card.unread {
  background: linear-gradient(135deg, #F8FAFF, #EEF1FE);
  box-shadow: 0 2px 12px rgba(79,110,247,0.08);
}
.nt-card.unread::before {
  content: ''; position: absolute; left: 0; top: calc(2.1333333333333333vw); bottom: calc(2.1333333333333333vw);
  width: calc(0.8vw); background: #4F6EF7; border-radius: 0 calc(0.5333333333333333vw) calc(0.5333333333333333vw) 0;
}
.nt-card.selectable { padding-left: calc(2.1333333333333333vw); }

/* 选择列 */
.nt-check-col {
  display: flex; align-items: center; padding-top: calc(1.0666666666666667vw);
}

/* 类型图标 */
.nt-card-icon {
  width: calc(9.6vw); height: calc(9.6vw); border-radius: calc(2.666666666666667vw);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(4.8vw); flex-shrink: 0;
}

/* 内容区 */
.nt-card-body { flex: 1; min-width: 0; }
.nt-card-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(1.3333333333333335vw);
}
.nt-card-meta { display: flex; align-items: center; gap: calc(1.0666666666666667vw); }
.nt-type-tag {
  padding: calc(0.4vw) calc(1.6vw); border-radius: calc(1333.2vw);
  font-size: calc(2.666666666666667vw); font-weight: 700;
}
.nt-audit-tag {
  padding: calc(0.4vw) calc(1.6vw); border-radius: calc(1333.2vw);
  font-size: calc(2.666666666666667vw); font-weight: 700;
}
.nt-audit-tag.audit-ok { background: #E8F8ED; color: #34C759; }
.nt-audit-tag.audit-no { background: #FFEEED; color: #FF453A; }

.nt-card-time { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 500; flex-shrink: 0; }

.nt-card-title {
  font-size: calc(4vw); font-weight: 700; color: #111827;
  line-height: 1.4; margin-bottom: calc(0.8vw); display: block;
}
.nt-card-content {
  font-size: calc(3.4666666666666663vw); color: #6B7280; line-height: 1.5;
  display: -webkit-box; -webkit-box-orient: vertical;
  -webkit-line-clamp: 2; overflow: hidden; margin-bottom: calc(1.0666666666666667vw);
}

/* 关联内容 */
.nt-card-ref {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.3333333333333335vw) calc(1.866666666666667vw); background: #F8F9FC;
  border-radius: calc(1.3333333333333335vw); margin-top: calc(0.5333333333333333vw);
}
.nt-ref-dot { width: calc(1.0666666666666667vw); height: calc(1.0666666666666667vw); border-radius: 50%; flex-shrink: 0; }
.nt-ref-text { flex: 1; font-size: calc(3.2vw); color: #6B7280; font-weight: 500; }
.nt-ref-arrow { font-size: calc(3.733333333333334vw); color: #C0C4CC; font-weight: 700; }

/* 驳回原因 */
.nt-card-reason {
  margin-top: calc(1.3333333333333335vw); padding: calc(1.6vw) calc(2.1333333333333333vw);
  background: #FFF5F5; border-radius: calc(1.3333333333333335vw);
  border-left: calc(0.5333333333333333vw) solid #FF453A;
}
.nt-reason-label { font-size: calc(2.933333333333333vw); color: #FF453A; font-weight: 700; }
.nt-reason-text { font-size: calc(3.2vw); color: #6B7280; }

/* 未读点 */
.nt-unread-dot {
  width: calc(1.866666666666667vw); height: calc(1.866666666666667vw); border-radius: 50%;
  background: #FF453A; flex-shrink: 0;
  margin-top: calc(1.6vw);
  box-shadow: 0 0 calc(1.0666666666666667vw) rgba(255,69,58,0.4);
}

/* ========== 底部加载 ========== */
.nt-load-tip {
  text-align: center; padding: calc(4vw) 0;
  font-size: calc(3.2vw); color: #C0C4CC;
}

/* ========== 空状态 ========== */
.nt-empty {
  text-align: center; padding: calc(13.333333333333334vw) calc(8vw);
}
.nt-empty-circle {
  width: calc(18.666666666666668vw); height: calc(18.666666666666668vw); border-radius: 50%;
  background: linear-gradient(135deg, #EEF1FE, #E0E4FD);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto calc(3.2vw);
}
.nt-empty-icon { font-size: calc(8.533333333333333vw); }
.nt-empty-title {
  font-size: calc(4vw); font-weight: 800; color: #111827;
  display: block; margin-bottom: calc(1.3333333333333335vw);
}
.nt-empty-desc {
  font-size: calc(3.4666666666666663vw); color: #9CA3AF; font-weight: 500;
  line-height: 1.6;
}

/* ========== 骨架加载 ========== */
.nt-skeleton {
  display: flex; gap: calc(2.1333333333333333vw); padding: calc(3.2vw);
  margin: 0 calc(3.2vw) calc(1.6vw); background: #fff;
  border-radius: calc(2.666666666666667vw);
}
.nt-sk-avatar {
  width: calc(9.6vw); height: calc(9.6vw); border-radius: calc(2.666666666666667vw);
  background: linear-gradient(90deg, #F0F1F5 25%, #E5E7EB 50%, #F0F1F5 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  flex-shrink: 0;
}
.nt-sk-body { flex: 1; display: flex; flex-direction: column; gap: calc(1.6vw); justify-content: center; }
.nt-sk-line {
  height: calc(2.933333333333333vw); border-radius: calc(0.8vw);
  background: linear-gradient(90deg, #F0F1F5 25%, #E5E7EB 50%, #F0F1F5 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}
.nt-sk-line.w60 { width: 60%; }
.nt-sk-line.w90 { width: 90%; }

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ========== 动画 ========== */
.fade-in-down {
  animation: fadeInDown 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}
.fade-in-up {
  animation: fadeInUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}
@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-calc(2.1333333333333333vw)); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(calc(2.1333333333333333vw)); }
  to { opacity: 1; transform: translateY(0); }
}
/* 个人资料编辑 - 国家一级标准 */

html, body { background: #F0F2F8; }

.page-wrap { padding: calc(3.2vw); padding-bottom: calc(18.666666666666668vw); }

/* 卡片 */
.card {
  background: rgba(255,255,255,0.92);
  backdrop-filter: blur(20px);
  border-radius: calc(3.2vw);
  margin-bottom: calc(3.2vw);
  overflow: hidden;
  box-shadow: 0 2px 16px rgba(0,0,0,0.05);
  animation: cardIn 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}
.card:nth-child(2) { animation-delay: 0.08s; }
.card:nth-child(3) { animation-delay: 0.16s; }
@keyframes cardIn {
  from { opacity: 0; transform: translateY(calc(3.2vw)); }
  to { opacity: 1; transform: translateY(0); }
}

/* 行 */
.row {
  display: flex; align-items: center;
  min-height: calc(13.333333333333334vw);
  padding: calc(2.933333333333333vw) calc(3.733333333333334vw);
  border-bottom: calc(0.13333333333333333vw) solid #F0F1F5;
  transition: background 0.15s;
}
.row:active { background: #F9FAFB; }
.row:last-child { border-bottom: none; }
.row.col { flex-direction: column; align-items: stretch; min-height: auto; padding: calc(3.2vw) calc(3.733333333333334vw); }

/* 标签 */
.label {
  width: calc(22.666666666666664vw); font-size: calc(4vw); color: #374151;
  font-weight: 600; flex-shrink: 0; line-height: 1.4;
}
.row.col .label { width: auto; margin-bottom: calc(1.866666666666667vw); }
.req { color: #EF4444; margin-left: calc(0.5333333333333333vw); }

/* 输入框 */
.input {
  flex: 1; font-size: calc(4vw); text-align: right;
  color: #111827; height: calc(7.466666666666668vw); line-height: calc(7.466666666666668vw);
}
.input::placeholder { color: #B0B5C0; }

/* picker值 */
.picker-value { flex: 1; display: flex; align-items: center; justify-content: flex-end; }
.picker-inner { display: flex; align-items: center; }
.picker-inner .arrow { margin-left: calc(1.6vw); }
.row .picker-value { flex: 1; justify-content: flex-end; }

.value { font-size: calc(4vw); color: #111827; }
.value.placeholder { color: #B0B5C0; }
.arrow { color: #C4C8D0; font-size: calc(5.066666666666666vw); margin-left: calc(1.3333333333333335vw); flex-shrink: 0; }

/* 头像 */
.avatar-btn {
  line-height: normal; padding: 0; margin: 0;
  background: transparent; display: flex;
  align-items: center; gap: calc(2.4vw);
}
.avatar-btn::after { border: none; }
.av {
  width: calc(13.333333333333334vw); height: calc(13.333333333333334vw); border-radius: 50%;
  background: #E5E7EB;
  box-shadow: 0 2px 12px rgba(0,0,0,0.1);
}
.av-tip {
  font-size: calc(3.2vw); color: #6B7280;
  font-weight: 500;
}

/* 简介 */
.textarea {
  width: 100%; min-height: calc(17.333333333333336vw);
  font-size: calc(3.733333333333334vw); color: #111827;
  background: #F9FAFB; border-radius: calc(1.6vw);
  padding: calc(2.1333333333333333vw); box-sizing: border-box;
}
.textarea::placeholder { color: #B0B5C0; }

/* 保存按钮 */
.save-wrap { padding: calc(1.6vw) 0; }
.save-btn {
  width: 100%; height: calc(12.8vw); border-radius: calc(6.4vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; font-size: calc(4.266666666666667vw); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  border: none;
  box-shadow: 0 8px 28px rgba(79,110,247,0.35);
  transition: all 0.2s;
  letter-spacing: calc(0.26666666666666666vw);
}
.save-btn::after { border: none; }
.save-btn:active { transform: scale(0.96); opacity: 0.85; }
.save-btn[disabled] { background: #C7D2FE; box-shadow: none; }

/* 个人中心 — 国家级设计 v2 */
.page-wrap { padding-bottom: calc(16vw); }

/* ===== 头部卡片 ===== */
.header-card {
  position: relative;
  margin: -calc(2.666666666666667vw) -calc(2.666666666666667vw) calc(2.666666666666667vw);
  overflow: hidden;
  min-height: calc(26.666666666666668vw);
  transition: background 1.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.header-card::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.02) 0%, rgba(0,0,0,0.2) 100%);
  z-index: 1;
}
.hc-body {
  position: relative; z-index: 2;
  display: flex; align-items: center;
  padding: calc(4.266666666666667vw) calc(3.733333333333334vw) calc(3.2vw);
}
.hc-avatar {
  width: calc(12.8vw); height: calc(12.8vw);
  border-radius: 50%;
  border: calc(0.5333333333333333vw) solid rgba(255,255,255,0.5);
  flex-shrink: 0;
  box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.hc-info {
  flex: 1; margin-left: calc(3.2vw); min-width: 0;
  display: flex; flex-direction: column;
  gap: calc(0.8vw);
}
.hc-name-row {
  display: flex; align-items: center; gap: calc(1.6vw);
  flex-wrap: wrap;
}
.hc-name {
  font-size: calc(5.066666666666666vw); font-weight: 900; color: #fff;
  line-height: 1.2;
  text-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.hc-detail {
  font-size: calc(3.2vw); color: rgba(255,255,255,0.8);
  font-weight: 500; line-height: 1.4;
}
.hc-edit {
  padding: calc(1.866666666666667vw) calc(3.733333333333334vw);
  border-radius: calc(3.733333333333334vw);
  background: rgba(255,255,255,0.2);
  color: #fff;
  font-size: calc(3.2vw); font-weight: 700;
  flex-shrink: 0;
  backdrop-filter: blur(4px);
  transition: background 0.15s;
}
.hc-edit:active { background: rgba(255,255,255,0.35); }

/* 标签微调 */
.tag {
  display: inline-flex; align-items: center;
  padding: calc(0.5333333333333333vw) calc(2.1333333333333333vw); border-radius: calc(1333.2vw);
  font-size: calc(2.933333333333333vw); font-weight: 700;
  flex-shrink: 0;
}

/* 天体装饰 (keep existing) */
.sky-mini-sun {
  position: absolute; top: calc(1.866666666666667vw); right: calc(3.733333333333334vw);
  width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); border-radius: 50%;
  background: radial-gradient(circle at 40% 40%, #FFF8DC, #FFD700 40%, #FFA500);
  box-shadow: 0 0 calc(2.1333333333333333vw) rgba(255,200,50,0.4);
  opacity: 0; transition: opacity 0.6s; z-index: 1;
  animation: sunBob 4s ease-in-out infinite;
}
.sky-mini-sun.show { opacity: 1; }
@keyframes sunBob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-calc(1.0666666666666667vw)); }
}
.sky-mini-moon {
  position: absolute; top: calc(1.866666666666667vw); right: calc(3.733333333333334vw);
  width: calc(3.2vw); height: calc(3.2vw); border-radius: 50%;
  background: transparent;
  box-shadow: calc(1.3333333333333335vw) -calc(0.5333333333333333vw) 0 0 #FEF3C7;
  opacity: 0; transition: opacity 0.6s; z-index: 1;
  animation: moonBob 6s ease-in-out infinite;
}
.sky-mini-moon::after {
  content: ''; position: absolute;
  top: -calc(1.6vw); left: -calc(1.6vw);
  width: calc(6.4vw); height: calc(6.4vw); border-radius: 50%;
  background: radial-gradient(circle at 70% 30%, rgba(255,245,200,0.3), transparent 60%);
}
.sky-mini-moon.show { opacity: 1; }
@keyframes moonBob {
  0%, 100% { transform: translateY(0) rotate(-3deg); }
  50% { transform: translateY(-calc(1.0666666666666667vw)) rotate(3deg); }
}
.sky-mini-stars {
  position: absolute; inset: 0; opacity: 0;
  transition: opacity 0.6s; z-index: 0;
}
.sky-mini-stars.show { opacity: 1; }
.ms {
  position: absolute; width: calc(0.5333333333333333vw); height: calc(0.5333333333333333vw);
  border-radius: 50%; background: #fff;
  animation: miniTwinkle 2s ease-in-out infinite;
}
.ms.m1 { top: 10%; left: 12%; animation-delay: 0s; }
.ms.m2 { top: 18%; left: 28%; animation-delay: 0.4s; width: calc(0.4vw); height: calc(0.4vw); }
.ms.m3 { top: 8%; left: 50%; animation-delay: 0.8s; }
.ms.m4 { top: 24%; left: 10%; animation-delay: 0.3s; width: calc(0.4vw); height: calc(0.4vw); }
.ms.m5 { top: 8%; left: 72%; animation-delay: 1.2s; width: calc(0.6666666666666667vw); height: calc(0.6666666666666667vw); }
.ms.m6 { top: 14%; left: 85%; animation-delay: 0.6s; }
@keyframes miniTwinkle {
  0%, 100% { opacity: 0.2; }
  50% { opacity: 1; }
}

/* ===== 时段问候条 ===== */
.greet-banner {
  margin: 0 0 calc(2.666666666666667vw) 0;
  padding: calc(2.4vw) calc(3.2vw);
  background: #fff;
  border-radius: calc(2.4vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.04);
  text-align: center;
}
.greet-text {
  font-size: calc(3.4666666666666663vw); color: #4B5563; font-weight: 500;
  animation: warmFadeIn 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s both;
}
@keyframes warmFadeIn {
  from { opacity: 0; transform: translateY(calc(1.3333333333333335vw)); }
  to { opacity: 1; transform: translateY(0); }
}

/* ===== 数据统计 ===== */
.stats-row {
  display: flex; gap: calc(1.866666666666667vw); margin-bottom: calc(3.2vw);
}
.stat-card {
  flex: 1; border-radius: calc(2.933333333333333vw);
  padding: calc(3.2vw) calc(2.1333333333333333vw); text-align: center;
  box-shadow: 0 2px 12px rgba(0,0,0,0.06);
  transition: transform 0.15s;
}
.stat-card:active { transform: scale(0.96); }
.st-pending {
  background: linear-gradient(135deg, #FEF3C7, #FDE68A);
}
.st-msg {
  background: linear-gradient(135deg, #DBEAFE, #BFDBFE);
}
.st-profile {
  background: linear-gradient(135deg, #D1FAE5, #A7F3D0);
}
.st-num {
  font-size: calc(5.6000000000000005vw); font-weight: 900;
  color: #111827; margin-bottom: calc(0.8vw);
}
.st-icon { font-size: calc(4.266666666666667vw); }
.st-label {
  font-size: calc(2.933333333333333vw); color: #6B7280; font-weight: 600;
}

/* ===== 菜单卡片 ===== */
.menu-card {
  background: #fff; border-radius: calc(3.2vw);
  margin-bottom: calc(3.2vw); overflow: hidden;
  box-shadow: 0 2px 16px rgba(0,0,0,0.06);
}
.mc-section {
  padding: calc(2.666666666666667vw) calc(4.266666666666667vw) calc(1.6vw);
  font-size: calc(3.2vw); color: #9CA3AF; font-weight: 700;
  letter-spacing: calc(0.26666666666666666vw); text-transform: uppercase;
}
.mc-item {
  display: flex; align-items: center;
  padding: calc(3.2vw) calc(4.266666666666667vw);
  transition: background 0.12s;
}
.mc-item:not(:last-child) {
  border-bottom: calc(0.13333333333333333vw) solid #F3F4F6;
}
.mc-item-hover { background: #F9FAFB; }
.mci-icon-wrap {
  width: calc(8.533333333333333vw); height: calc(8.533333333333333vw); border-radius: calc(2.4vw);
  display: flex; align-items: center; justify-content: center;
  margin-right: calc(2.4vw); flex-shrink: 0; font-size: calc(4vw);
}
.mci-red { background: #FEE2E2; }
.mci-blue { background: #DBEAFE; }
.mci-purple { background: #EDE9FE; }
.mci-orange { background: #FEF3C7; }
.mci-amber { background: #FEF3C7; }
.mci-green { background: #D1FAE5; }
.mci-gray { background: #F3F4F6; }
.mci-label { flex: 1; font-size: calc(4vw); color: #111827; font-weight: 600; }
.mci-arrow { font-size: calc(4.266666666666667vw); color: #C4C8D0; font-weight: 300; margin-left: calc(1.0666666666666667vw); }
.mci-badge {
  background: #EF4444; color: #fff; font-size: calc(2.666666666666667vw);
  min-width: calc(4.8vw); height: calc(4.8vw); line-height: calc(4.8vw);
  text-align: center; border-radius: calc(2.4vw);
  padding: 0 calc(1.0666666666666667vw); font-weight: 700; margin-right: calc(0.8vw);
}
.mci-count { font-size: calc(3.2vw); color: #9CA3AF; margin-right: calc(0.8vw); font-weight: 500; }
.mci-count-red { color: #DC2626; font-weight: 700; }

/* ===== 退出登录 ===== */
.logout-wrap { padding: calc(4.8vw) 0 calc(3.2vw); }
.logout-btn {
  width: 100%; background: #fff; color: #DC2626;
  font-size: calc(4vw); font-weight: 700;
  border-radius: calc(2.666666666666667vw); padding: calc(3.2vw) 0; text-align: center;
  box-shadow: 0 2px 12px rgba(0,0,0,0.05); border: none;
}
.logout-btn::after { border: none; }
.logout-btn:active { background: #FEF2F2; }

/* 问卷详情 - 现代化设计 */

.page { padding: 0 0 calc(32vw); min-height: 100vh; background: #F0F2F8; }

/* === Hero === */
.sd-hero {
  margin: calc(2.666666666666667vw) calc(3.2vw) 0;
  padding: calc(4.8vw) calc(3.733333333333334vw) calc(3.733333333333334vw);
  background: linear-gradient(155deg, #4F6EF7 0%, #6C8CFF 60%, #8BA5FF 100%);
  border-radius: calc(3.733333333333334vw);
  color: #fff;
  position: relative;
  overflow: hidden;
}
.sd-hero::after {
  content: ''; position: absolute; right: -calc(5.333333333333334vw); top: -calc(5.333333333333334vw);
  width: calc(26.666666666666668vw); height: calc(26.666666666666668vw); border-radius: 50%;
  background: rgba(255,255,255,0.08);
}
.sd-hero-tags { display: flex; gap: calc(1.6vw); margin-bottom: calc(2.666666666666667vw); flex-wrap: wrap; }
.sd-tag {
  padding: calc(0.8vw) calc(2.1333333333333333vw); border-radius: calc(2.666666666666667vw);
  font-size: calc(2.933333333333333vw); font-weight: 600;
  background: rgba(255,255,255,0.2); color: #fff;
  display: flex; align-items: center; gap: calc(0.8vw);
}
.sd-tag-open { background: rgba(52,199,89,0.3); }
.sd-tag-closed { background: rgba(255,255,255,0.15); }
.sd-dot { width: calc(1.3333333333333335vw); height: calc(1.3333333333333335vw); border-radius: 50%; }
.sd-dot-on { background: #34C759; }
.sd-dot-off { background: rgba(255,255,255,0.5); }

.sd-title {
  font-size: calc(5.333333333333334vw); font-weight: 800; line-height: 1.35;
  margin-bottom: calc(1.6vw);
}
.sd-desc {
  font-size: calc(3.4666666666666663vw); opacity: 0.85; line-height: 1.6;
  margin-bottom: calc(3.2vw); white-space: pre-wrap;
}
.sd-deadline {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.6vw) calc(2.666666666666667vw); background: rgba(255,255,255,0.15);
  border-radius: calc(1.6vw); margin-bottom: calc(3.2vw);
}
.sd-deadline-icon { font-size: calc(3.2vw); }
.sd-deadline-text { font-size: calc(3.4666666666666663vw); font-weight: 600; }

.sd-stats {
  display: flex; gap: 0;
  border-top: calc(0.13333333333333333vw) solid rgba(255,255,255,0.2);
  padding-top: calc(3.2vw);
}
.sd-stat {
  flex: 1; text-align: center;
  border-right: calc(0.13333333333333333vw) solid rgba(255,255,255,0.15);
}
.sd-stat:last-child { border-right: none; }
.sd-stat-num { font-size: calc(4.266666666666667vw); font-weight: 700; display: block; }
.sd-stat-label { font-size: calc(2.933333333333333vw); opacity: 0.7; margin-top: calc(0.5333333333333333vw); display: block; }

.sd-author { text-align: center; font-size: calc(2.933333333333333vw); opacity: 0.6; margin-top: calc(2.666666666666667vw); }

/* === Banner === */
.sd-banner {
  margin: calc(3.2vw) calc(3.2vw) 0; padding: calc(3.733333333333334vw);
  border-radius: calc(2.666666666666667vw); display: flex; align-items: center;
}
.sd-banner-done { background: #E8F8ED; }
.sd-banner-done .sd-banner-icon { font-size: calc(4.8vw); margin-right: calc(1.866666666666667vw); }
.sd-banner-done .sd-banner-text { flex: 1; font-size: calc(3.733333333333334vw); font-weight: 600; color: #1B8A3D; }
.sd-banner-done .sd-banner-act { font-size: calc(3.4666666666666663vw); color: #4F6EF7; font-weight: 600; }
.sd-banner-closed { background: #F0F1F5; }
.sd-banner-closed .sd-banner-icon { font-size: calc(4.8vw); margin-right: calc(1.866666666666667vw); }
.sd-banner-closed .sd-banner-text { flex: 1; font-size: calc(3.733333333333334vw); font-weight: 600; color: #6B7280; }
.sd-banner-closed .sd-banner-act { font-size: calc(3.4666666666666663vw); color: #9aa3b2; font-weight: 600; }

/* === Card === */
.sd-card {
  margin: calc(3.2vw) calc(3.2vw) 0; background: #fff;
  border-radius: calc(3.2vw); padding: calc(3.733333333333334vw);
  box-shadow: 0 calc(0.26666666666666666vw) calc(1.6vw) rgba(20,30,60,0.04);
}
.sd-card-title {
  display: flex; align-items: baseline; gap: calc(1.6vw);
  font-size: calc(4vw); font-weight: 700; color: #1a1e2b;
  margin-bottom: calc(3.2vw);
}
.sd-card-tip { font-size: calc(3.2vw); color: #9aa3b2; font-weight: 400; }

/* === Options === */
.sd-opt-list { }
.sd-opt {
  padding: calc(3.2vw) calc(2.666666666666667vw); margin-bottom: calc(2.1333333333333333vw);
  border: calc(0.26666666666666666vw) solid #EAECF2; border-radius: calc(2.1333333333333333vw);
  transition: all 0.18s;
  position: relative; overflow: hidden;
}
.sd-opt:last-child { margin-bottom: 0; }
.sd-opt:active { transform: scale(0.985); }
.sd-opt-on { border-color: #4F6EF7; background: #F0F4FF; }
.sd-opt-done { background: #F9FAFB; }

.sd-opt-body { position: relative; z-index: 1; }
.sd-opt-body {
  display: flex; align-items: center;
}
.sd-opt-radio {
  width: calc(5.866666666666666vw); height: calc(5.866666666666666vw); margin-right: calc(2.666666666666667vw);
  border: calc(0.26666666666666666vw) solid #D1D5DB; display: flex;
  align-items: center; justify-content: center;
  flex-shrink: 0; transition: all 0.15s;
}
.sd-radio-circle { border-radius: 50%; }
.sd-radio-square { border-radius: calc(1.3333333333333335vw); }
.sd-radio-on { border-color: #4F6EF7; background: #4F6EF7; }
.sd-radio-inner { width: calc(2.4vw); height: calc(2.4vw); background: #fff; border-radius: 50%; }

.sd-opt-text {
  flex: 1; font-size: calc(4vw); color: #1a1e2b;
  display: flex; align-items: center; gap: calc(1.6vw);
}
.sd-opt-mark {
  font-size: calc(2.933333333333333vw); color: #4F6EF7; background: #E8ECFF;
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(2.666666666666667vw); font-weight: 600;
}

/* 百分比条 */
.sd-opt-bar-wrap {
  margin-top: calc(2.1333333333333333vw); display: flex; align-items: center; gap: calc(2.1333333333333333vw);
}
.sd-opt-bar {
  height: calc(1.6vw); border-radius: calc(0.8vw); transition: width 0.5s ease;
  flex: 1; min-width: calc(2.666666666666667vw);
}
.sd-opt-pct {
  font-size: calc(3.4666666666666663vw); font-weight: 700; color: #1a1e2b;
  min-width: calc(9.6vw); text-align: right;
}

/* === Text Fields === */
.sd-tf { margin-bottom: calc(3.733333333333334vw); }
.sd-tf:last-child { margin-bottom: 0; }
.sd-tf-head { display: flex; align-items: center; gap: calc(1.3333333333333335vw); margin-bottom: calc(1.866666666666667vw); }
.sd-tf-label { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1a1e2b; }
.sd-tf-req { font-size: calc(2.933333333333333vw); color: #FF453A; font-weight: 500; }
.sd-tf-input {
  width: 100%; min-height: calc(17.333333333333336vw); padding: calc(2.666666666666667vw);
  border-radius: calc(1.866666666666667vw); font-size: calc(3.733333333333334vw); color: #1a1e2b;
  background: #F5F6FA; border: calc(0.13333333333333333vw) solid #EAECF2;
  box-sizing: border-box;
}
.sd-tf-count { text-align: right; font-size: calc(2.933333333333333vw); color: #9aa3b2; margin-top: calc(0.8vw); }

/* === Submit === */
.sd-submit-wrap {
  position: fixed; left: 0; right: 0; bottom: 0;
  padding: calc(2.666666666666667vw) calc(4.266666666666667vw); padding-bottom: calc(calc(2.666666666666667vw) + env(safe-area-inset-bottom));
  background: #fff; box-shadow: 0 -calc(0.5333333333333333vw) calc(3.2vw) rgba(20,30,60,0.08);
  z-index: 99;
}
.sd-submit-btn {
  width: 100%; height: calc(12.8vw); border-radius: calc(6.4vw);
  background: linear-gradient(135deg, #4F6EF7, #6C8CFF);
  color: #fff; font-size: calc(4.266666666666667vw); font-weight: 700;
  border: none; display: flex; align-items: center; justify-content: center;
  transition: opacity 0.2s;
}
.sd-submit-btn:active { opacity: 0.85; }
.sd-submit-btn[disabled] { opacity: 0.6; }

/* === Admin === */
.sd-admin-btns { display: flex; gap: calc(2.1333333333333333vw); flex-wrap: wrap; }
.sd-admin-btn {
  flex: 1; min-width: calc(21.333333333333336vw); text-align: center;
  padding: calc(2.666666666666667vw) 0; border-radius: calc(1.866666666666667vw);
  background: #F5F6FA; font-size: calc(3.4666666666666663vw); color: #4B5563;
  font-weight: 500;
}
.sd-admin-btn-danger { color: #FF453A; background: #FFF0F0; }

/* === Bottom Safe === */
.sd-bottom-safe { height: calc(26.666666666666668vw); }
/* 发起问卷 - 协调版 */

html, body { background: #F0F2F8; }
.page-wrap { padding: calc(2.1333333333333333vw) calc(2.666666666666667vw) 0; }

/* 卡片 */
.se-card {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw) calc(3.2vw); margin-bottom: calc(2.1333333333333333vw);
  box-shadow: 0 2px 12px rgba(0,0,0,0.04);
}
.se-card-head {
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  margin-bottom: calc(2.4vw); padding-bottom: calc(2.1333333333333333vw);
  border-bottom: calc(0.13333333333333333vw) solid #F0F1F5;
}
.se-card-icon { font-size: calc(4vw); }
.se-card-title { font-size: calc(4vw); font-weight: 800; color: #111827; flex: 1; }
.se-card-badge {
  font-size: calc(2.933333333333333vw); color: #6B7280; font-weight: 600;
  padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); background: #F3F4F6; border-radius: calc(1333.2vw);
}

/* 字段 */
.se-field { padding: calc(2.1333333333333333vw) 0; border-bottom: calc(0.13333333333333333vw) solid #F5F5F7; }
.se-field-last { border-bottom: none; padding-bottom: 0; }
.se-label {
  font-size: calc(3.4666666666666663vw); color: #374151; font-weight: 700;
  margin-bottom: calc(1.3333333333333335vw);
}
.se-req { color: #EF4444; }

/* 输入 */
.se-input {
  width: 100%; height: calc(10.133333333333333vw); padding: 0 calc(2.4vw);
  font-size: calc(3.733333333333334vw); color: #111827;
  background: #F7F8FB; border-radius: calc(1.866666666666667vw);
  box-sizing: border-box;
}
.se-input::placeholder, .se-ph { color: #B0B5C0; }
.se-input-lg { font-size: calc(4vw); font-weight: 600; }
.se-textarea {
  width: 100%; min-height: calc(16vw); padding: calc(1.866666666666667vw) calc(2.4vw);
  font-size: calc(3.733333333333334vw); color: #111827; line-height: 1.7;
  background: #F7F8FB; border-radius: calc(1.866666666666667vw);
  box-sizing: border-box;
}
.se-textarea::placeholder { color: #B0B5C0; }

/* 分段选择器 */
.se-seg {
  display: flex; gap: calc(1.6vw);
}
.se-seg-item {
  flex: 1; display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  padding: calc(2.4vw); background: #F7F8FB; border-radius: calc(1.866666666666667vw);
  border: calc(0.26666666666666666vw) solid transparent; transition: all 0.2s;
}
.se-seg-on {
  background: #EEF1FE; border-color: #4F6EF7;
  box-shadow: 0 2px 12px rgba(79,110,247,0.1);
}
.se-seg-dot { font-size: calc(3.4666666666666663vw); color: #6B7280; }
.se-seg-on .se-seg-dot { color: #4F6EF7; }
.se-seg-name { font-size: calc(3.4666666666666663vw); font-weight: 700; color: #374151; display: block; }
.se-seg-on .se-seg-name { color: #4F6EF7; }
.se-seg-tip { font-size: calc(2.666666666666667vw); color: #9CA3AF; display: block; }

/* 开关行 */
.se-switch-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(1.866666666666667vw) calc(2.4vw); background: #F7F8FB; border-radius: calc(1.866666666666667vw);
}
.se-switch-title { font-size: calc(3.733333333333334vw); font-weight: 600; color: #374151; display: block; }
.se-switch-sub { font-size: calc(2.933333333333333vw); color: #9CA3AF; display: block; margin-top: calc(0.26666666666666666vw); }

/* Picker */
.se-picker {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 calc(2.4vw); height: calc(10.133333333333333vw);
  background: #F7F8FB; border-radius: calc(1.866666666666667vw); border: calc(0.26666666666666666vw) solid transparent;
  font-size: calc(3.733333333333334vw); color: #111827;
  transition: all 0.15s;
}
.se-picker:active { background: #EEF1FE; border-color: #4F6EF7; }
.se-picker-arrow { font-size: calc(4vw); color: #B0B5C0; }
.se-field-tip {
  margin-top: calc(1.0666666666666667vw); font-size: calc(2.933333333333333vw); color: #4F6EF7;
  font-weight: 600; padding-left: calc(0.5333333333333333vw);
}

/* 选项编辑 */
.se-opt {
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  margin-bottom: calc(1.3333333333333335vw); animation: optIn 0.2s ease-out;
}
@keyframes optIn {
  from { opacity: 0; transform: translateX(-calc(2.1333333333333333vw)); }
  to { opacity: 1; transform: translateX(0); }
}
.se-opt-num {
  width: calc(6.666666666666667vw); height: calc(6.666666666666667vw); border-radius: calc(1.866666666666667vw);
  background: #F3F4F6; color: #9CA3AF;
  font-size: calc(3.2vw); font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; transition: all 0.2s;
}
.se-opt-filled { background: #EEF1FE; color: #4F6EF7; }
.se-opt-input {
  flex: 1; height: calc(9.066666666666666vw); padding: 0 calc(2.1333333333333333vw);
  font-size: calc(3.733333333333334vw); color: #111827;
  background: #F7F8FB; border-radius: calc(1.866666666666667vw);
}
.se-opt-input::placeholder { color: #B0B5C0; }
.se-opt-del {
  width: calc(6.666666666666667vw); height: calc(6.666666666666667vw); border-radius: calc(1.866666666666667vw);
  background: #FEE2E2; color: #DC2626;
  font-size: calc(2.666666666666667vw); display: flex; align-items: center;
  justify-content: center; flex-shrink: 0;
}
.se-opt-del:active { background: #FECACA; }

/* 添加 */
.se-add {
  display: flex; align-items: center; justify-content: center;
  gap: calc(1.0666666666666667vw); padding: calc(2.1333333333333333vw); margin-top: calc(0.26666666666666666vw);
  border: calc(0.26666666666666666vw) dashed #D1D5DB; border-radius: calc(1.866666666666667vw);
  color: #6B7280; font-size: calc(3.4666666666666663vw); font-weight: 600;
  transition: all 0.2s;
}
.se-add:active { border-color: #4F6EF7; color: #4F6EF7; background: #F8F9FE; }
.se-add-icon {
  width: calc(5.066666666666666vw); height: calc(5.066666666666666vw); border-radius: 50%;
  background: #4F6EF7; color: #fff; font-size: calc(2.933333333333333vw);
  display: flex; align-items: center; justify-content: center;
}

/* 底部提交 - 与页面背景融合 */
.se-submit {
  padding: calc(1.6vw) calc(2.666666666666667vw) calc(2.666666666666667vw);
  padding-bottom: calc(env(safe-area-inset-bottom) + calc(2.666666666666667vw));
}
.se-submit-btn {
  width: 100%; height: calc(11.733333333333333vw); border-radius: calc(5.866666666666666vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; font-size: calc(4vw); font-weight: 800;
  border: none; letter-spacing: calc(0.26666666666666666vw);
  box-shadow: 0 6px 24px rgba(79,110,247,0.35);
}
.se-submit-btn::after { border: none; }
.se-submit-btn:active { transform: scale(0.97); }
.se-submit-btn[disabled] { background: #C7D2FE; box-shadow: none; }

/* 文本字段卡片 */
.se-card-sub { font-size: calc(2.933333333333333vw); color: #9aa3b2; margin-left: calc(1.6vw); }
.se-tf-list { padding: 0 calc(1.0666666666666667vw); }
.se-tf-item {
  background: #F8F9FC; border-radius: calc(2.1333333333333333vw);
  padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw);
  border: calc(0.13333333333333333vw) solid #EAECF2;
}
.se-tf-head {
  display: flex; align-items: center;
  margin-bottom: calc(2.1333333333333333vw);
}
.se-tf-num {
  width: calc(4.8vw); height: calc(4.8vw); border-radius: 50%;
  background: #4F6EF7; color: #fff;
  font-size: calc(2.933333333333333vw); display: flex;
  align-items: center; justify-content: center;
  margin-right: calc(1.6vw);
}
.se-tf-label { font-size: calc(3.4666666666666663vw); font-weight: 600; color: #1a1e2b; flex: 1; }
.se-tf-body { padding: 0 calc(0.5333333333333333vw); }
.se-tf-empty {
  text-align: center; padding: calc(4.266666666666667vw) 0;
  color: #9aa3b2; font-size: calc(3.4666666666666663vw);
}
/* 问卷列表 - 优化版 */

.page-wrap { padding-bottom: calc(18.666666666666668vw); }

/* 统计面板 */
.sv-stat {
  display: flex; gap: 0; margin-bottom: calc(2.666666666666667vw);
  background: #fff; border-radius: calc(3.2vw);
  box-shadow: 0 2px 16px rgba(0,0,0,0.05);
  overflow: hidden;
}
.sv-stat-item {
  flex: 1; text-align: center; padding: calc(3.733333333333334vw) calc(2.1333333333333333vw);
  position: relative;
}
.sv-stat-item:not(:last-child)::after {
  content: ''; position: absolute; right: 0; top: 20%;
  width: calc(0.26666666666666666vw); height: 60%; background: #F0F1F5;
}
.sv-stat-num { font-size: calc(6.4vw); font-weight: 900; line-height: 1.1; }
.sv-stat-lbl { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 600; margin-top: calc(0.5333333333333333vw); }

/* 列表 */
.sv-card {
  display: flex; margin-bottom: calc(2.1333333333333333vw);
  background: #fff; border-radius: calc(2.666666666666667vw);
  overflow: hidden;
  box-shadow: 0 2px 12px rgba(0,0,0,0.04);
  transition: transform 0.15s;
}
.sv-card:active { transform: scale(0.98); }

/* 左侧状态条 */
.sv-bar { width: calc(1.0666666666666667vw); flex-shrink: 0; }
.sv-bar-open { background: linear-gradient(180deg, #34D399, #059669); }
.sv-bar-closed { background: linear-gradient(180deg, #D1D5DB, #9CA3AF); }

/* 内容区 */
.sv-body { flex: 1; padding: calc(2.933333333333333vw) calc(3.2vw); min-width: 0; }

/* 标题行 */
.sv-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: calc(1.3333333333333335vw); margin-bottom: calc(1.0666666666666667vw);
}
.sv-title { flex: 1; font-size: calc(4vw); font-weight: 700; color: #111827; line-height: 1.5; }
.sv-status {
  flex-shrink: 0; padding: calc(0.5333333333333333vw) calc(1.866666666666667vw); border-radius: calc(1333.2vw);
  font-size: calc(2.666666666666667vw); font-weight: 700;
}
.sv-st-open { background: #D1FAE5; color: #059669; }
.sv-st-closed { background: #F3F4F6; color: #9CA3AF; }

/* 描述 */
.sv-desc { font-size: calc(3.2vw); color: #6B7280; line-height: 1.6; margin-bottom: calc(1.3333333333333335vw); }

/* 标签 */
.sv-tags { display: flex; gap: calc(1.0666666666666667vw); margin-bottom: calc(1.6vw); }
.sv-tag {
  display: inline-flex; padding: calc(0.5333333333333333vw) calc(1.866666666666667vw);
  background: #EEF1FE; color: #4F6EF7;
  border-radius: calc(1333.2vw); font-size: calc(2.666666666666667vw); font-weight: 600;
}
.sv-tag-gray { background: #F3F4F6; color: #6B7280; }

/* 底栏 */
.sv-foot {
  display: flex; align-items: center; gap: calc(1.6vw);
  font-size: calc(2.933333333333333vw); color: #9CA3AF;
}
.sv-foot-l { display: flex; align-items: center; gap: calc(0.5333333333333333vw); }
.sv-foot-icon { font-size: calc(2.933333333333333vw); }
.sv-foot-num { font-weight: 700; color: #374151; }
.sv-foot-time { margin-left: auto; }
.sv-deadline { color: #F59E0B; font-weight: 600; }

/* 操作 */
.sv-actions {
  display: flex; gap: calc(1.3333333333333335vw); margin-top: calc(1.866666666666667vw);
  padding-top: calc(1.866666666666667vw); border-top: calc(0.13333333333333333vw) solid #F0F1F5;
}
.sv-act {
  padding: calc(1.0666666666666667vw) calc(2.933333333333333vw); border-radius: calc(3.2vw);
  font-size: calc(2.933333333333333vw); font-weight: 600;
}
.sv-act-result { background: #DBEAFE; color: #2563EB; }
.sv-act-close { background: #FEF3C7; color: #D97706; }
.sv-act-del { background: #FEE2E2; color: #DC2626; }
.sv-act:active { opacity: 0.7; }

/* 空状态 */
.empty-state { text-align: center; padding: calc(10.666666666666668vw) calc(5.333333333333334vw); }
.empty-icon { font-size: calc(10.666666666666668vw); margin-bottom: calc(2.1333333333333333vw); }
.empty-title { font-size: calc(4.266666666666667vw); font-weight: 700; color: #374151; margin-bottom: calc(1.0666666666666667vw); }
.empty-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; margin-bottom: calc(3.733333333333334vw); }
.empty-btn {
  display: inline-block; padding: calc(2.4vw) calc(6.4vw);
  background: linear-gradient(135deg, #4F6EF7, #6366F1);
  color: #fff; border-radius: calc(5.333333333333334vw); font-size: calc(3.733333333333334vw); font-weight: 700;
  box-shadow: 0 6px 20px rgba(79,110,247,0.3);
}

.load-tip { text-align: center; padding: calc(3.733333333333334vw) 0; font-size: calc(3.2vw); color: #9CA3AF; }

.fab {
  position: fixed; bottom: calc(24vw); right: calc(4.8vw);
  width: calc(14.399999999999999vw); height: calc(14.399999999999999vw); border-radius: 50%;
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(6.4vw); font-weight: 300;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 32px rgba(79,110,247,0.45);
  z-index: 99;
}
.fab:active { transform: scale(0.88); }

/* ============================================
   投票结果 - 国家级优化版
   ============================================ */

.page-wrap { padding: calc(2.1333333333333333vw) calc(3.2vw) calc(10.666666666666668vw); }

/* ========== 骨架屏 ========== */
.sr-skeleton-hero {
  height: calc(37.333333333333336vw); border-radius: calc(3.2vw);
  background: linear-gradient(90deg, #F0F1F5 25%, #E5E7EB 50%, #F0F1F5 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  margin-bottom: calc(2.666666666666667vw);
}
.sr-skeleton-bar {
  height: calc(10.666666666666668vw); border-radius: calc(2.1333333333333333vw);
  background: linear-gradient(90deg, #F0F1F5 25%, #E5E7EB 50%, #F0F1F5 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  margin-bottom: calc(2.1333333333333333vw);
}
@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ========== 顶部操作栏 ========== */
.sr-topbar {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(2.1333333333333333vw);
}
.sr-topbar-back {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(1.6vw) calc(2.666666666666667vw);
  background: rgba(79,110,247,0.08);
  border-radius: calc(1333.2vw);
}
.sr-topbar-icon { font-size: calc(3.733333333333334vw); }
.sr-topbar-label { font-size: calc(3.2vw); color: #4F6EF7; font-weight: 600; }

.sr-share-btn {
  display: flex; align-items: center; gap: calc(0.8vw);
  padding: calc(1.6vw) calc(3.2vw);
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; border-radius: calc(1333.2vw);
  font-size: calc(3.2vw); font-weight: 600;
  border: none; line-height: 1;
}
.sr-share-btn::after { border: none; }
.sr-share-icon { font-size: calc(3.4666666666666663vw); }
.sr-share-label { font-size: calc(3.2vw); }

/* ========== Hero卡片 ========== */
.sr-hero {
  position: relative; border-radius: calc(3.733333333333334vw); overflow: hidden;
  margin-bottom: calc(2.666666666666667vw);
  background: linear-gradient(145deg, #0F172A 0%, #1E293B 40%, #312E81 100%);
  box-shadow: 0 8px 40px rgba(49,46,129,0.25);
}
.sr-hero-glow {
  position: absolute; top: -calc(8vw); right: -calc(5.333333333333334vw);
  width: calc(32vw); height: calc(32vw);
  background: radial-gradient(circle, rgba(79,110,247,0.3), transparent 70%);
  border-radius: 50%;
}
.sr-hero-inner {
  position: relative; z-index: 1;
  padding: calc(4.266666666666667vw) calc(3.733333333333334vw) calc(2.666666666666667vw);
}

/* 标签 */
.sr-tags { display: flex; gap: calc(1.0666666666666667vw); margin-bottom: calc(2.4vw); flex-wrap: wrap; }
.sr-tag {
  display: inline-flex; align-items: center; gap: calc(0.8vw);
  padding: calc(0.8vw) calc(2.1333333333333333vw);
  border-radius: calc(1333.2vw); font-size: calc(2.933333333333333vw); font-weight: 700;
  background: rgba(255,255,255,0.12); color: #fff;
  backdrop-filter: blur(10px);
}
.sr-tag-type { background: rgba(255,255,255,0.2); }
.sr-tag-open { background: rgba(52,199,89,0.35); }
.sr-tag-closed { background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.6); }
.sr-tag-dot {
  width: calc(1.3333333333333335vw); height: calc(1.3333333333333335vw); border-radius: 50%;
}
.sr-dot-open { background: #34C759; box-shadow: 0 0 calc(1.0666666666666667vw) rgba(52,199,89,0.6); }
.sr-dot-closed { background: rgba(255,255,255,0.4); }

/* 标题 */
.sr-title {
  font-size: calc(4.8vw); font-weight: 800; color: #fff;
  line-height: 1.4; display: block; margin-bottom: calc(2.1333333333333333vw);
  letter-spacing: calc(0.06666666666666667vw);
}

/* 获胜者横幅 */
.sr-winner-bar {
  display: flex; align-items: center; gap: calc(1.3333333333333335vw);
  padding: calc(1.866666666666667vw) calc(2.666666666666667vw);
  background: rgba(255,215,0,0.15);
  border: calc(0.13333333333333333vw) solid rgba(255,215,0,0.3);
  border-radius: calc(2.1333333333333333vw);
  margin-bottom: calc(2.933333333333333vw);
}
.sr-tie-bar { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.15); }
.sr-winner-icon { font-size: calc(4.266666666666667vw); }
.sr-winner-text { font-size: calc(3.4666666666666663vw); color: #FFD700; font-weight: 700; flex: 1; }

/* 数据 */
.sr-stats {
  display: flex; align-items: center; gap: 0;
  padding-top: calc(2.666666666666667vw); border-top: calc(0.13333333333333333vw) solid rgba(255,255,255,0.1);
}
.sr-stat { flex: 1; text-align: center; }
.sr-stat-divider {
  width: calc(0.13333333333333333vw); height: calc(6.666666666666667vw);
  background: rgba(255,255,255,0.12);
}
.sr-stat-num-row { display: flex; align-items: baseline; justify-content: center; gap: calc(0.5333333333333333vw); }
.sr-stat-num { font-size: calc(6.4vw); font-weight: 900; line-height: 1.1; }
.sr-stat-unit { font-size: calc(2.933333333333333vw); color: rgba(255,255,255,0.5); font-weight: 600; }
.sr-stat-lbl { font-size: calc(2.933333333333333vw); color: rgba(255,255,255,0.55); font-weight: 600; margin-top: calc(0.8vw); display: block; }

/* 截止时间 */
.sr-deadline {
  display: flex; align-items: center; gap: calc(1.0666666666666667vw);
  margin-top: calc(2.4vw); padding-top: calc(2.1333333333333333vw);
  border-top: calc(0.13333333333333333vw) solid rgba(255,255,255,0.08);
}
.sr-deadline-icon { font-size: calc(3.2vw); }
.sr-deadline-text { font-size: calc(2.933333333333333vw); color: rgba(255,255,255,0.55); font-weight: 500; }

/* ========== 通用区块标题 ========== */
.sr-section-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: calc(3.2vw);
}
.sr-section-title { font-size: calc(4vw); font-weight: 800; color: #111827; }
.sr-section-sub { font-size: calc(3.2vw); color: #9CA3AF; font-weight: 600; }

/* ========== 柱状图卡片 ========== */
.sr-bar-card {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw) calc(3.2vw); margin-bottom: calc(2.666666666666667vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-bar {
  display: flex; gap: calc(1.6vw); margin-bottom: calc(3.4666666666666663vw);
  position: relative;
}
.sr-bar:last-child { margin-bottom: 0; }
.sr-bar-winner {
  padding: calc(2.1333333333333333vw) calc(2.1333333333333333vw) calc(2.1333333333333333vw) calc(1.6vw);
  margin: -calc(1.0666666666666667vw) -calc(1.0666666666666667vw) calc(2.4vw) -calc(1.0666666666666667vw);
  background: rgba(255,215,0,0.04);
  border-radius: calc(2.1333333333333333vw);
  border: calc(0.13333333333333333vw) solid rgba(255,215,0,0.2);
}

/* 勋章 */
.sr-bar-medal {
  width: calc(7.466666666666668vw); height: calc(7.466666666666668vw); flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(4.8vw);
}

.sr-bar-body { flex: 1; min-width: 0; }
.sr-bar-head {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: calc(1.6vw); margin-bottom: calc(1.3333333333333335vw);
}
.sr-bar-left { display: flex; align-items: center; gap: calc(1.3333333333333335vw); flex: 1; min-width: 0; }
.sr-bar-dot {
  width: calc(1.866666666666667vw); height: calc(1.866666666666667vw); border-radius: 50%;
  flex-shrink: 0;
}
.sr-bar-label {
  font-size: calc(3.733333333333334vw); color: #374151; font-weight: 600;
  max-width: 55%;
}
.sr-bar-winner-tag {
  font-size: calc(2.666666666666667vw); padding: calc(0.26666666666666666vw) calc(1.3333333333333335vw);
  background: linear-gradient(135deg, #FFD700, #FFA000);
  color: #fff; border-radius: calc(1333.2vw);
  font-weight: 700; flex-shrink: 0;
}
.sr-bar-nums { display: flex; align-items: baseline; gap: calc(0.8vw); flex-shrink: 0; }
.sr-bar-count { font-size: calc(3.733333333333334vw); font-weight: 800; }
.sr-bar-pct { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 600; }

.sr-bar-track {
  height: calc(2.933333333333333vw); background: #F0F1F5;
  border-radius: calc(1.4666666666666666vw); overflow: hidden;
}
.sr-bar-fill {
  height: 100%; border-radius: calc(1.4666666666666666vw);
  min-width: calc(0.8vw);
  transition: width 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}
.sr-bar-shine {
  position: absolute; top: 0; left: 0; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
  animation: barShine 2s ease-in-out infinite;
}
@keyframes barShine {
  0%, 100% { opacity: 0; }
  50% { opacity: 1; }
}

/* ========== 环形图卡片 ========== */
.sr-ring-card {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw) calc(3.2vw); margin-bottom: calc(2.666666666666667vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-ring-chart { }
.sr-ring-svg-wrap {
  display: flex; align-items: center; justify-content: center;
  padding: calc(4vw) 0; position: relative;
}
.sr-ring-donut {
  width: calc(42.66666666666667vw); height: calc(42.66666666666667vw); border-radius: 50%;
  position: relative;
}
.sr-ring-center {
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  text-align: center; z-index: 2;
  background: #fff; width: calc(26.666666666666668vw); height: calc(26.666666666666668vw);
  border-radius: 50%; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
}
.sr-ring-total { font-size: calc(7.466666666666668vw); font-weight: 900; color: #111827; line-height: 1.1; }
.sr-ring-lbl { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 600; margin-top: calc(0.5333333333333333vw); }

.sr-ring-legend { margin-top: calc(1.3333333333333335vw); }
.sr-legend-item {
  display: flex; align-items: center; gap: calc(1.6vw);
  padding: calc(1.866666666666667vw) 0;
  border-bottom: calc(0.13333333333333333vw) solid #F3F4F6;
}
.sr-legend-item:last-child { border-bottom: none; }
.sr-legend-dot {
  width: calc(2.1333333333333333vw); height: calc(2.1333333333333333vw); border-radius: 50%;
  flex-shrink: 0;
}
.sr-legend-label { flex: 1; font-size: calc(3.4666666666666663vw); color: #374151; font-weight: 600; }
.sr-legend-right { display: flex; align-items: baseline; gap: calc(1.0666666666666667vw); flex-shrink: 0; }
.sr-legend-count { font-size: calc(3.4666666666666663vw); color: #111827; font-weight: 700; }
.sr-legend-pct { font-size: calc(2.933333333333333vw); color: #9CA3AF; font-weight: 600; }

/* ========== 领奖台 ========== */
.sr-podium {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw) calc(3.2vw) calc(1.0666666666666667vw); margin-bottom: calc(2.666666666666667vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-podium-row {
  display: flex; align-items: flex-end; justify-content: center;
  gap: calc(2.1333333333333333vw); padding: calc(2.666666666666667vw) 0 0;
}
.sr-podium-item {
  display: flex; flex-direction: column; align-items: center;
  gap: calc(1.0666666666666667vw); flex: 1; max-width: calc(26.666666666666668vw);
}
.sr-podium-avatar {
  width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(5.333333333333334vw); margin-bottom: calc(0.5333333333333333vw);
}
.sr-podium-avatar-gold {
  width: calc(12.8vw); height: calc(12.8vw);
  font-size: calc(6.4vw);
  box-shadow: 0 4px 20px rgba(255,215,0,0.4);
}
.sr-podium-name {
  font-size: calc(3.2vw); font-weight: 700; color: #111827;
  max-width: 100%; text-align: center;
}
.sr-podium-votes {
  font-size: calc(2.933333333333333vw); color: #6B7280; font-weight: 600;
}
.sr-podium-votes-gold { color: #B8860B; }
.sr-podium-bar {
  width: 70%; border-radius: calc(1.0666666666666667vw) calc(1.0666666666666667vw) 0 0;
  margin-top: calc(0.5333333333333333vw);
}

/* ========== 投票者 ========== */
.sr-voter-card {
  background: #fff; border-radius: calc(3.2vw);
  padding: calc(3.733333333333334vw) calc(3.2vw); margin-bottom: calc(2.666666666666667vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-voter {
  display: flex; align-items: center; gap: calc(2.1333333333333333vw);
  padding: calc(2.4vw) 0; border-bottom: calc(0.13333333333333333vw) solid #F3F4F6;
}
.sr-voter:last-child { border-bottom: none; }
.sr-voter-avatar {
  width: calc(9.6vw); height: calc(9.6vw); border-radius: 50%;
  flex-shrink: 0; border: calc(0.26666666666666666vw) solid #E5E7EB;
}
.sr-voter-avatar-text {
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(4vw); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  border: none;
}
.sr-voter-info { flex: 1; min-width: 0; }
.sr-voter-name { font-size: calc(3.733333333333334vw); font-weight: 600; color: #111827; display: block; }
.sr-voter-tags { display: flex; flex-wrap: wrap; gap: calc(0.8vw); margin-top: calc(0.8vw); }
.sr-voter-tag {
  font-size: calc(2.933333333333333vw); padding: calc(0.5333333333333333vw) calc(1.866666666666667vw);
  background: #EEF1FE; color: #4F6EF7;
  border-radius: calc(1333.2vw); font-weight: 600;
}
.sr-voter-time {
  font-size: calc(2.666666666666667vw); color: #C0C4CC; font-weight: 500;
  display: block; margin-top: calc(0.8vw);
}

/* ========== 匿名 ========== */
.sr-anon {
  text-align: center; padding: calc(8vw) calc(5.333333333333334vw);
  background: #fff; border-radius: calc(3.2vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-anon-circle {
  width: calc(16vw); height: calc(16vw); border-radius: 50%;
  background: linear-gradient(135deg, #F3F4F6, #E5E7EB);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto calc(2.666666666666667vw);
}
.sr-anon-emoji { font-size: calc(7.466666666666668vw); }
.sr-anon-title { font-size: calc(4vw); font-weight: 800; color: #111827; display: block; margin-bottom: calc(1.3333333333333335vw); }
.sr-anon-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; font-weight: 500; line-height: 1.5; }

/* ========== 零票 ========== */
.sr-empty {
  text-align: center; padding: calc(10.666666666666668vw) calc(5.333333333333334vw);
  background: #fff; border-radius: calc(3.2vw);
  box-shadow: 0 2px 20px rgba(0,0,0,0.04);
}
.sr-empty-circle {
  width: calc(18.666666666666668vw); height: calc(18.666666666666668vw); border-radius: 50%;
  background: linear-gradient(135deg, #EEF1FE, #E0E4FD);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto calc(3.2vw);
}
.sr-empty-emoji { font-size: calc(8.533333333333333vw); }
.sr-empty-title { font-size: calc(4.266666666666667vw); font-weight: 800; color: #111827; display: block; margin-bottom: calc(1.6vw); }
.sr-empty-desc { font-size: calc(3.4666666666666663vw); color: #9CA3AF; font-weight: 500; margin-bottom: calc(4vw); }
.sr-empty-share {
  display: inline-flex; align-items: center; gap: calc(1.0666666666666667vw);
  padding: calc(2.1333333333333333vw) calc(5.333333333333334vw);
  background: linear-gradient(135deg, #4F6EF7, #7C3AED);
  color: #fff; font-size: calc(3.733333333333334vw); font-weight: 700;
  border-radius: calc(1333.2vw); border: none;
  box-shadow: 0 4px 16px rgba(79,110,247,0.3);
}
.sr-empty-share::after { border: none; }

/* ========== 动画 ========== */
.fade-in-down {
  animation: fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1) both;
}
.fade-in-up {
  animation: fadeInUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) both;
}
.fade-in-right {
  animation: fadeInRight 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}
@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-calc(2.666666666666667vw)); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(calc(2.666666666666667vw)); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInRight {
  from { opacity: 0; transform: translateX(calc(2.1333333333333333vw)); }
  to { opacity: 1; transform: translateX(0); }
}
/* 文字回答 */
.sr-text-card {
  margin: calc(3.2vw); background: #fff;
  border-radius: calc(3.2vw); padding: calc(4.266666666666667vw) calc(3.733333333333334vw);
  box-shadow: 0 calc(0.26666666666666666vw) calc(1.6vw) rgba(0,0,0,0.04);
}
.sr-text-group { margin-bottom: calc(3.2vw); }
.sr-text-label {
  font-size: calc(3.733333333333334vw); font-weight: 600; color: #4F6EF7;
  margin-bottom: calc(2.1333333333333333vw); padding-left: calc(1.0666666666666667vw);
  border-left: calc(0.8vw) solid #4F6EF7;
}
.sr-text-item {
  padding: calc(2.666666666666667vw); margin-bottom: calc(1.6vw);
  background: #F8F9FC; border-radius: calc(1.6vw);
}
.sr-text-user {
  font-size: calc(3.2vw); color: #4F6EF7; font-weight: 600;
  margin-bottom: calc(1.0666666666666667vw);
}
.sr-text-content {
  font-size: calc(3.733333333333334vw); color: #1a1e2b; line-height: 1.6;
  word-break: break-all;
}
.sr-text-empty {
  text-align: center; padding: calc(2.666666666666667vw) 0;
  color: #9aa3b2; font-size: calc(3.2vw);
}
/* 新用户引导页 */

.welcome-page {
  height: 100vh; display: flex; flex-direction: column;
  background: linear-gradient(180deg, #F8F9FC 0%, #EEF1F8 100%);
  overflow: hidden;
}

/* 跳过 */
.wl-skip {
  position: fixed; top: calc(10.666666666666668vw); right: calc(4.8vw); z-index: 10;
  padding: calc(1.6vw) calc(3.2vw); border-radius: calc(1333.2vw);
  background: rgba(0,0,0,0.06); color: #6B7280;
  font-size: calc(3.4666666666666663vw); font-weight: 600;
}

/* Swiper */
.wl-swiper { flex: 1; }

/* 单页 */
.wl-slide {
  height: 100%; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 0 calc(8vw) calc(26.666666666666668vw); box-sizing: border-box;
}

/* 大图标 */
.wl-emoji-wrap {
  width: calc(32vw); height: calc(32vw); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  margin-bottom: calc(7.466666666666668vw);
  animation: wlFloat 3s ease-in-out infinite;
}
@keyframes wlFloat {
  0%,100% { transform: translateY(0); }
  50%      { transform: translateY(-calc(2.1333333333333333vw)); }
}
.wl-emoji-ring {
  width: calc(24vw); height: calc(24vw); border-radius: 50%;
  border: calc(0.5333333333333333vw) dashed; display: flex;
  align-items: center; justify-content: center;
}
.wl-emoji {
  font-size: calc(10.666666666666668vw); line-height: 1;
  animation: wlBounce 0.6s cubic-bezier(0.34,1.56,0.64,1) both;
}

/* 文字区 */
.wl-text {
  text-align: center; width: 100%;
  animation: wlFadeUp 0.5s cubic-bezier(0.16,1,0.3,1) both;
}
@keyframes wlFadeUp {
  from { opacity: 0; transform: translateY(calc(4vw)); }
  to   { opacity: 1; transform: translateY(0); }
}
.wl-subtitle {
  font-size: calc(3.4666666666666663vw); font-weight: 700; letter-spacing: calc(0.5333333333333333vw);
  display: block; margin-bottom: calc(1.3333333333333335vw);
  text-transform: uppercase;
}
.wl-title {
  font-size: calc(6.933333333333333vw); font-weight: 900; color: #111827;
  display: block; line-height: 1.3; margin-bottom: calc(1.0666666666666667vw);
  letter-spacing: calc(0.26666666666666666vw);
}
.wl-desc {
  font-size: calc(4vw); color: #6B7280; font-weight: 600;
  display: block; margin-bottom: calc(3.2vw);
}
.wl-divider {
  width: calc(8vw); height: calc(0.8vw); border-radius: calc(0.4vw);
  margin: 0 auto calc(2.666666666666667vw);
}
.wl-detail {
  font-size: calc(3.4666666666666663vw); color: #9CA3AF; line-height: 1.6;
  font-weight: 500;
}

/* 底部 */
.wl-footer {
  position: fixed; bottom: 0; left: 0; right: 0;
  padding: calc(4.266666666666667vw) calc(6.4vw) calc(10.666666666666668vw);
  background: linear-gradient(0deg, #F8F9FC 60%, transparent);
  display: flex; flex-direction: column; align-items: center;
  gap: calc(4.266666666666667vw);
}

/* 指示点 */
.wl-dots { display: flex; gap: calc(1.866666666666667vw); }
.wl-dot {
  width: calc(1.866666666666667vw); height: calc(1.866666666666667vw); border-radius: 50%;
  background: #D1D5DB;
  transition: all 0.3s cubic-bezier(0.16,1,0.3,1);
}
.wl-dot.active {
  width: calc(5.333333333333334vw); border-radius: calc(0.9333333333333335vw);
  box-shadow: 0 2px calc(1.0666666666666667vw) rgba(0,0,0,0.15);
}

/* 按钮 */
.wl-btn {
  width: 100%; padding: calc(3.733333333333334vw) 0; border-radius: calc(3.2vw);
  text-align: center; color: #fff; font-size: calc(4.266666666666667vw); font-weight: 800;
  letter-spacing: calc(0.26666666666666666vw);
  box-shadow: 0 8px calc(3.733333333333334vw) rgba(0,0,0,0.15);
  transition: transform 0.15s;
}
.wl-btn:active { transform: scale(0.96); }
/* pages/work/detail - 作品详情/评分 */
.page-wrap { padding: 0 calc(3.2vw) calc(5.333333333333334vw); }

.card { padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }

/* 作品头部 */
.hero { padding: calc(3.733333333333334vw); }
.hero-top { display: flex; align-items: flex-start; gap: calc(1.6vw); }
.hero-title { font-size: calc(4.8vw); font-weight: 700; color: #1E2130; line-height: 1.35; }
.award-badge { display: flex; align-items: center; gap: calc(1.6vw); margin-top: calc(2.1333333333333333vw); padding: calc(1.866666666666667vw) calc(2.666666666666667vw); border-radius: calc(2.1333333333333333vw); background: #FFFBEB; border: calc(0.26666666666666666vw) solid #FDE68A; }
.award-badge-icon { font-size: calc(5.333333333333334vw); }
.award-badge-text { font-size: calc(3.733333333333334vw); font-weight: 700; color: #B45309; }
.award-badge-rank { font-size: calc(3.2vw); color: #92400E; margin-left: auto; }
.hero-meta { margin-top: calc(2.666666666666667vw); display: flex; flex-direction: column; gap: calc(1.3333333333333335vw); }
.meta-row { font-size: calc(3.4666666666666663vw); color: #4B5563; display: flex; align-items: center; gap: calc(1.0666666666666667vw); }
.author-row { font-weight: 500; }
.author-avatar { width: calc(6.4vw); height: calc(6.4vw); border-radius: 50%; background: #EEF1FE; flex-shrink: 0; }
.author-avatar-default { display: flex; align-items: center; justify-content: center; color: #4F6EF7; font-size: calc(2.933333333333333vw); font-weight: 700; }

/* 作品简介 */
.rich-text { font-size: calc(3.733333333333334vw); color: #374151; line-height: 1.8; word-break: break-all; }

/* 平均分卡片 */
.score-card { display: flex; align-items: center; }
.score-left { text-align: center; flex-shrink: 0; padding: 0 calc(4.266666666666667vw) 0 calc(1.0666666666666667vw); }
.score-num { font-size: calc(8.533333333333333vw); font-weight: 800; color: #3B5DE7; line-height: 1; }
.score-label { font-size: calc(3.2vw); color: #4B5563; margin-top: calc(0.8vw); }
.score-divide { width: calc(0.26666666666666666vw); height: calc(10.666666666666668vw); background: #E5E7EB; }
.score-right { flex: 1; padding-left: calc(4.266666666666667vw); display: flex; flex-direction: column; gap: calc(1.3333333333333335vw); }
.sr-row { display: flex; align-items: center; gap: calc(1.3333333333333335vw); }
.sr-num { font-size: calc(4.266666666666667vw); font-weight: 700; color: #1E2130; }
.sr-label { font-size: calc(3.2vw); color: #4B5563; }
.text-primary { color: #4F6EF7; }
.text-success { color: #16A34A; }
.rank-medal { font-size: calc(4vw); }

/* 附件 */
.file-list { display: flex; flex-direction: column; gap: calc(1.3333333333333335vw); }
.file-item { display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(2.666666666666667vw); background: #F9FAFB; border-radius: calc(2.1333333333333333vw); }
.file-icon { width: calc(8.533333333333333vw); height: calc(8.533333333333333vw); border-radius: calc(1.866666666666667vw); display: flex; align-items: center; justify-content: center; font-size: calc(2.933333333333333vw); font-weight: 700; color: #fff; flex-shrink: 0; }
.file-type-PDF { background: #EF4444; }
.file-type-DOC { background: #3B82F6; }
.file-type-XLS { background: #10B981; }
.file-type-PPT { background: #F97316; }
.file-type-ZIP { background: #8B5CF6; }
.file-type-IMG { background: #EC4899; }
.file-type-VIDEO { background: #14B8A6; }
.file-type-AUDIO { background: #6366F1; }
.file-type-TXT { background: #6B7280; }
.file-type-CODE { background: #0EA5E9; }
.file-type-FILE { background: #9CA3AF; }
.file-info { min-width: 0; }
.file-name { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.file-meta { font-size: calc(2.933333333333333vw); color: #9CA3AF; margin-top: calc(0.5333333333333333vw); }
.file-arrow { font-size: calc(4.266666666666667vw); color: #C4C9D4; flex-shrink: 0; }

/* 我的评分 */
.my-score-banner { display: flex; align-items: center; gap: calc(2.666666666666667vw); padding: calc(2.666666666666667vw) calc(3.2vw); background: linear-gradient(135deg, #EEF1FE, #E0E7FF); border-radius: calc(2.1333333333333333vw); margin-bottom: calc(2.666666666666667vw); }
.msb-left { display: flex; align-items: baseline; gap: calc(1.6vw); }
.msb-label { font-size: calc(3.2vw); color: #4B5563; }
.msb-score { font-size: calc(6.4vw); font-weight: 800; color: #4F6EF7; }
.msb-comment { flex: 1; font-size: calc(3.2vw); color: #4B5563; word-break: break-all; }

/* 评分输入 */
.siz-row { margin-bottom: calc(1.0666666666666667vw); }
.siz-label { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.siz-score-box { display: flex; align-items: baseline; gap: calc(1.0666666666666667vw); }
.siz-score-input { width: calc(18.666666666666668vw); text-align: center; font-size: calc(6.4vw); font-weight: 800; color: #4F6EF7; background: #F7F8FB; border-radius: calc(1.6vw); height: calc(10.666666666666668vw); }
.siz-unit { font-size: calc(3.4666666666666663vw); color: #6B7280; }
.siz-tip { font-size: calc(2.933333333333333vw); color: #9CA3AF; margin-top: calc(1.0666666666666667vw); }
.form-label { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.form-textarea { width: 100%; box-sizing: border-box; margin-top: calc(1.6vw); padding: calc(2.666666666666667vw); background: #F7F8FB; border-radius: calc(2.1333333333333333vw); font-size: calc(3.4666666666666663vw); color: #1E2130; min-height: calc(16vw); }

/* 评分明细 */
.score-detail-list { display: flex; flex-direction: column; gap: calc(1.6vw); }
.sd-item { padding: calc(2.666666666666667vw); background: #F9FAFB; border-radius: calc(2.1333333333333333vw); }
.sd-head { margin-bottom: calc(1.0666666666666667vw); }
.sd-judge { display: flex; align-items: center; gap: calc(1.6vw); }
.sd-avatar { width: calc(7.466666666666668vw); height: calc(7.466666666666668vw); border-radius: 50%; background: #EEF1FE; color: #4F6EF7; display: flex; align-items: center; justify-content: center; font-size: calc(3.2vw); font-weight: 700; }
.sd-name { font-size: calc(3.4666666666666663vw); font-weight: 600; color: #1E2130; }
.sd-score { font-size: calc(4.266666666666667vw); font-weight: 800; color: #4F6EF7; }
.sd-comment { font-size: calc(3.4666666666666663vw); color: #374151; line-height: 1.6; word-break: break-all; }
.sd-time { font-size: calc(2.933333333333333vw); color: #9CA3AF; margin-top: calc(1.0666666666666667vw); }

/* 普通成员提示 */
.member-tip { display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(3.733333333333334vw); }
.mt-icon { font-size: calc(5.333333333333334vw); }
.mt-text { font-size: calc(3.4666666666666663vw); color: #6B7280; line-height: 1.6; flex: 1; }
/* 奖项徽章配色 */
.award-rank-1 { background: #FFFBEB; border-color: #FDE68A; }
.award-rank-2 { background: #F8FAFC; border-color: #E2E8F0; }
.award-rank-3 { background: #FFF7ED; border-color: #FDBA74; }

/* 评分输入区 */
.score-input-zone { margin-top: calc(2.666666666666667vw); }
/* ===== 评分界面增强 ===== */
/* 我的评分操作 */
.my-score-actions { display: flex; gap: calc(2.1333333333333333vw); margin-top: calc(2.1333333333333333vw); }
.msa-btn {
  flex: 1; text-align: center; padding: calc(2.1333333333333333vw) 0; border-radius: calc(1.866666666666667vw);
  font-size: calc(3.4666666666666663vw); font-weight: 600;
}
.msa-edit { background: #EEF1FE; color: #4F6EF7; }
.msa-clear { background: #FEF2F2; color: #EF4444; }
.msa-btn:active { opacity: 0.85; }

/* 快捷分数 */
.quick-scores { display: flex; flex-wrap: wrap; gap: calc(1.6vw); margin-top: calc(2.1333333333333333vw); }
.qs-item {
  min-width: calc(11.733333333333333vw); text-align: center; padding: calc(1.6vw) 0; border-radius: calc(133.20000000000002vw);
  background: #F3F4F6; color: #4B5563; font-size: calc(3.4666666666666663vw); font-weight: 600;
}
.qs-on { background: #4F6EF7; color: #fff; box-shadow: 0 calc(0.5333333333333333vw) calc(1.6vw) rgba(79,110,247,0.35); }
.qs-item:active { opacity: 0.85; }

/* 快捷评语 */
.quick-comments { display: flex; flex-wrap: wrap; gap: calc(1.6vw); margin-top: calc(2.1333333333333333vw); }
.qc-item {
  padding: calc(1.3333333333333335vw) calc(2.666666666666667vw); border-radius: calc(133.20000000000002vw); background: #F0FDF4; color: #16A34A;
  font-size: calc(3.2vw); border: calc(0.13333333333333333vw) solid #BBF7D0;
}
.qc-item:active { opacity: 0.85; }

/* 评分表单按钮行 */
.score-form-actions { display: flex; gap: calc(2.1333333333333333vw); margin-top: calc(3.2vw); }
.score-form-actions .btn-ghost { flex-shrink: 0; padding: 0 calc(5.333333333333334vw); }

/* 评分明细：我的评分高亮 */
.sd-mine { background: #EEF1FE; border: calc(0.26666666666666666vw) solid #C7D2FE; }
.sd-mine-tag {
  margin-left: calc(1.0666666666666667vw); font-size: calc(2.666666666666667vw); color: #4F6EF7; background: #E0E7FF;
  padding: calc(0.26666666666666666vw) calc(1.6vw); border-radius: calc(133.20000000000002vw); flex-shrink: 0;
}

/* pages/work/manage - 作品管理 */
.page-wrap { padding: 0 calc(3.2vw) calc(5.333333333333334vw); }

.card { padding: calc(3.2vw); margin-bottom: calc(2.1333333333333333vw); }

/* 顶部大赛选择 */
.top-bar { padding: calc(2.666666666666667vw) calc(3.2vw); }
.tb-row { margin-bottom: calc(2.1333333333333333vw); }
.tb-label { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.tb-picker { display: flex; align-items: center; gap: calc(1.0666666666666667vw); color: #4F6EF7; font-size: calc(3.733333333333334vw); font-weight: 600; }
.tb-arrow { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.tb-empty { font-size: calc(3.4666666666666663vw); color: #9CA3AF; }

/* 评委筛选 */
.status-filter { display: flex; gap: calc(1.6vw); white-space: nowrap; padding: calc(0.5333333333333333vw) 0 calc(2.1333333333333333vw); }
.sf-item { flex-shrink: 0; padding: calc(1.3333333333333335vw) calc(3.4666666666666663vw); border-radius: calc(4.266666666666667vw); background: #F3F4F6; font-size: calc(3.2vw); color: #4B5563; transition: all 0.2s; }
.sf-item.active { background: #4F6EF7; color: #fff; font-weight: 600; }
.sf-item:active { opacity: 0.85; }

/* Tab */
.tab-bar { display: flex; background: #F7F8FB; border-radius: calc(2.1333333333333333vw); padding: calc(0.5333333333333333vw); }
.tab-item { flex: 1; text-align: center; padding: calc(2.1333333333333333vw); border-radius: calc(1.866666666666667vw); font-size: calc(3.733333333333334vw); color: #4B5563; font-weight: 500; transition: all 0.2s; }
.tab-on { background: #fff; color: #4F6EF7; font-weight: 700; box-shadow: 0 calc(0.26666666666666666vw) calc(1.0666666666666667vw) rgba(0,0,0,0.06); }

/* 工具栏 */
.toolbar { padding: calc(2.1333333333333333vw) calc(1.6vw); }
.tool-row { display: flex; flex-wrap: wrap; gap: calc(1.3333333333333335vw); }
.tool-btn { display: flex; align-items: center; gap: calc(0.8vw); padding: calc(1.866666666666667vw) calc(2.933333333333333vw); background: #F7F8FB; border-radius: calc(1.866666666666667vw); font-size: calc(3.2vw); color: #374151; transition: background 0.15s; }
.tool-btn:active { background: #EEF1FE; }
.tb-icon { font-size: calc(3.4666666666666663vw); }

/* 批量操作 */
.batch-bar { display: flex; align-items: center; justify-content: space-between; margin-top: calc(2.1333333333333333vw); padding: calc(2.1333333333333333vw) calc(1.6vw); background: #EEF1FE; border-radius: calc(2.1333333333333333vw); }
.batch-info { font-size: calc(3.4666666666666663vw); font-weight: 600; color: #4F6EF7; }
.batch-actions { display: flex; gap: calc(1.6vw); }
.bact-btn { padding: calc(1.3333333333333335vw) calc(3.4666666666666663vw); border-radius: calc(1.6vw); font-size: calc(3.2vw); font-weight: 600; }
.bact-in { background: #4F6EF7; color: #fff; }
.bact-out { background: #fff; color: #4F6EF7; border: calc(0.26666666666666666vw) solid #4F6EF7; }
.bact-del { background: #FEE2E2; color: #DC2626; }

/* 作品卡片 */
.work-card { display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(2.666666666666667vw); }
.wc-check { flex-shrink: 0; }
.check-box { width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); border-radius: 50%; border: calc(0.4vw) solid #D1D5DB; display: flex; align-items: center; justify-content: center; font-size: calc(3.2vw); color: #fff; }
.check-on { background: #4F6EF7; border-color: #4F6EF7; }
.wc-rank { flex-shrink: 0; }
.rank-num { width: calc(6.933333333333333vw); height: calc(6.933333333333333vw); border-radius: calc(2.1333333333333333vw); background: #F3F4F6; color: #6B7280; display: flex; align-items: center; justify-content: center; font-size: calc(3.4666666666666663vw); font-weight: 700; }
.rank-top { background: linear-gradient(135deg, #FFD97A, #FFB347); color: #7C3A00; }
.wc-avatar { flex-shrink: 0; }
.wc-avatar-img { width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%; background: #EEF1FE; }
.wc-avatar-default { width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%; background: #EEF1FE; color: #4F6EF7; display: flex; align-items: center; justify-content: center; font-size: calc(4vw); font-weight: 700; }
.wc-body { min-width: 0; }
.wc-head { display: flex; align-items: center; gap: calc(1.6vw); margin-bottom: calc(1.3333333333333335vw); }
.wc-title { font-size: calc(4vw); font-weight: 600; color: #1E2130; }
.wc-meta { display: flex; flex-wrap: wrap; align-items: center; gap: calc(1.0666666666666667vw); font-size: calc(3.2vw); color: #6B7280; }
.wc-category { color: #4F6EF7; background: #EEF1FE; padding: calc(0.26666666666666666vw) calc(1.6vw); border-radius: calc(2.1333333333333333vw); font-size: calc(2.666666666666667vw); font-weight: 600; flex-shrink: 0; }
.wc-author { color: #4B5563; }
.wc-dot { color: #D1D5DB; }
.wc-score-num { font-size: calc(3.733333333333334vw); font-weight: 700; color: #4F6EF7; }
.wc-score-label { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.wc-count { font-size: calc(2.933333333333333vw); color: #9CA3AF; }
.wc-action { flex-shrink: 0; margin-left: calc(1.0666666666666667vw); }
.wc-act-btn { padding: calc(1.6vw) calc(3.733333333333334vw); border-radius: calc(4.266666666666667vw); background: #EEF1FE; color: #4F6EF7; font-size: calc(3.2vw); font-weight: 600; }
.wc-act-btn:active { background: #DFE5FC; }

/* 获奖名单 */
.winner-hero { text-align: center; padding: calc(5.333333333333334vw) calc(3.2vw); background: linear-gradient(135deg, #FFF7E0, #FFE9C7); }
.wh-title { font-size: calc(5.066666666666666vw); font-weight: 800; color: #92400E; }
.wh-sub { font-size: calc(3.2vw); color: #B45309; margin-top: calc(1.0666666666666667vw); }
.winner-card { display: flex; align-items: center; gap: calc(2.1333333333333333vw); padding: calc(3.2vw); }
.wcr-rank { flex-shrink: 0; text-align: center; width: calc(11.733333333333333vw); }
.medal { width: calc(10.133333333333333vw); height: calc(10.133333333333333vw); border-radius: 50%; background: #F3F4F6; display: flex; align-items: center; justify-content: center; font-size: calc(5.333333333333334vw); }
.rank-1 .medal { background: #FEF3C7; }
.rank-2 .medal { background: #E5E7EB; }
.rank-3 .medal { background: #FDE8D7; }
.medal-num { font-size: calc(2.666666666666667vw); color: #6B7280; margin-top: calc(0.8vw); }
.wcr-body { min-width: 0; }
.wcr-title { font-size: calc(4vw); font-weight: 600; color: #1E2130; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wcr-author { font-size: calc(3.2vw); color: #6B7280; margin-top: calc(0.8vw); }
.wcr-prize { display: inline-block; margin-top: calc(1.3333333333333335vw); padding: calc(0.5333333333333333vw) calc(2.4vw); border-radius: calc(3.2vw); background: #FEF3C7; color: #92400E; font-size: calc(2.933333333333333vw); font-weight: 600; }
.wcr-score { flex-shrink: 0; text-align: right; }
.wcr-score-num { font-size: calc(5.333333333333334vw); font-weight: 800; color: #4F6EF7; line-height: 1; }
.wcr-score-label { font-size: calc(2.666666666666667vw); color: #9CA3AF; margin-top: calc(0.5333333333333333vw); }

/* 公布获奖弹窗 */
.awards-tip { font-size: calc(3.2vw); color: #6B7280; margin-bottom: calc(2.1333333333333333vw); }
.modal-scroll { max-height: 50vh; }
.award-item { display: flex; align-items: center; gap: calc(1.6vw); margin-bottom: calc(1.866666666666667vw); padding: calc(2.666666666666667vw); background: #F9FAFB; border-radius: calc(2.1333333333333333vw); }
.award-field { display: flex; align-items: center; gap: calc(1.3333333333333335vw); }
.award-name-field { flex: 1.4; }
.award-count-field { flex: 0.8; }
.wf-label { font-size: calc(3.2vw); color: #6B7280; flex-shrink: 0; }
.wf-input { flex: 1; height: calc(9.066666666666666vw); padding: 0 calc(2.1333333333333333vw); background: #fff; border: calc(0.26666666666666666vw) solid #E5E7EB; border-radius: calc(1.6vw); font-size: calc(3.4666666666666663vw); min-width: 0; }
.award-del { width: calc(6.4vw); height: calc(6.4vw); border-radius: 50%; background: #FEE2E2; color: #DC2626; display: flex; align-items: center; justify-content: center; font-size: calc(3.2vw); flex-shrink: 0; }
.award-add-btn { margin: calc(1.0666666666666667vw) 0 calc(2.666666666666667vw); padding: calc(2.1333333333333333vw); text-align: center; border: calc(0.26666666666666666vw) dashed #C7D2FE; color: #4F6EF7; border-radius: calc(2.1333333333333333vw); font-size: calc(3.4666666666666663vw); font-weight: 600; }
.modal-actions { margin-top: calc(2.1333333333333333vw); }

/* 文件命名设置弹窗 */
.modal-title { font-size: calc(4.533333333333333vw); font-weight: 700; color: #1E2130; margin-bottom: calc(1.6vw); }
.modal-desc { font-size: calc(3.2vw); color: #6B7280; line-height: 1.6; margin-bottom: calc(2.666666666666667vw); }
.name-preview { font-size: calc(3.2vw); color: #4F6EF7; background: #EEF1FE; border-radius: calc(1.6vw); padding: calc(1.866666666666667vw) calc(2.4vw); margin-bottom: calc(2.666666666666667vw); word-break: break-all; }
.preset-list { display: flex; flex-direction: column; gap: calc(1.6vw); max-height: 40vh; overflow-y: auto; margin-bottom: calc(2.666666666666667vw); }
.preset-item { padding: calc(2.666666666666667vw) calc(3.2vw); border-radius: calc(2.1333333333333333vw); background: #F7F8FB; border: calc(0.26666666666666666vw) solid transparent; font-size: calc(3.4666666666666663vw); color: #1E2130; }
.preset-item.active { background: #EEF1FE; border-color: #4F6EF7; color: #4F6EF7; font-weight: 600; }
.preset-item:active { background: #E5E9FB; }
.custom-input { display: flex; align-items: center; gap: calc(1.6vw); margin-bottom: calc(2.666666666666667vw); }
.custom-input input { flex: 1; height: calc(9.6vw); padding: 0 calc(2.666666666666667vw); background: #F7F8FB; border-radius: calc(1.6vw); font-size: calc(3.4666666666666663vw); }
.custom-input button { margin: 0; background: #4F6EF7; color: #fff; font-size: calc(3.2vw); border-radius: calc(1.6vw); line-height: 2.2; }
.modal-footer { display: flex; justify-content: flex-end; }
.modal-footer button { margin: 0; background: #F3F4F6; color: #374151; font-size: calc(3.4666666666666663vw); border-radius: calc(1.6vw); line-height: 2.2; }
/* pages/work/submit - 提交作品 */
.page-wrap { padding: 0 calc(3.2vw) calc(21.333333333333336vw); }

.card { padding: calc(3.733333333333334vw); margin-bottom: calc(2.666666666666667vw); }
.section-title {
  font-size: calc(4.266666666666667vw); font-weight: 700; color: #1E2130;
  margin-bottom: calc(2.666666666666667vw); display: flex; align-items: center;
}
.section-title::before {
  content: ""; width: calc(0.8vw); height: calc(3.4666666666666663vw); border-radius: calc(0.4vw);
  background: linear-gradient(180deg, #4F6EF7, #8BA4FF); margin-right: calc(1.6vw);
}

/* 大赛信息条 */
.comp-bar {
  padding: calc(3.2vw) calc(3.733333333333334vw);
  background: linear-gradient(135deg, #EEF1FE, #E0E7FF);
  border-radius: calc(2.666666666666667vw); margin-bottom: calc(2.666666666666667vw);
}
.cb-name { font-size: calc(4.266666666666667vw); font-weight: 700; color: #1E2130; }
.cb-end { font-size: calc(3.2vw); color: #4F6EF7; margin-top: calc(1.0666666666666667vw); font-weight: 500; }

/* 表单 */
.form-item { margin-bottom: calc(3.2vw); }
.form-item:last-child { margin-bottom: 0; }
.form-label {
  font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; margin-bottom: calc(1.3333333333333335vw);
  display: flex; align-items: center;
}
.req { color: #EF4444; font-size: calc(3.4666666666666663vw); margin-left: calc(0.5333333333333333vw); }
.form-input {
  width: 100%; box-sizing: border-box; height: calc(11.733333333333333vw); line-height: calc(11.733333333333333vw);
  padding: 0 calc(2.666666666666667vw);
  font-size: calc(3.733333333333334vw); color: #111827; background: #F7F8FB; border-radius: calc(1.6vw);
  border: calc(0.26666666666666666vw) solid transparent;
}
.form-textarea {
  width: 100%; box-sizing: border-box; padding: calc(2.4vw) calc(2.666666666666667vw);
  font-size: calc(3.733333333333334vw); color: #111827; background: #F7F8FB; border-radius: calc(1.6vw);
  border: calc(0.26666666666666666vw) solid transparent; min-height: calc(21.333333333333336vw); line-height: 1.6;
}
.form-input:focus, .form-textarea:focus { border-color: #4F6EF7; background: #fff; }
.form-input::placeholder, .form-textarea::placeholder { color: #B0B5C0; }
.form-input[disabled] { color: #9CA3AF; background: #F3F4F6; }

/* 选择器 */
.picker-row {
  display: flex; align-items: center; justify-content: space-between;
  height: calc(11.733333333333333vw); padding: 0 calc(2.666666666666667vw); background: #F7F8FB; border-radius: calc(1.6vw);
  font-size: calc(3.733333333333334vw); color: #111827;
}
.picker-arrow { font-size: calc(4vw); color: #9CA3AF; }
.placeholder { color: #9CA3AF; }

/* 附件区 */
.file-count { font-size: calc(3.2vw); color: #6B7280; }
.file-tip { font-size: calc(2.933333333333333vw); color: #9CA3AF; margin-bottom: calc(2.1333333333333333vw); }
.file-list { display: flex; flex-direction: column; gap: calc(1.6vw); margin-bottom: calc(2.1333333333333333vw); }
.file-item {
  display: flex; align-items: center; gap: calc(2.1333333333333333vw);
  padding: calc(2.4vw) calc(2.666666666666667vw); background: #F9FAFB; border-radius: calc(2.1333333333333333vw);
}
.file-icon {
  width: calc(8.533333333333333vw); height: calc(8.533333333333333vw); border-radius: calc(1.866666666666667vw); flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(2.933333333333333vw); font-weight: 700; color: #fff;
}
.file-type-PDF { background: #EF4444; }
.file-type-DOC { background: #3B82F6; }
.file-type-XLS { background: #10B981; }
.file-type-PPT { background: #F97316; }
.file-type-ZIP { background: #8B5CF6; }
.file-type-IMG { background: #EC4899; }
.file-type-VIDEO { background: #14B8A6; }
.file-type-AUDIO { background: #6366F1; }
.file-type-TXT { background: #6B7280; }
.file-type-CODE { background: #0EA5E9; }
.file-type-FILE { background: #9CA3AF; }
.file-info { min-width: 0; }
.file-name { font-size: calc(3.733333333333334vw); font-weight: 600; color: #1E2130; }
.file-meta { font-size: calc(2.933333333333333vw); margin-top: calc(0.5333333333333333vw); }
.file-uploading { color: #4F6EF7; }
.file-failed { color: #EF4444; }
.file-ok { color: #10B981; }
.file-del {
  flex-shrink: 0; width: calc(6.4vw); height: calc(6.4vw); border-radius: 50%;
  background: #FEE2E2; color: #DC2626; font-size: calc(4vw);
  display: flex; align-items: center; justify-content: center;
}
.file-del:active { background: #FECACA; }

/* 添加上传按钮 */
.upload-btn {
  display: flex; align-items: center; justify-content: center; gap: calc(1.6vw);
  padding: calc(3.2vw); border: calc(0.26666666666666666vw) dashed #C7D2FE; border-radius: calc(2.1333333333333333vw);
  color: #4F6EF7; font-size: calc(3.733333333333334vw); font-weight: 600;
  transition: background 0.15s;
}
.upload-btn:active { background: #EEF1FE; }
.ub-icon { font-size: calc(4.8vw); font-weight: 400; }

/* 底部提交栏 */
.bottom-bar {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 10;
  padding: calc(2.1333333333333333vw) calc(3.2vw);
  background: #fff; box-shadow: 0 -calc(0.26666666666666666vw) calc(2.666666666666667vw) rgba(0,0,0,0.06);
}
/* components/empty */
.empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: calc(13.333333333333334vw) calc(5.333333333333334vw);
}
.empty-icon {
  width: calc(21.333333333333336vw);
  height: calc(21.333333333333336vw);
  border-radius: 50%;
  background: var(--primary-light);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: calc(3.733333333333334vw);
}
.empty-icon .iconfont {
  font-size: calc(9.6vw);
  color: var(--primary);
}
.empty-text {
  font-size: calc(3.733333333333334vw);
  color: var(--text-light);
}
.empty-btn {
  margin-top: calc(4.266666666666667vw);
  padding: calc(2.1333333333333333vw) calc(6.4vw);
  background: #F3F4F6;
  color: #111827;
  border-radius: calc(5.333333333333334vw);
  font-size: calc(3.733333333333334vw);
}

﻿.er-wrap {
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: calc(16vw) calc(8vw) calc(8vw);
}
.er-icon { font-size: calc(12.8vw); margin-bottom: calc(3.2vw); }
.er-msg {
  font-size: calc(3.733333333333334vw); color: #9aa3b2;
  margin-bottom: calc(5.333333333333334vw); text-align: center;
}
.er-btn {
  padding: calc(2.1333333333333333vw) calc(7.466666666666668vw); border-radius: calc(5.333333333333334vw);
  background: #3a7afe; color: #fff;
  font-size: calc(3.733333333333334vw); font-weight: 500;
}

/* 计小智 IP v5 — movable-view */
.ip-area { position: fixed !important; left: 0 !important; top: 0 !important; right: 0 !important; bottom: 0 !important; z-index: 999; pointer-events: none; }
.ip-movable {
  width: calc(16vw); height: calc(16vw);
  pointer-events: auto;
}
.ip-movable.dragging { z-index: 1001; }

/* 头像环 */
.ip-avatar-ring {
  width: 100%; height: 100%; border-radius: 50%;
  padding: calc(0.8vw); box-sizing: border-box;
  background: linear-gradient(135deg, rgba(79,110,247,0.5), rgba(139,92,246,0.5));
  box-shadow: 0 calc(1.0666666666666667vw) calc(3.733333333333334vw) rgba(79,110,247,0.35);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
  animation: ipBreathe 3s ease-in-out infinite;
}
@keyframes ipBreathe {
  0%,100% { transform: translateY(0) scale(1); box-shadow: 0 calc(1.0666666666666667vw) calc(3.733333333333334vw) rgba(79,110,247,0.35); }
  50% { transform: translateY(-calc(1.3333333333333335vw)) scale(1.05); box-shadow: 0 calc(2.666666666666667vw) calc(5.333333333333334vw) rgba(79,110,247,0.55); }
}
.ip-movable.dragging .ip-avatar-ring {
  animation: none;
  box-shadow: 0 calc(2.1333333333333333vw) calc(5.866666666666666vw) rgba(79,110,247,0.7);
  transform: scale(1.12);
  background: linear-gradient(135deg, rgba(79,110,247,0.8), rgba(139,92,246,0.8));
}
.ip-img { width: 100%; height: 100%; border-radius: 50%; pointer-events: none; background: #fff; }

/* 气泡 */
.ip-bubble {
  position: absolute; bottom: calc(18vw); left: 50%;
  transform: translateX(-50%) scale(0);
  background: rgba(255,255,255,0.97); backdrop-filter: blur(20px);
  color: #1E2130; font-size: calc(3.2vw); padding: calc(1.866666666666667vw) calc(3.733333333333334vw);
  border-radius: calc(3.2vw); white-space: nowrap;
  box-shadow: 0 calc(1.0666666666666667vw) calc(4vw) rgba(0,0,0,0.15);
  transition: transform 0.35s cubic-bezier(0.34,1.56,0.64,1), opacity 0.3s;
  opacity: 0; pointer-events: none; z-index: 2;
}
.ip-bubble.show { transform: translateX(-50%) scale(1); opacity: 1; }
.bubble-arrow {
  position: absolute; bottom: -calc(1.3333333333333335vw); left: 50%; transform: translateX(-50%);
  width: 0; height: 0;
  border-left: calc(1.6vw) solid transparent; border-right: calc(1.6vw) solid transparent;
  border-top: calc(1.6vw) solid rgba(255,255,255,0.97);
}

/* 红点 */
.ip-badge {
  position: absolute; top: -calc(0.5333333333333333vw); right: -calc(0.5333333333333333vw);
  min-width: calc(5.333333333333334vw); height: calc(5.333333333333334vw); line-height: calc(5.333333333333334vw);
  background: #FF3B30; border-radius: calc(2.666666666666667vw); border: calc(0.4vw) solid #fff;
  display: flex; align-items: center; justify-content: center;
  transform: scale(0); opacity: 0;
  transition: transform 0.35s cubic-bezier(0.34,1.56,0.64,1), opacity 0.3s;
  z-index: 3; pointer-events: none;
}
.ip-badge.badge-show { transform: scale(1); opacity: 1; }
.badge-text { font-size: calc(2.666666666666667vw); color: #fff; font-weight: 700; padding: 0 calc(1.0666666666666667vw); }

/* 菜单 */
.ip-side-menu {
  position: fixed; z-index: 1002;
  background: rgba(255,255,255,0.97); backdrop-filter: blur(30px);
  border-radius: calc(3.733333333333334vw); overflow: hidden;
  box-shadow: 0 calc(2.666666666666667vw) calc(8vw) rgba(0,0,0,0.18);
  animation: menuIn 0.25s cubic-bezier(0.34,1.56,0.64,1);
  min-width: calc(40vw);
}
@keyframes menuIn {
  from { opacity: 0; transform: scale(0.9); }
  to { opacity: 1; transform: scale(1); }
}
.side-left { right: calc(18.666666666666668vw); }
.side-right { left: calc(18.666666666666668vw); }
.menu-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: calc(3.2vw) calc(3.733333333333334vw); border-bottom: calc(0.13333333333333333vw) solid #E5E7EB;
}
.menu-title { font-size: calc(3.733333333333334vw); font-weight: 700; color: #1E2130; }
.menu-close {
  width: calc(5.866666666666666vw); height: calc(5.866666666666666vw); border-radius: 50%;
  background: #E5E7EB; display: flex; align-items: center; justify-content: center;
  font-size: calc(3.2vw); color: #4B5563;
}
.side-menu-item {
  display: flex; align-items: center; padding: calc(2.4vw) calc(3.733333333333334vw);
  border-bottom: calc(0.13333333333333333vw) solid #F0F1F5;
}
.side-menu-item:last-child { border-bottom: none; }
.menu-item-hover { background: #F0F1F5; }
.side-icon-wrap {
  width: calc(6.933333333333333vw); height: calc(6.933333333333333vw); border-radius: calc(1.866666666666667vw);
  background: #F0F1F5; display: flex; align-items: center; justify-content: center;
  margin-right: calc(2.1333333333333333vw);
}
.side-icon { font-size: calc(3.733333333333334vw); }
.side-label { flex: 1; font-size: calc(3.733333333333334vw); color: #1E2130; font-weight: 500; }
.side-arrow { font-size: calc(3.733333333333334vw); color: #6B7280; }
.ip-outside-catch { position: fixed; inset: 0; z-index: 1001; background: rgba(0,0,0,0.1); }

.sk-wrap { padding: 0 calc(3.2vw); }
.sk-card {
  background: #fff; border-radius: calc(2.666666666666667vw); padding: 0 0 calc(3.733333333333334vw) 0;
  margin-bottom: calc(3.2vw); overflow: hidden;
}
.sk-stagger {
  animation: fiUp 0.35s cubic-bezier(0.16,1,0.3,1);
}
.sk-cover {
  width: 100%; height: calc(26.666666666666668vw); border-radius: calc(2.1333333333333333vw) calc(2.1333333333333333vw) 0 0;
  background: #E8ECF1; margin-bottom: calc(2.666666666666667vw);
}
.sk-body { padding: 0 calc(3.2vw); }
.sk-row {
  display: flex; align-items: center; padding: calc(2.666666666666667vw) 0;
  border-bottom: calc(0.13333333333333333vw) solid #E5E7EB;
  animation: fiUp 0.3s cubic-bezier(0.16,1,0.3,1);
}
.sk-avatar {
  width: calc(10.666666666666668vw); height: calc(10.666666666666668vw); border-radius: 50%;
  background: #E8ECF1; margin-right: calc(2.666666666666667vw); flex-shrink: 0;
}
.sk-info { flex: 1; }
.sk-line {
  height: calc(3.2vw); border-radius: calc(0.8vw); background: #E8ECF1;
  margin-bottom: calc(2.1333333333333333vw);
}
.sk-line-title { width: 60%; height: calc(4.266666666666667vw); }
.sk-line-text { width: 90%; }
.sk-line-short { width: 40%; }

.shimmer {
  background: linear-gradient(100deg, #ECEDF0 25%, #F5F6F8 40%, #ECEDF0 55%);
  background-size: 300% 100%;
  animation: shimmer 1.8s ease-in-out infinite;
}
@keyframes shimmer {
  0%   { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}
@keyframes fiUp {
  from { opacity: 0; transform: translateY(calc(2.666666666666667vw)); }
  to   { opacity: 1; transform: translateY(0); }
}
.wel-overlay {
  position: fixed; top: 0; left: 0; width: 100%; height: 100%;
  background: rgba(15, 23, 42, 0.55); z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  animation: wel-fade-in 0.25s ease-out;
}
.wel-card {
  width: calc(80vw); background: #fff; border-radius: calc(4.8vw);
  padding: calc(8.533333333333333vw) calc(5.866666666666666vw) calc(5.866666666666666vw); text-align: center;
  box-shadow: 0 calc(3.2vw) calc(10.666666666666668vw) rgba(0,0,0,0.18);
  position: relative;
  animation: wel-pop 0.35s cubic-bezier(0.18, 0.89, 0.32, 1.28);
}
.wel-close {
  position: absolute; top: calc(2.666666666666667vw); right: calc(3.2vw);
  width: calc(6.933333333333333vw); height: calc(6.933333333333333vw); border-radius: 50%;
  background: #F3F4F6; color: #9CA3AF; font-size: calc(3.4666666666666663vw);
  display: flex; align-items: center; justify-content: center;
}
.wel-confetti { font-size: calc(11.733333333333333vw); line-height: 1; margin-bottom: calc(3.733333333333334vw); }
.wel-title {
  font-size: calc(5.066666666666666vw); font-weight: 800; color: #111827;
  line-height: 1.45; margin-bottom: calc(2.4vw);
}
.wel-desc { font-size: calc(3.4666666666666663vw); color: #6B7280; line-height: 1.7; margin-bottom: calc(5.333333333333334vw); }
.wel-btn {
  width: 100%; padding: calc(2.933333333333333vw) 0; border-radius: calc(6.4vw); border: none;
  background: linear-gradient(135deg, #4F6EF7, #6C8CFF);
  color: #fff; font-size: calc(4vw); font-weight: 700;
}
.wel-btn::after { border: none; }
.wel-btn:active { transform: scale(0.97); }
@keyframes wel-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes wel-pop { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } }

/* ===== 网页版外壳 ===== */
html, body { margin: 0; padding: 0; height: 100%; }
body { background: #F0F2F8; font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; color: #111827; line-height: 1.5; -webkit-font-smoothing: antialiased; }
* { box-sizing: border-box; }
img { max-width: 100%; }
#app { position: relative; height: 100vh; }

/* 顶部导航栏 */
.navbar { position: fixed; top: 0; left: 0; right: 0; height: 44px; background: #4F6EF7; color: #fff; display: flex; align-items: center; padding: 0 8px; z-index: 500; }
.navbar-back { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; font-size: 28px; cursor: pointer; color: #fff; }
.navbar-title { flex: 1; text-align: center; font-size: 17px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.navbar-side { width: 40px; }

/* 页面容器 */
.page-container { position: fixed; top: 44px; left: 0; right: 0; bottom: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
body.has-tabbar .page-container { bottom: 50px; }

/* 底部标签栏 */
.tabbar { position: fixed; left: 0; right: 0; bottom: 0; height: 50px; background: #fff; border-top: 1px solid #eee; display: none; align-items: center; justify-content: space-around; z-index: 500; padding-bottom: env(safe-area-inset-bottom); }
.tab-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer; color: #9aa3b2; font-size: 10px; }
.tab-item .tab-icon { width: 22px; height: 22px; display: none; }
.tab-item .tab-icon-active { display: none; }
.tab-item.active { color: #3a7afe; }
.tab-item.active .tab-icon { display: block; }
.tab-item.active .tab-icon-active { display: block; }
.tab-item:not(.active) .tab-icon-active { display: none; }
.tab-item:not(.active) .tab-icon { display: block; }
.tab-text { margin-top: 2px; }

/* 通用组件（网页端） */
.scroll-view { overflow: auto; }
.scroll-view-x { overflow-x: auto; white-space: nowrap; }
.scroll-view-y { overflow-y: auto; }
.swiper { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.swiper::-webkit-scrollbar { display: none; }
.swiper-item { flex: 0 0 100%; scroll-snap-align: start; min-width: 0; }
.movable-area { position: fixed; left: 0; top: 0; pointer-events: none; z-index: 60; }
.movable-view { position: absolute; left: 0; top: 0; pointer-events: auto; cursor: grab; user-select: none; touch-action: none; }
.movable-view:active { cursor: grabbing; }
.wx-picker { cursor: pointer; }
.wx-switch { width: 48px; height: 28px; accent-color: #4F6EF7; cursor: pointer; }
.wx-slider { width: 100%; accent-color: #4F6EF7; cursor: pointer; }
.rich-text img { max-width: 100%; border-radius: 8px; }
.rich-text p { margin: 8px 0; }

/* 演示账号切换按钮 */
.demo-switch { position: fixed; right: 14px; bottom: 64px; width: 44px; height: 44px; border-radius: 50%; background: #fff; box-shadow: 0 4px 16px rgba(0,0,0,0.15); display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 400; font-size: 20px; }
body.has-tabbar .demo-switch { bottom: 64px; }
.demo-switch:active { transform: scale(0.9); }
