0225304 3 روز پیش
والد
کامیت
f750008465
25فایلهای تغییر یافته به همراه2177 افزوده شده و 1150 حذف شده
  1. 45 26
      myapp/src/app/tab1/edit/edit.page.html
  2. 144 0
      myapp/src/app/tab1/edit/edit.page.scss
  3. 124 1
      myapp/src/app/tab1/tab1.page.scss
  4. 2 0
      myapp/src/app/tab1/tab1.page.ts
  5. 31 30
      myapp/src/app/tab1/test-message/test-message.page.html
  6. 140 32
      myapp/src/app/tab1/test-message/test-message.page.scss
  7. 49 40
      myapp/src/app/tab2/dynamic-create/dynamic-create.page.html
  8. 231 0
      myapp/src/app/tab2/dynamic-create/dynamic-create.page.scss
  9. 12 12
      myapp/src/app/tab2/dynamic-detail/dynamic-detail.page.html
  10. 125 46
      myapp/src/app/tab2/dynamic-detail/dynamic-detail.page.scss
  11. 48 50
      myapp/src/app/tab2/management/emotion-vent/emotion-vent.page.html
  12. 126 67
      myapp/src/app/tab2/management/emotion-vent/emotion-vent.page.scss
  13. 10 10
      myapp/src/app/tab2/management/management.page.html
  14. 22 1
      myapp/src/app/tab2/management/management.page.scss
  15. 9 9
      myapp/src/app/tab2/management/scream-room/scream-room.page.html
  16. 76 14
      myapp/src/app/tab2/management/scream-room/scream-room.page.scss
  17. 85 47
      myapp/src/app/tab2/tab2.page.html
  18. 217 176
      myapp/src/app/tab2/tab2.page.scss
  19. 8 8
      myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.html
  20. 190 155
      myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.scss
  21. 5 3
      myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.ts
  22. 109 105
      myapp/src/app/tab3/tab3.page.html
  23. 259 317
      myapp/src/app/tab3/tab3.page.scss
  24. 1 1
      myapp/src/app/tab4/login/login.page.html
  25. 109 0
      myapp/src/app/tab4/login/login.page.scss

+ 45 - 26
myapp/src/app/tab1/edit/edit.page.html

@@ -1,52 +1,71 @@
-<ion-header> 
-  <ion-toolbar>
+<ion-header class="warm-header"> 
+  <ion-toolbar >
     <ion-buttons slot="start">
-      <ion-button (click)="dismiss()">取消</ion-button>
+      <ion-button (click)="dismiss()" fill="clear" class="warm-button">
+        <ion-icon name="close-outline" slot="start"></ion-icon>
+        取消
+      </ion-button>
     </ion-buttons>
-    <ion-title>新建日记</ion-title>
+    <ion-title class="warm-title">新建日记</ion-title>
     <ion-buttons slot="end">
-      <ion-button (click)="saveDiary()" [strong]="true">保存</ion-button>
+      <ion-button (click)="saveDiary()" fill="solid" class="warm-accent-button" [strong]="true">
+        <ion-icon name="save-outline" slot="start"></ion-icon>
+        保存
+      </ion-button>
     </ion-buttons>
   </ion-toolbar>
 </ion-header>
 
-<ion-content [fullscreen]="true">
+<ion-content [fullscreen]="true" class="warm-content">
   <form>
-    <ion-list>
+    <ion-list lines="none" class="warm-form">
       <!-- 天气选择(可选) -->
-      <ion-item>
-        <ion-label position="stacked">天气</ion-label>
-        <ion-select [(ngModel)]="diary.weather" name="weather" placeholder="选择天气">
-          <ion-select-option value="晴">晴</ion-select-option>
-          <ion-select-option value="多云">多云</ion-select-option>
-          <ion-select-option value="阴">阴</ion-select-option>
-          <ion-select-option value="雨">雨</ion-select-option>
-          <ion-select-option value="雪">雪</ion-select-option>
-          <ion-select-option value="雾">雾</ion-select-option>
+      <ion-item class="warm-item">
+        <ion-label position="stacked" class="warm-label">天气</ion-label>
+        <ion-select 
+          [(ngModel)]="diary.weather" 
+          name="weather" 
+          placeholder="选择天气"
+          interface="action-sheet"
+          class="warm-select"
+        >
+          <ion-select-option value="晴" class="warm-option">☀️ 晴</ion-select-option>
+          <ion-select-option value="多云" class="warm-option">⛅ 多云</ion-select-option>
+          <ion-select-option value="阴" class="warm-option">☁️ 阴</ion-select-option>
+          <ion-select-option value="雨" class="warm-option">🌧️ 雨</ion-select-option>
+          <ion-select-option value="雪" class="warm-option">❄️ 雪</ion-select-option>
+          <ion-select-option value="雾" class="warm-option">🌫️ 雾</ion-select-option>
         </ion-select>
       </ion-item>
 
       <!-- 心情选择(可选) -->
-      <ion-item>
-        <ion-label position="stacked">心情</ion-label>
-        <ion-select [(ngModel)]="diary.mood" name="mood" placeholder="选择心情">
-          <ion-select-option value="😊">开心</ion-select-option>
-          <ion-select-option value="😌">平静</ion-select-option>
-          <ion-select-option value="🥰">幸福</ion-select-option>
-          <ion-select-option value="😄">兴奋</ion-select-option>
-          <ion-select-option value="😢">难过</ion-select-option>
-          <ion-select-option value="😠">生气</ion-select-option>
+      <ion-item class="warm-item">
+        <ion-label position="stacked" class="warm-label">心情</ion-label>
+        <ion-select 
+          [(ngModel)]="diary.mood" 
+          name="mood" 
+          placeholder="选择心情"
+          interface="action-sheet"
+          class="warm-select"
+        >
+          <ion-select-option value="😊" class="warm-option">😊 开心</ion-select-option>
+          <ion-select-option value="😌" class="warm-option">😌 平静</ion-select-option>
+          <ion-select-option value="🥰" class="warm-option">🥰 幸福</ion-select-option>
+          <ion-select-option value="😄" class="warm-option">😄 兴奋</ion-select-option>
+          <ion-select-option value="😢" class="warm-option">😢 难过</ion-select-option>
+          <ion-select-option value="😠" class="warm-option">😠 生气</ion-select-option>
         </ion-select>
       </ion-item>
 
       <!-- 日记内容 -->
-      <ion-item>
+      <ion-item class="warm-item">
         <ion-textarea
           [(ngModel)]="diary.content"
           name="content"
           placeholder="写下你的日记..."
           autoGrow="true"
           rows="10"
+          class="warm-textarea"
         ></ion-textarea>
       </ion-item>
     </ion-list>

+ 144 - 0
myapp/src/app/tab1/edit/edit.page.scss

@@ -0,0 +1,144 @@
+/* 标题栏设计 - 暖色调扁平风格 */
+.warm-header {
+  ion-toolbar {
+    --background: #FF7E5F; /* 珊瑚橙 */
+    --color: white;
+    --border-width: 0;
+    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+    padding: 0 12px;
+    
+    /* 标题居中增强设计 */
+    ion-title {
+      font-weight: 600;
+      font-size: 1.25rem;
+      letter-spacing: 0.5px;
+      position: relative;
+      padding: 0 16px;
+      
+      &:after {
+        content: '';
+        position: absolute;
+        bottom: -8px;
+        left: 50%;
+        transform: translateX(-50%);
+        width: 40px;
+        height: 3px;
+        background: rgba(255, 255, 255, 0.5);
+        border-radius: 3px;
+      }
+    }
+  }
+}
+
+/* 按钮设计 */
+.warm-button {
+  --color: white;
+  --background-hover: rgba(255, 255, 255, 0.15);
+  --ripple-color: white;
+  margin: 0 4px;
+  font-weight: 500;
+  
+  ion-icon {
+    font-size: 1.1em;
+    margin-right: 4px;
+  }
+}
+
+.warm-accent-button {
+  --background: #FF6B6B; /* 粉红色 */
+  --background-hover: #FF5252;
+  --color: white;
+  --border-radius: 20px;
+  --box-shadow: 0 2px 8px rgba(255, 107, 107, 0.3);
+  font-weight: 500;
+  padding: 0 16px;
+  transition: transform 0.2s ease, box-shadow 0.2s ease;
+  
+  &:active {
+    transform: scale(0.96);
+    --box-shadow: 0 1px 4px rgba(255, 107, 107, 0.3);
+  }
+  
+  ion-icon {
+    font-size: 1.1em;
+    margin-right: 6px;
+  }
+}
+
+/* 内容区域设计 */
+.warm-content {
+  --background: #FFF5E6; /* 奶油白 */
+  padding-top: 8px;
+}
+
+.warm-form {
+  background: transparent;
+  padding: 12px 16px;
+}
+
+/* 表单项设计 */
+.warm-item {
+  --background: transparent;
+  --border-radius: 12px;
+  --padding-start: 0;
+  --inner-padding-end: 0;
+  margin-bottom: 18px;
+  transition: transform 0.2s ease;
+  
+  &:active {
+    transform: translateY(2px);
+  }
+}
+
+.warm-label {
+  color: #5E3023; /* 深棕色 */
+  font-weight: 500;
+  margin-bottom: 8px;
+  font-size: 0.95rem;
+  letter-spacing: 0.3px;
+}
+
+/* 选择框设计 */
+.warm-select {
+  --placeholder-color: #4A3F35; /* 深褐色文本 */
+  --placeholder-opacity: 0.6;
+  color: #4A3F35;
+  background: white;
+  border-radius: 12px;
+  padding: 14px 16px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+  font-size: 0.95rem;
+  
+  .select-icon {
+    color: #FF7E5F; /* 与标题栏同色 */
+  }
+}
+
+/* 文本区域设计 */
+.warm-textarea {
+  --placeholder-color: #4A3F35;
+  --placeholder-opacity: 0.6;
+  color: #4A3F35;
+  background: white;
+  border-radius: 12px;
+  padding: 16px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+  line-height: 1.6;
+  font-size: 1rem;
+  min-height: 180px;
+  
+  &:focus-within {
+    box-shadow: 0 2px 12px rgba(255, 126, 95, 0.2);
+  }
+}
+
+/* 选项设计 */
+.warm-option {
+  color: #4A3F35;
+  padding: 12px 16px;
+  
+  &.select-interface-option {
+    --color: #4A3F35;
+    --color-hover: #FF7E5F;
+  }
+}

+ 124 - 1
myapp/src/app/tab1/tab1.page.scss

@@ -136,4 +136,127 @@ body {
     p {
       font-size: 16px;
     }
-  }
+  }
+
+  /* 菜单栏整体样式 */
+ion-menu {
+  --width: 280px;
+  --ion-background-color: #FFF8F2; /* 暖白色背景 */
+  
+  ion-header {
+    ion-toolbar {
+      --background: var(--ion-color-coral); /* 使用珊瑚橘标题栏 */
+      --color: #5D4037;
+      
+      ion-title {
+        padding-left:15px;
+        font-weight: 500;
+        letter-spacing: 1px;
+      }
+    }
+  }
+
+  ion-content {
+    --padding-top: 10px;
+    --padding-bottom: 20px;
+    
+    ion-list {
+      background: transparent;
+      padding: 0;
+      
+      ion-item {
+        --background: transparent;
+        --padding-start: 20px;
+        --padding-end: 20px;
+        --inner-padding-end: 0;
+        --min-height: 56px;
+        --border-color: rgba(255, 140, 102, 0.15); /* 浅珊瑚色分隔线 */
+        --color: #5D4037; /* 深棕色文字 */
+        --detail-icon-color: var(--ion-color-coral);
+        --detail-icon-opacity: 1;
+        transition: all 0.3s ease;
+        
+        ion-icon {
+          color: var(--ion-color-coral); /* 图标使用珊瑚橘 */
+          font-size: 1.2rem;
+          margin-right: 12px;
+        }
+        
+        ion-label {
+          font-weight: 500;
+          letter-spacing: 0.3px;
+        }
+        
+        &:hover {
+          --background: rgba(255, 140, 102, 0.08); /* 悬停浅珊瑚色背景 */
+        }
+        
+        &.ion-activated {
+          --background: rgba(255, 140, 102, 0.15);
+        }
+      }
+    }
+  }
+}
+
+/* 菜单按钮样式 */
+ion-menu-button {
+  --color: var(--ion-color-coral);
+  --padding-start: 8px;
+  --padding-end: 8px;
+  
+  ion-icon {
+    font-size: 1.8rem;
+  }
+}
+
+/* 空状态样式 */
+.empty-state {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 60vh;
+  text-align: center;
+  padding: 20px;
+  
+  ion-icon {
+    font-size: 3.5rem;
+    color: var(--ion-color-coral);
+    margin-bottom: 16px;
+    opacity: 0.8;
+  }
+  
+  p {
+    color: var(--ion-color-coral-shade);
+    font-size: 1rem;
+    max-width: 220px;
+    line-height: 1.5;
+    
+    ion-icon {
+      color: var(--ion-color-coral);
+      font-size: 1rem;
+      vertical-align: middle;
+      margin: 0 2px;
+    }
+  }
+}
+
+/* 响应式调整 */
+@media (max-width: 576px) {
+  ion-menu {
+    --width: 260px;
+  }
+  
+  .empty-state {
+    height: 50vh;
+    
+    ion-icon {
+      font-size: 2.8rem;
+    }
+    
+    p {
+      font-size: 0.9rem;
+    }
+  }
+}

+ 2 - 0
myapp/src/app/tab1/tab1.page.ts

@@ -117,3 +117,5 @@ async loadCurrentUserAndDiaries() {
   });
   } 
 }
+
+

+ 31 - 30
myapp/src/app/tab1/test-message/test-message.page.html

@@ -1,42 +1,40 @@
-<ion-header>
-  <ion-toolbar color="primary">
+<ion-header class="warm-detail-header">
+  <ion-toolbar>
     <ion-buttons slot="start">
-      <ion-back-button defaultHref="/tabs/tab1"></ion-back-button>
+      <ion-back-button defaultHref="/tabs/tab1" class="warm-back-button"></ion-back-button>
     </ion-buttons>
-    <ion-title>日记详情</ion-title>
+    <ion-title class="warm-detail-title">日记详情</ion-title>
     <ion-buttons slot="end">
-      <ion-button (click)="editDiary()">
+      <ion-button (click)="editDiary()" class="warm-edit-button">
         <ion-icon slot="icon-only" name="create-outline"></ion-icon>
       </ion-button>
     </ion-buttons>
   </ion-toolbar>
 </ion-header>
 
-<ion-content class="ion-padding">
+<ion-content class="warm-detail-content">
   <!-- 日记头部信息 -->
