Browse Source

feat: 登录页品牌升级 - 企业官网设计语言

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
User 2 months ago
parent
commit
dd002f325f

+ 33 - 4
cfc-backend/src/main/java/com/etotem/cfc/dto/FamilyMemberVO.java

@@ -4,12 +4,41 @@ import lombok.Data;
 
 @Data
 public class FamilyMemberVO {
+
     private Long id;
+
+    /** 成员来源: family_member / child / parent */
+    private String source;
+
+    /** 关联的userId(仅family_member且有手机号匹配时) */
+    private Long userId;
+
     private String nickname;
+
+    private String phone;
+
     private String avatar;
-    private String memberType; // 'child' 或 'parent'
-    private String roleLabel;  // '孩子' 或 '家长'
-    private String danLevel;
+
+    private String gender;
+
+    /** 关系类型key(仅family_member) */
+    private String relationshipType;
+
+    /** 关系类型显示名 */
+    private String relationshipTypeName;
+
+    /** 能力角色: parent/child */
+    private String capabilityRole;
+
+    /** 角色标签显示文本(家长/孩子/配偶/父母等) */
+    private String roleLabel;
+
+    /** 年龄 */
+    private Integer age;
+
+    /** 总积分 */
     private Integer totalPoints;
-    private Integer showToFamily; // 1=可见, 0=不可见
+
+    /** 是否对家庭成员可见 */
+    private Integer showToFamily;
 }

+ 40 - 0
cfc-backend/src/main/resources/schema.sql

