Prechádzať zdrojové kódy

Merge branch 'master' of http://git.fmode.cn:3000/0225273/APPmy

0225263 4 mesiacov pred
rodič
commit
f514db3387

+ 30 - 29
src/app/app-routing.module.ts

@@ -1,33 +1,34 @@
-import { NgModule } from '@angular/core';
-import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
-
-const routes: Routes = [
-  {
-    path: '',
-    loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule)
-  },
-  {
-    path: 'tab4',
-    loadChildren: () => import('./tab4/tab4.module').then( m => m.Tab4PageModule)
-  },
-  {
-    path: 'login',
-    loadChildren: () => import('./login/login.module').then( m => m.LoginPageModule)
-  },
-  {
-    path: 'feedback',
-    loadChildren: () => import('./feedback/feedback.module').then( m => m.FeedbackPageModule)
-  },
  {
+import { NgModule } from '@angular/core';
+import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
+
+const routes: Routes = [
+  {
+    path: '',
+    loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule)
+  },
+  {
+    path: 'tab4',
+    loadChildren: () => import('./tab4/tab4.module').then( m => m.Tab4PageModule)
+  },
+  {
+    path: 'login',
+    loadChildren: () => import('./login/login.module').then( m => m.LoginPageModule)
+  },
+  {
+    path: 'feedback',
+    loadChildren: () => import('./feedback/feedback.module').then( m => m.FeedbackPageModule)
+  },
+  {
     path: 'settings',
     loadChildren: () => import('./settings/settings.module').then( m => m.SettingsPageModule)
   }
 
-
-];
-@NgModule({
-  imports: [
-    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
-  ],
-  exports: [RouterModule]
-})
-export class AppRoutingModule {}
+
+];
+@NgModule({
+  imports: [
+    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
+  ],
+  exports: [RouterModule]
+})
+export class AppRoutingModule {}

+ 1 - 1
src/app/settings/settings-routing.module.ts

@@ -14,4 +14,4 @@ const routes: Routes = [
   imports: [RouterModule.forChild(routes)],
   exports: [RouterModule],
 })
-export class SettingsPageRoutingModule {}
+export class SettingsPageRoutingModule {}

+ 2 - 1
src/app/settings/settings.page.ts