-  <div class="diary-header">
-    <div class="date-section">
-      <ion-text color="primary">
-        <h1 class="date">{{ diary?.get('date') }}</h1>
-      </ion-text>
-      <div class="week-time">
-        <ion-chip color="light">
-          <ion-icon name="calendar-outline"></ion-icon>
+  <div class="warm-diary-header">
+    <div class="warm-date-section">
+      <h1 class="warm-date">{{ diary?.get('date') }}</h1>
+      <div class="warm-week-time">
+        <ion-chip class="warm-meta-chip">
+          <ion-icon name="calendar-outline" class="warm-meta-icon"></ion-icon>
           <ion-label>{{ diary?.get('weekday') }}</ion-label>
         </ion-chip>
-        <ion-chip color="light">
-          <ion-icon name="time-outline"></ion-icon>
+        <ion-chip class="warm-meta-chip">
+          <ion-icon name="time-outline" class="warm-meta-icon"></ion-icon>
           <ion-label>{{ diary?.get('time') }}</ion-label>
         </ion-chip>
       </div>
     </div>
     
-    <div class="meta-section">
-      <ion-chip *ngIf="diary?.get('weather')">
+    <div class="warm-meta-section">
+      <ion-chip *ngIf="diary?.get('weather')" class="warm-info-chip weather">
         <ion-icon name="partly-sunny-outline"></ion-icon>
         <ion-label>{{ diary?.get('weather') }}</ion-label>
       </ion-chip>
-      <ion-chip *ngIf="diary?.get('mood')">
+      <ion-chip *ngIf="diary?.get('mood')" class="warm-info-chip mood">
         <ion-icon name="happy-outline"></ion-icon>
         <ion-label>{{ diary?.get('mood') }}</ion-label>
       </ion-chip>
@@ -44,18 +42,21 @@
   </div>
 
   <!-- 日记内容 -->
-  <ion-card class="content-card">
-    <ion-card-content>
-      <div class="content-text">
-        {{ diary?.get('content') }}
-      </div>
-    </ion-card-content>
-  </ion-card>
+  <div class="warm-content-card">
+    <div class="warm-content-text">
+      {{ diary?.get('content') }}
+    </div>
+  </div>
 
   <!-- 底部操作栏 -->
-  <ion-fab vertical="bottom" horizontal="end" slot="fixed">
-    <ion-fab-button color="danger" (click)="deleteDiary()">
+  <div class="warm-action-bar">
+    <!-- <ion-button fill="clear" color="medium" (click)="editDiary()" class="warm-action-button">
+      <ion-icon slot="start" name="create-outline"></ion-icon>
+      编辑
+    </ion-button> -->
+    <ion-button slot="end" fill="clear" color="danger" (click)="deleteDiary()" class="warm-action-button">
       <ion-icon name="trash-outline"></ion-icon>
-    </ion-fab-button>
-  </ion-fab>
+      删除
+    </ion-button>
+  </div>
 </ion-content>

+ 140 - 32
myapp/src/app/tab1/test-message/test-message.page.scss

