/* css/app.css — 国咨智汇台 浅色主题
   2026-10-06：与「评估工作台」统一设计语言 ——
   深海军蓝主体（navy-800/900/950）+ 鎏金点缀（只做线与点缀）+ 宋体大标题 */
:root {
  /* 海军蓝（取自评估工作台令牌：navy-700/800/900/300/100） */
  --primary:#233f6b;  --primary-light:#e3ebf6;  --primary-dark:#16305a;
  --navy-deep:#0e2244; --navy-mid:#16305a; --navy-300:#9bb7d9;
  --gold:#dfb85a; --gold-deep:#c9a03c; --gold-bright:#eed07a; --gold-light:#fbf2d8;
  --success:#16a34a; --success-bg:#f0fdf4; --warning:#d97706; --warning-bg:#fffbeb;
  --danger:#dc2626;  --danger-bg:#fef2f2;  --info:#0891b2; --info-bg:#ecfeff;
  --gray-bg:#eef1f6; --card:#ffffff; --border:#e5e7eb;
  --text:#1f2937; --text-2:#6b7280; --text-3:#9ca3af;
  --sidebar-w:clamp(196px, 16.5vw, 244px); --radius:10px; --shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);
  /* 字体：宋体（思源宋体系）做大标题/品牌，无衬线做正文 —— 与评估工作台一致 */
  --font-serif:"Source Han Serif SC","Noto Serif SC","Songti SC","SimSun",serif;
  /* 鎏金统一出口 */
  --gold-fill:linear-gradient(135deg,#c9a03c,#eed07a);
  --gold-line:linear-gradient(90deg,transparent,#dfb85a 18%,#eed07a 50%,#dfb85a 82%,transparent);
}
* { box-sizing: border-box; }
html, body { margin:0; padding:0; height:100%; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  font-size: 14px; color: var(--text); background: var(--gray-bg); -webkit-font-smoothing: antialiased;
}
a { color: var(--primary); text-decoration:none; }
a:hover { text-decoration:underline; }
button { font-family: inherit; font-size: 14px; cursor: pointer; }
.spacer { flex:1; }

/* ===== 通用按钮 ===== */
.btn { border:1px solid var(--border); background:#fff; color:var(--text); border-radius:8px; padding:8px 16px; transition:.15s; text-decoration:none; display:inline-block; }
.btn:hover { border-color:#cbd5e1; background:#f8fafc; text-decoration:none; }
.btn.primary { background:var(--primary); color:#fff; border-color:var(--primary); }
.btn.primary:hover { background:var(--primary-dark); }
.btn.primary:disabled { opacity:.55; cursor:not-allowed; }
.btn.danger { background:var(--danger); color:#fff; border-color:var(--danger); }
.mini-btn { border:1px solid var(--border); background:#fff; color:var(--text-2); border-radius:6px; padding:4px 10px; font-size:12px; }
.mini-btn:hover { border-color:var(--primary); color:var(--primary); background:var(--primary-light); }
.mini-btn.danger:hover { border-color:var(--danger); color:var(--danger); background:var(--danger-bg); }

/* ===== 徽章 / 状态标签 ===== */
.badge-tag { display:inline-flex; align-items:center; gap:4px; border-radius:999px; padding:2px 9px; font-size:12px; font-weight:500; white-space:nowrap; }
.badge-tag .dot { width:6px; height:6px; border-radius:50%; background:currentColor; display:inline-block; }
.b-red    { background:var(--danger-bg);  color:var(--danger); }
.b-orange { background:var(--warning-bg); color:var(--warning); }
.b-green  { background:var(--success-bg); color:var(--success); }
.b-blue   { background:var(--primary-light); color:var(--primary); }
.b-cyan   { background:var(--info-bg); color:var(--info); }
.b-gray   { background:#f1f5f9; color:var(--text-2); }
.b-purple { background:#f5f3ff; color:#7c3aed; }
.tag { display:inline-block; border-radius:6px; padding:1px 8px; font-size:12px; }

/* ===== 登录页 ===== */
.login-wrap { min-height:100vh; display:flex; align-items:center; justify-content:center;
  background: linear-gradient(135deg, var(--navy-deep) 0%, var(--navy-mid) 100%); padding:24px; }
.login-card { width:100%; max-width:400px; background:#fff; border-radius:16px; padding:36px 32px;
  box-shadow:0 20px 50px rgba(0,0,0,.25); }
.brand { text-align:center; margin-bottom:26px; }
.brand .mark { width:56px; height:56px; border-radius:14px; margin:0 auto 12px;
  background:linear-gradient(135deg,var(--navy-deep),var(--navy-mid)); color:var(--gold);
  font-size:28px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.brand h1 { margin:0 0 6px; font-size:22px; color:var(--navy-deep); }
.brand p { margin:0; color:var(--text-2); font-size:13px; }
.form-item { margin-bottom:16px; }
.form-item label { display:block; margin-bottom:6px; font-size:13px; color:var(--text-2); }
.form-item label i { color:var(--danger); font-style:normal; }
.form-item input, .form-item select, .form-item textarea {
  width:100%; border:1px solid var(--border); border-radius:8px; padding:10px 12px; font-size:14px;
  outline:none; transition:.15s; font-family:inherit; background:#fff; }
.form-item input:focus, .form-item select:focus, .form-item textarea:focus {
  border-color:var(--primary); box-shadow:0 0 0 3px rgba(30,64,175,.1); }
.login-card .btn.primary { width:100%; padding:11px; font-size:15px; margin-top:6px; }
.login-tip { margin-top:16px; text-align:center; font-size:12px; color:var(--text-3); line-height:1.8; }
.login-err { background:var(--danger-bg); color:var(--danger); border-radius:8px; padding:8px 12px; font-size:13px; margin-bottom:12px; }
.login-sec { font-size:13px; color:var(--text-2); margin-bottom:14px; padding-bottom:8px; border-bottom:1px dashed var(--border); }

/* ===== 门户布局：侧边栏版（与评估工作台统一，2026-10-06） ===== */
.prop-portal { min-height:100vh; background:var(--gray-bg); }
.layout { display:flex; min-height:100vh; }

/* —— 侧边栏：深海军蓝 + 右缘鎏金细线 —— */
.side {
  width:var(--sidebar-w); flex-shrink:0; display:flex; flex-direction:column;
  position:relative; color:#fff;
  background-image:linear-gradient(168deg,var(--navy-mid) 0%,var(--navy-deep) 52%,#081630 100%);
  box-shadow:2px 0 18px rgba(8,22,48,.18);
}
.side::after {
  content:''; position:absolute; top:0; right:0; bottom:0; width:2px;
  background:linear-gradient(180deg,#c9a03c 0%,#eed07a 22%,rgba(201,160,60,.28) 58%,transparent 100%);
  opacity:.85;
}
.side-brand {
  padding:22px 18px 18px; border-bottom:1px solid rgba(255,255,255,.10); position:relative;
  font-family:var(--font-serif); font-size:clamp(17px,1.5vw,21px); font-weight:700;
  letter-spacing:.14em; line-height:1.3;
}
.side-brand::before {
  content:''; position:absolute; left:18px; bottom:-1px; width:44px; height:2px;
  background:var(--gold-fill); border-radius:2px;
}
.side-brand small {
  display:block; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  font-size:11px; font-weight:400; letter-spacing:.24em; color:var(--gold-bright); opacity:.9; margin-top:8px;
}
/* ★ 返回门户首页（2026-10-06 用户反馈「门户没有返回首页」）：
   侧边栏品牌区下方常驻入口，描边小按钮 + hover 金色描边，任何视图一步回门户 */
.side-home {
  display:inline-flex; align-items:center; gap:6px; margin-top:14px;
  padding:6px 12px; border:1px solid rgba(255,255,255,.26); border-radius:999px;
  color:rgba(255,255,255,.86); text-decoration:none; white-space:nowrap;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  font-size:12px; font-weight:400; letter-spacing:.06em; transition:all .18s ease;
}
.side-home svg { width:14px; height:14px; flex-shrink:0; }
.side-home:hover { border-color:var(--gold-bright); color:var(--gold-bright); background:rgba(255,255,255,.06); }
.side-nav { padding:12px 0; flex:1; overflow-y:auto; }
.side-nav a {
  display:flex; align-items:center; gap:10px; padding:12px 20px 12px 21px;
  color:rgba(255,255,255,.74); text-decoration:none; font-size:14px; letter-spacing:.02em;
  border-left:2px solid transparent;
  transition:background .15s, color .15s, border-color .15s;
}
.side-nav a:hover { background:rgba(255,255,255,.06); color:#fff; text-decoration:none; }
.side-nav a.active {
  background:linear-gradient(90deg,rgba(201,160,60,.16),rgba(201,160,60,.04) 70%,transparent);
  border-left-color:var(--gold); color:var(--gold-bright); font-weight:600;
}
.ni-ic { font-size:15px; width:20px; text-align:center; flex-shrink:0; }
.ni-tx { flex:1; min-width:0; }
.ni-badge {
  background:var(--danger); color:#fff; font-size:10px; min-width:16px; height:16px;
  border-radius:8px; display:flex; align-items:center; justify-content:center; padding:0 4px; flex-shrink:0;
}

/* —— 侧边栏底部用户区（菜单向上弹出） —— */
.side-user {
  display:flex; align-items:center; gap:10px; cursor:pointer;
  padding:14px 16px; border-top:1px solid rgba(255,255,255,.10); position:relative;
}
.side-user:hover { background:rgba(255,255,255,.05); }
.avatar {
  width:32px; height:32px; border-radius:50%; flex-shrink:0;
  background:var(--gold-fill); color:var(--navy-deep);
  display:flex; align-items:center; justify-content:center; font-weight:700; font-size:13px;
}
.side-user .meta { line-height:1.3; min-width:0; }
.side-user .meta b { font-size:13px; display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.side-user .meta span { display:block; font-size:11px; opacity:.72; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.su-caret { font-size:10px; color:var(--gold-bright); transition:transform .2s; flex-shrink:0; }
.side-user.open .su-caret { transform:rotate(90deg); }
.user-menu { position:absolute; left:12px; right:12px; bottom:calc(100% + 10px); background:#fff; color:var(--text);
  border-radius:10px; box-shadow:0 10px 30px rgba(0,0,0,.18); min-width:200px; overflow:hidden; z-index:40; }
.um-head { padding:12px 16px; background:#f8fafc; border-bottom:1px solid var(--border); }
.um-head b { display:block; font-size:14px; }
.um-head small { display:block; color:var(--text-2); font-size:12px; margin-top:2px; }
.um-item { padding:10px 16px; font-size:14px; cursor:pointer; }
.um-item:hover { background:var(--gray-bg); }
.um-item.danger { color:var(--danger); }

.prop-main { flex:1; min-width:0; padding:clamp(18px, 2.4vw, 34px); overflow-x:hidden; }

/* ===== 区块标题 ===== */
.sec-head { display:flex; align-items:center; gap:10px; margin:8px 0 14px; }
.sec-head h2 { margin:0; font-size:18px; color:var(--navy-deep); font-family:var(--font-serif); letter-spacing:.03em; }
.sec-head .sub { color:var(--text-2); font-size:13px; }

/* ===== 卡片栅格 ===== */
.card-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px,1fr)); gap:16px; }
.app-card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:16px;
  box-shadow:var(--shadow); cursor:pointer; transition:.18s; display:flex; flex-direction:column; gap:10px; }
.app-card:hover { transform:translateY(-2px); box-shadow:0 8px 24px rgba(28,53,99,.12); border-color:#c7d2fe; }
.app-card.disabled { opacity:.6; cursor:not-allowed; filter:grayscale(.3); }
.app-card.disabled:hover { transform:none; box-shadow:var(--shadow); }
.ac-top { display:flex; align-items:flex-start; gap:10px; }
.ac-icon { width:42px; height:42px; border-radius:10px; background:var(--primary-light); font-size:22px;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.ac-hd { flex:1; min-width:0; }
.ac-name { font-size:15px; font-weight:600; color:var(--navy-deep); }
.ac-cat { font-size:12px; color:var(--text-3); margin-top:2px; }
.ac-desc { font-size:13px; color:var(--text-2); line-height:1.6; min-height:40px;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.ac-foot { display:flex; align-items:center; gap:10px; font-size:12px; color:var(--text-3); border-top:1px dashed var(--border); padding-top:10px; }

/* ===== 工具栏（搜索/分类） ===== */
.toolbar { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px; }
.toolbar input[type=text] { border:1px solid var(--border); border-radius:8px; padding:8px 12px; width:240px; outline:none; }
.toolbar input[type=text]:focus { border-color:var(--primary); }
.chips { display:flex; gap:8px; flex-wrap:wrap; }
.chip { padding:5px 12px; border-radius:999px; border:1px solid var(--border); background:#fff;
  font-size:13px; color:var(--text-2); cursor:pointer; }
.chip.active { background:var(--primary); color:#fff; border-color:var(--primary); }

/* ===== KPI 卡 ===== */
.kpi-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(150px,1fr)); gap:14px; margin-bottom:22px; }
.kpi { background:#fff; border:1px solid var(--border); border-radius:var(--radius); padding:16px; box-shadow:var(--shadow); }
.kpi .k-label { font-size:13px; color:var(--text-2); }
.kpi .k-value { font-size:26px; font-weight:700; color:var(--navy-deep); margin-top:6px; }
.kpi .k-value small { font-size:13px; font-weight:400; color:var(--text-3); margin-left:3px; }

/* ===== 应用详情页 ===== */
.detail-wrap { max-width:820px; margin:0 auto; }
.detail-head { display:flex; gap:18px; align-items:flex-start; background:#fff; border:1px solid var(--border);
  border-radius:var(--radius); padding:22px; box-shadow:var(--shadow); }
.detail-icon { width:72px; height:72px; border-radius:16px; background:var(--primary-light); font-size:38px;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.detail-hd { flex:1; }
.detail-hd h1 { margin:0 0 8px; font-size:22px; color:var(--navy-deep); }
.detail-hd .row { display:flex; align-items:center; gap:10px; margin-bottom:8px; flex-wrap:wrap; }
.detail-hd p { margin:0 0 6px; color:var(--text-2); line-height:1.7; font-size:14px; }
.notice-bar { background:var(--gold-light); border:1px solid #f0dfa8; color:#8a6d1b; border-radius:8px;
  padding:10px 14px; font-size:13px; margin-top:14px; }
.notice-bar.info { background:var(--info-bg); border-color:#bae6fd; color:#0e7490; }
/* ★ 2026-10-15：导入受阻 / 字段权限不足等「需要人工处理」的提示（区别于 info 的一般说明） */
.notice-bar.warn { background:#fff7ed; border-color:#fed7aa; color:#9a3412; }
.detail-actions { margin-top:20px; display:flex; gap:12px; }
.detail-actions .btn.primary { padding:11px 32px; font-size:15px; }
.detail-actions .btn:disabled { opacity:.55; cursor:not-allowed; }

/* ===== 我的应用 列表 ===== */
.mine-list { background:#fff; border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow); }
.mine-row { display:flex; align-items:center; gap:14px; padding:14px 18px; border-bottom:1px solid var(--border); }
.mine-row:last-child { border-bottom:none; }
.mine-row:hover { background:#fafbfd; }
.mine-row .ico { width:40px; height:40px; border-radius:10px; background:var(--primary-light); font-size:20px;
  display:flex; align-items:center; justify-content:center; }
.mine-row .nm { flex:1; }
.mine-row .nm b { font-size:15px; color:var(--navy-deep); }
.mine-row .nm small { display:block; color:var(--text-3); font-size:12px; margin-top:3px; }

/* ===== 表格 ===== */
.table-wrap { background:#fff; border:1px solid var(--border); border-radius:var(--radius); overflow:auto; box-shadow:var(--shadow); }
table.tb { width:100%; border-collapse:collapse; font-size:13px; }
table.tb th { text-align:left; padding:11px 14px; background:#f8fafc; color:var(--text-2); font-weight:600;
  border-bottom:1px solid var(--border); white-space:nowrap; }
table.tb td { padding:11px 14px; border-bottom:1px solid #f1f5f9; vertical-align:middle; }
table.tb tr:last-child td { border-bottom:none; }
table.tb tr:hover td { background:#fafbfd; }
table.tb .ops { display:flex; gap:6px; flex-wrap:wrap; }
.check-cell { text-align:center; }
.check-cell input { width:16px; height:16px; cursor:pointer; }

/* ===== 弹窗 / 抽屉 ===== */
.mask { position:fixed; inset:0; background:rgba(15,23,42,.5); display:flex; align-items:center; justify-content:center; z-index:100; padding:20px; }
.modal { background:#fff; border-radius:14px; width:100%; max-width:520px; max-height:88vh; display:flex; flex-direction:column;
  box-shadow:0 24px 60px rgba(0,0,0,.3); }
.modal.wide { max-width:860px; }
.m-head { display:flex; align-items:center; padding:16px 20px; border-bottom:1px solid var(--border); }
.m-head b { flex:1; font-size:16px; color:var(--navy-deep); }
.m-head .x, .d-head .x { border:none; background:none; font-size:16px; color:var(--text-3); }
.m-body { padding:20px; overflow:auto; flex:1; }
.m-foot { padding:14px 20px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:10px; }
.drawer-mask { position:fixed; inset:0; background:rgba(15,23,42,.4); z-index:100; }
.drawer { position:fixed; right:0; top:0; bottom:0; width:min(560px,92vw); background:#fff; z-index:101;
  display:flex; flex-direction:column; box-shadow:-10px 0 40px rgba(0,0,0,.2); }
.d-head { display:flex; align-items:center; padding:16px 20px; border-bottom:1px solid var(--border); }
.d-head b { flex:1; font-size:16px; color:var(--navy-deep); }
.d-body { padding:20px; overflow:auto; flex:1; }
.d-foot { padding:14px 20px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:10px; }

/* ===== 空状态 / 分页 / Tabs ===== */
.empty { text-align:center; padding:52px 20px; color:var(--text-3); }
.empty .ico { font-size:42px; margin-bottom:10px; }
.pager { display:flex; align-items:center; gap:12px; justify-content:center; padding:16px; color:var(--text-2); font-size:13px; }
.pager button { border:1px solid var(--border); background:#fff; border-radius:6px; padding:5px 12px; }
.pager button:disabled { opacity:.5; cursor:not-allowed; }
.tabs { display:flex; gap:4px; border-bottom:1px solid var(--border); margin-bottom:16px; }
.tab { padding:9px 16px; cursor:pointer; color:var(--text-2); border-bottom:2px solid transparent; font-size:14px; }
.tab.active { color:var(--primary); border-bottom-color:var(--primary); font-weight:600; }
.desc { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px,1fr)); gap:12px 20px; }
.desc .di label { display:block; font-size:12px; color:var(--text-3); margin-bottom:3px; }
.desc .di span { font-size:14px; color:var(--text); }

/* ===== 应用内嵌框 ===== */
.app-frame { position:fixed; inset:0; background:#fff; display:flex; flex-direction:column; z-index:60; }
.af-bar { display:flex; align-items:center; gap:10px; padding:8px 16px; background:var(--navy-deep); color:#fff; height:48px; }
.af-bar .af-title { font-size:14px; font-weight:600; }
.af-bar .mini-btn { background:transparent; color:#fff; border-color:rgba(255,255,255,.35); }
.af-bar .mini-btn:hover { background:rgba(255,255,255,.15); color:#fff; border-color:#fff; }
.af-body { flex:1; position:relative; }
.af-body iframe { width:100%; height:100%; border:0; display:block; }
.af-loading { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; gap:10px;
  color:var(--text-2); font-size:14px; background:#fff; z-index:2; }
.af-fallback { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; background:#fff; z-index:3; text-align:center; padding:20px; }
.af-fallback .ico { font-size:46px; }
.af-fallback h3 { margin:6px 0; color:var(--navy-deep); }
.af-fallback p { margin:0; color:var(--text-2); max-width:460px; line-height:1.7; }
.af-actions { display:flex; gap:12px; margin-top:16px; }
.spin { width:18px; height:18px; border:2px solid var(--border); border-top-color:var(--primary);
  border-radius:50%; animation:spin .8s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }

/* ===== 看板图表 ===== */
.chart-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(340px,1fr)); gap:16px; }
.chart-card { background:#fff; border:1px solid var(--border); border-radius:var(--radius); padding:16px; box-shadow:var(--shadow); }
.chart-card h3 { margin:0 0 12px; font-size:15px; color:var(--navy-deep); }
.chart-box { position:relative; height:260px; }

/* ===== 消息中心 ===== */
.msg-list { background:#fff; border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow); }
.msg-row { display:flex; gap:12px; padding:14px 18px; border-bottom:1px solid var(--border); cursor:pointer; }
.msg-row:last-child { border-bottom:none; }
.msg-row:hover { background:#fafbfd; }
.msg-row.unread { background:#f5f8ff; }
.msg-row .m-ico { width:36px; height:36px; border-radius:9px; background:var(--primary-light); font-size:18px;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.msg-row .m-main { flex:1; min-width:0; }
.msg-row .m-main b { font-size:14px; }
.msg-row .m-main p { margin:4px 0 0; color:var(--text-2); font-size:13px; line-height:1.6; }
.msg-row .m-time { font-size:12px; color:var(--text-3); white-space:nowrap; }
.msg-dot { width:8px; height:8px; border-radius:50%; background:var(--danger); margin-top:6px; flex-shrink:0; }

/* ===== Toast ===== */
.toasts { position:fixed; top:18px; left:50%; transform:translateX(-50%); z-index:200; display:flex; flex-direction:column; gap:8px; align-items:center; }
.toast { background:var(--navy-deep); color:#fff; padding:10px 20px; border-radius:8px; font-size:14px;
  box-shadow:0 10px 30px rgba(0,0,0,.25); max-width:80vw; animation:fadein .2s; }
.toast.err { background:var(--danger); }
.toast.warn { background:var(--warning); }
@keyframes fadein { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:none; } }

/* ===== 强制改密遮罩 ===== */
.force-pwd-mask { position:fixed; inset:0; background:rgba(15,23,42,.72); z-index:300; display:flex;
  align-items:center; justify-content:center; padding:20px; }
.force-pwd-card { background:#fff; border-radius:16px; width:100%; max-width:440px; padding:30px; }
.fp-head { text-align:center; margin-bottom:22px; }
.fp-head .fp-icon { font-size:40px; margin-bottom:8px; }
.fp-head h2 { margin:0 0 8px; font-size:19px; color:var(--navy-deep); }
.fp-head p { margin:0; color:var(--text-2); font-size:13px; line-height:1.6; }
.fp-skip { text-align:center; color:var(--text-3); font-size:13px; margin-top:14px; cursor:pointer; }
.fp-skip:hover { color:var(--primary); }
.fp-tip { text-align:center; color:var(--text-3); font-size:12px; margin-top:14px; line-height:1.7; }
.fp-logout { text-align:center; color:var(--danger); font-size:13px; margin-top:12px; cursor:pointer; }

/* ===== 移动端基础响应式 ===== */
/* 平板 / 手机：侧边栏转为顶部横向导航（与评估工作台一致） */
@media (max-width: 820px) {
  .layout { flex-direction:column; }
  .side {
    width:100%; flex-direction:row; align-items:center;
    position:sticky; top:0; z-index:100;
    padding-top:env(safe-area-inset-top);
    box-shadow:0 2px 14px rgba(8,22,48,.22);
    background-image:linear-gradient(100deg,var(--navy-mid),var(--navy-deep));
  }
  .side::after { top:auto; left:0; right:0; bottom:0; width:auto; height:2px;
    background:linear-gradient(90deg,#c9a03c,#eed07a 30%,rgba(201,160,60,.25)); }
  .side-brand { padding:12px 14px; border-bottom:none; font-size:16px; letter-spacing:.1em; }
  .side-brand::before { display:none; }
  .side-brand small { display:none; }
  /* 手机端：侧栏变顶栏，「返回门户首页」收成纯图标按钮，避免挤占横向导航（可点区域保持 ≥40px） */
  .side-brand { display:flex; align-items:center; gap:10px; }
  .side-home { margin-top:0; padding:8px; border-radius:50%; }
  .side-home span, .side-home { font-size:0; }
  .side-home svg { width:16px; height:16px; }
  .side-nav { display:flex; padding:0; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .side-nav::-webkit-scrollbar { display:none; }
  .side-nav a { padding:15px 12px; border-left:none; border-bottom:2px solid transparent; gap:5px; flex-shrink:0; letter-spacing:0; font-size:13px; }
  .side-nav a.active { border-left:none; border-bottom-color:var(--gold); background:rgba(255,255,255,.06); }
  .side-user { padding:0 12px; border-top:none; flex-shrink:0; }
  .side-user .meta, .su-caret { display:none; }
  .avatar { width:30px; height:30px; box-shadow:0 0 0 2px rgba(238,208,122,.35); }
  .user-menu { left:auto; right:10px; bottom:auto; top:calc(100% + 8px); min-width:176px; }
  .prop-main { padding:14px 12px; }
}
@media (max-width: 720px) {
  .prop-main { padding:14px; }
  .card-grid { grid-template-columns:repeat(auto-fill, minmax(160px,1fr)); gap:12px; }
  .toolbar input[type=text] { width:100%; }
  .detail-head { flex-direction:column; }
  .kpi-grid { grid-template-columns:repeat(2,1fr); }
}

/* ===== 公开宣传首页（未登录访客） ===== */
.pub-wrap { min-height:100vh; display:flex; flex-direction:column; background:var(--gray-bg); }
.pub-top { position:sticky; top:0; z-index:50; display:flex; align-items:center; justify-content:space-between;
  padding:10px 22px; background:rgba(255,255,255,.94); backdrop-filter:blur(8px); border-bottom:1px solid var(--border); }
.pub-brand { display:flex; align-items:center; gap:10px; }
.pub-brand .mark { width:36px; height:36px; border-radius:9px; background:linear-gradient(135deg,var(--navy-deep),var(--navy-mid));
  color:#fff; display:grid; place-items:center; font-size:17px; font-weight:700; }
.pub-brand b { display:block; font-size:15.5px; color:var(--text); line-height:1.25; }
.pub-brand small { display:block; font-size:11.5px; color:var(--text-3); }

.pub-hero { background:linear-gradient(120deg,#16295a 0%,#1c3563 45%,#2a4d8f 100%);
  color:#fff; text-align:center; padding:64px 22px 56px; position:relative; overflow:hidden; }
.pub-hero::after { content:''; position:absolute; left:0; right:0; bottom:0; height:3px;
  background:linear-gradient(90deg,var(--gold),#f5d878,var(--gold)); }
.pub-hero h1 { margin:0; font-size:34px; letter-spacing:2px; }
.pub-hero .pub-slogan { margin:14px 0 0; font-size:16.5px; color:#f5d878; letter-spacing:3px; }
.pub-hero .pub-sub { margin:14px auto 0; max-width:640px; font-size:13.5px; line-height:1.8; color:rgba(255,255,255,.78); }
.pub-badges { display:flex; justify-content:center; gap:12px; margin-top:26px; flex-wrap:wrap; }
.pb-item { background:rgba(255,255,255,.10); border:1px solid rgba(245,216,120,.35);
  border-radius:999px; padding:8px 18px; font-size:13px; color:rgba(255,255,255,.88); }
.pb-item b { font-size:17px; color:#f5d878; margin-right:3px; }
.pub-cta { display:inline-block; margin-top:28px; background:var(--gold); color:#16295a; font-weight:700;
  padding:11px 34px; border-radius:999px; font-size:14.5px; transition:.15s; }
.pub-cta:hover { background:#f5d878; transform:translateY(-1px); }

.pub-main { flex:1; max-width:1100px; width:100%; margin:0 auto; padding:34px 22px 40px; box-sizing:border-box; }
.pub-sec h2 { display:flex; align-items:baseline; gap:8px; margin:26px 0 14px; font-size:17px; color:var(--text); }
.pub-sec h2:first-child { margin-top:0; }
.pub-sec h2 small { font-weight:400; font-size:12px; color:var(--text-3); }
.pub-sec h2 .dot { width:9px; height:9px; border-radius:50%; display:inline-block; align-self:center; }
.pub-sec h2 .dot.on { background:var(--success); }
.pub-sec h2 .dot.dev { background:var(--warning); }

.pub-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); gap:14px; }
.pub-card { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:18px 18px 14px;
  box-shadow:0 1px 4px rgba(28,53,99,.07); transition:.18s; cursor:pointer; }
.pub-card:hover { transform:translateY(-3px); box-shadow:0 10px 22px rgba(28,53,99,.14); border-color:#c9d6f2; }
.pub-card.dim { cursor:default; opacity:.88; }
.pub-card.dim:hover { transform:none; box-shadow:0 1px 4px rgba(28,53,99,.07); border-color:var(--border); }
.pc-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.pc-ico { width:40px; height:40px; border-radius:10px; background:var(--primary-light); display:grid; place-items:center; font-size:20px; }
.pc-cat { font-size:11.5px; color:var(--text-3); background:var(--gray-bg); border-radius:999px; padding:3px 10px; }
.pc-t1 { font-size:15.5px; font-weight:700; color:var(--text); }
.pc-tag { font-style:normal; font-size:10.5px; font-weight:700; border-radius:999px; padding:2px 9px;
  background:var(--success-bg); color:var(--success); margin-left:6px; vertical-align:1px; }
.pc-tag.dev { background:var(--warning-bg); color:var(--warning); }
.pc-t2 { font-size:12.5px; color:var(--text-2); line-height:1.65; margin-top:6px; min-height:40px; }
.pc-meta { display:flex; gap:12px; align-items:center; margin-top:10px; padding-top:10px;
  border-top:1px dashed var(--border); font-size:11.5px; color:var(--text-3); }
.pc-meta i { font-style:normal; margin-left:auto; color:var(--primary); }

.pub-empty { text-align:center; color:var(--text-3); padding:50px 0; }
.pub-foot { background:var(--navy-deep); color:rgba(255,255,255,.82); text-align:center;
  padding:26px 22px 30px; font-size:13px; }
.pub-foot-tip { margin-top:6px; font-size:12px; color:rgba(255,255,255,.55); }
.pub-foot-login { display:inline-block; margin-top:12px; color:var(--gold); }
.pub-foot-login:hover { color:#f5d878; }

@media (max-width:720px) {
  .pub-hero h1 { font-size:26px; }
  .pub-hero { padding:46px 18px 40px; }
  .pub-grid { grid-template-columns:1fr 1fr; gap:10px; }
  .pub-card { padding:14px 13px 11px; }
  .pc-t2 { min-height:0; }
  .pub-top { padding:10px 14px; }
}

.login-back { display:block; text-align:center; margin-top:12px; font-size:12.5px; color:var(--text-3); }
.login-back:hover { color:var(--primary); }

/* ===== 首页内嵌登录弹窗（替代独立登录页） ===== */
.pub-login-mask { position:fixed; inset:0; z-index:200; background:rgba(16,32,64,.55);
  backdrop-filter:blur(3px); display:grid; place-items:center; padding:20px; }
.pub-login-card { position:relative; width:100%; max-width:376px; background:#fff; border-radius:16px;
  padding:30px 30px 24px; box-shadow:0 24px 60px rgba(16,32,64,.32); animation:pl-pop .22s cubic-bezier(.22,1,.36,1); }
@keyframes pl-pop { from { opacity:0; transform:translateY(14px) scale(.97); } to { opacity:1; transform:none; } }
.pl-close { position:absolute; top:12px; right:14px; border:0; background:transparent; color:var(--text-3);
  font-size:16px; cursor:pointer; line-height:1; padding:6px; border-radius:8px; }
.pl-close:hover { background:var(--gray-bg); color:var(--text); }
.pl-brand { text-align:center; margin-bottom:20px; }
.pl-brand .mark { width:46px; height:46px; margin:0 auto 10px; border-radius:12px; color:#fff;
  background:linear-gradient(135deg,var(--navy-deep),var(--navy-mid)); display:grid; place-items:center;
  font-size:21px; font-weight:700; box-shadow:0 6px 16px rgba(28,53,99,.26); }
.pl-brand h2 { margin:0; font-size:19px; color:var(--navy-deep); letter-spacing:1px; }
.pl-brand p { margin:5px 0 0; font-size:12.5px; color:var(--text-3); }
.pl-foot { text-align:center; font-size:11.5px; color:var(--text-3); margin-top:14px;
  padding-top:13px; border-top:1px dashed var(--border); }
.login-form .form-item { margin-bottom:14px; }
.login-form .form-item label { display:block; font-size:12.5px; color:var(--text-2); margin-bottom:6px; }
.login-form .form-item label i { color:var(--danger); font-style:normal; }
.login-form input { width:100%; box-sizing:border-box; padding:11px 13px; border:1px solid #d6dce6;
  border-radius:9px; font-size:14.5px; font-family:inherit; outline:none; transition:.15s; }
.login-form input:focus { border-color:var(--primary); box-shadow:0 0 0 3px rgba(30,64,175,.12); }
.login-err { background:var(--danger-bg,#fef2f2); color:var(--danger); font-size:12.5px;
  padding:9px 12px; border-radius:8px; margin-bottom:12px; }
.login-tip { font-size:11.5px; color:var(--text-3); line-height:1.7; text-align:center; }
@media (max-width:720px) { .pub-login-card { padding:26px 22px 20px; } }

/* ===== 应用直达改版：内嵌层上的合规提示浮条（AppFrame 为 fixed 全屏，浮条须更高层级） ===== */
.embed-notice { position:fixed; top:58px; left:50%; transform:translateX(-50%); z-index:70;
  display:flex; align-items:center; gap:10px; max-width:760px; box-shadow:var(--shadow); }
.embed-notice .en-close { cursor:pointer; opacity:.55; font-style:normal; flex-shrink:0; }
.embed-notice .en-close:hover { opacity:1; }

/* ===== 公司宣传首页 v2（2026-10-05）：Hero 扩展 / 简介与信息卡 / 业务领域 / 合作伙伴 ===== */
.pub-nav { display:flex; gap:2px; margin-right:12px; }
.pub-nav a { font-size:13px; color:var(--text-2); padding:6px 10px; border-radius:8px; text-decoration:none; }
.pub-nav a:hover { color:var(--primary); background:var(--primary-light); text-decoration:none; }
@media (max-width:900px){ .pub-nav { display:none; } }

/* Hero 扩展：公司全称行 + 事实数字 */
.pub-hero .ph-legal { margin:0 0 6px; font-size:14.5px; letter-spacing:2px; color:rgba(255,255,255,.85); }
.pub-hero h1 { margin:0; font-size:36px; letter-spacing:3px; }

/* ① 公司简介 */
.about-grid { display:grid; grid-template-columns:1.25fr 1fr; gap:18px; margin-top:14px; }
.about-text { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:20px 22px; }
.about-text p { margin:0; font-size:13.5px; line-height:2; color:var(--text-2); text-align:justify; }
.scope-tags { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }
.scope-tags span { font-size:12.5px; color:var(--primary); background:var(--primary-light);
  border-radius:999px; padding:5px 13px; }
.scope-tags.slim span { font-size:11.5px; padding:4px 10px; }
.info-card { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:18px 22px 12px; }
.info-title { font-size:13px; font-weight:700; color:var(--navy-deep); letter-spacing:1px; margin-bottom:6px; }
.info-row { display:flex; gap:14px; justify-content:space-between; align-items:baseline;
  padding:9px 0; border-bottom:1px dashed var(--border); font-size:12.5px; }
.info-row:last-child { border-bottom:0; }
.info-row b { color:var(--text-3); font-weight:500; flex-shrink:0; }
.info-row span { color:var(--text); text-align:right; line-height:1.6; }

/* ② 业务领域 */
.svc-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; margin-top:14px; }
.svc-card { background:var(--card); border:1px solid var(--border); border-radius:12px; padding:20px;
  transition:.15s; }
.svc-card:hover { transform:translateY(-3px); box-shadow:0 10px 22px rgba(28,53,99,.14); border-color:#c9d6f2; }
.svc-ico { font-size:26px; }
.svc-t { font-size:15.5px; font-weight:700; color:var(--text); margin-top:10px; }
.svc-d { font-size:12.5px; color:var(--text-2); line-height:1.8; margin-top:6px; }

/* ④ 合作伙伴 */
.pt-hero { background:var(--card); border:1px solid var(--border); border-radius:14px;
  padding:22px 24px 20px; margin-top:14px; border-top:3px solid #d9363e;
  box-shadow:var(--shadow); }
.pt-head { display:flex; align-items:center; gap:14px; flex-wrap:wrap; }
.pt-logo { width:52px; height:52px; border-radius:12px; flex-shrink:0;
  background:linear-gradient(135deg,#d9363e,#f2803c); color:#fff; font-size:26px; font-weight:700;
  display:grid; place-items:center; }
.pt-name b { display:block; font-size:17px; color:var(--text); letter-spacing:.5px; }
.pt-name small { display:block; font-size:11.5px; color:var(--text-3); margin-top:2px; }
.pt-tag { display:inline-block; margin-top:7px; font-size:11.5px; color:#d9363e;
  background:#fdf0f0; border-radius:999px; padding:3px 11px; }
.pt-loc { margin-left:auto; font-size:12.5px; color:var(--text-3); }
.pt-intro { font-size:13px; line-height:2; color:var(--text-2); text-align:justify; margin:14px 0 0; }
.pt-body { display:grid; grid-template-columns:1.15fr 1fr; gap:20px; margin-top:16px; }
.pt-col-t { font-size:13px; font-weight:700; color:var(--navy-deep); letter-spacing:1px; margin-bottom:10px; }
.pt-quals { display:flex; flex-wrap:wrap; gap:7px; }
.pt-badge { font-size:11.8px; color:var(--primary); background:var(--primary-light);
  border:1px solid #d5e0f7; border-radius:8px; padding:5px 10px; line-height:1.5; }
.pt-achs { margin:0; padding:0; list-style:none; }
.pt-achs li { font-size:12.3px; color:var(--text-2); line-height:1.9; padding-left:15px; position:relative; }
.pt-achs li::before { content:'·'; position:absolute; left:3px; color:var(--gold); font-weight:900; }
.pt-contact { display:flex; flex-wrap:wrap; gap:8px 22px; margin-top:16px; padding-top:14px;
  border-top:1px dashed var(--border); font-size:12.5px; color:var(--text-2); }

/* 占位卡（其他合作伙伴陆续加入） */
.pt-grid { display:grid; grid-template-columns:1fr 1fr 1.4fr; gap:14px; margin-top:14px; }
.pt-ghost { border:1.5px dashed #c9d6f2; border-radius:14px; background:rgba(231,237,250,.4);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:26px 14px; text-align:center; min-height:150px; }
.pt-ghost .pg-plus { width:40px; height:40px; border-radius:50%; background:var(--primary-light);
  color:var(--primary); font-size:22px; display:grid; place-items:center; margin-bottom:10px; }
.pt-ghost b { font-size:14px; color:var(--text-2); }
.pt-ghost small { font-size:11.5px; color:var(--text-3); margin-top:5px; }
.pt-join { border:1.5px dashed var(--gold); border-radius:14px; background:var(--gold-light);
  padding:20px 22px; }
.pt-join b { font-size:14.5px; color:var(--navy-deep); }
.pt-join p { font-size:12.3px; color:var(--text-2); line-height:1.9; margin:8px 0 10px; }
.pt-join span { font-size:12px; color:#8a6a1f; }

@media (max-width:860px){
  .about-grid, .pt-body { grid-template-columns:1fr; }
  .pt-grid { grid-template-columns:1fr; }
  .pub-hero h1 { font-size:27px; }
}

/* ===== Hero v3：海纳百川 · 有容乃大 —— 科技风双公司轮播（2026-10-05）===== */
.pub-hero { position:relative; overflow:hidden; padding:60px 22px 66px; }
.pub-hero .ph-legal { margin:0 0 8px; font-size:13.5px; letter-spacing:2px; color:rgba(219,230,255,.8); }
.pub-hero h1.hero-title { margin:6px 0 0; font-size:42px; font-weight:800; letter-spacing:10px;
  background:linear-gradient(92deg,#f7e6b0 0%,#f5d878 38%,#fff8e2 55%,#f5d878 75%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 0 14px rgba(245,216,120,.35));
  animation:titleGlow 3.6s ease-in-out infinite alternate; }
.pub-hero h1.hero-title i { font-style:normal; padding:0 4px; }
@keyframes titleGlow {
  from { filter:drop-shadow(0 0 8px rgba(245,216,120,.22)); }
  to   { filter:drop-shadow(0 0 24px rgba(245,216,120,.5)); }
}

/* 科技感背景：网格 + 光球 + 雷达环 + 扫光 */
.hero-fx { position:absolute; inset:0; pointer-events:none; }
.fx-grid { position:absolute; inset:0;
  background-image:linear-gradient(rgba(120,160,255,.11) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(120,160,255,.11) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(ellipse 75% 85% at 50% 38%,#000 25%,transparent 78%);
  mask-image:radial-gradient(ellipse 75% 85% at 50% 38%,#000 25%,transparent 78%);
  animation:fxGrid 20s linear infinite; }
@keyframes fxGrid { to { background-position:44px 44px, 44px 44px; } }
.fx-orb { position:absolute; border-radius:50%; filter:blur(52px); opacity:.55; }
.fx-orb.o1 { width:360px; height:360px; left:-100px; top:-120px;
  background:radial-gradient(circle,#3b6fd4,transparent 65%); animation:orbA 12s ease-in-out infinite alternate; }
.fx-orb.o2 { width:300px; height:300px; right:-80px; top:10%;
  background:radial-gradient(circle,#7a4fd4,transparent 65%); animation:orbA 15s ease-in-out infinite alternate-reverse; }
.fx-orb.o3 { width:260px; height:260px; left:38%; bottom:-140px;
  background:radial-gradient(circle,#1f7fae,transparent 65%); animation:orbA 17s ease-in-out infinite alternate; }
@keyframes orbA {
  from { transform:translate(0,0) scale(1); }
  to   { transform:translate(46px,30px) scale(1.16); }
}
.fx-ring { position:absolute; left:50%; top:40%; border:1px solid rgba(140,175,255,.25); border-radius:50%; }
.fx-ring.r1 { width:540px; height:540px; transform:translate(-50%,-50%); animation:ringPulse 6s ease-out infinite; }
.fx-ring.r2 { width:540px; height:540px; transform:translate(-50%,-50%); animation:ringPulse 6s ease-out 3s infinite; }
@keyframes ringPulse {
  0%   { opacity:0; transform:translate(-50%,-50%) scale(.72); }
  30%  { opacity:.8; }
  100% { opacity:0; transform:translate(-50%,-50%) scale(1.28); }
}
.fx-scan { position:absolute; left:0; right:0; top:-45%; height:55%;
  background:linear-gradient(180deg,transparent,rgba(150,190,255,.08),transparent);
  animation:fxScan 8.5s linear infinite; }
@keyframes fxScan { to { top:118%; } }

/* 轮播舞台（淡入上浮切换，非 display 切换以保 innerText/无障碍） */
.hero-stage { position:relative; max-width:880px; margin:30px auto 0; min-height:238px; }
.hs-slide { position:absolute; inset:0; opacity:0; transform:translateY(16px) scale(.985);
  transition:opacity .7s ease, transform .7s ease; pointer-events:none; }
.hs-slide.on { opacity:1; transform:none; pointer-events:auto; }
.hs-card { height:100%; background:linear-gradient(160deg,rgba(255,255,255,.11),rgba(255,255,255,.045));
  border:1px solid rgba(150,180,255,.32); border-radius:18px; padding:24px 28px 18px;
  box-shadow:0 18px 44px rgba(6,16,42,.45), inset 0 1px 0 rgba(255,255,255,.16);
  backdrop-filter:blur(6px); text-align:left; }
.hs-head { display:flex; align-items:center; gap:14px; }
.hs-logo { width:54px; height:54px; border-radius:14px; display:grid; place-items:center;
  font-size:26px; font-weight:800; color:#fff; flex-shrink:0; }
.lg-gz { background:linear-gradient(135deg,#2a4d8f,#1c3563);
  box-shadow:0 0 0 1px rgba(160,190,255,.4), 0 8px 20px rgba(10,25,60,.5); }
.lg-hs { background:linear-gradient(135deg,#e0483f,#f2803c);
  box-shadow:0 0 0 1px rgba(255,170,150,.4), 0 8px 20px rgba(90,20,10,.45); }
.lg-union { background:linear-gradient(100deg,#2a4d8f 46%,#e0483f 54%);
  box-shadow:0 0 0 1px rgba(200,200,255,.4), 0 8px 20px rgba(10,25,60,.5); }
.hs-name b { display:block; color:#fff; font-size:17.5px; letter-spacing:.5px; line-height:1.45; }
.hs-name small { display:block; margin-top:5px; color:#f5d878; font-size:12.5px; letter-spacing:1.5px; }
.hs-chips { display:flex; flex-wrap:wrap; gap:7px; margin-top:15px; }
.hs-chips span { font-size:12px; color:#dbe6ff; background:rgba(120,160,255,.15);
  border:1px solid rgba(150,180,255,.3); border-radius:999px; padding:4px 12px; }
.hs-fact { margin-top:13px; font-size:12.5px; color:rgba(255,255,255,.78); }
.hs-fact::before { content:'◆ '; color:#f5d878; font-size:10px; }
.hs-dots { position:absolute; left:50%; transform:translateX(-50%); bottom:-32px; display:flex; gap:8px; }
.hs-dots button { width:9px; height:9px; border-radius:999px; border:0; padding:0;
  background:rgba(255,255,255,.35); cursor:pointer; transition:.3s; }
.hs-dots button.on { background:#f5d878; width:24px; }
.pub-hero .pub-cta { margin-top:46px; }

@media (max-width:860px){
  .pub-hero h1.hero-title { font-size:28px; letter-spacing:5px; }
  .hero-stage { min-height:300px; }
  .hs-card { padding:18px 18px 14px; }
  .pub-hero .ph-legal { font-size:11.5px; letter-spacing:1px; }
}
@media (prefers-reduced-motion: reduce){
  .fx-grid,.fx-orb,.fx-ring,.fx-scan,.pub-hero h1.hero-title { animation:none !important; }
}

/* ===== Hero v4：三帧科技风动图（主题动图 / 国咨 HUD / 宏尚 HUD），激活即重播（2026-10-05）===== */
/* —— 通用浮现：仅激活帧播放，切走即复位、切回即重播 —— */
.hs-slide .rv { opacity:0; }
.hs-slide.on .rv { animation:riseIn .7s ease both; }
@keyframes riseIn { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:none; } }

/* —— 帧一：主题动图「海纳百川 · 有容乃大」 —— */
.hs-theme { display:flex; }
.theme-card { position:relative; width:100%; border-radius:18px; overflow:hidden;
  background:linear-gradient(160deg,rgba(255,255,255,.10),rgba(255,255,255,.03));
  border:1px solid rgba(150,180,255,.32);
  box-shadow:0 18px 44px rgba(6,16,42,.45), inset 0 1px 0 rgba(255,255,255,.16);
  backdrop-filter:blur(6px);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:34px 20px 30px; text-align:center; min-height:238px; }
.theme-waves { position:absolute; inset:0; opacity:.7; pointer-events:none; }
.theme-waves i { position:absolute; left:-50%; width:200%; height:130px; border-radius:44%;
  background:rgba(120,160,255,.07); animation:waveMove 11s linear infinite; }
.theme-waves i:nth-child(1) { bottom:-66px; }
.theme-waves i:nth-child(2) { bottom:-34px; background:rgba(245,216,120,.06); animation-duration:8s; animation-direction:reverse; }
.theme-waves i:nth-child(3) { bottom:-92px; background:rgba(120,160,255,.09); animation-duration:15s; }
@keyframes waveMove { from { transform:translateX(0); } to { transform:translateX(25%); } }
.theme-title { margin:0; display:flex; align-items:baseline; justify-content:center; flex-wrap:wrap; }
.t-char { display:inline-block; opacity:0; transform:translateY(28px) scale(.72); filter:blur(7px); }
.hs-slide.on .t-char { animation:charIn .8s cubic-bezier(.2,.7,.2,1) both; }
@keyframes charIn { to { opacity:1; transform:none; filter:blur(0); } }
.t-char i { display:inline-block; font-style:normal; font-size:46px; font-weight:800; letter-spacing:6px;
  background:linear-gradient(180deg,#fff3cf 0%,#f5d878 55%,#e8b33d 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent; }
.hs-slide.on .t-char i { animation:charFloat 3.2s ease-in-out infinite; }
@keyframes charFloat {
  0%,100% { transform:translateY(0);   filter:drop-shadow(0 0 6px rgba(245,216,120,.25)); }
  50%     { transform:translateY(-7px); filter:drop-shadow(0 0 22px rgba(245,216,120,.6)); }
}
.theme-tag { margin:20px 0 0; font-size:15px; letter-spacing:3px; color:#dbe6ff; }
.theme-fact { margin:12px 0 0; font-size:12.5px; color:rgba(255,255,255,.75); }
.theme-fact::first-letter { color:#f5d878; }

/* —— 公司帧：HUD 角标 / 扫描线 / 轨道环 —— */
.hs-card { position:relative; }
.hud-c { position:absolute; width:22px; height:22px; border:2px solid rgba(245,216,120,.55); opacity:.45; pointer-events:none; }
.hud-c.c1 { top:10px;    left:10px;  border-right:0; border-bottom:0; }
.hud-c.c2 { top:10px;    right:10px; border-left:0;  border-bottom:0; }
.hud-c.c3 { bottom:10px; left:10px;  border-right:0; border-top:0; }
.hud-c.c4 { bottom:10px; right:10px; border-left:0;  border-top:0; }
.hs-slide.on .hud-c { animation:hudPulse 2.8s ease-in-out infinite; }
@keyframes hudPulse { 0%,100% { opacity:.4; } 50% { opacity:.95; } }
.hs-scanline { position:absolute; top:8%; bottom:8%; left:2%; width:2px; opacity:0; pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(150,190,255,.55),transparent); }
.hs-slide.on .hs-scanline { animation:scanX 4.6s linear infinite; }
@keyframes scanX {
  0%   { left:2%;  opacity:0; }
  12%  { opacity:.85; }
  88%  { opacity:.85; }
  100% { left:98%; opacity:0; }
}
.hs-logo-wrap { position:relative; width:54px; height:54px; flex-shrink:0; }
.hs-orbit { position:absolute; left:50%; top:50%; width:112px; height:112px; margin:-56px 0 0 -56px;
  pointer-events:none; opacity:.75; }
.hs-orbit i { position:absolute; inset:0; border-radius:50%; border:1px dashed rgba(150,180,255,.4); }
.hs-orbit i:nth-child(2) { inset:20px; border-color:rgba(245,216,120,.3); }
.hs-slide.on .hs-orbit i { animation:orbitSpin 14s linear infinite; }
.hs-slide.on .hs-orbit i:nth-child(2) { animation:orbitSpin 9s linear infinite reverse; }
@keyframes orbitSpin { to { transform:rotate(360deg); } }
.hs-theme .hs-scanline, .hs-theme .hud-c { display:none; }

@media (max-width:860px){
  .t-char i { font-size:30px; letter-spacing:3px; }
  .theme-tag { font-size:12px; letter-spacing:1.5px; }
  .hs-orbit { width:92px; height:92px; margin:-46px 0 0 -46px; }
}
@media (prefers-reduced-motion: reduce){
  .hs-slide.on .t-char i, .hs-slide.on .hs-scanline, .hs-slide.on .hs-orbit i,
  .hs-slide.on .hud-c, .theme-waves i { animation:none !important; }
  .hs-slide .rv, .hs-slide .t-char { opacity:1; transform:none; filter:none; animation:none !important; }
}

/* —— 公司帧背景作业动图（人物在评估/检测过程中） —— */
/* 内容层在动图之上：z-index 1 > 动图 0 */
.hs-card .hs-head, .hs-card .hs-chips, .hs-card .hs-fact { position:relative; z-index:1; }
.hs-fig { position:absolute; right:12px; bottom:8px; width:min(46%,236px); z-index:0;
  pointer-events:none; color:#9db8ff; opacity:.85; filter:drop-shadow(0 0 14px rgba(120,160,255,.28)); }
.hs-fig svg { display:block; width:100%; height:auto; opacity:.34; }
.fig-hs { color:#f0cd74; filter:drop-shadow(0 0 14px rgba(245,205,110,.25)); }
/* 人物呼吸浮动（整组微沉浮，模拟作业节奏） */
.hs-slide.on .fig-figure { animation:figFloat 4.2s ease-in-out infinite; }
@keyframes figFloat {
  0%,100% { transform:translateY(0); }
  50%     { transform:translateY(-3.5px); }
}
/* 标尺与人物错拍微动 */
.hs-slide.on .fig-rod { animation:figRod 4.6s ease-in-out infinite; }
@keyframes figRod {
  0%,100% { transform:translate(0,0); }
  50%     { transform:translate(-2px,2.5px); }
}
/* 测距光束：虚线沿光线方向流动 */
.hs-slide.on .fig-beam { stroke-dasharray:7 11; animation:figBeam 2.1s linear infinite; }
@keyframes figBeam {
  0%   { stroke-dashoffset:0;   opacity:.25; }
  40%  { opacity:.95; }
  100% { stroke-dashoffset:-36; opacity:.25; }
}
/* 全站仪镜头：呼吸闪烁辉光 */
.hs-slide.on .fig-lens { animation:figBlink 2.4s ease-in-out infinite; }
@keyframes figBlink {
  0%,100% { opacity:.35; filter:drop-shadow(0 0 2px rgba(160,200,255,.4)); }
  50%     { opacity:1;   filter:drop-shadow(0 0 8px rgba(160,200,255,.95)); }
}
/* 裂缝绘制：仅在激活帧播放，切走复位、切回重播（pathLength=1） */
.fig-crack { stroke-dasharray:1; stroke-dashoffset:1; opacity:.9; }
.hs-slide.on .fig-crack { animation:figCrack 2.6s ease-out .5s forwards; }
@keyframes figCrack { to { stroke-dashoffset:0; } }
@media (max-width:860px){
  .hs-fig { display:none; }  /* 小屏卡片空间有限，动图让位内容 */
}
@media (prefers-reduced-motion: reduce){
  .hs-slide.on .fig-figure, .hs-slide.on .fig-rod, .hs-slide.on .fig-beam,
  .hs-slide.on .fig-lens { animation:none !important; }
  .fig-crack { stroke-dashoffset:0 !important; }
}

/* ============================================================
   Workspace — 工作台首页（国咨湖南 · 对齐三企业展示门户设计语言）
   深蓝金 · 衬线标题 · 细线描边卡 · hover 微动效
   ============================================================ */
.wk { max-width: 1180px; margin: 0 auto; padding: 22px 26px 40px; }

/* ---- Hero ---- */
.wk-hero {
  position: relative; overflow: hidden; border-radius: 16px;
  background: linear-gradient(158deg, #22437c 0%, var(--navy-deep) 55%, #0e1f42 100%);
  color: #fff; padding: 34px 36px; display: flex; gap: 30px; align-items: stretch;
  box-shadow: 0 16px 40px -18px rgba(14, 31, 66, .55);
}
.wk-hero::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: radial-gradient(rgba(255,255,255,.07) 1px, transparent 1px);
  background-size: 22px 22px;
  -webkit-mask-image: linear-gradient(165deg, #000, transparent 72%);
          mask-image: linear-gradient(165deg, #000, transparent 72%);
}
.wk-year {
  position: absolute; right: 18px; bottom: -34px; pointer-events: none; user-select: none;
  font-family: "Noto Serif SC", "Source Han Serif SC", STSong, SimSun, serif;
  font-size: 170px; font-weight: 700; line-height: 1; letter-spacing: .02em;
  color: rgba(232, 179, 61, .13);
}
.wk-hero-main { position: relative; flex: 1 1 auto; min-width: 0; }
.wk-eyebrow {
  display: inline-block; font-size: 12px; letter-spacing: .22em;
  color: var(--gold); border: 1px solid rgba(232,179,61,.4); border-radius: 999px;
  padding: 3px 14px; margin-bottom: 14px;
}
.wk-title {
  margin: 0; font-family: "Noto Serif SC", "Source Han Serif SC", STSong, SimSun, serif;
  font-size: 27px; font-weight: 700; line-height: 1.45; letter-spacing: .02em;
}
.wk-sub { margin: 12px 0 0; font-size: 13.5px; color: rgba(226,233,248,.82); }
.wk-sub b { color: #fff; font-weight: 600; }
.wk-sub b.g { color: var(--gold); }
.wk-quote {
  margin: 16px 0 0; padding: 10px 16px; border-left: 3px solid var(--gold);
  background: rgba(232,179,61,.08); border-radius: 0 10px 10px 0;
  font-size: 13px; line-height: 1.9; color: rgba(226,233,248,.88);
}
.wk-quote b { color: #fff; font-weight: 600; }
.wk-quote b.g { color: var(--gold); }

/* Hero 右侧资质荣誉列 */
.wk-hero-quals {
  position: relative; flex: 0 0 236px; display: flex; flex-direction: column; gap: 10px;
  padding: 18px; border: 1px solid rgba(232,179,61,.28); border-radius: 12px;
  background: rgba(255,255,255,.045); backdrop-filter: blur(2px); align-self: center;
}
.wk-quals-t {
  font-size: 12px; letter-spacing: .3em; color: var(--gold);
  text-align: center; margin-bottom: 2px;
}
.wk-qual {
  display: flex; align-items: center; gap: 9px;
  font-size: 13px; color: rgba(240,245,255,.94);
  border: 1px solid rgba(232,179,61,.35); border-radius: 999px;
  padding: 8px 14px; background: rgba(232,179,61,.07);
}
.wk-qual i { font-style: normal; flex: none; }

/* ---- 功能模块栅格 ---- */
.wk-grid {
  margin-top: 26px; display: grid; gap: 16px;
  grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
}
.wk-card {
  position: relative; background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; padding: 20px 18px 16px; cursor: pointer; overflow: hidden;
  transition: transform .28s cubic-bezier(.25,1,.5,1), box-shadow .28s, border-color .28s;
  display: flex; flex-direction: column;
}
.wk-card::before {
  content: ""; position: absolute; left: 0; top: 0; height: 3px; width: 0;
  background: linear-gradient(90deg, var(--gold), rgba(232,179,61,.25));
  transition: width .45s cubic-bezier(.22,1,.36,1);
}
.wk-card:hover, .wk-card:focus-visible {
  transform: translateY(-3px); border-color: rgba(232,179,61,.55);
  box-shadow: 0 14px 30px -14px rgba(28,53,99,.35); outline: none;
}
.wk-card:hover::before { width: 100%; }
.wk-ic {
  width: 42px; height: 42px; border-radius: 10px; display: grid; place-items: center;
  font-size: 21px; background: var(--gold-light); border: 1px solid #f3e3b3;
}
.wk-name {
  margin: 13px 0 0; font-size: 16px; font-weight: 700; color: var(--navy-deep);
  font-family: "Noto Serif SC", "Source Han Serif SC", STSong, SimSun, serif; letter-spacing: .02em;
}
.wk-desc { margin: 7px 0 14px; font-size: 12.5px; color: var(--text-2); line-height: 1.7; }
.wk-go {
  margin-top: auto; font-size: 12px; letter-spacing: .08em; color: #b8860b; font-weight: 600;
}
.wk-go i { font-style: normal; display: inline-block; transition: transform .28s cubic-bezier(.25,1,.5,1); }
.wk-card:hover .wk-go i { transform: translateX(4px); }

/* ---- 我的应用（卡片式，复用 wk-card 视觉） ---- */
.mine-grid .wk-desc { display: flex; align-items: center; min-height: 24px; }
.mine-meta {
  margin: 0 0 12px; font-size: 11.5px; letter-spacing: .02em;
  color: var(--text-2); opacity: .75;
}

/* ---- 响应式 ---- */
@media (max-width: 900px) {
  .wk { padding: 16px 14px 32px; }
  .wk-hero { flex-direction: column; padding: 26px 22px; }
  .wk-hero-quals { flex: none; width: 100%; }
  .wk-year { font-size: 110px; bottom: -20px; }
  .wk-title { font-size: 21px; }
}

/* —— 极简登录页（/index.html#/login，SPA 宣传页废弃后的唯一登录落点） —— */
.pure-login { position:fixed; inset:0; z-index:60; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:16px; padding:20px;
  background:linear-gradient(160deg,#16305a 0%,#0e2244 58%,#081630 100%); }
.pure-login__card { width:100%; max-width:400px; background:#fff; border-radius:16px;
  padding:28px 28px 22px; box-shadow:0 18px 60px rgba(10,22,60,.45); }
.pure-login__brand { display:flex; align-items:center; gap:12px; margin-bottom:20px; }
.pure-login__seal { width:46px; height:46px; border-radius:12px; background:#0e2244;
  color:#eed07a; font-size:26px; font-weight:700; display:grid; place-items:center; font-family:serif; }
.pure-login__bt b { display:block; font-size:18px; color:#1f2c3d; letter-spacing:1px; }
.pure-login__bt small { display:block; font-size:12px; color:#7b8698; margin-top:2px; }
.pure-login__back { display:block; text-align:center; margin-top:14px; font-size:13px; color:#dbe4f7; }
.pure-login__back:hover { color:#fff; }
.pure-login__foot { font-size:13px; color:#c7d4f5; }

/* ★ 2026-10-21 移动端登录卡溢出修复：
   手机上（尤其微信内置浏览器）出现卡片右侧被切、登录按钮点不到，
   原因是窄屏下卡片 padding 与子元素宽度叠加超出视口。这里做兜底约束。 */
@media (max-width: 520px) {
  html, body { max-width:100%; overflow-x:hidden; }
  .pure-login { padding:14px; }
  .pure-login__card { width:auto; max-width:100%; margin:0 6px; box-sizing:border-box; padding:22px 16px 18px; border-radius:14px; }
  .pure-login__brand { gap:10px; margin-bottom:16px; }
  .pure-login__seal { width:40px; height:40px; font-size:22px; border-radius:10px; flex:0 0 40px; }
  .pure-login__bt b { font-size:16px; }
  .pure-login__bt small { font-size:11.5px; }
  .pure-login .login-form input,
  .pure-login .login-form button,
  .pure-login .login-form .btn { width:100%; max-width:100%; box-sizing:border-box; }
  .pure-login__back { font-size:12.5px; }
}

/* —— 门户风格统一（2026-10-06 用户指令）：主区对齐三企业门户「纸白底 · 金色点缀 · 细线卡」 —— */
/* ① 主区底色：冷灰 → 门户纸白（oklch(99.2% 0.003 253) ≈ #fbfbfc） */
.prop-portal, body { background:#fbfbfc; }

/* ② 区块标题：衬线 + 金色竖标 + 尾部细线（对齐门户 section 头） */
.sec-head { gap:12px; }
.sec-head h2 { position:relative; padding-left:15px; font-size:20px; letter-spacing:.06em; }
.sec-head h2::before {
  content:''; position:absolute; left:0; top:50%; transform:translateY(-50%);
  width:4px; height:17px; border-radius:2px; background:var(--gold-fill);
}
.sec-head::after { content:''; flex:1; height:1px; background:linear-gradient(90deg,#e8e2d3,transparent); }
.sec-head .sub { letter-spacing:.04em; }

/* ③ 卡片：暖细描边（对齐门户细线卡），悬浮金描边 */
.wk-card, .app-card, .kpi, .detail-head { border-color:#e7e3d8; }
.wk-card, .app-card { box-shadow:0 1px 2px rgba(28,53,99,.04); }
.app-card:hover, .kpi:hover { border-color:rgba(201,160,60,.5); box-shadow:0 10px 26px -14px rgba(28,53,99,.22); }

/* ④ 状态徽标：细描边药丸（更贴门户徽章质感） */
.badge-tag { border:1px solid rgba(28,53,99,.08); }

/* ⑤ 金色图标盒描边与门户金统一 */
.wk-ic { border-color:#efdfae; }

/* —— 顶部品牌横幅「海纳百川 · 有容乃大」（2026-10-06 用户指令）：对齐门户 Hero 深蓝金 —— */
/* 2026-10-06 三次指令：宽度(厚度)增加一倍 → 做成 Hero 级大横幅 */
.wk-banner {
  position:relative; overflow:hidden; border-radius:12px;
  display:flex; align-items:center; justify-content:space-between; gap:24px;
  padding:44px 40px; min-height:272px; margin:0 0 18px;
  background:linear-gradient(150deg,#16305a 0%,#0e2244 55%,#0a1a38 100%);
  border:1px solid rgba(201,160,60,.35);
  box-shadow:0 14px 34px -18px rgba(14,34,68,.5);
}
.wk-banner::before {
  content:'1988'; position:absolute; right:150px; bottom:-30px;
  font-family:var(--font-serif); font-weight:700; font-size:210px; line-height:1;
  color:rgba(238,208,122,.08); pointer-events:none; user-select:none;
}
.wk-banner::after {
  content:''; position:absolute; top:18px; bottom:18px; right:0; width:2px;
  background:linear-gradient(180deg,transparent,#dfb85a 30%,#eed07a 55%,transparent); opacity:.8;
}
.wk-banner-kicker { display:block; font-size:14px; letter-spacing:.24em; color:var(--gold-bright); opacity:.92; }
.wk-banner-title {
  margin:12px 0 8px; font-family:var(--font-serif); font-weight:700;
  font-size:clamp(32px,3.2vw,46px); color:#f5f0e2; letter-spacing:.12em; line-height:1.18;
}
.wk-banner-title em { font-style:normal; color:var(--gold-bright); }
.wk-banner-title .sep { color:var(--gold); margin-inline:.18em; font-weight:400; }
/* 逐个亮起 + 永不停止的循环发光（2026-10-06 用户指令）
   —— 双层动画：①btCharIn 一次性逐字入场；②btGlow 无缝循环「发光」，逐字错峰形成流动的光。 */
.wk-banner-title .bt-char {
  display:inline-block;
  /* 三层叠加：入门（.7s，逐字错峰）+ 循环发光（错峰起始，永不停） */
  animation:
    btCharIn .7s cubic-bezier(.2,.7,.2,1) both,
    btGlow 2.8s ease-in-out infinite;
  /* 说明：btGlow 的延迟与 btCharIn 同步由内联 animation-delay 统一给出（见 app.js） */
}
/* 预置可见态（reduced-motion / 动画不支持时兜底），btCharIn 的 0% 会覆盖回透明 */
@keyframes btCharIn {
  0%   { opacity:0; transform:translateY(24px) scale(.8); filter:blur(6px) drop-shadow(0 0 0 rgba(245,216,120,0)); }
  55%  { opacity:1; transform:translateY(0) scale(1.05); filter:blur(0) drop-shadow(0 0 14px rgba(245,216,120,.5)); }
  100% { opacity:1; transform:none; filter:blur(0) drop-shadow(0 0 0 rgba(245,216,120,0)); }
}
/* ★ 循环发光：永不停 —— 亮度 + 金色光晕 + 轻微上浮，形成持续「呼吸」的光 */
@keyframes btGlow {
  0%, 100% {
    color:#f5f0e2;
    text-shadow:0 0 0 rgba(245,216,120,0);
    transform:translateY(0);
  }
  50% {
    color:#fffdf2;
    text-shadow:0 0 6px rgba(245,216,120,.85),
                0 0 18px rgba(245,216,120,.6),
                0 0 34px rgba(238,182,60,.38);
    transform:translateY(-3px);
  }
}
/* 金色「有容乃大」自带金色，循环时辉光更醒目，无需额外处理 */
@media (prefers-reduced-motion: reduce){
  .wk-banner-title .bt-char {
    opacity:1; transform:none; filter:none;
    animation:btCharIn .01s both !important;
  }
}
.wk-banner-sub { margin:0; font-size:15px; color:rgba(240,245,255,.72); letter-spacing:.08em; }
.wk-banner-side { display:flex; align-items:center; flex-shrink:0; position:relative; }
.sig-av {
  width:46px; height:46px; border-radius:50%; display:grid; place-items:center; margin-left:-12px;
  font-family:var(--font-serif); font-weight:700; font-size:18px;
  background:linear-gradient(150deg,var(--navy-mid),#081630); color:var(--gold-bright);
  box-shadow:0 0 0 2px #0e2244;
}
.sig-av:first-child { margin-left:0; }
.sig-av.g { background:linear-gradient(150deg,#c9a03c,#8a6d1b); color:#0e2244; }
.sig-av.v { background:linear-gradient(150deg,#4fa39a,#2c6a64); color:#f2fbf9; }
/* 六企业色（对齐门户 sig__av，2026-10-06）：道=青瓷teal 勘=蓝灰slate 科=紫zk */
.sig-av.t { background:linear-gradient(150deg,oklch(72% 0.10 168),oklch(56% 0.10 168)); color:var(--navy-950,#0a1a38); }
.sig-av.s { background:linear-gradient(150deg,oklch(70% 0.055 245),oklch(55% 0.06 245)); color:var(--navy-950,#0a1a38); }
.sig-av.k { background:linear-gradient(150deg,oklch(68% 0.11 285),oklch(52% 0.12 285)); color:#fff; }
/* 六企业头像轮流发光（2026-10-06 用户指令「几个公司轮流发光，所有应用都设置」）：
   3.6s 一轮 × 6 头像错峰 0.6s → 金色光点沿头像列依次点亮、循环流动；
   发光瞬间抬 scale/z-index，避免光晕被相邻头像盖住 */
.sig-av { position:relative; animation:sigGlow 3.6s ease-in-out infinite; }
.sig-av:nth-child(2) { animation-delay:.6s; }
.sig-av:nth-child(3) { animation-delay:1.2s; }
.sig-av:nth-child(4) { animation-delay:1.8s; }
.sig-av:nth-child(5) { animation-delay:2.4s; }
.sig-av:nth-child(6) { animation-delay:3s; }
@keyframes sigGlow {
  0%, 20%, 100% { box-shadow:0 0 0 2px #0e2244; filter:brightness(1); transform:scale(1); z-index:1; }
  7% {
    box-shadow:0 0 0 2px #0e2244, 0 0 0 4px rgba(250,210,120,.6), 0 0 20px 5px rgba(250,190,70,.5);
    filter:brightness(1.3); transform:scale(1.08); z-index:5;
  }
}
@media (prefers-reduced-motion:reduce) { .sig-av { animation:none; } }
@media (max-width:900px) {
  .wk-banner { padding:18px 18px; gap:14px; min-height:0; }
  .wk-banner::before { font-size:96px; right:-8px; bottom:-18px; }
  .wk-banner-title { font-size:24px; letter-spacing:.08em; margin:7px 0 5px; }
  .wk-banner-kicker { font-size:10.5px; letter-spacing:.14em; }
  .wk-banner-sub { font-size:12px; }
  .sig-av { width:30px; height:30px; font-size:12px; margin-left:-8px; }
}
@media (max-width:640px) {
  /* 手机端：横幅收缩到 ~1/3 屏以内，保证「我的应用」卡片首屏可见（2026-10-06 用户反馈卡片被推到屏外） */
  .wk-banner { padding:13px 16px; margin-bottom:12px; }
  .wk-banner-title { font-size:20px; margin:6px 0 4px; white-space:nowrap; }
  .wk-banner-sub { font-size:11.5px; line-height:1.6; }
  .wk-banner::before { font-size:84px; right:-6px; bottom:-14px; }
  /* 六头像与标题争宽（窄屏下标题只剩 ~130px 被迫折行）→ 窄屏隐藏装饰头像 */
  .wk-banner-side { display:none; }
}
@media (max-width:640px) {
  /* 窄屏企业名全列太长易折断 → 只留「六企业联合展示」（六头像仍在） */
  .wk-banner-firms { display:none; }
}

/* ===================== 公司简介管理（/admin/profiles） ===================== */
.pf-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:16px; }
.pf-card { border:1px solid var(--border); border-radius:12px; background:var(--card,#fff); padding:16px; display:flex; flex-direction:column; gap:12px; }
.pf-card__hd { display:flex; align-items:center; gap:12px; }
.pf-seal { flex:none; width:40px; height:40px; border-radius:9px; color:#fff; display:grid; place-items:center; font-size:19px; font-weight:700; font-family:"Songti SC","STSong",serif; box-shadow:inset 0 0 0 1px rgba(255,255,255,.35); }
.pf-card__tt { min-width:0; } .pf-card__tt b { display:block; font-size:15px; } .pf-card__tt small { color:var(--text-3); font-size:12px; display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pf-card__bd { min-height:64px; }
.pf-tag { display:inline-block; font-size:12px; padding:2px 10px; border-radius:999px; border:1px solid; }
.pf-meta { margin:8px 0 0; font-size:12.5px; color:var(--text-2,#667); line-height:1.65; word-break:break-all; }
.pf-card__ops { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:auto; }
.pf-note { margin-top:14px; font-size:12.5px; color:var(--text-3); }
/* ★ 分片上传进度条（2026-10-12）：公司简介 / 证照归档共用 */
.up-bar { margin-top:8px; height:6px; border-radius:999px; background:#e9edf3; overflow:hidden; }
.up-bar > i { display:block; height:100%; width:0; border-radius:999px; background:linear-gradient(90deg,#2f7d5b,#4bb08a); transition:width .18s ease; }

/* ===================== 应用存档（/admin/apps → 📦 应用存档） ===================== */
.arc-hint { margin:0 0 12px; font-size:12.5px; color:var(--text-2,#667); line-height:1.75; background:#f6f8fb; border-left:3px solid #c9d4e4; padding:9px 12px; border-radius:0 6px 6px 0; }
.arc-bar { display:flex; gap:8px; align-items:center; margin-bottom:12px; }
.arc-tag { display:inline-block; font-size:11.5px; padding:2px 9px; border-radius:999px; border:1px solid; }
.arc-tag.soft { color:#8a5b00; background:#f5e5c0; border-color:#e3c98a; }
.arc-tag.hard { color:#8f2b2b; background:#f8dcdc; border-color:#e6b0b0; }

/* ---- 联系信息与证照管理页（/admin/contact）---- */
.card { background:var(--card,#fff); border:1px solid var(--border,#e5e7eb); border-radius:12px; overflow:hidden; }
.card-hd { padding:12px 16px; font-weight:600; border-bottom:1px solid var(--border,#e5e7eb); background:var(--card-2,#fafafa); }
.card-bd { padding:16px; }

/* ---- 启动验证层（boot-gate）：残留 token 静默校验期间的过场（2026-10-06） ---- */
.boot-gate { position:fixed; inset:0; display:grid; place-items:center; background:var(--gray-bg); z-index:60; }
.boot-gate__card { display:flex; flex-direction:column; align-items:center; gap:14px; color:var(--text-2); }
.boot-gate__seal {
  width:56px; height:56px; border-radius:14px; display:grid; place-items:center;
  background:var(--primary); color:var(--gold-bright); font-size:26px; font-weight:700;
  font-family:var(--font-serif); box-shadow:0 12px 28px -12px rgba(22,48,90,.55);
  animation:boot-pulse 1.6s ease-in-out infinite;
}
.boot-gate__card p { margin:0; font-size:13px; letter-spacing:.08em; }
@keyframes boot-pulse { 0%,100%{ transform:scale(1); opacity:1 } 50%{ transform:scale(.94); opacity:.82 } }
@media (prefers-reduced-motion: reduce){ .boot-gate__seal{ animation:none } }

/* ===================== AI 报告模块（/ai-report）===================== */
.ai-report-layout { display:grid; grid-template-columns:minmax(320px,1fr) minmax(320px,1fr); gap:18px; }
.ai-form-panel,
.ai-preview-panel { background:var(--card,#fff); border:1px solid var(--border); border-radius:12px; padding:18px; box-shadow:0 1px 2px rgba(28,53,99,.04); }
.ai-panel-title { margin:0 0 16px; font-size:15px; font-weight:600; color:var(--navy-deep); font-family:var(--font-serif); letter-spacing:.03em; }
.ai-panel-hd { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:0 0 16px; }
.ai-panel-hd .ai-panel-title { margin:0; }
.ai-btn-export {
  flex:none; padding:6px 12px; border-radius:7px; border:1px solid var(--primary); background:#fff;
  color:var(--primary); font-size:13px; cursor:pointer; transition:background .15s, color .15s;
}
.ai-btn-export:hover { background:var(--primary); color:#fff; }
.ai-btn-export:active { transform:translateY(1px); }
.ai-form { display:flex; flex-direction:column; gap:12px; }
.ai-form label { display:flex; flex-direction:column; gap:5px; }
.ai-label { font-size:13px; color:var(--text-1); font-weight:500; }
.ai-form input {
  padding:9px 11px; border:1px solid var(--border); border-radius:8px; background:#fff; font-size:13px;
  transition:border-color .15s, box-shadow .15s; color:var(--text-1);
}
.ai-form input:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(28,53,99,.08); }
.ai-btn {
  margin-top:10px; width:100%; padding:10px 14px; border:none; border-radius:8px; background:var(--primary); color:#fff;
  font-size:14px; font-weight:500; cursor:pointer; transition:background .15s, transform .08s;
}
.ai-btn:hover { background:var(--navy-deep); }
.ai-btn:active { transform:translateY(1px); }
.ai-placeholder { font-size:13px; color:var(--text-3); line-height:1.7; }
.ai-preview { font-size:13px; line-height:1.75; color:var(--text-1); }
.ai-preview h4 { margin:0 0 10px; font-size:15px; color:var(--navy-deep); font-weight:600; }
.ai-preview ul { margin:0 0 12px; padding-left:18px; }
.ai-preview li { margin:4px 0; color:var(--text-2); }
.ai-preview hr { border:none; border-top:1px solid var(--border); margin:12px 0; }
.ai-note { color:var(--primary); font-weight:500; }
.btn-text {
  display:inline-flex; align-items:center; gap:4px; padding:6px 10px; border-radius:6px;
  background:transparent; border:1px solid transparent; color:var(--text-2); font-size:13px; cursor:pointer;
  transition:background .15s, color .15s;
}
.btn-text:hover { background:var(--gray-bg); color:var(--navy-deep); }
@media (max-width:900px) {
  .ai-report-layout { grid-template-columns:1fr; }
}

/* ---------- 修改密码弹窗（2026-10-21） ---------- */
/* 错误必须「留在弹窗里」而不是靠 toast 一闪而过：用户改密失败最常见的
   一是旧密码输错、二是新密码不达强度，两种都要能看清原因再重试。 */
.pwd-err {
  margin:2px 0 10px; padding:9px 12px; border-radius:8px;
  background:var(--danger-bg); border:1px solid #fecaca; color:var(--danger);
  font-size:13px; line-height:1.5;
}
.pwd-tip {
  margin:0; padding:9px 12px; border-radius:8px;
  background:var(--primary-light); color:var(--text-2);
  font-size:12.5px; line-height:1.6;
}