@@ -10,7 +10,7 @@ export class SettingsPage implements OnInit {
   constructor(private navCtrl: NavController) { }
   ngOnInit() {
   }
-  editProfile() {
+   editProfile() {
     // 编辑个人信息
   }
 
@@ -41,4 +41,5 @@ export class SettingsPage implements OnInit {
   viewAboutPage() {
     // 查看关于页面
   }
+
 }

+ 93 - 12
src/app/tab1/tab1.page.html

@@ -10,7 +10,38 @@
 <ion-content>
 
   <!-- 顶部搜索栏 -->
-  <ion-searchbar></ion-searchbar>
+  <div class="searchbar">
+    <div class="searchbar-wrapper">
+        <div class="searchbar-left">
+            <div class="search-icon-wrapper">
+                <span class="search-icon searchbar-icon">
+                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+                        <path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z">
+                        </path>
+                    </svg>
+                </span>
+            </div>
+        </div>
+
+        <div class="searchbar-center">
+            <div class="searchbar-input-spacer"></div>
+
+            <input type="text" class="searchbar-input" maxlength="2048" name="q" autocapitalize="off" autocomplete="off" title="Search" role="combobox" placeholder="Search">
+        </div>
+
+        <div class="searchbar-right">
+            <svg class="voice-search" role="button" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+                <path fill="#4285f4" d="m12 15c1.66 0 3-1.31 3-2.97v-7.02c0-1.66-1.34-3.01-3-3.01s-3 1.34-3 3.01v7.02c0 1.66 1.34 2.97 3 2.97z">
+                </path>
+                <path fill="#34a853" d="m11 18.08h2v3.92h-2z"></path>
+                <path fill="#fbbc05" d="m7.05 16.87c-1.27-1.33-2.05-2.83-2.05-4.87h2c0 1.45 0.56 2.42 1.47 3.38v0.32l-1.15 1.18z">
+                </path>
+                <path fill="#ea4335" d="m12 16.93a4.97 5.25 0 0 1 -3.54 -1.55l-1.41 1.49c1.26 1.34 3.02 2.13 4.95 2.13 3.87 0 6.99-2.92 6.99-7h-1.99c0 2.92-2.24 4.93-5 4.93z">
+                </path>
+            </svg>
+        </div>
+    </div>
+</div>
 
   <!-- 导航栏 -->
   <ion-toolbar>
@@ -74,8 +105,8 @@
   <!-- 发现页 -->
   <div *ngIf="selectedSegment === 'explore'">
     <!-- 装修锦囊块 -->
-    <ion-card>
-      <ion-card-header>
+    <ion-card class="card__content">
+      <ion-card-header class="card-title">
         装修锦囊
       </ion-card-header>
       <ion-card-content>
@@ -84,8 +115,8 @@
           <ion-row>
             <!-- 空间设计块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="dice-outline"></ion-icon>
                     空间设计
@@ -121,8 +152,8 @@
             </ion-col>
             <!-- 装前必看块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="send-outline"></ion-icon>
                     装前必看
@@ -157,8 +188,8 @@
             </ion-col>
             <!-- 家具家电块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="desktop-outline"></ion-icon>
                     家具家电
@@ -193,8 +224,8 @@
             </ion-col>
             <!-- 家居软装块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="bed-outline"></ion-icon>
                     家居软装
@@ -241,7 +272,32 @@
         </ion-thumbnail>
         <ion-label>
           <h2>{{item.title}}</h2>
-          <p>{{item.user}} - {{item.likes}} Likes</p>
+          <p>{{item.user}}</p>
+          <div class="like-wrapper">
+            <input class="check" type="checkbox" id="like-toggle" />
+            <label class="container" for="like-toggle">
+              <svg
+                viewBox="0 0 512 512"
+                xmlns="http://www.w3.org/2000/svg"
+                class="icon inactive"
+              >
+                <path
+                  d="M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z"
+                ></path>
+              </svg>
+              <svg
+                viewBox="0 0 512 512"
+                xmlns="http://www.w3.org/2000/svg"
+                class="icon active"
+              >
+                <path
+                  d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"
+                ></path>
+              </svg>
+              <div class="checkmark"></div>
+              <span class="like-text">{{item.likes}}</span>
+            </label>
+          </div>
           <p>{{item.comments}} Comments</p>
           <p>{{item.tags}}</p>
         </ion-label>
@@ -252,6 +308,31 @@
   <!-- 视频页 -->
   <div *ngIf="selectedSegment === 'video'">
     <!-- 视频内容 -->
+    <div class="like-wrapper">
+      <input class="check" type="checkbox" id="like-toggle" />
+      <label class="container" for="like-toggle">
+        <svg
+          viewBox="0 0 512 512"
+          xmlns="http://www.w3.org/2000/svg"
+          class="icon inactive"
+        >
+          <path
+            d="M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z"
+          ></path>
+        </svg>
+        <svg
+          viewBox="0 0 512 512"
+          xmlns="http://www.w3.org/2000/svg"
+          class="icon active"
+        >
+          <path
+            d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"
+          ></path>
+        </svg>
+        <div class="checkmark"></div>
+        <span class="like-text">like</span>
+      </label>
+    </div>
     <img src="assets\img\customer-avatar.jpg" alt="Example 0">
   </div>
 

+ 264 - 0
src/app/tab1/tab1.page.scss

@@ -28,3 +28,267 @@ p {
   color: #777;
   margin-bottom: 3px;
 }
+
+.like-wrapper {
+  --gap: 0.5em;
+  --radius: 0.35em;
+  
+  display: flex;
+  align-items: center; /* 垂直居中 */
+  justify-content: center; /* 按钮靠右 */
+  --dot-bg: #212121;
+  --dot-color: #313131;
+  --dot-size: 1px;
+  --dot-space: 11px;
+  background: linear-gradient(
+        90deg,
+        var(--dot-bg) calc(var(--dot-space) - var(--dot-size)),
+        transparent 1%
+      )
+      center / var(--dot-space) var(--dot-space),
+    linear-gradient(
+        var(--dot-bg) calc(var(--dot-space) - var(--dot-size)),
+        transparent 1%
+      )
+      center / var(--dot-space) var(--dot-space),
+    var(--dot-color);
+  border: 0.1em solid #313131;
+  padding: 0.5em;
+  border-radius: var(--radius);
+  box-shadow: 0 0 1em 0.5em rgba(0, 0, 0, 0.1);
+  cursor: pointer;
+  max-width: 25%; /* 按钮最大宽度为50% */
+  margin-left: auto; /* 靠右对齐 */
+}
+
+
+.check[type="checkbox"] {
+  display: none;
+}
+
+.container {
+  display: flex;
+  align-items: center;
+  cursor: pointer;
+  margin-top: -0.25em;
+  margin-bottom: -0.25em;
+}
+
+.icon {
+  width: 1.5em;
+  height: 1.5em;
+  margin-left: 0.5em;
+  fill: white;
+  transition: opacity 0.3s ease-in-out;
+}
+
+.icon.active {
+  display: none;
+  fill: #f52121;
+}
+
+.check[type="checkbox"]:checked + .container .icon.active {
+  display: inline-block;
+  animation: wiggle 0.5s ease-in-out;
+}
+
+.check[type="checkbox"]:checked + .container .icon.inactive {
+  display: none;
+}
+
+.like-text {
+  margin-left: 0.5em;
+  padding: 0.5em;
+  color: white;
+  font-family: Arial, sans-serif;
+  font-weight: bolder;
+}
+
+@keyframes wiggle {
+  0%,
+  100% {
+    transform: rotate(0deg);
+  }
+  25% {
+    transform: rotate(-10deg);
+  }
+  50% {
+    transform: rotate(10deg);
+  }
+  75% {
+    transform: rotate(-10deg);
+  }
+}
+
+.searchbar {
+  font-size: 14px;
+  font-family: arial, sans-serif;
+  color: #202124;
+  display: flex;
+  z-index: 3;
+  height: 44px;
+  background: white;
+  border: 1px solid #dfe1e5;
+  box-shadow: none;
+  border-radius: 24px;
+  margin: 10px auto;
+  width: auto;
+  max-width: 90%;
+}
+
+.searchbar:hover {
+  box-shadow: 0 1px 6px rgb(32 33 36 / 28%);
+  border-color: rgba(223,225,229,0);
+}
+
+.searchbar-wrapper {
+  flex: 1;
+  display: flex;
+  padding: 5px 8px 0 14px;
+}
+
+.searchbar-left {
+  font-size: 14px;
+  font-family: arial, sans-serif;
+  color: #202124;
+  display: flex;
+  align-items: center;
+  padding-right: 13px;
+  margin-top: -5px;
+}
+
+.search-icon-wrapper {
+  margin: auto;
+}
+
+.search-icon {
+  margin-top: 3px;
+  color: #9aa0a6;
+  height: 20px;
+  line-height: 20px;
+  width: 20px;
+}
+
+.searchbar-icon {
+  display: inline-block;
+  fill: currentColor;
+  height: 24px;
+  line-height: 24px;
+  position: relative;
+  width: 24px;
+}
+
+.searchbar-center {
+  display: flex;
+  flex: 1;
+  flex-wrap: wrap;
+}
+
+.searchbar-input-spacer {
+  color: transparent;
+  flex: 100%;
+  white-space: pre;
+  height: 34px;
+  font-size: 16px;
+}
+
+.searchbar-input {
+  background-color: transparent;
+  border: none;
+  margin: 0;
+  padding: 0;
+  color: rgba(0, 0, 0, .87);
+  word-wrap: break-word;
+  outline: none;
+  display: flex;
+  flex: 100%;
+  margin-top: -37px;
+  height: 34px;
+  font-size: 16px;
+  max-width: 100%;
+  width: 100%;
+}
+
+.searchbar-right {
+  display: flex;
+  flex: 0 0 auto;
+  margin-top: -5px;
+  align-items: stretch;
+  flex-direction: row
+}
+
+.searchbar-clear-icon {
+  margin-right: 12px
+}
+
+.voice-search {
+  flex: 1 0 auto;
+  display: flex;
+  cursor: pointer;
+  align-items: center;
+  border: 0;
+  background: transparent;
+  outline: none;
+  padding: 0 8px;
+  width: 2.8em;
+}
+
+.card {
+  //width: 190px;
+  //height: 254px;
+  border-radius: 20px;
+  padding: 5px;
+  box-shadow: rgba(151, 65, 252, 0.2) 0 15px 30px -5px;
+  background-image: linear-gradient(144deg,#af40ff76, #5a42f37c 50%,#00dbeb7c);
+}
+
+.card__content {
+  background: rgba(5, 6, 45, 0.125);
+  border-radius: 17px;
+  width: auto;
+  height: auto;
+}
+
+.card-title {
+  color: #333;
+  font-size: 1.5em;
+  font-weight: 600;
+  line-height: 2rem;
+ }
+
+ .card1 {
+  width: 190px;
+  height: 254px;
+  background-image: linear-gradient(163deg, #00ff75 0%, #3700ff 100%);
+  border-radius: 20px;
+  transition: all .3s;
+ }
+ 
+ .card2 {
+  width: 190px;
+  height: 254px;
+  background-color: #1a1a1a;
+  //border-radius:;
+  transition: all .2s;
+ }
+ 
+ .card2:hover {
+  transform: scale(0.98);
+  border-radius: 20px;
+ }
+ 
+ .card:hover {
+  box-shadow: 0px 0px 30px 1px rgba(0, 255, 117, 0.30);
+ }
+
+ .header {
+  display: flex;
+  flex-direction: column;
+}
+
+.price {
+  font-size: 3.75rem;
+  line-height: 1;
+  font-weight: 700;
+  color: #fff
+}

+ 1 - 1
src/app/tab1/tab1.page.ts

@@ -17,7 +17,7 @@ export class Tab1Page {
 
   // 在此处定义和初始化数据
   contentList = [
-    { image: 'assets/images/example1.jpghttps://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题1', user: '用户A', likes: 10, comments: 5, tags: '标签1, 标签2' },
+    { image: 'https://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题1', user: '用户A', likes: 10, comments: 5, tags: '标签1, 标签2' },
     { image: 'https://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题2', user: '用户B', likes: 20, comments: 8, tags: '标签3, 标签4' },
     // 添加更多示例数据
   ];

+ 8 - 7
src/app/tab2/tab2.page.html

@@ -28,8 +28,8 @@
   <div class="details-container">
     <!-- 装修公司详情页 -->
     <div *ngIf="selectedSegment === 'company'">
-      <!-- 装修公司详情页 -->
-      <ion-card *ngFor="let company of companies">
+      <div *ngFor="let company of companies">
+      <ion-card class="Company-card">
         <ion-card-header><ion-card-title> {{ company.name }}</ion-card-title>
       </ion-card-header>
         <ion-card-content>
@@ -46,7 +46,7 @@
             <ion-text>{{ company.description }}</ion-text>
           </ion-item>
           <!-- 公司服务 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司服务:
             </ion-card-header>
@@ -55,7 +55,7 @@
             </ion-card-content>
           </ion-card>
           <!-- 公司优势 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司优势:
             </ion-card-header>
@@ -64,12 +64,12 @@
             </ion-card-content>
           </ion-card>
           <!-- 公司案例 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司案例:
             </ion-card-header>
             <ion-card-content>
-              <ion-text>{{ company.cases }}</ion-text>
+              <ion-text [innerHTML]="formatHtmlContent(company.cases)"></ion-text>
             </ion-card-content>
           </ion-card>
           <!-- 底部按钮 -->
@@ -80,11 +80,12 @@
         </ion-card-content>
       </ion-card>
     </div>
+    </div>
 
     <!-- 设计机构详情页 -->
     <div *ngIf="selectedSegment === 'design'">
     <div *ngFor="let designCompany of designCompanies">
-      <ion-card class="company-card">
+      <ion-card class="Angency-card">
         <ion-card-header>
           <ion-card-title>{{ designCompany.name }}</ion-card-title>
           <ion-card-subtitle>星级评分: {{ designCompany.starRating }} | 评价数量: {{ designCompany.reviewCount }}</ion-card-subtitle>

+ 20 - 3
src/app/tab2/tab2.page.scss

@@ -1,3 +1,20 @@
-.details-container {
-    padding: 20px;
-  }
+
+  .company-card ion-card-header {
+    color: rgb(52, 160, 255); /* 将文字颜色设置为黑色 */
+  }
+  
+  .company-card ion-card-header{
+    font-size: 1.4em; /* 增大字号至1.2em(根据需要调整大小) */
+  }
+  .company-card {
+    background-color: #e0ffd2; /* 设置ion-card的背景颜色为灰色(根据需要调整颜色) */
+    color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+  }
+  .Company-card {
+    background-color: #f9ffdb; /* 设置ion-card的背景颜色为灰色(根据需要调整颜色) */
+    color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+  }
+  .info-item {
+  background-color: #f9ffdb; /* 设置info-item的背景颜色为灰色(根据需要调整颜色) */
+  color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+}

+ 6 - 5
src/app/tab3/tab3.page.html

@@ -13,17 +13,18 @@
 <ion-content>
   <ion-searchbar placeholder="输入关键字搜索"></ion-searchbar>
   <ion-card>
-    <ion-card-header>
+    <ion-card-header class="card">
       <ion-card-title>最新推荐</ion-card-title>
-    </ion-card-header>
-    <ion-card-content>
-      <ion-avatar slot="start">
+      <ion-avatar>
         <ion-img src="https://wx4.sinaimg.cn/mw690/006GBbhsgy1hqa92rfo7tj30qo0qo76t.jpg"></ion-img>
       </ion-avatar>
       <ion-label>用户名</ion-label><br>
       <ion-label>标签</ion-label><br>
       <ion-label>聊天内容</ion-label>
-      <ion-button expand="block">免费提问</ion-button>
+      <ion-button>免费提问</ion-button>
+    </ion-card-header>
+    <ion-card-content >
+      
     </ion-card-content>
   </ion-card>
   <div style="display: flex; flex-direction: column;">

+ 83 - 0
src/app/tab3/tab3.page.scss

@@ -10,3 +10,86 @@ ion-card-title {
 ion-avatar {
   margin-right: 10px;
 }
+.card {
+  width: 365px;
+  height: 250px;
+  background-color: #4158D0;
+  background-image: linear-gradient(43deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%);
+  border-radius: 8px;
+  color: white;
+  overflow: hidden;
+  position: relative;
+  transform-style: preserve-3d;
+  perspective: 1000px;
+  transition: all 0.5s cubic-bezier(0.23, 1, 0.320, 1);
+  cursor: pointer;
+}
+
+.card-content {
+  padding: 20px;
+  position: relative;
+  z-index: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+  color: white;
+  align-items: center;
+  justify-content: center;
+  text-align: center;
+  height: 100%;
+}
+
+.card-content .card-title {
+  font-size: 24px;
+  font-weight: 700;
+  color: inherit;
+  text-transform: uppercase;
+}
+
+.card-content .card-para {
+  color: inherit;
+  opacity: 0.8;
+  font-size: 14px;
+}
+
+.card:hover {
+  transform: rotateY(10deg) rotateX(10deg) scale(1.05);
+  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
+}
+
+.card:before {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: linear-gradient(transparent, rgba(0, 0, 0, 0.1));
+  transition: transform 0.5s cubic-bezier(0.23, 1, 0.320, 1);
+  z-index: 1;
+}
+
+.card:hover:before {
+  transform: translateX(-100%);
+}
+
+.card:after {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+  background: linear-gradient(transparent, rgba(0, 0, 0, 0.1));
+  transition: transform 0.5s cubic-bezier(0.23, 1, 0.320, 1);
+  z-index: 1;
+}
+
+.card:hover:after {
+  transform: translateX(100%);
+}
+
+
+
+
+

+ 2 - 2
src/app/tab3/tab3.page.spec.ts

@@ -1,7 +1,7 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { IonicModule } from '@ionic/angular';
 
-import { ExploreContainerComponentModule } from '../explore-container/explore-container.module';
+//import { ExploreContainerComponentModule } from '../explore-container/explore-container.module';
 
 import { Tab3Page } from './tab3.page';
 
@@ -12,7 +12,7 @@ describe('Tab3Page', () => {
   beforeEach(async () => {
     await TestBed.configureTestingModule({
       declarations: [Tab3Page],
-      imports: [IonicModule.forRoot(), ExploreContainerComponentModule]
+      //imports: [IonicModule.forRoot(), ExploreContainerComponentModule]
     }).compileComponents();
 
     fixture = TestBed.createComponent(Tab3Page);

+ 0 - 0
src/app/tab4/assets/avatar.jpg