@@ -1,45 +1,153 @@
-.diary-header {
-  margin-bottom: 20px;
-  
-  .date-section {
-    margin-bottom: 10px;
-    
-    .date {
-      font-size: 2.5rem;
-      font-weight: bold;
-      margin: 0;
-    }
-    
-    .week-time {
-      display: flex;
-      gap: 8px;
-      margin-top: 8px;
-    }
+/* 暖色调配色 */
+$warm-primary: #FF7E5F;  // 珊瑚橙
+$warm-secondary: #FFB347; // 阳光黄
+$warm-accent: #FF6B6B;    // 粉红色
+$warm-light: #FFF5E6;     // 奶油白
+$warm-dark: #5E3023;      // 深棕色
+$warm-text: #4A3F35;      // 深褐色文本
+
+/* 标题栏设计 */
+.warm-detail-header {
+  ion-toolbar {
+    --background: #FFB347;
+    --color: white;
+    --border-width: 0;
+    box-shadow: 0 2px 12px rgba($warm-primary, 0.3);
+    padding: 0 12px;
+  }
+}
+
+.warm-detail-title {
+  font-weight: 600;
+  font-size: 1.3rem;
+  letter-spacing: 0.5px;
+}
+
+.warm-back-button {
+  --color: white;
+  --icon-font-size: 1.4em;
+}
+
+.warm-edit-button {
+  --color: white;
+  --background-activated: rgba(255, 255, 255, 0.15);
+  --background-hover: rgba(255, 255, 255, 0.1);
+  
+  ion-icon {
+    font-size: 1.4em;
+  }
+}
+
+/* 内容区域 */
+.warm-detail-content {
+  --background: $warm-light;
+  --padding-top: 16px;
+  --padding-bottom: 80px;
+}
+
+/* 日记头部信息 */
+.warm-diary-header {
+  margin-bottom: 24px;
+  padding: 0 16px;
+}
+
+.warm-date-section {
+  margin-bottom: 12px;
+  
+  .warm-date {
+    color: $warm-dark;
+    font-size: 2.2rem;
+    font-weight: 700;
+    margin: 0 0 8px 0;
+    line-height: 1.2;
   }
   
-  .meta-section {
+  .warm-week-time {
     display: flex;
     gap: 8px;
-    margin-top: 10px;
   }
 }
 
-.content-card {
-  margin: 0;
-  box-shadow: none;
-  border-radius: 12px;
+.warm-meta-chip {
+  --background: rgba($warm-primary, 0.1);
+  --color: $warm-dark;
+  font-size: 0.9rem;
   
-  ion-card-content {
-    padding: 16px;
-    
-    .content-text {
-      white-space: pre-line;
-      line-height: 1.6;
-      font-size: 1.1rem;
+  .warm-meta-icon {
+    color: $warm-primary;
+    font-size: 1em;
+    margin-right: 6px;
+  }
+}
+
+.warm-meta-section {
+  display: flex;
+  gap: 8px;
+  flex-wrap: wrap;
+}
+
+.warm-info-chip {
+  --background: white;
+  --color: $warm-text;
+  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
+  font-size: 0.95rem;
+  
+  ion-icon {
+    margin-right: 6px;
+  }
+  
+  &.weather {
+    ion-icon {
+      color: #4D8BFF; // 天气蓝色
     }
   }
+  
+  &.mood {
+    ion-icon {
+      color: #FFC107; // 心情黄色
+    }
+  }
+}
+
+/* 日记内容卡片 */
+.warm-content-card {
+  background:  #FFD8B8;
+  border-radius: 16px;
+  margin: 0 16px 24px;
+  padding: 20px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+}
+
+.warm-content-text {
+  color: $warm-text;
+  white-space: pre-line;
+  line-height: 1.8;
+  font-size: 1.1rem;
+  letter-spacing: 0.3px;
 }
 
-ion-fab {
-  margin-bottom: 20px;
+/* 底部操作栏 */
+.warm-action-bar {
+  display: flex;
+  justify-content: space-between;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 12px 16px;
+  background: white;
+  box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.05);
+  border-top-left-radius: 16px;
+  border-top-right-radius: 16px;
+}
+
+.warm-action-button {
+  --border-radius: 12px;
+  --padding-start: 16px;
+  --padding-end: 16px;
+  font-weight: 500;
+  
+  ion-icon {
+    font-size: 1.2em;
+  }
 }

+ 49 - 40
myapp/src/app/tab2/dynamic-create/dynamic-create.page.html

@@ -1,58 +1,67 @@
-<ion-header>
-  <ion-toolbar>
+<ion-header class="create-header">
+  <ion-toolbar class="warm-toolbar">
     <ion-buttons slot="start">
-      <ion-back-button defaultHref="/tabs/tab2"></ion-back-button>
+      <ion-back-button 
+        defaultHref="/tabs/tab2" 
+        class="warm-back-button"
+        text=""
+        icon="arrow-back">
+      </ion-back-button>
     </ion-buttons>
-    <ion-title>发布动态</ion-title>
+    <ion-title class="warm-title">分享此刻</ion-title>
     <ion-buttons slot="end">
-      <ion-button (click)="submitDynamic()" [disabled]="!content">发布</ion-button>
+      <ion-button 
+        class="warm-submit-btn"
+        shape="round"
+        (click)="submitDynamic()" 
+        [disabled]="!content">
+        发布
+      </ion-button>
     </ion-buttons>
   </ion-toolbar>
 </ion-header>
 
-<ion-content>
-  <form (ngSubmit)="submitDynamic()">
-    <ion-item>
-      <ion-textarea 
-        [(ngModel)]="content" 
+<ion-content class="warm-content">
+  <form class="warm-form" (ngSubmit)="submitDynamic()">
+    <!-- 动态输入区 -->
+    <div class="input-container">
+      <ion-textarea
+        class="warm-textarea"
+        [(ngModel)]="content"
         name="content"
-        placeholder="分享你的心情..." 
-        rows="6"
-        autoGrow="true"
+        placeholder="写点什么吧..."
+        autoGrow
+        rows="5"
         required>
       </ion-textarea>
-    </ion-item>
+      <div class="char-counter" *ngIf="content">{{ content.length }}/300</div>
+    </div>
 
-    <ion-item>
-      <ion-label>上传图片</ion-label>
+    <!-- 图片上传 -->
+    <div class="upload-section">
       <input 
-        type="file" 
-        (change)="onFileChange($event)" 
-        accept="image/*" 
+        type="file"
+        id="imageUpload"
+        (change)="onFileChange($event)"
+        accept="image/*"
         multiple
         #fileInput
-        style="display: none">
-      <ion-button fill="clear" (click)="fileInput.click()">
-        <ion-icon name="image-outline" slot="start"></ion-icon>
-        选择图片
-      </ion-button>
-    </ion-item>
+        class="hidden-input">
+      <label for="imageUpload" class="warm-upload-btn">
+        <ion-icon name="images" class="btn-icon"></ion-icon>
+        <span>添加照片</span>
+      </label>
+      <div class="hint-text">最多9张</div>
+    </div>
 
-    <div class="image-preview" *ngIf="images.length > 0">
-      <div class="preview-item" *ngFor="let img of images; let i = index">
-        <img [src]="img.url">
-        <ion-icon name="close-circle" (click)="removeImage(i)"></ion-icon>
+    <!-- 图片预览 -->
+    <div class="warm-preview-grid" *ngIf="images.length > 0">
+      <div class="preview-card" *ngFor="let img of images; let i = index">
+        <img [src]="img.url" class="preview-img">
+        <button class="remove-btn" (click)="removeImage(i)">
+          <ion-icon name="close"></ion-icon>
+        </button>
       </div>
     </div>
-
-    <!-- <ion-item>
-      <ion-label>当前时间</ion-label>
-      <ion-datetime 
-        displayFormat="YYYY-MM-DD HH:mm" 
-        [(ngModel)]="currentTime" 
-        name="currentTime"
-        disabled>
-      </ion-datetime>
-    </ion-item> -->
   </form>
-</ion-content>
+</ion-content>

+ 231 - 0
myapp/src/app/tab2/dynamic-create/dynamic-create.page.scss

@@ -0,0 +1,231 @@
+/* 头部工具栏样式 */
+.create-header {
+  ion-toolbar.warm-toolbar {
+    --background: #FF8A65; /* 珊瑚橙 */
+    --color: white;
+    --border-width: 0;
+    --min-height: 56px;
+    padding: 0 12px;
+
+    /* 返回按钮 */
+    ion-buttons slot-start {
+      ion-back-button.warm-back-button {
+        --color: white;
+        --icon-font-size: 1.5rem;
+        --padding-start: 8px;
+        --padding-end: 16px;
+        
+        ion-icon {
+          color: white;
+          filter: drop-shadow(0 1px 1px rgba(0,0,0,0.1));
+          transition: transform 0.2s ease;
+          
+          &:active {
+            transform: scale(0.9);
+          }
+        }
+      }
+    }
+
+    /* 标题 */
+    ion-title.warm-title {
+      font-size: 1.25rem;
+      font-weight: 600;
+      letter-spacing: 0.5px;
+      text-shadow: 0 1px 2px rgba(0,0,0,0.1);
+    }
+
+    /* 发布按钮 */
+    ion-buttons slot-end {
+      ion-button.warm-submit-btn {
+        --background: #FF6D42; /* 红珊瑚 */
+        --color: white;
+        --border-radius: 24px;
+        --padding-start: 20px;
+        --padding-end: 20px;
+        --box-shadow: 0 2px 6px rgba(255, 109, 66, 0.3);
+        font-weight: 600;
+        letter-spacing: 0.5px;
+        transition: all 0.25s ease;
+        
+        &:active {
+          --background: #E05C38; /* 暗色红珊瑚 */
+          transform: scale(0.96);
+        }
+        
+        &[disabled] {
+          --background: #FFE0B2; /* 浅琥珀 */
+          --color: #B8A99A;
+          --box-shadow: none;
+        }
+      }
+    }
+  }
+}
+
+/* 内容区域样式 */
+ion-content.warm-content {
+  --background: #FFF8F2; /* 奶油白 */
+  --padding-start: 16px;
+  --padding-end: 16px;
+  --padding-top: 16px;
+  --padding-bottom: 16px;
+
+  form.warm-form {
+    /* 输入容器 */
+    .input-container {
+      position: relative;
+      margin-bottom: 24px;
+      background: white;
+      border-radius: 12px;
+      box-shadow: 0 2px 8px rgba(255, 138, 101, 0.08);
+      overflow: hidden;
+
+      ion-textarea.warm-textarea {
+        --background: transparent;
+        --color: #5D4037; /* 深咖啡 */
+        --padding-start: 16px;
+        --padding-end: 16px;
+        --padding-top: 16px;
+        --padding-bottom: 16px;
+        font-size: 1rem;
+        line-height: 1.5;
+        min-height: 160px;
+        
+        &::placeholder {
+          color: rgba(141, 110, 99, 0.6); /* 浅咖啡透明 */
+          font-weight: 300;
+        }
+      }
+
+      .char-counter {
+        position: absolute;
+        right: 12px;
+        bottom: 8px;
+        color: rgba(141, 110, 99, 0.7);
+        font-size: 0.75rem;
+        background: rgba(255, 255, 255, 0.8);
+        padding: 2px 6px;
+        border-radius: 10px;
+      }
+    }
+
+    /* 上传区域 */
+    .upload-section {
+      display: flex;
+      align-items: center;
+      gap: 12px;
+      margin-bottom: 24px;
+
+      .hidden-input {
+        display: none;
+      }
+
+      .warm-upload-btn {
+        display: flex;
+        align-items: center;
+        padding: 12px 20px;
+        background: white;
+        color: #FF8A65; /* 珊瑚橙 */
+        border-radius: 12px;
+        border: 2px dashed #FFD7C2; /* 浅橙 */
+        font-weight: 500;
+        transition: all 0.2s ease;
+        cursor: pointer;
+        
+        .btn-icon {
+          margin-right: 8px;
+          color: #FF6D42; /* 红珊瑚 */
+          font-size: 1.3rem;
+        }
+
+        &:active {
+          background: rgba(255, 204, 188, 0.2); /* 蜜桃色透明 */
+          transform: scale(0.98);
+        }
+      }
+
+      .hint-text {
+        color: rgba(141, 110, 99, 0.7);
+        font-size: 0.85rem;
+        flex-grow: 1;
+      }
+    }
+
+    /* 图片预览网格 */
+    .warm-preview-grid {
+      display: grid;
+      grid-template-columns: repeat(3, 1fr);
+      gap: 10px;
+      margin-top: 8px;
+
+      .preview-card {
+        position: relative;
+        aspect-ratio: 1;
+        border-radius: 8px;
+        overflow: hidden;
+        background: #F5F5F5;
+        transition: transform 0.3s ease;
+
+        .preview-img {
+          width: 100%;
+          height: 100%;
+          object-fit: cover;
+          transition: transform 0.3s ease;
+        }
+
+        .remove-btn {
+          position: absolute;
+          top: 6px;
+          right: 6px;
+          width: 24px;
+          height: 24px;
+          background: rgba(0, 0, 0, 0.6);
+          color: white;
+          border: none;
+          border-radius: 50%;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          padding: 0;
+          opacity: 0;
+          transition: opacity 0.2s ease;
+          
+          ion-icon {
+            font-size: 0.9rem;
+          }
+        }
+
+        &:hover {
+          transform: translateY(-2px);
+          box-shadow: 0 4px 12px rgba(0,0,0,0.1);
+          
+          .remove-btn {
+            opacity: 1;
+          }
+          
+          .preview-img {
+            transform: scale(1.05);
+          }
+        }
+      }
+    }
+  }
+}
+
+/* 响应式调整 */
+@media (max-width: 400px) {
+  ion-content.warm-content {
+    --padding-start: 12px;
+    --padding-end: 12px;
+    
+    .warm-preview-grid {
+      grid-template-columns: repeat(2, 1fr);
+    }
+  }
+  
+  .create-header ion-toolbar .warm-submit-btn {
+    --padding-start: 16px;
+    --padding-end: 16px;
+  }
+}

+ 12 - 12
myapp/src/app/tab2/dynamic-detail/dynamic-detail.page.html

@@ -1,13 +1,13 @@
 <ion-header>
   <ion-toolbar>
     <ion-buttons slot="start">
-      <ion-back-button defaultHref="/tabs/tab2"></ion-back-button>
+      <ion-back-button defaultHref="/tabs/tab2" color="light"></ion-back-button>
     </ion-buttons>
-    <ion-title>动态详情</ion-title>
+    <ion-title color="light">动态详情</ion-title>
   </ion-toolbar>
 </ion-header>
 
-<ion-content>
+<ion-content class="ion-padding">
   <div class="dynamic-container" *ngIf="dynamic">
     <!-- 用户信息 -->
     <div class="user-info">
@@ -30,22 +30,22 @@
 
     <!-- 互动栏 -->
     <div class="action-bar">
-      <ion-button fill="clear" (click)="toggleLike()">
+      <ion-button fill="clear" (click)="toggleLike()" class="action-button">
         <ion-icon 
           [name]="isLiked ? 'heart' : 'heart-outline'" 
-          [color]="isLiked ? 'danger' : ''">
+          [color]="isLiked ? 'danger' : 'medium'">
         </ion-icon>
-        {{ dynamic.get('likeCount') || 0 }}
+        <span class="action-count">{{ dynamic.get('likeCount') || 0 }}</span>
       </ion-button>
       
-      <ion-button fill="clear" (click)="addComment()">
-        <ion-icon name="chatbubble-ellipses-outline"></ion-icon>
-        {{ dynamic.get('commentCount') || 0 }}
+      <ion-button fill="clear" (click)="addComment()" class="action-button">
+        <ion-icon name="chatbubble-ellipses-outline" color="medium"></ion-icon>
+        <span class="action-count">{{ dynamic.get('commentCount') || 0 }}</span>
       </ion-button>
       
-      <ion-button fill="clear" (click)="shareDynamic()">
-        <ion-icon name="share-social-outline"></ion-icon>
-        {{ dynamic.get('shareCount') || 0 }}
+      <ion-button fill="clear" (click)="shareDynamic()" class="action-button">
+        <ion-icon name="share-social-outline" color="medium"></ion-icon>
+        <span class="action-count">{{ dynamic.get('shareCount') || 0 }}</span>
       </ion-button>
     </div>
 

+ 125 - 46
myapp/src/app/tab2/dynamic-detail/dynamic-detail.page.scss

@@ -1,109 +1,188 @@
+/* 标题栏样式 */
+ion-header {
+  ion-toolbar {
+    --background: #FF7043;  /* 主色调橙色 */
+    --color: #ffffff;      /* 白色文字 */
+    
+    ion-back-button[color="light"] {
+      --color: #ffffff;
+      --color-hover: #FFCCBC;
+    }
+    
+    ion-title[color="light"] {
+      color: #ffffff;
+      font-size: 1.1rem;
+      font-weight: 500;
+      letter-spacing: 0.5px;
+    }
+  }
+}
+
+/* 内容区域 */
+ion-content.ion-padding {
+  --background: #FFF8F5;  /* 浅米色背景 */
+  --padding-start: 12px;
+  --padding-end: 12px;
+  --padding-top: 12px;
+  --padding-bottom: 12px;
+}
+
+/* 动态容器 */
 .dynamic-container {
+  background: #ffffff;
+  border-radius: 12px;
   padding: 16px;
+  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
+  margin-bottom: 16px;
 }
 
+/* 用户信息 */
 .user-info {
   display: flex;
   align-items: center;
-  margin-bottom: 16px;
-  
+  margin-bottom: 18px;
+
   .user-avatar {
-    width: 40px;
-    height: 40px;
+    width: 48px;
+    height: 48px;
     border-radius: 50%;
-    background-color: #3880ff;
-    color: white;
+    background-color: #FFA726;  /* 浅橙色 */
+    color: #ffffff;
     display: flex;
     align-items: center;
     justify-content: center;
-    margin-right: 12px;
+    margin-right: 14px;
     font-weight: bold;
+    font-size: 1.25rem;
   }
-  
+
   .user-details {
     flex: 1;
-    
+
     .user-name {
-      font-weight: bold;
+      font-weight: 600;
+      color: #5D4037;  /* 深棕色 */
+      margin-bottom: 4px;
+      font-size: 0.95rem;
     }
-    
+
     .post-time {
-      font-size: 12px;
-      color: #666;
+      color: #8D6E63;  /* 浅棕色 */
+      font-size: 0.8rem;
     }
   }
 }
 
+/* 动态内容 */
 .dynamic-content {
-  margin-bottom: 16px;
-  font-size: 16px;
-  line-height: 1.5;
+  color: #5D4037;  /* 深棕色 */
+  font-size: 0.95rem;
+  line-height: 1.6;
+  margin-bottom: 18px;
+  white-space: pre-line;
 }
 
+/* 动态图片 */
 .dynamic-images {
-  margin-bottom: 16px;
-  
+  display: grid;
+  gap: 10px;
+  margin-bottom: 18px;
+
   img {
-    max-width: 100%;
+    width: 100%;
     border-radius: 8px;
-    margin-bottom: 8px;
+    object-fit: cover;
+    max-height: 300px;
   }
 }
 
+/* 互动栏 */
 .action-bar {
   display: flex;
   justify-content: space-around;
-  padding: 8px 0;
-  border-top: 1px solid #eee;
-  border-bottom: 1px solid #eee;
-  margin-bottom: 16px;
+  padding: 10px 0;
+  margin-bottom: 18px;
+  border-top: 1px solid #FFCCBC;  /* 浅橙色边框 */
+  border-bottom: 1px solid #FFCCBC;
+
+  .action-button {
+    --padding-start: 8px;
+    --padding-end: 8px;
+    margin: 0;
+
+    ion-icon {
+      font-size: 1.4rem;
+    }
+
+    .action-count {
+      color: #8D6E63;  /* 浅棕色 */
+      font-size: 0.85rem;
+      margin-left: 6px;
+    }
+  }
 }
 
+/* 评论区域 */
 .comments-section {
   h3 {
-    font-size: 18px;
+    color: #5D4037;  /* 深棕色 */
+    font-size: 1rem;
+    font-weight: 600;
     margin-bottom: 16px;
+    padding-bottom: 8px;
+    border-bottom: 1px solid #FFCCBC;
   }
 }
 
+/* 单个评论 */
 .comment-item {
   margin-bottom: 16px;
   padding-bottom: 16px;
-  border-bottom: 1px solid #f0f0f0;
-  
+  border-bottom: 1px solid #FFE0B2;  /* 更浅的橙色边框 */
+
   .comment-user {
     display: flex;
     align-items: center;
-    margin-bottom: 8px;
-    
+    margin-bottom: 10px;
+
     .user-avatar {
-      width: 32px;
-      height: 32px;
+      width: 36px;
+      height: 36px;
       border-radius: 50%;
-      background-color: #3880ff;
-      color: white;
+      background-color: #FFB74D;  /* 中等橙色 */
+      color: #ffffff;
       display: flex;
       align-items: center;
       justify-content: center;
-      margin-right: 8px;
-      font-size: 14px;
+      margin-right: 12px;
+      font-size: 0.9rem;
+      font-weight: bold;
     }
-    
+
     .user-name {
-      font-weight: bold;
-      font-size: 14px;
-      margin-right: 8px;
+      font-weight: 600;
+      color: #5D4037;
+      font-size: 0.85rem;
+      margin-right: 10px;
     }
-    
+
     .comment-time {
-      font-size: 12px;
-      color: #666;
+      color: #8D6E63;
+      font-size: 0.75rem;
     }
   }
-  
+
   .comment-content {
-    font-size: 14px;
-    line-height: 1.4;
-    padding-left: 40px;
+    color: #5D4037;
+    font-size: 0.9rem;
+    line-height: 1.5;
+    padding-left: 48px;
+  }
+}
+
+/* 点赞按钮激活状态 */
+ion-button[fill="clear"] {
+  &[activated] {
+    --background-activated: rgba(255, 112, 67, 0.1);
   }
 }

+ 48 - 50
myapp/src/app/tab2/management/emotion-vent/emotion-vent.page.html

@@ -1,9 +1,9 @@
 <ion-header>
-  <ion-toolbar>
+  <ion-toolbar >
     <ion-buttons slot="start">
-      <ion-back-button defaultHref="/tabs/tab2"></ion-back-button>
+      <ion-back-button defaultHref="/tabs/tab2" color="light"></ion-back-button>
     </ion-buttons>
-    <ion-title>情绪发泄室</ion-title>
+    <ion-title color="light">情绪发泄室</ion-title>
   </ion-toolbar>
 </ion-header>
 
@@ -29,54 +29,52 @@
     🔨
   </div>
 
-  <!-- 在ion-content内部添加 -->
-<ion-modal #keywordModal>
-  <ng-template>
-    <ion-header>
-      <ion-toolbar>
-        <ion-title>添加关键词</ion-title>
-        <ion-buttons slot="end">
-          <ion-button (click)="dismissModal()">关闭</ion-button>
-        </ion-buttons>
-      </ion-toolbar>
-    </ion-header>
-    <ion-content class="ion-padding">
-      <ion-item>
-        <!-- <ion-label position="floating">输入你想粉碎的负面情绪词</ion-label> -->
-        <ion-input [(ngModel)]="newKeyword" placeholder="例如: 焦虑、压力"></ion-input>
-      </ion-item>
-      
-      <ion-button expand="block" (click)="addKeyword()" class="ion-margin-top">
+  <ion-modal #keywordModal>
+    <ng-template>
+      <ion-header>
+        <ion-toolbar color="secondary">
+          <ion-title>添加关键词</ion-title>
+          <ion-buttons slot="end">
+            <ion-button (click)="dismissModal()" color="light">关闭</ion-button>
+          </ion-buttons>
+        </ion-toolbar>
+      </ion-header>
+      <ion-content class="ion-padding modal-content">
+        <ion-item>
+          <ion-input [(ngModel)]="newKeyword" placeholder="例如: 焦虑、压力" class="custom-input"></ion-input>
+        </ion-item>
+        
+        <ion-button expand="block" (click)="addKeyword()" class="add-button ion-margin-top">
+          添加关键词
+        </ion-button>
+        
+        <ion-list *ngIf="customKeywords.length > 0">
+          <ion-list-header class="list-header">
+            <ion-label>已添加的关键词</ion-label>
+          </ion-list-header>
+          <ion-item-sliding *ngFor="let keyword of customKeywords">
+            <ion-item class="keyword-item">
+              <ion-label>{{ keyword }}</ion-label>
+              <ion-icon slot="end" name="trash-outline" (click)="removeKeyword(keyword)" class="delete-icon"></ion-icon>
+            </ion-item>
+          </ion-item-sliding>
+        </ion-list>
+      </ion-content>
+    </ng-template>
+  </ion-modal>
+
+  <!-- 统计信息区域 -->
+  <div class="stats">
+    <div class="counter">已粉碎: {{ burstCount }} / {{ bubbles.length }}</div>
+    <div class="action-buttons">
+      <ion-button (click)="resetBubbles()" fill="clear" size="small" class="action-button">
+        <ion-icon name="refresh" slot="start"></ion-icon>
+        重置
+      </ion-button>
+      <ion-button (click)="openKeywordModal()" fill="clear" size="small" class="action-button">
+        <ion-icon name="add" slot="start"></ion-icon>
         添加关键词
       </ion-button>
-      
-      <ion-list *ngIf="customKeywords.length > 0">
-        <ion-list-header>
-          <ion-label>已添加的关键词</ion-label>
-        </ion-list-header>
-        <ion-item-sliding *ngFor="let keyword of customKeywords">
-          <ion-item>
-            <ion-label>{{ keyword }}</ion-label>
-            <ion-icon slot="end" name="trash-outline" (click)="removeKeyword(keyword)"></ion-icon>
-          </ion-item>
-        </ion-item-sliding>
-      </ion-list>
-    </ion-content>
-  </ng-template>
-</ion-modal>
-
-<!-- 在统计信息区域添加按钮 -->
-<div class="stats">
-  <div>已粉碎: {{ burstCount }} / {{ bubbles.length }}</div>
-  <div>
-    <ion-button (click)="resetBubbles()" fill="clear" size="small">
-      <ion-icon name="refresh" slot="start"></ion-icon>
-      重置
-    </ion-button>
-    <ion-button (click)="openKeywordModal()" fill="clear" size="small">
-      <ion-icon name="add" slot="start"></ion-icon>
-      添加关键词
-    </ion-button>
+    </div>
   </div>
-</div>
 </ion-content>

+ 126 - 67
myapp/src/app/tab2/management/emotion-vent/emotion-vent.page.scss

@@ -1,16 +1,48 @@
+/* 暖色调主题 */
+:root {
+  --primary-color: #FF7043;  /* 主色调 - 温暖橙色 */
+  --secondary-color: #FFA726;  /* 次色调 - 浅橙色 */
+  --background-color: #FFF3E0;  /* 背景色 - 浅米色 */
+  --text-color: #5D4037;  /* 主要文字色 - 深棕色 */
+  --light-text: #8D6E63;  /* 浅色文字 */
+  --bubble-base: #FF8A65;  /* 气泡基础色 */
+  --modal-bg: #FFE0B2;  /* 模态框背景 */
+}
+
+/* 标题栏 */
+ion-header {
+  ion-toolbar {
+    --background: #FF8A65;
+    --color: white;
+    
+    ion-back-button[color="light"] {
+      --color: white;
+    }
+    
+    ion-title {
+      font-weight: 500;
+      letter-spacing: 1px;
+    }
+  }
+}
+
+/* 内容区域 */
 .vent-content {
-  --background: linear-gradient(to bottom, #1a1a2e, #16213e);
+  --background: var(--background-color);
   overflow: hidden;
   position: relative;
   touch-action: none;
 }
 
+/* 气泡容器 */
 .bubble-container {
   position: relative;
   width: 100%;
   height: 100%;
+  background: linear-gradient(to bottom, rgba(255, 243, 224, 0.8), rgba(255, 224, 178, 0.9));
 }
 
+/* 负面情绪气泡 */
 .negative-bubble {
   position: absolute;
   width: 80px;
@@ -25,12 +57,15 @@
   cursor: pointer;
   user-select: none;
   transition: transform 0.2s ease-out;
-  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
   animation: float 3s infinite ease-in-out;
   z-index: 10;
+  background: var(--bubble-base);
+  border: 2px solid rgba(255, 255, 255, 0.3);
   
   &:hover {
     transform: scale(1.1);
+    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
   }
   
   &.burst {
@@ -38,16 +73,17 @@
   }
 }
 
+/* 浮动动画 */
 @keyframes float {
   0%, 100% {
     transform: translateY(0);
   }
   50% {
-    transform: translateY(-10px);
+    transform: translateY(-15px);
   }
 }
 
-
+/* 锤子样式 */
 .hammer {
   position: absolute;
   font-size: 40px;
@@ -55,8 +91,11 @@
   z-index: 20;
   pointer-events: none;
   transition: transform 0.1s ease-out;
+  filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.3));
+  color: #5D4037;
 }
-/* 新增粒子效果样式 */
+
+/* 粒子效果 */
 .particles-container {
   position: absolute;
   top: 0;
@@ -73,6 +112,7 @@
   height: 8px;
   border-radius: 50%;
   pointer-events: none;
+  background: var(--secondary-color);
   animation: particle-fly 1s ease-out forwards;
 }
 
@@ -87,7 +127,7 @@
   }
 }
 
-/* 增强气泡爆裂动画 */
+/* 气泡爆裂动画 */
 @keyframes burst {
   0% {
     transform: scale(1);
@@ -114,59 +154,50 @@
   }
 }
 
-/* 添加屏幕震动效果 */
-.shake {
-  animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
-}
-
-@keyframes shake {
-  10%, 90% { transform: translate3d(-1px, 0, 0); }
-  20%, 80% { transform: translate3d(2px, 0, 0); }
-  30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
-  40%, 60% { transform: translate3d(4px, 0, 0); }
-}
-
-
-/* 裂纹效果 */
-.crack-effect {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  transform: translate(-50%, -50%);
-  font-size: 30px;
-  opacity: 0.7;
-  animation: crackAppear 0.3s;
-}
-
-@keyframes crackAppear {
-  0% { transform: translate(-50%, -50%) scale(0.5); opacity: 0; }
-  50% { transform: translate(-50%, -50%) scale(1.2); opacity: 1; }
-  100% { transform: translate(-50%, -50%) scale(1); opacity: 0.7; }
-}
-
-/* 气泡类型特定样式 */
-.negative-bubble.hard {
-  border: 2px solid rgba(255, 255, 255, 0.8);
-  box-shadow: 0 0 10px rgba(255, 0, 0, 0.5);
-}
-
-.negative-bubble.fragile {
-  border: 1px dashed rgba(255, 255, 255, 0.6);
-  animation: fragilePulse 2s infinite;
-}
-
-@keyframes fragilePulse {
-  0% { opacity: 0.9; }
-  50% { opacity: 1; }
-  100% { opacity: 0.9; }
-}
-
-/* 关键词模态框样式 */
-.keyword-input {
-  margin-bottom: 20px;
+/* 模态框样式 */
+.modal-content {
+  --background: var(--modal-bg);
+  
+  .custom-input {
+    --background: white;
+    --color: var(--text-color);
+    --placeholder-color: var(--light-text);
+    border-radius: 8px;
+    margin-bottom: 16px;
+  }
+  
+  .add-button {
+    --background: var(--primary-color);
+    --color: white;
+    --background-activated: #F4511E;
+    font-weight: 500;
+  }
+  
+  .list-header {
+    --background: transparent;
+    ion-label {
+      color: var(--text-color);
+      font-weight: 600;
+    }
+  }
+  
+  .keyword-item {
+    --background: rgba(255, 255, 255, 0.7);
+    --border-radius: 8px;
+    margin-bottom: 8px;
+    
+    ion-label {
+      color: var(--text-color);
+    }
+  }
+  
+  .delete-icon {
+    color: var(--primary-color);
+    font-size: 20px;
+  }
 }
 
-/* 统计按钮区域 */
+/* 统计区域 */
 .stats {
   display: flex;
   justify-content: space-between;
@@ -176,20 +207,48 @@
   left: 0;
   right: 0;
   text-align: center;
-  color: white;
+  color: var(--text-color);
   z-index: 30;
-  background: rgba(0, 0, 0, 0.5);
-  padding: 10px 20px;
-  border-radius: 20px;
+  background: rgba(255, 255, 255, 0.8);
+  padding: 12px 20px;
+  border-radius: 25px;
   margin: 0 20px;
+  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+  border: 1px solid rgba(255, 167, 38, 0.3);
   
-  div {
-    display: flex;
-    align-items: center;
+  .counter {
+    font-weight: 500;
+    font-size: 0.9rem;
   }
   
-  ion-button {
-    --color: white;
-    margin-left: 10px;
+  .action-buttons {
+    display: flex;
+    
+    .action-button {
+      --color: var(--primary-color);
+      margin-left: 10px;
+      
+      ion-icon {
+        color: var(--primary-color);
+      }
+    }
   }
 }
+
+/* 响应式调整 */
+@media (max-width: 400px) {
+  .negative-bubble {
+    width: 70px;
+    height: 70px;
+    font-size: 0.8rem;
+  }
+  
+  .stats {
+    flex-direction: column;
+    gap: 8px;
+    
+    .action-buttons {
+      margin-top: 8px;
+    }
+  }
+}

+ 10 - 10
myapp/src/app/tab2/management/management.page.html

@@ -1,25 +1,25 @@
 <ion-header [translucent]="true">
-  <ion-toolbar>
+  <ion-toolbar color="warning">
     <ion-buttons slot="start">
-      <ion-back-button></ion-back-button>
+      <ion-back-button defaultHref="/tabs/tab2" color="light"></ion-back-button>
     </ion-buttons>
-    <ion-title>Management</ion-title>
+    <ion-title color="light">Management</ion-title>
   </ion-toolbar>
 </ion-header>
 
-<ion-content [fullscreen]="true">
+<ion-content [fullscreen]="true" color="light">
   <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">Management</ion-title>
+    <ion-toolbar color="warning">
+      <ion-title size="large" color="light">Management</ion-title>
     </ion-toolbar>
   </ion-header>
 
   <!-- 添加卡片容器 -->
   <div class="cards-container">
     <!-- Scream 卡片 -->
-    <ion-card class="management-card" (click)="goToScreamRoom()">
+    <ion-card class="management-card warm-card-1" (click)="goToScreamRoom()">
       <ion-card-header>
-        <ion-card-title>Scream</ion-card-title>
+        <ion-card-title color="warning">Scream</ion-card-title>
       </ion-card-header>
       <ion-card-content>
         <ion-icon name="mic-outline" size="large"></ion-icon>
@@ -28,9 +28,9 @@
     </ion-card>
 
     <!-- Emotion 卡片 -->
-    <ion-card class="management-card" (click)="goVentRoom()">
+    <ion-card class="management-card warm-card-2" (click)="goVentRoom()">
       <ion-card-header>
-        <ion-card-title>Emotion</ion-card-title>
+        <ion-card-title color="danger">Emotion</ion-card-title>
       </ion-card-header>
       <ion-card-content>
         <ion-icon name="happy-outline" size="large"></ion-icon>

+ 22 - 1
myapp/src/app/tab2/management/management.page.scss

@@ -9,6 +9,8 @@
   cursor: pointer;
   transition: transform 0.3s ease, box-shadow 0.3s ease;
   text-align: center;
+  border-radius: 16px;
+  overflow: hidden;
   
   &:hover {
     transform: translateY(-5px);
@@ -21,7 +23,6 @@
 
   ion-card-content {
     ion-icon {
-      color: var(--ion-color-primary);
       margin-bottom: 10px;
     }
     
@@ -30,4 +31,24 @@
       margin: 0;
     }
   }
+}
+
+.warm-card-1 {
+  background: linear-gradient(135deg, #FFF3E0 0%, #FFE0B2 100%);
+  
+  ion-icon {
+    color: var(--ion-color-warning);
+  }
+}
+
+.warm-card-2 {
+  background: linear-gradient(135deg, #FFEBEE 0%, #FFCDD2 100%);
+  
+  ion-icon {
+    color: var(--ion-color-danger);
+  }
+}
+
+ion-toolbar[color="warning"] {
+  --background: linear-gradient(135deg, #FFA000 0%, #FF6D00 100%);
 }

+ 9 - 9
myapp/src/app/tab2/management/scream-room/scream-room.page.html

@@ -1,13 +1,13 @@
 <ion-header>
-  <ion-toolbar>
+  <ion-toolbar color="warning">
     <ion-buttons slot="start">
-      <ion-back-button></ion-back-button>
+      <ion-back-button color="light"></ion-back-button>
     </ion-buttons>
-    <ion-title>情绪发泄室</ion-title>
+    <ion-title color="light">情绪发泄室</ion-title>
   </ion-toolbar>
 </ion-header>
 
-<ion-content class="ion-padding">
+<ion-content class="ion-padding" color="light">
   <div class="scream-container">
     <h2>释放你的情绪</h2>
     <p>对着手机大声喊出来吧!我们会将你的声音转化为艺术</p>
@@ -17,26 +17,26 @@
     </div>
     
     <div class="controls">
-      <ion-button (click)="startRecording()" [disabled]="isRecording" shape="round" color="danger">
+      <ion-button (click)="startRecording()" [disabled]="isRecording" shape="round" class="record-button">
         <ion-icon name="mic" slot="start"></ion-icon>
         开始吼叫
       </ion-button>
       
-      <ion-button (click)="stopRecording()" [disabled]="!isRecording" shape="round" color="medium">
+      <ion-button (click)="stopRecording()" [disabled]="!isRecording" shape="round" class="stop-button">
         <ion-icon name="square" slot="start"></ion-icon>
         停止
       </ion-button>
     </div>
     
     <div class="volume-display">
-      <ion-progress-bar [value]="volumeLevel" color="danger"></ion-progress-bar>
+      <ion-progress-bar [value]="volumeLevel" class="volume-bar"></ion-progress-bar>
       <p>当前音量: {{volumePercentage}}%</p>
     </div>
     
     <div class="result" *ngIf="waveformImage">
       <h3>你的声波艺术画</h3>
-      <img [src]="waveformImage" alt="声波艺术">
-      <ion-button (click)="saveArtwork()" expand="block" color="success">
+      <img [src]="waveformImage" alt="声波艺术" class="artwork-image">
+      <ion-button (click)="saveArtwork()" expand="block" class="save-button">
         <ion-icon name="download" slot="start"></ion-icon>
         保存作品
       </ion-button>

+ 76 - 14
myapp/src/app/tab2/management/scream-room/scream-room.page.scss

@@ -3,29 +3,36 @@
   padding: 20px;
   
   h2 {
-    color: var(--ion-color-danger);
+    color: #E65100; // 深橙色
     font-weight: bold;
     margin-bottom: 10px;
+    font-size: 1.8rem;
+    text-shadow: 0 2px 4px rgba(230, 81, 0, 0.1);
   }
   
   p {
-    color: var(--ion-color-medium);
+    color: #8D6E63; // 棕色
     margin-bottom: 30px;
+    font-size: 1.1rem;
+    line-height: 1.6;
   }
 }
 
 .visualizer-container {
   margin: 20px 0;
-  border-radius: 10px;
-  background: rgba(var(--ion-color-light-rgb), 0.2);
-  padding: 10px;
+  border-radius: 16px;
+  background: linear-gradient(135deg, #FFF3E0 0%, #FFE0B2 100%);
+  padding: 15px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+  border: 1px solid rgba(230, 81, 0, 0.1);
   
   .visualizer {
     width: 100%;
     height: 200px;
     display: block;
-    background: rgba(var(--ion-color-light-rgb), 0.1);
-    border-radius: 5px;
+    background: rgba(255, 255, 255, 0.7);
+    border-radius: 8px;
+    box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.05);
   }
 }
 
@@ -36,34 +43,89 @@
   margin: 30px 0;
   
   ion-button {
-    --padding-start: 20px;
-    --padding-end: 20px;
+    --padding-start: 25px;
+    --padding-end: 25px;
+    --padding-top: 15px;
+    --padding-bottom: 15px;
+    font-weight: bold;
+    transition: all 0.3s ease;
+    
+    &:active {
+      transform: scale(0.95);
+    }
+  }
+  
+  .record-button {
+    --background: linear-gradient(135deg, #FF5252 0%, #E65100 100%);
+    --background-activated: #E65100;
+    --color: white;
+    --box-shadow: 0 4px 16px rgba(230, 81, 0, 0.3);
+    
+    &:hover {
+      --box-shadow: 0 6px 20px rgba(230, 81, 0, 0.4);
+    }
+  }
+  
+  .stop-button {
+    --background: linear-gradient(135deg, #8D6E63 0%, #6D4C41 100%);
+    --background-activated: #6D4C41;
+    --color: white;
+    --box-shadow: 0 4px 16px rgba(109, 76, 65, 0.2);
   }
 }
 
 .volume-display {
   margin: 20px 0;
   
+  .volume-bar {
+    --progress-background: linear-gradient(90deg, #FFA726 0%, #FF7043 50%, #E65100 100%);
+    height: 8px;
+    border-radius: 4px;
+  }
+  
   p {
-    margin-top: 5px;
+    margin-top: 8px;
     font-size: 14px;
-    color: var(--ion-color-medium);
+    color: #8D6E63;
+    font-weight: 500;
   }
 }
 
 .result {
   margin-top: 40px;
   text-align: center;
+  background: linear-gradient(135deg, #FFF3E0 0%, #FFE0B2 100%);
+  padding: 20px;
+  border-radius: 16px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
   
   h3 {
-    color: var(--ion-color-primary);
+    color: #E65100;
     margin-bottom: 15px;
+    font-size: 1.4rem;
   }
   
-  img {
+  .artwork-image {
     max-width: 100%;
-    border-radius: 10px;
+    border-radius: 12px;
     box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
     margin-bottom: 20px;
+    border: 1px solid rgba(230, 81, 0, 0.1);
+  }
+  
+  .save-button {
+    --background: linear-gradient(135deg, #66BB6A 0%, #43A047 100%);
+    --background-activated: #2E7D32;
+    --color: white;
+    --box-shadow: 0 4px 16px rgba(67, 160, 71, 0.3);
+    
+    &:hover {
+      --box-shadow: 0 6px 20px rgba(67, 160, 71, 0.4);
+    }
   }
+}
+
+ion-toolbar[color="warning"] {
+  --background: linear-gradient(135deg, #FFA000 0%, #FF6D00 100%);
+  --color: white;
 }

+ 85 - 47
myapp/src/app/tab2/tab2.page.html

@@ -1,82 +1,120 @@
 <ion-header [translucent]="true">
-  <ion-toolbar>
-      <div class="header">
-        <ion-item class="search-bar">
-          <ion-icon name="search-outline" slot="start"></ion-icon>
-          <ion-input class="Input with placeholder" placeholder="负面情绪禁止过夜——现在立刻销毁"></ion-input>
-        </ion-item>
-        
-        <!-- 添加右侧按钮 -->
-        <ion-buttons slot="end">
-          <ion-button (click)="addDynamic()">
-            <ion-icon name="add-circle-outline" slot="icon-only"></ion-icon>
-          </ion-button>
-        </ion-buttons>
+  <ion-toolbar class="header-toolbar">
+    <div class="header-container">
+      <!-- 搜索栏 -->
+      <div class="search-container">
+        <ion-icon name="search-outline" class="search-icon"></ion-icon>
+        <ion-input 
+          class="search-input" 
+          placeholder="负面情绪禁止过夜——现在立刻销毁"
+          placeholder-class="search-placeholder">
+        </ion-input>
       </div>
+      
+      <!-- 添加按钮 -->
+      <ion-button 
+        class="add-button" 
+        fill="clear" 
+        (click)="addDynamic()">
+        <ion-icon name="add-circle-outline" slot="icon-only"></ion-icon>
+      </ion-button>
+    </div>
   </ion-toolbar>
 </ion-header>
 
-<ion-content [fullscreen]="true">
+<ion-content [fullscreen]="true" class="app-content">
   <!-- 功能板块 -->
   <div class="function-grid">
-    <div class="function-card card-1">树洞</div>
-    <div (click)="goThankslist('清单')" class="function-card card-2">感恩清单</div>
-    <div class="function-card card-3">漂流瓶</div>
-    <div (click)="goToManage()" class="function-card card-4">情绪发泄室</div>
+    <div class="function-card card-1">
+      <div class="card-content">
+        <ion-icon name="heart-outline" class="card-icon"></ion-icon>
+        <span class="card-title">树洞</span>
+      </div>
+    </div>
+    <div class="function-card card-2" (click)="goThankslist('清单')">
+      <div class="card-content">
+        <ion-icon name="list-outline" class="card-icon"></ion-icon>
+        <span class="card-title">感恩清单</span>
+      </div>
+    </div>
+    <div class="function-card card-3">
+      <div class="card-content">
+        <ion-icon name="water-outline" class="card-icon"></ion-icon>
+        <span class="card-title">漂流瓶</span>
+      </div>
+    </div>
+    <div class="function-card card-4" (click)="goToManage()">
+      <div class="card-content">
+        <ion-icon name="flash-outline" class="card-icon"></ion-icon>
+        <span class="card-title">情绪发泄室</span>
+      </div>
+    </div>
   </div>
   
   <!-- 动态日记标题栏 -->
   <div class="tab-container">
     <div class="tab-bar">
       <div class="tab-item" 
-          *ngFor="let tab of tabs" 
+          *ngFor="let tab of tabs; let i = index" 
           [class.active]="activeTab === tab.id"
           (click)="switchTab(tab.id)">
         {{ tab.title }}
       </div>
-      <div class="tab-slider" [style.transform]="'translateX(' + (activeTab * 100) + '%)'"></div>
+      <div class="tab-indicator" [style.transform]="'translateX(' + (activeTab * 100) + '%)'"></div>
     </div>
   </div>
-   
-
+  
   <!-- 动态日记列表 -->
   <div class="diary-list">
-
     <!-- 动态项 -->
-    <div class="diary-item" *ngFor="let dynamic of dynamics">
-      <div class="user-info">
-        <div class="user-left">
-          <div class="user-avatar">{{ dynamic.get('author')?.get('username')?.charAt(0) || 'U' }}</div>
-          <div class="user-name">{{ dynamic.get('author')?.get('username') || '匿名用户' }}</div>
+    <div class="diary-card" *ngFor="let dynamic of dynamics">
+      <!-- 用户信息 -->
+      <div class="user-header">
+        <div class="user-avatar">{{ dynamic.get('author')?.get('username')?.charAt(0) || 'U' }}</div>
+        <div class="user-meta">
+          <div class="user-name">{{ dynamic.get('author')?.get('username') || '1nGXJSoOgN' }}</div>
+          <!-- <div class="post-time">2小时前</div> -->
+          <div class="post-time">{{ dynamic.createdAt | date:'yyyy-MM-dd HH:mm' }}</div>
         </div>
-        <ion-icon name="ellipsis-horizontal" class="more-icon"></ion-icon>
-      </div>
-      <div (click)="goToDynamic(dynamic.id)">
-      <div class="diary-content">
-        {{ dynamic.get('content') }}
-      </div>
-      <div class="diary-image" *ngIf="dynamic.get('images')?.length > 0">
-        <img [src]="dynamic.get('images')[0]" alt="动态图片">
+        <ion-button fill="clear" class="more-button">
+          <ion-icon name="ellipsis-horizontal"></ion-icon>
+        </ion-button>
       </div>
+      
+      <!-- 日记内容 -->
+      <div class="diary-content" (click)="goToDynamic(dynamic.id)">
+        <p class="content-text">{{ dynamic.get('content') }}</p>
+        <div class="content-image" *ngIf="dynamic.get('images')?.length > 0">
+          <img [src]="dynamic.get('images')[0]" alt="动态图片">
         </div>
+      </div>
+      
+      <!-- 操作栏 -->
       <div class="action-bar">
-        <div class="action-item" (click)="toggleLike(dynamic)">
+        <ion-button fill="clear" class="action-button" (click)="toggleLike(dynamic)">
           <ion-icon 
             [name]="userInteractions[dynamic.id]?.liked ? 'heart' : 'heart-outline'" 
-            [color]="userInteractions[dynamic.id]?.liked ? 'danger' : ''" 
-            class="action-icon">
+            [color]="userInteractions[dynamic.id]?.liked ? 'danger' : 'medium'">
           </ion-icon>
           <span class="action-count">{{ dynamic.get('likeCount') || 0 }}</span>
-        </div> 
-        <div class="action-item" (click)="addComment(dynamic)">
-          <ion-icon name="chatbubble-ellipses-outline" class="action-icon"></ion-icon>
+        </ion-button>
+        
+        <ion-button fill="clear" class="action-button" (click)="addComment(dynamic)">
+          <ion-icon name="chatbubble-outline" color="medium"></ion-icon>
           <span class="action-count">{{ dynamic.get('commentCount') || 0 }}</span>
-        </div>
-        <div class="action-item" (click)="shareDynamic(dynamic)">
-          <ion-icon name="share-social-outline" class="action-icon"></ion-icon>
-          <span class="action-text">{{ dynamic.get('shareCount') || 0 }}</span>
-        </div>
+        </ion-button>
+        
+        <ion-button fill="clear" class="action-button" (click)="shareDynamic(dynamic)">
+          <ion-icon name="arrow-redo-outline" color="medium"></ion-icon>
+          <span class="action-count">{{ dynamic.get('shareCount') || 0 }}</span>
+        </ion-button>
       </div>
     </div>
   </div>
+  
+  <!-- 空状态 -->
+  <div class="empty-state" *ngIf="dynamics.length === 0">
+    <ion-icon name="document-text-outline"></ion-icon>
+    <p class="empty-text">暂无动态,点击右上角添加</p>
+  </div>
 </ion-content>

+ 217 - 176
myapp/src/app/tab2/tab2.page.scss

@@ -1,244 +1,285 @@
-* {
-    margin: 0;
-    padding: 0;
-    box-sizing: border-box;
-    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+/* 扁平化风格变量 */
+:root {
+  --header-height: 56px;
+  --card-radius: 12px;
+  --element-radius: 8px;
+  --shadow-sm: 0 1px 3px rgba(90, 74, 66, 0.12);
+  --shadow-md: 0 4px 6px rgba(90, 74, 66, 0.1);
+  --transition: all 0.25s ease;
 }
 
-body {
-    background-color: #f9f5f0;
-    color: #5a4a42;
-    min-height: 100vh;
+/* 顶部工具栏 */
+.header-toolbar {
+  --background: #FFFFFF;
+  --border-width: 0;
+  --padding-top: 0;
+  --padding-bottom: 0;
+  --padding-start: 0;
+  --padding-end: 0;
+  --min-height: var(--header-height);
+  box-shadow: var(--shadow-sm);
 }
 
-/* 顶部搜索栏 */
-.header {
-    background-color: #fff9f0;
-    padding: 12px 15px;
-    display: flex;
-    align-items: center;
-    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
-    position: sticky;
-    top: 0;
-    z-index: 100;
-    border-bottom: 1px solid #f0e6d6;
+.header-container {
+  display: flex;
+  align-items: center;
+  padding: 8px 16px;
+  width: 100%;
 }
 
-.envelope-icon {
-    font-size: 1.5rem;
-    color: #d4a373;
-    margin-right: 12px;
+/* 搜索栏 */
+.search-container {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  background: #FFF9F2;
+  border-radius: var(--element-radius);
+  padding: 8px 16px;
+  margin-right: 12px;
+  transition: var(--transition);
+  
+  &:active {
+    background: #F8F4EE;
+  }
 }
 
-.search-bar {
-    flex: 1;
-    background-color: #f8f4ee;
-    border-radius: 20px;
-    padding: 8px 15px;
-    display: flex;
-    align-items: center;
-    color: #b38a58;
+.search-icon {
+  font-size: 18px;
+  color: #D4B8A5;
+  margin-right: 8px;
 }
 
-.search-outline {
-    font-size: 1rem;
-    margin-right: 8px;
-    //color:black;
+.search-input {
+  --padding-top: 0;
+  --padding-bottom: 0;
+  --padding-start: 0;
+  --padding-end: 0;
+  font-size: 14px;
 }
 
 .search-placeholder {
-    font-size: 0.85rem;
-    opacity: 0.8;
+  color: #D4B8A5;
+  opacity: 0.8;
 }
 
-/* 功能板块 - 修改部分 */
+.add-button {
+  --padding-start: 0;
+  --padding-end: 0;
+  --ripple-color: transparent;
+  
+  ion-icon {
+    font-size: 24px;
+    color: #FF8C66;
+  }
+}
+
+/* 功能网格 */
 .function-grid {
-    display: grid;
-    grid-template-columns: 1fr 1fr;
-    gap: 10px;
-    padding: 15px;
-    padding-left: 20px;
-    padding-right: 20px;
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16px;
+  padding: 16px;
 }
 
 .function-card {
-    height: 60px; /* 减小高度 */
-    border-radius: 20px; /* 调整为更扁平的椭圆 */
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    color: white;
-    font-weight: bold;
-    font-size: 0.9rem; /* 减小字体大小 */
-    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
-    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.08);
-    transition: transform 0.2s;
+  height: 120px;
+  border-radius: var(--card-radius);
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  color: white;
+  box-shadow: var(--shadow-sm);
+  transition: var(--transition);
+  position: relative;
+  overflow: hidden;
+  
+  &:active {
+    transform: translateY(2px);
+    box-shadow: none;
+  }
 }
 
-.function-card:active {
-    transform: scale(0.97);
+.card-content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  z-index: 1;
+}
+
+.card-icon {
+  font-size: 32px;
+  margin-bottom: 8px;
+}
+
+.card-title {
+  font-size: 15px;
+  font-weight: 500;
 }
 
-/* 降低饱和度的渐变色 */
+/* 卡片背景色保持不变 */
 .card-1, .card-4 {
-    background: linear-gradient(135deg, #e2b4bd 20%, #8456af 80%);
+  background: linear-gradient(135deg, #FFB8B8 0%, #FF8C8C 100%);
 }
 
 .card-2, .card-3 {
-    background: linear-gradient(135deg, #b4d7e8 20%, #d8dda8 80%);
+  background: linear-gradient(135deg, #FFD8B8 0%, #FFB88C 100%);
 }
 
-/* 动态日记标题栏 */
-.tab-bar {
-    display: flex;
-    padding: 12px 15px;
-    border-bottom: 1px solid #f0e6d6;
-    background-color: #fff9f0;
+/* 标签栏 */
+.tab-container {
+  background: #FFFFFF;
+  padding: 0 16px;
+  box-shadow: var(--shadow-sm);
 }
 
-.tab-item {
-    flex: 1;
-    text-align: center;
-    font-size: 0.9rem;
-    color: #b38a58;
-    font-weight: 500;
-    padding: 5px 0;
+.tab-bar {
+  display: flex;
+  position: relative;
 }
 
-.tab-item.active {
-    color: #d4a373;
-    position: relative;
+.tab-item {
+  flex: 1;
+  text-align: center;
+  font-size: 14px;
+  color: #D4B8A5;
+  font-weight: 500;
+  padding: 16px 0;
+  position: relative;
+  cursor: pointer;
+  min-width: 0; /* 防止内容溢出 */
+  
+  &.active {
+    color: #FF8C66;
+    font-weight: 600;
+  }
 }
 
-.tab-item.active::after {
-    content: "";
-    position: absolute;
-    bottom: -6px;
-    left: 50%;
-    transform: translateX(-50%);
-    width: 25px;
-    height: 3px;
-    background-color: #d4a373;
-    border-radius: 3px;
+.tab-indicator {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: calc(100% / 3); /* 每个标签占1/3宽度 */
+  height: 3px;
+  background-color: #FF8C66;
+  border-radius: 3px;
+  transition: transform 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
 }
 
-/* 动态日记列表 */
+/* 日记卡片 */
 .diary-list {
-    padding: 10px 12px;
+  padding: 16px;
 }
 
-.diary-item {
-    background-color: white;
-    border-radius: 10px;
-    padding: 12px;
-    margin-bottom: 12px;
-    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
+.diary-card {
+  background: #FFFFFF;
+  border-radius: var(--card-radius);
+  margin-bottom: 16px;
+  box-shadow: var(--shadow-sm);
+  overflow: hidden;
+  transition: var(--transition);
+  
+  &:active {
+    transform: translateY(2px);
+  }
 }
 
-.user-info {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 10px;
+.user-header {
+  display: flex;
+  align-items: center;
+  padding: 16px 16px 12px;
 }
 
-.user-left {
-    display: flex;
-    align-items: center;
+.user-avatar {
+  width: 40px;
+  height: 40px;
+  border-radius: 50%;
+  background: linear-gradient(135deg, #FFD3B6, #FF8C66);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  color: white;
+  font-weight: bold;
+  font-size: 16px;
+  margin-right: 12px;
 }
 
-.user-avatar {
-    width: 36px;
-    height: 36px;
-    border-radius: 50%;
-    background-color: #f0e6d6;
-    margin-right: 8px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    color: #b38a58;
-    font-weight: bold;
-    font-size: 0.9rem;
+.user-meta {
+  flex: 1;
 }
 
 .user-name {
-    font-size: 0.9rem;
-    font-weight: 500;
-    color: #5a4a42;
+  font-size: 15px;
+  font-weight: 500;
+  color: #5A4A42;
+  margin-bottom: 2px;
 }
 
-.more-icon {
-    font-size: 1.1rem;
-    color: #a69b8f;
+.post-time {
+  font-size: 12px;
+  color: #D4B8A5;
+}
+
+.more-button {
+  --padding-start: 0;
+  --padding-end: 0;
+  --ripple-color: transparent;
+  
+  ion-icon {
+    color: #D4B8A5;
+    font-size: 20px;
+  }
 }
 
 .diary-content {
-    font-size: 0.9rem;
-    line-height: 1.6;
-    color: #5a4a42;
-    margin-bottom: 10px;
+  padding: 0 16px 12px;
 }
 
-.diary-image {
-    width: 100%;
-    border-radius: 6px;
-    margin-bottom: 10px;
-    background-color: #f8f4ee;
-    height: 160px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    color: #a69b8f;
-    overflow: hidden;
-}
-
-.diary-image img {
+.content-text {
+  font-size: 15px;
+  line-height: 1.6;
+  color: #5A4A42;
+  margin-bottom: 12px;
+}
+
+.content-image {
+  width: 100%;
+  border-radius: var(--element-radius);
+  overflow: hidden;
+  background: #F8F4EE;
+  height: 180px;
+  
+  img {
     width: 100%;
     height: 100%;
     object-fit: cover;
+  }
 }
 
 .action-bar {
-    display: flex;
-    padding-top: 6px;
-    border-top: 1px solid #f8f4ee;
-}
-
-.action-item {
-    flex: 1;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    color: #a69b8f;
-    font-size: 0.8rem;
-}
-
-.action-icon {
-    font-size: 1.1rem;
-    margin-right: 4px;
+  display: flex;
+  border-top: 1px solid #F0E6D6;
+  padding: 8px 0;
 }
 
-
-.loading-container {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  padding: 40px 0;
-  
-  ion-spinner {
-    width: 40px;
-    height: 40px;
-    color: var(--ion-color-primary);
-  }
+.action-button {
+  --padding-start: 0;
+  --padding-end: 0;
+  --ripple-color: transparent;
+  flex: 1;
   
-  .loading-text {
-    margin-top: 16px;
-    color: var(--ion-color-medium);
-    font-size: 14px;
+  ion-icon {
+    font-size: 20px;
+    margin-right: 6px;
   }
 }
 
+.action-count {
+  font-size: 14px;
+  color: #5A4A42;
+}
+
+/* 空状态 */
 .empty-state {
   display: flex;
   flex-direction: column;
@@ -248,13 +289,13 @@ body {
   text-align: center;
   
   ion-icon {
-    font-size: 60px;
-    color: var(--ion-color-medium);
+    font-size: 48px;
+    color: #D4B8A5;
     margin-bottom: 16px;
   }
   
   .empty-text {
-    color: var(--ion-color-medium);
+    color: #D4B8A5;
     font-size: 16px;
   }
 }

+ 8 - 8
myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.html

@@ -1,19 +1,19 @@
 <ion-header [translucent]="true">
-  <ion-toolbar color="primary">
+  <ion-toolbar class="coral-header">
     <ion-buttons slot="start">
-      <ion-back-button defaultHref="/tabs/tab2"></ion-back-button>
+      <ion-back-button defaultHref="/tabs/tab2" class="coral-back-button"></ion-back-button>
     </ion-buttons>
-    <ion-title>感恩清单</ion-title>
+    <ion-title class="header-title">感恩清单</ion-title>
     <ion-buttons slot="end">
-        <ion-button (click)="addNewThanks()">
-            <ion-icon name="add"></ion-icon>
-        </ion-button>
+      <ion-button (click)="addNewThanks()" class="coral-add-button">
+        <ion-icon name="add" class="add-icon"></ion-icon>
+      </ion-button>
     </ion-buttons>
   </ion-toolbar>
-  
 </ion-header>
 
-<ion-content class="ion-padding" [fullscreen]="true">
+<ion-content class="ion-padding light-yellow-bg" [fullscreen]="true">
+  <!-- 内容保持不变 -->
   
   <!-- 当列表为空时显示的提示 -->
   <div *ngIf="thanksList.length === 0" class="empty-state">

+ 190 - 155
myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.scss

@@ -1,214 +1,249 @@
-/* thanks-cloud.page.scss */
+/* 珊瑚橘与黄色主题变量 */
+:root {
+  --ion-color-coral: #FF7F50;  // 珊瑚橘
+  --ion-color-coral-rgb: 255,127,80;
+  --ion-color-coral-contrast: #ffffff;
+  --ion-color-coral-contrast-rgb: 255,255,255;
+  --ion-color-coral-shade: #e07046;
+  --ion-color-coral-tint: #ff8c62;
+  
+  --ion-color-sunshine: #FFD700;  // 金黄色
+  --ion-color-sunshine-rgb: 255,215,0;
+  --ion-color-sunshine-contrast: #000000;
+  --ion-color-sunshine-contrast-rgb: 0,0,0;
+  --ion-color-sunshine-shade: #e0bd00;
+  --ion-color-sunshine-tint: #ffdb1a;
+  
+  --ion-color-light-yellow: #FFF8E1;  // 浅黄色背景
+  --ion-color-light-yellow-rgb: 255,248,225;
+}
+
+/* 标题栏样式 */
+.coral-header {
+  --background: #ff8c62;
+  --color: white;
+  --border-color: transparent;
+  
+  ion-title {
+    font-weight: 600;
+    letter-spacing: 1px;
+  }
+}
+
+.header-title {
+  font-size: 1.2rem;
+  font-weight: 500;
+  color: white;
+  text-align: center;
+}
+
+.coral-back-button {
+  --color: white;
+  --icon-font-size: 1.4rem;
+}
 
-.gratitude-container {
-  max-width: 800px;
-  margin: 0 auto;
-  padding-bottom: 20px;
+.coral-add-button {
+  --color: white;
+  --background-activated: var(--ion-color-coral-shade);
+  
+  .add-icon {
+    font-size: 1.6rem;
+  }
+}
+
+/* 背景设置 */
+.light-yellow-bg {
+  --background: var(--ion-color-light-yellow);
+  background: var(--ion-color-light-yellow);
 }
 
+/* 卡片样式 */
 .gratitude-card {
-  margin-bottom: 24px;
-  border-radius: 12px;
-  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
-  transition: transform 0.3s ease, box-shadow 0.3s ease;
-  overflow: hidden;
+  margin-bottom: 20px;
+  border-radius: 10px;
+  box-shadow: 0 2px 8px rgba(255, 127, 80, 0.15);
+  border: 1px solid rgba(255, 127, 80, 0.1);
+  transition: all 0.2s ease;
+  background: var(--ion-color-light-yellow);  // 添加浅黄色背景
   
   &:hover {
     transform: translateY(-3px);
-    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
+    box-shadow: 0 4px 12px rgba(255, 127, 80, 0.2);
   }
 }
 
 .card-header {
+  background: var(--ion-color-coral);
+  color: white;
+  padding: 14px 16px;
+  border-top-left-radius: 10px;  // 保持与卡片相同的圆角
+  border-top-right-radius: 10px;
+  
+  /* 日期时间天气区域布局 */
+.date-section {
   display: flex;
+  align-items: baseline;
+  gap: 8px;
+  margin-bottom: 6px;
+}
+
+.date-number {
+  font-size: 1.4rem;
+  font-weight: 600;
+  color: #ff8c62;
+}
+
+.date-weekday {
+  font-size: 0.9rem;
+  color: #ff8c62;
+  font-weight: 500;
+}
+
+.time-weather {
+  display: flex;
+  justify-content: space-between;
   align-items: center;
-  padding: 16px;
-  background: linear-gradient(135deg, var(--ion-color-primary) 0%, var(--ion-color-primary-tint) 100%);
-  color: white;
-  border-bottom: 1px solid rgba(255, 255, 255, 0.2);
 }
 
-.date-section {
+.time {
+  font-size: 0.85rem;
+  color: #ff8c62;
+  font-weight: 400;
+}
+
+.weather-mood {
   display: flex;
-  flex-direction: column;
   align-items: center;
-  margin-right: 16px;
-  min-width: 50px;
-  
-  .date-number {
-    font-size: 28px;
-    font-weight: bold;
-    line-height: 1;
-  }
-  
-  .date-weekday {
-    font-size: 14px;
-    opacity: 0.9;
-    text-transform: uppercase;
-    letter-spacing: 1px;
-  }
+  gap: 10px;
 }
 
-.time-weather {
-  flex-grow: 1;
-  
-  .time {
-    font-size: 18px;
-    font-weight: 500;
-    margin-bottom: 4px;
-  }
-  
-  .weather-mood {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    
-    .weather {
-      font-size: 16px;
-      opacity: 0.9;
-    }
-    
-    .mood {
-      font-size: 24px;
-      margin-left: 8px;
-    }
-  }
+.weather {
+  font-size: 0.85rem;
+  color: rgba(255,255,255,0.85);
+  font-weight: 400;
+}
+
+.mood {
+  font-size: 1rem;
+  color: var(--ion-color-sunshine);
+  font-weight: 500;
+  text-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
 }
 
 .card-content {
-  padding: 0;
-  background: var(--ion-color-light);
+  background: white;
+  border-bottom-left-radius: 10px;  // 保持与卡片相同的圆角
+  border-bottom-right-radius: 10px;
   
   .content-text {
-    padding: 16px;
-    font-size: 16px;
-    line-height: 1.6;
-    color: var(--ion-color-dark);
-    border-bottom: 1px solid var(--ion-color-light-shade);
-    white-space: pre-line;
+    color: #5D4037;  // 深棕色文字
+    border-bottom: 1px solid #FFE0B2;
   }
 }
-
+/* 标签样式 */
 .tags-section {
-  padding: 12px 16px;
-  display: flex;
-  flex-wrap: wrap;
-  gap: 8px;
-  border-bottom: 1px solid var(--ion-color-light-shade);
-  
   ion-chip {
-    --background: transparent;
-    --color: var(--ion-color-primary);
-    --border-color: var(--ion-color-primary-tint);
-    font-size: 12px;
-    height: 24px;
-    
-    ion-label {
-      padding: 0 8px;
-    }
+    --color: var(--ion-color-coral);
+    --border-color: var(--ion-color-coral-tint);
+    --background: rgba(255, 127, 80, 0.1);
+    font-weight: 500;
   }
 }
 
-.accordion-content {
-  padding: 16px;
-  font-size: 14px;
-  line-height: 1.6;
-  color: var(--ion-color-medium);
-  background-color: var(--ion-color-light);
-  white-space: pre-line;
-}
-
+/* 折叠面板样式 */
 ion-accordion {
-  margin: 0;
-  
   ion-item {
-    --background: var(--ion-color-light);
-    --background-activated: var(--ion-color-light-shade);
-    --padding-start: 16px;
-    --padding-end: 16px;
+    --background: #FFF3E0;
+    --color: #5D4037;
     
     ion-label {
-      font-size: 14px;
       font-weight: 500;
-      color: var(--ion-color-primary);
     }
   }
   
-  &[expanded] {
-    ion-item {
-      --background: var(--ion-color-light-shade);
-    }
-  }
-}
-
-/* 响应式调整 */
-@media (max-width: 576px) {
-  .card-header {
-    flex-direction: column;
-    align-items: flex-start;
-    padding: 12px;
-  }
-  
-  .date-section {
-    flex-direction: row;
-    align-items: center;
-    margin-right: 0;
-    margin-bottom: 8px;
-    
-    .date-number {
-      font-size: 24px;
-      margin-right: 8px;
-    }
-    
-    .date-weekday {
-      font-size: 13px;
-    }
-  }
-  
-  .time-weather {
-    width: 100%;
-    
-    .time {
-      font-size: 16px;
-    }
-  }
-  
-  .content-text {
-    font-size: 15px;
-    padding: 12px;
+  .accordion-content {
+    background: #FFF8F0;
+    color: #5D4037;
+    border-left: 3px solid var(--ion-color-coral);
   }
 }
 
+/* 空状态样式 */
 .empty-state {
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
-  height: 70vh;
+  height: 60vh;
   text-align: center;
-  color: var(--ion-color-medium);
-
+  padding: 20px;
+  animation: fadeIn 0.6s ease-out;
+  
   .empty-icon {
-    font-size: 64px;
-    margin-bottom: 16px;
-    color: var(--ion-color-medium-shade);
+    font-size: 4rem;
+    color: var(--ion-color-coral);
+    margin-bottom: 20px;
+    opacity: 0.8;
+    filter: drop-shadow(0 2px 4px rgba(255, 127, 80, 0.2));
   }
 
   h2 {
-    font-size: 18px;
-    font-weight: 500;
-    margin-bottom: 8px;
-    color: var(--ion-color-dark);
+    color: var(--ion-color-coral-shade);
+    font-size: 1.5rem;
+    font-weight: 600;
+    margin-bottom: 12px;
+    letter-spacing: 0.5px;
   }
 
   p {
-    font-size: 14px;
-    margin: 0;
-    color: var(--ion-color-medium);
+    color: var(--ion-color-coral);
+    font-size: 1rem;
+    max-width: 280px;
+    line-height: 1.5;
+    
+    ion-icon {
+      color: var(--ion-color-coral);
+      vertical-align: middle;
+      margin: 0 4px;
+      font-size: 1.2rem;
+    }
   }
 
-  ion-icon {
-    vertical-align: middle;
-    color: var(--ion-color-primary);
+  @media (max-width: 576px) {
+    height: 50vh;
+    
+    .empty-icon {
+      font-size: 3.2rem;
+    }
+    
+    h2 {
+      font-size: 1.3rem;
+    }
+    
+    p {
+      font-size: 0.9rem;
+    }
+  }
+}
+
+@keyframes fadeIn {
+  from { opacity: 0; transform: translateY(10px); }
+  to { opacity: 1; transform: translateY(0); }
+}
+
+/* 响应式调整 */
+@media (max-width: 576px) {
+  .header-title {
+    font-size: 1.1rem;
+  }
+  
+  .coral-back-button,
+  .coral-add-button .add-icon {
+    font-size: 1.2rem;
+  }
+  
+  .card-header {
+    padding: 12px;
   }
 }

+ 5 - 3
myapp/src/app/tab2/thanks-cloud/thanks-cloud.page.ts

@@ -1,6 +1,6 @@
 import { Component, OnInit } from '@angular/core';
 import { CloudObject, CloudQuery,CloudUser } from 'src/lib/ncloud';
-import { AlertController } from '@ionic/angular';
+import { AlertController, NavController } from '@ionic/angular';
 
 @Component({
   selector: 'app-thanks-cloud',
@@ -12,7 +12,8 @@ export class ThanksCloudPage implements OnInit {
 
   constructor(
     //private parseService: ParseService
-    private alertController: AlertController
+    private alertController: AlertController,
+    private navCtrl:NavController
   ) { 
     this.checkLoginAndLoadData();
   }
@@ -53,6 +54,7 @@ export class ThanksCloudPage implements OnInit {
         {
           text: '去登录',
           handler: () => {
+            this.navCtrl.navigateForward(["tabs","tab4","login"])
             // 这里可以导航到登录页面
             // this.router.navigate(['/login']);
           }
@@ -73,7 +75,7 @@ export class ThanksCloudPage implements OnInit {
       objectId: this.currentUser.id
     });
     query.include("user"); // 包含用户信息
-    
+    query.queryParams["order"] = "-createdAt";
     this.thanksList = await query.find();
   }
   

+ 109 - 105
myapp/src/app/tab3/tab3.page.html

@@ -1,119 +1,123 @@
 <ion-header [translucent]="true">
+  <!-- 顶部标题栏 - 改为更温暖的色调 -->
+  <ion-toolbar class="warm-header">
+    <ion-title class="header-title">消息</ion-title>
+    <ion-buttons slot="end">
+      <ion-button fill="clear" color="light">
+        <ion-icon slot="icon-only" name="trash-outline"></ion-icon>
+      </ion-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
 
-  <!-- 顶部标题栏 -->
-    <div class="header">
-        <div class="header-title">消息</div>
-        <ion-button fill="clear" class="clear-btn">
-            <ion-icon name="trash-outline" slot="icon-only"></ion-icon>
-        </ion-button>
+<ion-content [fullscreen]="true" color="light">
+  <!-- 内容区域 -->
+  <div class="content">
+    <!-- 消息通知卡片 -->
+    <div class="notification-card warm-card-1">
+      <div class="notification-title">点击打开消息通知</div>
+      <div class="notification-desc">把握与TA的互动机会</div>
     </div>
 
-</ion-header>
+    <!-- 好友匹配卡片 -->
+    <div class="match-card warm-card-2">
+      <div class="match-info">
+        <div class="match-title">此刻匹配</div>
+        <div class="match-desc">给此刻在线的ta们say hi</div>
+      </div>
+      <ion-icon name="people-outline" class="match-icon"></ion-icon>
+    </div>
 
-<ion-content [fullscreen]="true">
+    <!-- AI咨询卡片 -->
+    <div class="ai-card warm-card-3">
+      <div class="ai-content">
+        <!-- 卡片头部 -->
+        <div class="ai-header">
+          <div class="ai-avatar">
+            <img src="/assets/icon/xinli1.jpeg" alt="AI咨询师">
+          </div>
+          <div class="ai-profile">
+            <div class="ai-name">AI心理咨询师</div>
+            <div class="ai-title">7×24小时在线陪伴</div>
+          </div>
+        </div>
 
-    <!-- 内容区域 -->
-    <div class="content">
-        <!-- 消息通知卡片 - 添加了hover和active效果 -->
-        <div class="notification-card">
-        <div class="notification-title">点击打开消息通知</div>
-        <div class="notification-desc">把握与TA的互动机会</div>
+        <!-- 功能描述 -->
+        <div class="ai-features">
+          <div class="feature-tag">
+            <ion-icon name="sparkles" class="feature-icon"></ion-icon>
+            情绪疏导
+          </div>
+          <div class="feature-tag">
+            <ion-icon name="moon" class="feature-icon"></ion-icon>
+            睡眠改善
+          </div>
+          <div class="feature-tag">
+            <ion-icon name="heart" class="feature-icon"></ion-icon>
+            压力缓解
+          </div>
         </div>
 
-        <!-- 好友匹配卡片 - 添加了hover和active效果 -->
-        <div class="match-card">
-        <div class="match-info">
-            <div class="match-title">此刻匹配</div>
-            <div class="match-desc">给此刻在线的ta们say hi</div>
+        <!-- 咨询按钮 -->
+        <ion-button expand="block" class="ai-action" (click)="openConsult()">
+          <ion-icon name="chatbubbles" slot="start"></ion-icon>
+          立即开启对话
+        </ion-button>
+      </div>
+    </div>
+    
+    <!-- 聊天列表 - 重新设计 -->
+    <div class="chat-list">
+      <!-- 聊天1 -->
+      <div class="chat-item">
+        <div class="chat-avatar">
+          <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23f0e6d6'/><path d='M30,65 Q50,80 70,65' stroke='%23f0e6d6' stroke-width='10' fill='none'/></svg>" alt="用户头像">
         </div>
+        <div class="chat-content">
+          <div class="chat-header">
+            <div class="chat-name">阳光小筑</div>
+            <div class="chat-time">12:30</div>
+          </div>
+          <div class="chat-preview">
+            <div class="chat-message">你今天的心情怎么样?我刚刚看到一篇不错的文章...</div>
+            <div class="chat-badge">3</div>
+          </div>
         </div>
-
-        <!-- ai咨询卡片 -->
-        <!-- 修改后的AI咨询卡片 -->
-        <div class="ai-card">
-        <div class="ai-content">
-            <!-- 卡片头部 -->
-            <div class="ai-header">
-            <div class="ai-avatar">
-                <img src="/assets/icon/xinli1.jpeg" alt="AI咨询师">
-            </div>
-            <div class="ai-profile">
-                <div class="ai-name">AI心理咨询师</div>
-                <div class="ai-title">7×24小时在线陪伴</div>
-            </div>
-            </div>
-
-            <!-- 功能描述 -->
-            <div class="ai-features">
-            <div class="feature-tag">
-                <ion-icon name="sparkles" class="feature-icon"></ion-icon>
-                情绪疏导
-            </div>
-            <div class="feature-tag">
-                <ion-icon name="moon" class="feature-icon"></ion-icon>
-                睡眠改善
-            </div>
-            <div class="feature-tag">
-                <ion-icon name="heart" class="feature-icon"></ion-icon>
-                压力缓解
-            </div>
-            </div>
-
-            <!-- 咨询按钮 -->
-            <button class="ai-action" (click)="openConsult()">
-            <ion-icon name="chatbubbles" class="action-icon"></ion-icon>
-            立即开启对话
-            </button>
+      </div>
+      
+      <!-- 聊天2 -->
+      <div class="chat-item">
+        <div class="chat-avatar">
+          <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23d4b483'/><path d='M30,65 Q50,80 70,65' stroke='%23d4b483' stroke-width='10' fill='none'/></svg>" alt="用户头像">
+        </div>
+        <div class="chat-content">
+          <div class="chat-header">
+            <div class="chat-name">树洞倾听者</div>
+            <div class="chat-time">10:15</div>
+          </div>
+          <div class="chat-preview">
+            <div class="chat-message">我明白你的感受,这种时候确实会很难过...</div>
+            <div class="chat-badge">1</div>
+          </div>
         </div>
+      </div>
+      
+      <!-- 聊天3 -->
+      <div class="chat-item">
+        <div class="chat-avatar">
+          <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23b38a58'/><path d='M30,65 Q50,80 70,65' stroke='%23b38a58' stroke-width='10' fill='none'/></svg>" alt="用户头像">
         </div>
-        
-        <!-- 聊天列表 -->
-        <div class="chat-list">
-            <!-- 聊天1 -->
-            <div class="chat-item">
-                <div class="chat-avatar">
-                    <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23f0e6d6'/><path d='M30,65 Q50,80 70,65' stroke='%23f0e6d6' stroke-width='10' fill='none'/></svg>" alt="用户头像">
-                </div>
-                <div class="chat-content">
-                    <div class="chat-name">阳光小筑</div>
-                    <div class="chat-message">你今天的心情怎么样?我刚刚看到一篇不错的文章...</div>
-                </div>
-                <div class="chat-right">
-                    <div class="chat-time">12:30</div>
-                    <div class="chat-badge">3</div>
-                </div>
-            </div>
-            
-            <!-- 聊天2 -->
-            <div class="chat-item">
-                <div class="chat-avatar">
-                    <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23d4b483'/><path d='M30,65 Q50,80 70,65' stroke='%23d4b483' stroke-width='10' fill='none'/></svg>" alt="用户头像">
-                </div>
-                <div class="chat-content">
-                    <div class="chat-name">树洞倾听者</div>
-                    <div class="chat-message">我明白你的感受,这种时候确实会很难过...</div>
-                </div>
-                <div class="chat-right">
-                    <div class="chat-time">10:15</div>
-                    <div class="chat-badge">1</div>
-                </div>
-            </div>
-            
-            <!-- 聊天3 -->
-            <div class="chat-item">
-                <div class="chat-avatar">
-                    <img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='40' r='20' fill='%23b38a58'/><path d='M30,65 Q50,80 70,65' stroke='%23b38a58' stroke-width='10' fill='none'/></svg>" alt="用户头像">
-                </div>
-                <div class="chat-content">
-                    <div class="chat-name">情绪管理师</div>
-                    <div class="chat-message">试试这个呼吸练习:吸气4秒,屏息4秒,呼气6秒...</div>
-                </div>
-                <div class="chat-right">
-                    <div class="chat-time">昨天</div>
-                    <div class="chat-badge">2</div>
-                </div>
-            </div>
+        <div class="chat-content">
+          <div class="chat-header">
+            <div class="chat-name">情绪管理师</div>
+            <div class="chat-time">昨天</div>
+          </div>
+          <div class="chat-preview">
+            <div class="chat-message">试试这个呼吸练习:吸气4秒,屏息4秒,呼气6秒...</div>
+            <div class="chat-badge">2</div>
+          </div>
         </div>
+      </div>
     </div>
- 
-</ion-content>
+  </div>
+</ion-content>

+ 259 - 317
myapp/src/app/tab3/tab3.page.scss

@@ -1,351 +1,293 @@
-* {
-    margin: 0;
-    padding: 0;
-    box-sizing: border-box;
-    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
-}
-
-body {
-    background-color: #f9f5f0;
-    color: #5a4a42;
-    min-height: 100vh;
-}
-
-/* 顶部标题栏 */
-.header {
-    background-color: #fff9f0;
-    padding: 15px 20px;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
-    position: sticky;
-    top: 0;
-    z-index: 100;
-    border-bottom: 1px solid #f0e6d6;
+/* 温暖风格的标题栏 */
+.warm-header {
+  --background: linear-gradient(135deg,#fff9f0); /* 温暖的珊瑚橘渐变 */
+  --color: white;
+  --border-color: transparent;
+  --padding-top: 8px;
+  --padding-bottom: 8px;
+  box-shadow: 0 2px 12px rgba(255, 140, 102, 0.3); /* 柔和的阴影 */
 }
 
+/* 居中标题样式 */
 .header-title {
-    font-size: 1.2rem;
-    font-weight: 600;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  font-size: 1.25rem;
+  font-weight: 500;
+  letter-spacing: 0.5px;
+  color: #b38a58;
+  margin: 0;
+  padding: 0;
+  width: fit-content;
+  pointer-events: none; /* 防止标题阻挡按钮点击 */
+  .trash-outline{
     color: #b38a58;
+  }
 }
 
-.clear-btn {
-    font-size: 0.9rem;
-    color: #e67e22;
-    background: none;
-    border: none;
-    cursor: pointer;
-}
-
-/* 内容区域 */
-.content {
-    padding: 15px;
-}
-
-/* 消息通知卡片 */
-.notification-card {
-    background: linear-gradient(135deg, #f6d365 0%, #fda085 100%);
-    border-radius: 25px;
-    padding: 18px 20px;
-    margin-bottom: 15px;
-    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
-    color: #5a4a42;
-}
-
-.notification-title {
-    font-size: 1rem;
-    font-weight: 600;
-    margin-bottom: 8px;
+/* 按钮样式调整 */
+.warm-header ion-button {
+  --color: white;
+  --background-hover: rgba(255, 255, 255, 0.15);
+  --ripple-color: rgba(255, 255, 255, 0.2);
+  --padding-start: 8px;
+  --padding-end: 8px;
 }
 
-.notification-desc {
-    font-size: 0.85rem;
-    opacity: 0.9;
+.warm-header ion-icon {
+  font-size: 1.4rem;
 }
 
-/* 好友匹配卡片 */
-.match-card {
-    background: linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2)), 
-                url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="300" height="150" viewBox="0 0 300 150"><rect width="300" height="150" fill="%23d4a373"/><circle cx="80" cy="75" r="40" fill="%23f8f4ee"/><circle cx="220" cy="75" r="40" fill="%23f8f4ee"/><path d="M80,75 Q150,120 220,75" stroke="%23f8f4ee" stroke-width="3" fill="none"/></svg>');
-    background-size: cover;
-    border-radius: 25px;
-    padding: 18px 20px;
-    margin-bottom: 15px;
-    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
-    color: white;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-    height: 120px;
+/* 全局样式 - 暖白底色 */
+ion-content {
+  --background: #FFF8F2; // 更温暖的底色
+  --padding-start: 16px;
+  --padding-end: 16px;
+  --padding-top: 16px;
 }
 
-.match-info {
-    max-width: 70%;
+/* 卡片基础样式 - 统一圆角和交互效果 */
+.notification-card,
+.match-card,
+.ai-card {
+  border-radius: 18px; // 更大的圆角更柔和
+  padding: 20px;
+  margin-bottom: 18px;
+  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06); // 更柔和的阴影
+  transition: all 0.35s cubic-bezier(0.25, 0.8, 0.25, 1); // 更顺滑的动画
+  
+  &:active {
+    transform: scale(0.97);
+    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1); // 点击时阴影变化
+  }
 }
 
-.match-title {
-    font-size: 1rem;
+/* 消息通知卡片 - 日出橙色调 */
+.warm-card-1 {
+  background: linear-gradient(135deg, #FFEDDC 0%, #FFD8B8 100%); // 更柔和的渐变
+  color: #7A3D12; // 更深的巧克力色文字
+  
+  .notification-title {
+    font-size: 1.15rem;
     font-weight: 600;
     margin-bottom: 8px;
+    color: #8B4513; // 标题颜色加深
+  }
+  
+  .notification-desc {
+    font-size: 0.92rem;
+    line-height: 1.5;
+    color: rgba(90, 58, 34, 0.85); // 更好的可读性
+  }
 }
 
-.match-desc {
-    font-size: 0.85rem;
-    opacity: 0.9;
-}
-
-.match-icon {
-    font-size: 1.5rem;
-}
-
-/* 聊天列表 */
-.chat-list {
-    margin-top: 20px;
-}
-
-.chat-item {
-    background-color: white;
-    border-radius: 12px;
-    padding: 12px 15px;
-    margin-bottom: 12px;
-    display: flex;
-    align-items: center;
-    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
-    transition: transform 0.2s;
-}
-
-.chat-item:active {
-    transform: scale(0.98);
+/* 好友匹配卡片 - 拿铁色调 */
+.warm-card-2 {
+  background: linear-gradient(135deg, #F5E0C9 0%, #E8C9A3 100%); // 更自然的米色渐变
+  color: #5C3A21; // 协调的文字颜色
+  min-height: 110px; // 更高的卡片
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  
+  .match-info {
+    max-width: 75%; // 更多文字空间
+  }
+  
+  .match-title {
+    font-size: 1.15rem;
+    margin-bottom: 8px;
+    font-weight: 600;
+  }
+  
+  .match-desc {
+    font-size: 0.92rem;
+    line-height: 1.4;
+    color: rgba(92, 58, 33, 0.9); // 更好的对比度
+  }
+  
+  .match-icon {
+    font-size: 2.2rem;
+    color: rgba(92, 58, 33, 0.6); // 更协调的图标颜色
+    transition: transform 0.3s;
+    
+    &:active {
+      transform: scale(1.1); // 图标点击反馈
+    }
+  }
 }
 
-.chat-avatar {
-    width: 50px;
-    height: 50px;
+/* AI咨询卡片 - 香草奶油色调 */
+.warm-card-3 {
+  background: linear-gradient(135deg, #F7EEE3 0%, #EDE0CD 100%); // 更柔和的渐变
+  position: relative;
+  overflow: hidden;
+  
+  &::after {
+    content: '';
+    position: absolute;
+    top: -30px;
+    right: -30px;
+    width: 100px;
+    height: 100px;
+    background: rgba(255, 245, 235, 0.25); // 更柔和的装饰圆
     border-radius: 50%;
-    background-color: #f0e6d6;
-    margin-right: 12px;
+  }
+  
+  .ai-header {
+    margin-bottom: 1.2rem;
     display: flex;
-    justify-content: center;
     align-items: center;
-    color: #b38a58;
-    font-weight: bold;
-    font-size: 1.2rem;
-    overflow: hidden;
-}
-
-.chat-avatar img {
-    width: 100%;
-    height: 100%;
-    object-fit: cover;
-}
-
-.chat-content {
-    flex: 1;
-    min-width: 0;
-}
-
-.chat-name {
-    font-size: 0.95rem;
-    font-weight: 500;
-    color: #5a4a42;
-    margin-bottom: 4px;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-}
-
-.chat-message {
-    font-size: 0.85rem;
-    color: #a69b8f;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-}
-
-.chat-right {
-    display: flex;
-    flex-direction: column;
-    align-items: flex-end;
-    margin-left: 10px;
-}
-
-.chat-time {
-    font-size: 0.75rem;
-    color: #a69b8f;
-    margin-bottom: 5px;
-}
-
-.chat-badge {
-    width: 18px;
-    height: 18px;
+  }
+  
+  .ai-avatar {
+    width: 65px;
+    height: 65px;
     border-radius: 50%;
-    background-color: #e74c3c;
-    color: white;
-    font-size: 0.7rem;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-}
-
-
-/* AI咨询卡片 */
-.ai-card {
-  background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
-  border-radius: 25px;
-  padding: 18px 20px;
-  margin-bottom: 15px;
-  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
-  position: relative;
-  overflow: hidden;
-}
-
-.ai-card::after {
-  content: '';
-  position: absolute;
-  top: -20px;
-  right: -20px;
-  width: 80px;
-  height: 80px;
-  background: rgba(255, 255, 255, 0.15);
-  border-radius: 50%;
-}
-
-.ai-header {
-  display: flex;
-  align-items: center;
-  margin-bottom: 1rem;
-}
-
-.ai-avatar {
-  width: 60px;
-  height: 60px;
-  border-radius: 50%;
-  overflow: hidden;
-  border: 3px solid rgba(255, 255, 255, 0.3);
-  margin-right: 15px;
-}
-
-.ai-avatar img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
-
-.ai-profile {
-  flex: 1;
-}
-
-.ai-name {
-  font-size: 1.1rem;
-  font-weight: 600;
-  color: #2c3e50;
-  margin-bottom: 4px;
-}
-
-.ai-title {
-  font-size: 0.85rem;
-  color: #7f8c8d;
-}
-
-.ai-features {
-  display: grid;
-  grid-template-columns: repeat(3, 1fr);
-  gap: 10px;
-  margin: 1.2rem 0;
-}
-
-.feature-tag {
-  background: rgba(255, 255, 255, 0.9);
-  border-radius: 8px;
-  padding: 8px 10px;
-  font-size: 0.8rem;
-  color: #2c3e50;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  text-align: center;
-  backdrop-filter: blur(2px);
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
-}
-
-.feature-icon {
-  margin-right: 5px;
-  font-size: 1rem;
-  color: #e74c3c;
-}
-
-.ai-action {
-  width: 100%;
-  background: rgba(255, 255, 255, 0.95);
-  border: none;
-  border-radius: 15px;
-  padding: 12px 20px;
-  color: #e74c3c;
-  font-weight: 600;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
-  transition: transform 0.2s;
-}
-
-.ai-action:active {
-  transform: scale(0.98);
-}
-
-.action-icon {
-  margin-right: 8px;
-  font-size: 1.2rem;
-}
-
-/* 消息通知卡片样式 */
-.notification-card {
-  // background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
-  // border-radius: 12px;
-  // padding: 16px;
-  // margin: 16px;
-  // box-shadow: 0 4px 8px rgba(0,0,0,0.1);
-  // transition: all 0.3s ease;
+    border: 3px solid rgba(255, 255, 255, 0.7); // 更明显的边框
+    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1);
+    margin-right: 15px;
+    object-fit: cover;
+  }
   
-  &:active {
-    transform: scale(0.98);
-    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+  .ai-profile {
+    .ai-name {
+      color: #654321; // 更深的标题颜色
+      font-size: 1.18rem;
+      font-weight: 600;
+      margin-bottom: 4px;
+    }
+    
+    .ai-title {
+      color: #9C8C7B; // 协调的副标题颜色
+      font-size: 0.88rem;
+    }
   }
   
-  &:hover {
-    cursor: pointer;
-    box-shadow: 0 6px 12px rgba(0,0,0,0.15);
+  .ai-features {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 12px;
+    margin: 1.5rem 0;
+    
+    .feature-tag {
+      background: rgba(255, 253, 250, 0.95); // 更白的标签背景
+      color: #7A5C44; // 更深的文字
+      padding: 10px 12px;
+      border-radius: 12px;
+      font-size: 0.85rem;
+      display: flex;
+      align-items: center;
+      box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
+      
+      .feature-icon {
+        color: #CD7F32; // 青铜色图标
+        margin-right: 6px;
+        font-size: 0.9rem;
+      }
+    }
   }
-}
-
-/* 好友匹配卡片样式 */
-.match-card {
-  // display: flex;
-  // justify-content: space-between;
-  // align-items: center;
-  // background: linear-gradient(135deg, #e0f7fa 0%, #80deea 100%);
-  // border-radius: 12px;
-  // padding: 16px;
-  // margin: 16px;
-  // box-shadow: 0 4px 8px rgba(0,0,0,0.1);
-  // transition: all 0.3s ease;
   
-  &:active {
-    transform: scale(0.98);
-    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+  .ai-action {
+    --background: linear-gradient(135deg, #CD7F32 0%, #B87333 100%); // 青铜色按钮
+    --box-shadow: 0 6px 16px rgba(205, 127, 50, 0.25);
+    --padding-top: 14px;
+    --padding-bottom: 14px;
+    --border-radius: 12px;
+    font-weight: 500;
+    
+    &:active {
+      --background: linear-gradient(135deg, #B87333 0%, #A05A2C 100%); // 点击状态
+    }
   }
+}
+
+/* 聊天列表 - 重新设计为更贴近聊天应用 */
+.chat-list {
+  margin-top: 25px;
   
-  &:hover {
-    cursor: pointer;
-    box-shadow: 0 6px 12px rgba(0,0,0,0.15);
+  .chat-item {
+    background-color: #FFFDFA; // 暖白色背景
+    border-radius: 15px;
+    padding: 14px;
+    margin-bottom: 12px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+    transition: all 0.3s ease;
+    display: flex;
+    align-items: center;
+    
+    &:active {
+      background-color: #FFF9F0; // 点击反馈
+      transform: scale(0.98);
+    }
+    
+    .chat-avatar {
+      width: 55px;
+      height: 55px;
+      border-radius: 50%;
+      margin-right: 15px;
+      box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1);
+      flex-shrink: 0;
+    }
+    
+    .chat-content {
+      flex: 1;
+      min-width: 0;
+      
+      .chat-header {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 6px;
+        
+        .chat-name {
+          color: #6B4F37; // 深棕色名字
+          font-size: 1rem;
+          font-weight: 600;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-right: 10px;
+        }
+        
+        .chat-time {
+          color: #B8A99A; // 更柔和的时间文字
+          font-size: 0.75rem;
+          flex-shrink: 0;
+        }
+      }
+      
+      .chat-preview {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        
+        .chat-message {
+          color: #9C8C7B; // 协调的浅棕色
+          font-size: 0.88rem;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-right: 10px;
+        }
+        
+        .chat-badge {
+          background: linear-gradient(135deg, #FF7F50 0%, #E66C3E 100%); // 珊瑚色红点
+          color: white;
+          width: 20px;
+          height: 20px;
+          border-radius: 50%;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          font-size: 0.7rem;
+          font-weight: 600;
+          flex-shrink: 0;
+        }
+      }
+    }
   }
 }
 
-/* 更新图标样式 */
-.match-icon {
-  font-size: 20px;
-  color: var(--ion-color-medium);
-}

+ 1 - 1
myapp/src/app/tab4/login/login.page.html

@@ -25,7 +25,7 @@
       <ion-input [(ngModel)]="email" type="email"></ion-input>
     </ion-item>
 
-    <ion-button expand="block" (click)="submit()" class="ion-margin-top">
+    <ion-button expand="block" fill="clear" (click)="submit()" class="ion-margin-top">
       {{ isLogin ? '登录' : '注册' }}
     </ion-button>
 

+ 109 - 0
myapp/src/app/tab4/login/login.page.scss

@@ -0,0 +1,109 @@
+/* 登录注册页面主题 - 浅橘色调 */
+:root {
+  --ion-color-light-orange: #FFE4C4;  // 浅橘色背景
+  --ion-color-warm-accent: #FFA07A;   // 珊瑚橘强调色
+  --ion-color-warm-shade: #FF8C66;    // 稍深的橘色
+}
+
+/* 工具栏样式 */
+ion-toolbar {
+  --min-height: 56px; /* 确保工具栏有标准高度 */
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  ion-title {
+    position: static !important; /* 移除绝对定位 */
+    //transform: none !important;
+    text-align: center;
+    padding: 0 48px; /* 留出两侧按钮空间 */
+    font-size: 1.2rem;
+    font-weight: 500;
+    color: #5D4037;
+    left: auto;
+    right: auto;
+  }
+}
+
+/* 内容区域 */
+ion-content {
+  --background: var(--ion-color-light-orange);
+  --padding-top: 24px;
+}
+
+/* 修复重叠问题并确保登录按钮显示 */
+.auth-container {
+  ion-item {
+    --padding-start: 0;
+    --inner-padding-end: 0;
+    margin-bottom: 20px;
+    
+    ion-label {
+      position: relative !important; /* 确保标签正常显示 */
+      transform: none !important;
+      margin-bottom: 8px;
+      color: #5D4037;
+      font-size: 0.9rem;
+    }
+    
+    ion-input {
+      --padding-start: 12px;
+      --padding-end: 12px;
+      border: 1px solid #FFD8B8;
+      border-radius: 8px;
+      height: 48px;
+      background: rgba(255, 248, 242, 0.8);
+    }
+  }
+
+  ion-button {
+    margin-top: 24px; /* 确保按钮有足够间距 */
+    margin-bottom: 16px;
+    
+    &:last-child {
+      margin-top: 12px;
+    }
+  }
+}
+
+/* 响应式调整 */
+@media (max-width: 576px) {
+  .auth-container {
+    padding: 16px;
+    border-radius: 12px;
+  }
+}
+
+/* 次要按钮样式 - 透明边框+珊瑚橘文字 */
+ion-button{
+  --color: #8B4513;
+  --border-width: 1px;
+  --border-color: #5D4037;
+  --border-style: solid;
+  --border-radius: 8px;
+  --padding-top: 12px;
+  --padding-bottom: 12px;
+  
+}
+
+/* 按钮通用样式 */
+ion-button {
+  &[expand="block"] {
+    --border-radius: 8px;
+    height: 48px;
+    font-weight: 500;
+    letter-spacing: 0.5px;
+    transition: all 0.3s ease;
+  }
+  /* 最后一个按钮(切换按钮)的特殊样式 */
+  &:last-child {
+    --color: #8B4513; /* 深棕色文字 */
+    --background-activated: rgba(139, 69, 19, 0.1);
+    font-size: 0.9rem;
+    
+    &:hover {
+      --color: #5D4037;
+      text-decoration: underline;
+    }
+  }
+}