@@ -1518,3 +1518,43 @@ CREATE TABLE IF NOT EXISTS activities (
     INDEX idx_status (status),
     INDEX idx_start_time (start_time)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';
+
+-- ===== v1.3 家庭成员体系 =====
+
+-- 手动添加的家庭成员表(替代children表用于新成员)
+CREATE TABLE IF NOT EXISTS family_members (
+    id               BIGINT AUTO_INCREMENT PRIMARY KEY,
+    family_id        BIGINT       NOT NULL COMMENT '所属家庭ID',
+    user_id          BIGINT       COMMENT '关联的用户ID(手机号匹配到已有用户时)',
+    nickname         VARCHAR(100) NOT NULL COMMENT '昵称',
+    phone            VARCHAR(20)  COMMENT '手机号',
+    avatar           VARCHAR(500) COMMENT '头像',
+    gender           VARCHAR(10)  COMMENT '性别: male/female',
+    birthday         DATE         COMMENT '出生日期',
+    relationship_type VARCHAR(50) NOT NULL COMMENT '关系类型key',
+    capability_role  VARCHAR(20)  NOT NULL COMMENT '能力角色: parent/child(决定界面权限)',
+    show_to_family   INT DEFAULT 1 COMMENT '对家庭成员可见: 1=可见, 0=不可见',
+    total_points     INT DEFAULT 0 COMMENT '总积分',
+    created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at       DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_family_id (family_id),
+    INDEX idx_phone (phone)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员表(手动添加)';
+
+-- 关系类型配置表(管理端可配置)
+CREATE TABLE IF NOT EXISTS relationship_types (
+    id               BIGINT AUTO_INCREMENT PRIMARY KEY,
+    type_key         VARCHAR(50)  NOT NULL UNIQUE COMMENT '类型标识: spouse/parent/child/sibling',
+    type_name        VARCHAR(100) NOT NULL COMMENT '类型显示名: 配偶/父母/子女/兄弟姐妹',
+    capability_role  VARCHAR(20)  NOT NULL COMMENT '能力角色: parent/child',
+    sort_order       INT DEFAULT 0 COMMENT '排序序号',
+    enabled          INT DEFAULT 1 COMMENT '是否启用: 1=启用, 0=禁用',
+    created_at       DATETIME DEFAULT CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系类型配置表';
+
+-- 默认关系类型数据
+INSERT IGNORE INTO relationship_types (type_key, type_name, capability_role, sort_order) VALUES
+('spouse', '配偶', 'parent', 1),
+('parent', '父母', 'parent', 2),
+('child', '子女', 'child', 3),
+('sibling', '兄弟姐妹', 'child', 4);

+ 299 - 132
cfc-web/src/views/Login.vue

@@ -1,14 +1,31 @@
 <template>
   <div class="login-page">
-    <!-- 左侧品牌展示区 — 五行相生相克沙盘 -->
+    <!-- 左侧品牌展示区 — 浠艾福品牌故事 + 五维能量 -->
     <div class="brand-panel">
       <div class="brand-content">
 
-        <!-- ===== 五维能量沙盘 · 相生相克图 ===== -->
+        <!-- ===== Logo + 品牌标识 ===== -->
+        <div class="brand-header">
+          <img src="/logo.png" alt="浠艾福" class="logo-img" />
+          <div class="brand-titles">
+            <span class="brand-cn">亿图腾<span class="brand-dot">·</span>浠艾福</span>
+            <span class="brand-en">Care Family</span>
+          </div>
+        </div>
+
+        <!-- ===== 核心主张 ===== -->
+        <div class="brand-mission">
+          <h1 class="mission-title">给全家的<span class="highlight">一站式幸福提案</span></h1>
+          <p class="mission-desc">
+            AI 智慧家庭成长平台 · 五维能量驱动全家持续成长
+          </p>
+        </div>
+
+        <!-- ===== 五维能量沙盘 ===== -->
         <div class="sand-table-wrap">
           <svg class="sand-table-svg" viewBox="0 0 340 370" xmlns="http://www.w3.org/2000/svg">
             <defs>
-              <!-- 相生箭头(userSpaceOnUse 精确定位,箭头尖在圆边) -->
+              <!-- 相生箭头 -->
               <marker id="arrowGen" markerWidth="52" markerHeight="10" refX="48" refY="5" orient="auto" markerUnits="userSpaceOnUse">
                 <polygon points="7,5 0,0 0,10" fill="#FFE066" />
               </marker>
@@ -81,33 +98,22 @@
             <circle cx="100" cy="280" r="2" fill="#FFE066" opacity="0.5" class="particle" />
             <circle cx="69"  cy="133" r="2" fill="#FFE066" opacity="0.5" class="particle" />
 
-            <!-- ===== 相生环 ===== -->
-            <!-- 土→金 -->
+            <!-- 相生环 -->
             <path d="M 170,85 A 105,105 0 0,1 270,158" fill="none" stroke="#FFD700" stroke-width="2.5" stroke-opacity="0.8" class="arc-gen" marker-end="url(#arrowGen)" />
-            <!-- 金→水 -->
             <path d="M 270,158 A 105,105 0 0,1 232,275" fill="none" stroke="#FFD700" stroke-width="2.5" stroke-opacity="0.8" class="arc-gen" marker-end="url(#arrowGen)" />
-            <!-- 水→木 -->
             <path d="M 232,275 A 105,105 0 0,1 108,275" fill="none" stroke="#FFD700" stroke-width="2.5" stroke-opacity="0.8" class="arc-gen" marker-end="url(#arrowGen)" />
-            <!-- 木→火 -->
             <path d="M 108,275 A 105,105 0 0,1 70,158" fill="none" stroke="#FFD700" stroke-width="2.5" stroke-opacity="0.8" class="arc-gen" marker-end="url(#arrowGen)" />
-            <!-- 火→土 -->
             <path d="M 70,158 A 105,105 0 0,1 170,85" fill="none" stroke="#FFD700" stroke-width="2.5" stroke-opacity="0.8" class="arc-gen" marker-end="url(#arrowGen)" />
 
-            <!-- ===== 相克线(内五角星) ===== -->
-            <!-- 木克土  行→身(静态线,无脉冲闪烁) -->
+            <!-- 相克线 -->
             <line x1="108" y1="275" x2="170" y2="85" stroke="#FF8A80" stroke-width="1.5" stroke-dasharray="6,6" stroke-opacity="0.45" class="line-ove-quiet" marker-end="url(#arrowOve)" />
-            <!-- 土克水  身→富 -->
             <line x1="170" y1="85" x2="232" y2="275" stroke="#FF8A80" stroke-width="2" stroke-dasharray="6,6" class="line-ove" marker-end="url(#arrowOve)" />
-            <!-- 水克火  富→心 -->
             <line x1="232" y1="275" x2="70" y2="158" stroke="#FF8A80" stroke-width="2" stroke-dasharray="6,6" class="line-ove" marker-end="url(#arrowOve)" />
-            <!-- 火克金  心→智 -->
             <line x1="70" y1="158" x2="270" y2="158" stroke="#FF8A80" stroke-width="2" stroke-dasharray="6,6" class="line-ove" marker-end="url(#arrowOve)" />
-            <!-- 金克木  智→行 -->
             <line x1="270" y1="158" x2="108" y2="275" stroke="#FF8A80" stroke-width="2" stroke-dasharray="6,6" class="line-ove" marker-end="url(#arrowOve)" />
 
-            <!-- ===== 五维节点 ===== -->
-
-            <!-- 身(土) — 上 -->
+            <!-- 五维节点 -->
+            <!-- 身(土) -->
             <g class="node-group">
               <circle cx="170" cy="85" r="34" fill="url(#gradEarth)" stroke="rgba(212,184,150,0.5)" stroke-width="2" filter="url(#glowNode)" />
               <circle cx="170" cy="85" r="30" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="0.5" />
@@ -115,8 +121,7 @@
               <text x="170" y="100" text-anchor="middle" fill="#fff" font-size="15" font-weight="600">身</text>
               <text x="170" y="114" text-anchor="middle" fill="rgba(255,255,255,0.45)" font-size="9">土</text>
             </g>
-
-            <!-- 智(金) — 右上 -->
+            <!-- 智(金) -->
             <g class="node-group">
               <circle cx="270" cy="158" r="34" fill="url(#gradMetal)" stroke="rgba(240,218,112,0.5)" stroke-width="2" filter="url(#glowNode)" />
               <circle cx="270" cy="158" r="30" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="0.5" />
@@ -124,8 +129,7 @@
               <text x="270" y="173" text-anchor="middle" fill="#fff" font-size="15" font-weight="600">智</text>
               <text x="270" y="187" text-anchor="middle" fill="rgba(255,255,255,0.45)" font-size="9">金</text>
             </g>
-
-            <!-- 富(水) — 右下 -->
+            <!-- 富(水) -->
             <g class="node-group">
               <circle cx="232" cy="275" r="34" fill="url(#gradWater)" stroke="rgba(143,197,232,0.5)" stroke-width="2" filter="url(#glowNode)" />
               <circle cx="232" cy="275" r="30" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="0.5" />
@@ -133,8 +137,7 @@
               <text x="232" y="290" text-anchor="middle" fill="#fff" font-size="15" font-weight="600">富</text>
               <text x="232" y="304" text-anchor="middle" fill="rgba(255,255,255,0.45)" font-size="9">水</text>
             </g>
-
-            <!-- 行(木) — 左下 -->
+            <!-- 行(木) -->
             <g class="node-group">
               <circle cx="108" cy="275" r="34" fill="url(#gradWood)" stroke="rgba(129,199,132,0.5)" stroke-width="2" filter="url(#glowNode)" />
               <circle cx="108" cy="275" r="30" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="0.5" />
@@ -142,8 +145,7 @@
               <text x="108" y="290" text-anchor="middle" fill="#fff" font-size="15" font-weight="600">行</text>
               <text x="108" y="304" text-anchor="middle" fill="rgba(255,255,255,0.45)" font-size="9">木</text>
             </g>
-
-            <!-- 心(火) — 左上 -->
+            <!-- 心(火) -->
             <g class="node-group">
               <circle cx="70" cy="158" r="34" fill="url(#gradFire)" stroke="rgba(255,171,145,0.5)" stroke-width="2" filter="url(#glowNode)" />
               <circle cx="70" cy="158" r="30" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="0.5" />
@@ -152,13 +154,8 @@
               <text x="70" y="187" text-anchor="middle" fill="rgba(255,255,255,0.45)" font-size="9">火</text>
             </g>
 
-            <!-- 中心太极(替代原有五行文字) -->
-            <svg x="130" y="150" width="80" height="80" viewBox="0 0 120 120" class="login-taiji">
-              <circle cx="60" cy="60" r="56" fill="none" stroke="rgba(255,255,255,0.15)" stroke-width="1.2" />
-              <path d="M60 4 A56 56 0 0 1 60 116 A28 28 0 0 0 60 60 A28 28 0 0 1 60 4" fill="rgba(255,255,255,0.15)" />
-              <circle cx="60" cy="32" r="10" fill="rgba(255,255,255,0.6)" />
-              <circle cx="60" cy="88" r="10" fill="rgba(255,255,255,0.15)" />
-            </svg>
+            <!-- 中心文字 -->
+            <text x="170" y="188" text-anchor="middle" fill="rgba(255,255,255,0.07)" font-size="13" letter-spacing="5">五行 · 相生相克</text>
 
             <!-- 图例 -->
             <g transform="translate(170, 345)">
@@ -172,22 +169,49 @@
           </svg>
         </div>
 
-        <!-- Logo + 品牌 -->
-        <div class="brand-mid">
-          <div class="brand-logo-row">
-            <img src="/logo.png" alt="浠艾福" class="logo-img" />
-            <span class="brand-name">浠艾福</span>
-            <span class="brand-en">Care Family</span>
+        <!-- ===== 品牌价值 ===== -->
+        <div class="brand-values">
+          <div class="value-item">
+            <span class="value-icon">🌏</span>
+            <span class="value-label">身</span>
+            <span class="value-arrow">→</span>
+            <span class="value-icon">⚔️</span>
+            <span class="value-label">智</span>
+            <span class="value-arrow">→</span>
+            <span class="value-icon">💧</span>
+            <span class="value-label">富</span>
+            <span class="value-arrow">→</span>
+            <span class="value-icon">🌿</span>
+            <span class="value-label">行</span>
+            <span class="value-arrow">→</span>
+            <span class="value-icon">🔥</span>
+            <span class="value-label">心</span>
           </div>
+          <p class="value-subtitle">相生相克 · 动态平衡 · 全家成长</p>
         </div>
 
-        <!-- 底部 -->
-        <div class="brand-bottom">
-          <p class="tagline">给全家的一站式幸福提案</p>
+        <!-- ===== 数据 + 角色标签 ===== -->
+        <div class="brand-footer">
+          <div class="stats-row">
+            <div class="stat-item">
+              <span class="stat-num">120,000+</span>
+              <span class="stat-label">家庭信赖</span>
+            </div>
+            <div class="stat-divider"></div>
+            <div class="stat-item">
+              <span class="stat-num">1,000+</span>
+              <span class="stat-label">专业人员</span>
+            </div>
+            <div class="stat-divider"></div>
+            <div class="stat-item">
+              <span class="stat-num">5</span>
+              <span class="stat-label">幸福维度</span>
+            </div>
+          </div>
           <div class="role-tags">
-            <span class="role-tag" style="border-color:#5B9BD5">家长</span>
-            <span class="role-tag" style="border-color:#F08A7A">服务商</span>
-            <span class="role-tag" style="border-color:#4CAF50">运营</span>
+            <span class="role-tag" style="border-color:#5B9BD5;color:#8FC5E8">家庭客户</span>
+            <span class="role-tag" style="border-color:#F08A7A;color:#FFAB91">服务商</span>
+            <span class="role-tag" style="border-color:#4CAF50;color:#81C784">平台运营</span>
           </div>
         </div>
 
@@ -198,11 +222,15 @@
     <div class="form-panel">
       <div class="form-card">
         <div class="form-header">
-          <div class="header-icon">
-            <i class="el-icon-user"></i>
+          <div class="header-icon-wrap">
+            <svg viewBox="0 0 32 32" fill="none" width="28" height="28" class="header-svg">
+              <circle cx="16" cy="16" r="14" stroke="currentColor" stroke-width="1.8" fill="none" opacity="0.3"/>
+              <circle cx="16" cy="12" r="4" stroke="currentColor" stroke-width="1.5" fill="none"/>
+              <path d="M8 26c0-5 3-8 8-8s8 3 8 8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" fill="none"/>
+            </svg>
           </div>
-          <h2 class="form-title">管理后台登录</h2>
-          <p class="form-desc">请使用管理员或规划师账号登录</p>
+          <h2 class="form-title">管理后台</h2>
+          <p class="form-desc">管理员 / 规划师登录</p>
         </div>
 
         <el-form
@@ -215,7 +243,7 @@
           <el-form-item prop="username">
             <el-input
               v-model="loginForm.username"
-              placeholder="请输入用户名 / 手机号"
+              placeholder="用户名 / 手机号"
               size="large"
               :disabled="loading"
             >
@@ -227,7 +255,7 @@
             <el-input
               v-model="loginForm.password"
               type="password"
-              placeholder="请输入密码"
+              placeholder="密码"
               size="large"
               :disabled="loading"
               show-password
@@ -340,9 +368,9 @@ export default {
 
 <style scoped>
 /* ============================================================
-   登录页面 — 浠艾福 (Care Family)
-   品牌色: #5B9BD5 / #F08A7A
-   五维序: 身(土)→智(金)→富(水)→行(木)→心(火)
+   登录页面 — 亿图腾 · 浠艾福 (Care Family)
+   品牌色: #4A9BD7 · #F59E0B
+   设计灵感: 企业官网 web/ 品牌体系
    ============================================================ */
 
 .login-page {
@@ -350,8 +378,8 @@ export default {
   height: 100vh;
   width: 100vw;
   overflow: hidden;
-  font-family: 'Helvetica Neue', Helvetica, 'PingFang SC',
-    'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;
+  font-family: system-ui, -apple-system, BlinkMacSystemFont,
+    'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;
 }
 
 /* ==================== 左侧品牌区 ==================== */
@@ -361,25 +389,119 @@ export default {
   display: flex;
   align-items: center;
   justify-content: center;
-  background: linear-gradient(165deg, #3A7CC4 0%, #5B9BD5 30%, #6BA8DE 60%, #7BBDE0 100%);
+  background: linear-gradient(160deg,
+    #0A1F3A 0%,
+    #0F2F55 20%,
+    #1A4D7A 45%,
+    #2E6FA0 70%,
+    #4A9BD7 100%);
   overflow: hidden;
 }
 
+/* 背景纹理 — 抽象山水波纹 */
+.brand-panel::before {
+  content: '';
+  position: absolute;
+  top: 0; left: 0; right: 0; bottom: 0;
+  background:
+    radial-gradient(ellipse 120% 50% at 10% 20%, rgba(255, 215, 0, 0.03) 0%, transparent 70%),
+    radial-gradient(ellipse 80% 40% at 90% 80%, rgba(74, 155, 215, 0.06) 0%, transparent 70%),
+    radial-gradient(circle 60% 60% at 50% 100%, rgba(255, 255, 255, 0.02) 0%, transparent 60%);
+  pointer-events: none;
+  z-index: 0;
+}
+
 .brand-content {
   position: relative;
-  z-index: 2;
+  z-index: 1;
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
-  max-width: 480px;
+  max-width: 520px;
   width: 100%;
-  padding: 16px 40px;
+  padding: 24px 40px;
   color: #fff;
   min-height: 100vh;
   box-sizing: border-box;
 }
 
+/* -------- Logo + 品牌 -------- */
+.brand-header {
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  gap: 14px;
+  margin-bottom: 12px;
+}
+
+.logo-img {
+  width: 40px;
+  height: 40px;
+  display: block;
+  filter: brightness(1.1);
+}
+
+.brand-titles {
+  display: flex;
+  flex-direction: column;
+  gap: 1px;
+}
+
+.brand-cn {
+  font-size: 22px;
+  font-weight: 700;
+  letter-spacing: 3px;
+  line-height: 1.3;
+  background: linear-gradient(135deg, #FFE066 0%, #FFD700 50%, #FFE066 100%);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
+}
+
+.brand-dot {
+  margin: 0 2px;
+  opacity: 0.6;
+}
+
+.brand-en {
+  font-size: 11px;
+  opacity: 0.5;
+  letter-spacing: 3px;
+  font-weight: 300;
+  text-transform: uppercase;
+}
+
+/* -------- 核心主张 -------- */
+.brand-mission {
+  flex-shrink: 0;
+  text-align: center;
+  margin-bottom: 10px;
+}
+
+.mission-title {
+  font-size: 20px;
+  font-weight: 700;
+  letter-spacing: 2px;
+  margin: 0 0 4px;
+  line-height: 1.4;
+}
+
+.mission-title .highlight {
+  background: linear-gradient(135deg, #FFE066, #F59E0B);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
+}
+
+.mission-desc {
+  font-size: 13px;
+  opacity: 0.55;
+  letter-spacing: 1px;
+  margin: 0;
+  font-weight: 300;
+}
+
 /* -------- 五维能量沙盘 -------- */
 .sand-table-wrap {
   flex: 1;
@@ -388,16 +510,17 @@ export default {
   justify-content: center;
   width: 100%;
   min-height: 0;
+  margin: -8px 0;
 }
 
 .sand-table-svg {
   width: 100%;
-  max-width: 340px;
+  max-width: 320px;
   height: auto;
   display: block;
 }
 
-/* ===== 相生环 · 连续流动 ===== */
+/* 相生环流动 */
 .sand-table-svg .arc-gen {
   stroke-dasharray: 10 8;
   animation: flowArc 1.2s linear infinite;
@@ -413,17 +536,7 @@ export default {
   100% { stroke-dashoffset: -18; }
 }
 
-/* ===== 中心太极 · 缓慢旋转 ===== */
-.sand-table-svg .login-taiji {
-  animation: taijiSpin 24s linear infinite;
-  transform-origin: 170px 190px;
-}
-
-@keyframes taijiSpin {
-  to { transform: rotate(360deg); }
-}
-
-/* ===== 相克线 · 脉冲 ===== */
+/* 相克线脉冲 */
 .sand-table-svg .line-ove {
   animation: pulseLine 2.2s ease-in-out infinite;
 }
@@ -437,12 +550,11 @@ export default {
   50%      { stroke-opacity: 0.75; stroke-width: 2.5; }
 }
 
-/* 木→土线(静态,无脉冲) */
 .sand-table-svg .line-ove-quiet {
   stroke-opacity: 0.35;
 }
 
-/* ===== 节点呼吸 ===== */
+/* 节点呼吸 */
 .sand-table-svg .node-group {
   animation: nodeBreathe 3.2s ease-in-out infinite;
 }
@@ -457,7 +569,7 @@ export default {
   50%      { opacity: 1;   transform: scale(1.03); }
 }
 
-/* ===== 轨道粒子公转 ===== */
+/* 轨道粒子公转 */
 .sand-table-svg .particle {
   animation: orbitParticle 8s linear infinite;
   transform-origin: 170px 190px;
@@ -471,72 +583,111 @@ export default {
   100% { opacity: 0;   transform: rotate(360deg) translateX(132px) rotate(-360deg); }
 }
 
-/* -------- Logo + 品牌 -------- */
-.brand-mid {
+/* -------- 品牌价值 -------- */
+.brand-values {
   flex-shrink: 0;
-  margin: 6px 0 10px;
+  text-align: center;
+  margin: 2px 0 8px;
 }
 
-.brand-logo-row {
-  display: flex;
+.value-item {
+  display: inline-flex;
   align-items: center;
+  gap: 2px;
+  flex-wrap: wrap;
   justify-content: center;
-  gap: 10px;
 }
 
-.logo-img {
-  width: 36px;
-  height: 36px;
-  display: block;
+.value-icon {
+  font-size: 16px;
+  line-height: 1;
 }
 
-.brand-name {
-  font-size: 22px;
-  font-weight: 700;
-  letter-spacing: 3px;
-  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+.value-label {
+  font-size: 14px;
+  font-weight: 600;
+  letter-spacing: 1px;
+  line-height: 1;
 }
 
-.brand-en {
+.value-arrow {
   font-size: 11px;
-  opacity: 0.6;
-  letter-spacing: 2px;
+  opacity: 0.3;
+  margin: 0 6px;
+  line-height: 1;
+}
+
+.value-subtitle {
+  font-size: 11px;
+  opacity: 0.4;
+  letter-spacing: 3px;
+  margin: 4px 0 0;
   font-weight: 300;
-  margin-left: -2px;
 }
 
-/* -------- 底部 -------- */
-.brand-bottom {
+/* -------- 底部数据 + 角色 -------- */
+.brand-footer {
   flex-shrink: 0;
-  text-align: center;
+  width: 100%;
 }
 
-.tagline {
-  font-size: 13px;
-  opacity: 0.65;
-  letter-spacing: 2px;
-  font-weight: 300;
-  margin: 0 0 10px;
+.stats-row {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 0;
+  margin-bottom: 12px;
+}
+
+.stat-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 0 14px;
+}
+
+.stat-num {
+  font-size: 20px;
+  font-weight: 700;
+  background: linear-gradient(135deg, #FFE066, #F59E0B);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
+  line-height: 1.2;
+}
+
+.stat-label {
+  font-size: 10px;
+  opacity: 0.5;
+  letter-spacing: 1px;
+  margin-top: 1px;
+}
+
+.stat-divider {
+  width: 1px;
+  height: 28px;
+  background: rgba(255, 255, 255, 0.1);
 }
 
 .role-tags {
   display: flex;
-  gap: 8px;
+  gap: 10px;
   justify-content: center;
 }
 
 .role-tag {
   display: inline-block;
-  padding: 2px 12px;
+  padding: 3px 14px;
   font-size: 11px;
   border: 1px solid;
   border-radius: 20px;
-  opacity: 0.45;
+  opacity: 0.5;
   transition: opacity 0.3s;
+  letter-spacing: 1px;
 }
 
 .role-tag:hover {
-  opacity: 0.85;
+  opacity: 0.9;
 }
 
 /* ==================== 右侧表单区 ==================== */
@@ -545,7 +696,7 @@ export default {
   display: flex;
   align-items: center;
   justify-content: center;
-  background: #F5F9FC;
+  background: #F5FAFE;
   padding: 40px;
 }
 
@@ -553,31 +704,39 @@ export default {
   width: 100%;
   max-width: 400px;
   background: #fff;
-  border-radius: 16px;
-  padding: 40px 36px 32px;
-  box-shadow: 0 8px 40px rgba(91, 155, 213, 0.08),
-              0 1px 4px rgba(0, 0, 0, 0.04);
+  border-radius: 20px;
+  padding: 44px 40px 36px;
+  box-shadow:
+    0 4px 24px rgba(74, 155, 215, 0.06),
+    0 1px 4px rgba(0, 0, 0, 0.04);
+  transition: box-shadow 0.3s;
+}
+
+.form-card:hover {
+  box-shadow:
+    0 8px 40px rgba(74, 155, 215, 0.10),
+    0 1px 4px rgba(0, 0, 0, 0.04);
 }
 
 .form-header {
   text-align: center;
-  margin-bottom: 32px;
+  margin-bottom: 36px;
 }
 
-.header-icon {
-  width: 48px;
-  height: 48px;
+.header-icon-wrap {
+  width: 52px;
+  height: 52px;
   border-radius: 50%;
-  background: linear-gradient(135deg, #D6EAF8, #8FC5E8);
+  background: linear-gradient(135deg, #E8F4FA 0%, #D6EAF8 100%);
   display: inline-flex;
   align-items: center;
   justify-content: center;
   margin-bottom: 16px;
+  color: #3A7CC4;
 }
 
-.header-icon i {
-  font-size: 24px;
-  color: #3A7CC4;
+.header-icon-wrap .header-svg {
+  display: block;
 }
 
 .form-title {
@@ -585,12 +744,14 @@ export default {
   font-weight: 600;
   color: #1E293B;
   margin: 0 0 6px;
+  letter-spacing: 2px;
 }
 
 .form-desc {
   font-size: 13px;
   color: #94A3B8;
   margin: 0;
+  letter-spacing: 1px;
 }
 
 .login-form {
@@ -606,12 +767,13 @@ export default {
   transition: all 0.25s;
   font-size: 14px;
   padding-left: 42px;
+  font-family: inherit;
 }
 
 .login-form >>> .el-input__inner:focus {
-  border-color: #5B9BD5;
+  border-color: #4A9BD7;
   background: #fff;
-  box-shadow: 0 0 0 3px rgba(91, 155, 213, 0.1);
+  box-shadow: 0 0 0 3px rgba(74, 155, 215, 0.10);
 }
 
 .login-form >>> .el-input__inner:hover {
@@ -633,7 +795,7 @@ export default {
 }
 
 .login-form >>> .el-input.is-focused .input-icon {
-  color: #5B9BD5;
+  color: #4A9BD7;
 }
 
 .login-form >>> .el-form-item {
@@ -651,14 +813,15 @@ export default {
   font-weight: 500;
   letter-spacing: 6px;
   border-radius: 10px;
-  background: linear-gradient(135deg, #5B9BD5, #3A7CC4);
+  background: linear-gradient(135deg, #4A9BD7, #3A7CC4);
   border: none;
   transition: all 0.3s;
+  font-family: inherit;
 }
 
 .login-btn:hover {
-  background: linear-gradient(135deg, #6BA8DE, #4A86CE);
-  box-shadow: 0 4px 16px rgba(91, 155, 213, 0.35);
+  background: linear-gradient(135deg, #5BABE8, #4A86CE);
+  box-shadow: 0 4px 16px rgba(74, 155, 215, 0.35);
   transform: translateY(-1px);
 }
 
@@ -673,12 +836,13 @@ export default {
 
 .form-footer {
   text-align: center;
-  margin-top: 12px;
+  margin-top: 8px;
 }
 
 .copyright {
   font-size: 12px;
-  color: #C0C4CC;
+  color: #B2BEC3;
+  letter-spacing: 1px;
 }
 
 /* ==================== 响应式 ==================== */
@@ -686,11 +850,14 @@ export default {
   .brand-panel { display: none; }
   .form-panel {
     flex: 1;
-    padding: 20px;
-    background: linear-gradient(160deg, #3A7CC4, #6BA8DE);
+    padding: 24px;
+    background: linear-gradient(160deg, #0A1F3A, #1A4D7A);
   }
   .form-card {
-    box-shadow: 0 8px 40px rgba(0, 0, 0, 0.12);
+    box-shadow: 0 8px 40px rgba(0, 0, 0, 0.15);
+  }
+  .form-card:hover {
+    box-shadow: 0 8px 40px rgba(0, 0, 0, 0.15);
   }
 }
 </style>