diff --git a/front/src/SportPage.js b/front/src/SportPage.js
index 2874495..6fed422 100644
--- a/front/src/SportPage.js
+++ b/front/src/SportPage.js
@@ -1,39 +1,40 @@
 import React, { useState, useEffect } from "react";
 import HomeIcon from "@mui/icons-material/Home";
 import MovieIcon from "@mui/icons-material/Movie";
-import EmailIcon from "@mui/icons-material/Email";
+import TvIcon from "@mui/icons-material/Tv";
 import MusicNoteIcon from "@mui/icons-material/MusicNote";
-import EmojiPeopleIcon from "@mui/icons-material/EmojiPeople";
+import AnimationIcon from "@mui/icons-material/Animation";
 import SportsEsportsIcon from "@mui/icons-material/SportsEsports";
 import SportsMartialArtsIcon from "@mui/icons-material/SportsMartialArts";
 import PersonIcon from "@mui/icons-material/Person";
 import AccountCircleIcon from "@mui/icons-material/AccountCircle";
 import ForumIcon from "@mui/icons-material/Forum";
 import HelpIcon from "@mui/icons-material/Help";
-import "./App.css";
+import "./SharedStyles.css";
 import { useNavigate } from "react-router-dom";
 import { API_BASE_URL } from "./config";
 
 const navItems = [
-  { label: "首页", icon: <HomeIcon />, path: "/home" },
-  { label: "电影", icon: <MovieIcon />, path: "/movie" },
-  { label: "剧集", icon: <EmailIcon />, path: "/tv" },
-  { label: "音乐", icon: <MusicNoteIcon />, path: "/music" },
-  { label: "动漫", icon: <EmojiPeopleIcon />, path: "/anime" },
-  { label: "游戏", icon: <SportsEsportsIcon />, path: "/game" },
-  { label: "体育", icon: <SportsMartialArtsIcon />, path: "/sport" },
-  { label: "资料", icon: <PersonIcon />, path: "/info" },
-  { label: "论坛", icon: <ForumIcon />, path: "/forum" },
-  { label: "发布", icon: <AccountCircleIcon />, path: "/publish" },
-  { label: "求种", icon: <HelpIcon />, path: "/begseed" },
+  { label: "首页", icon: <HomeIcon className="emerald-nav-icon" />, path: "/home", type: "home" },
+  { label: "电影", icon: <MovieIcon className="emerald-nav-icon" />, path: "/movie", type: "movie" },
+  { label: "剧集", icon: <TvIcon className="emerald-nav-icon" />, path: "/tv", type: "tv" },
+  { label: "音乐", icon: <MusicNoteIcon className="emerald-nav-icon" />, path: "/music", type: "music" },
+  { label: "动漫", icon: <AnimationIcon className="emerald-nav-icon" />, path: "/anime", type: "anime" },
+  { label: "游戏", icon: <SportsEsportsIcon className="emerald-nav-icon" />, path: "/game", type: "game" },
+  { label: "体育", icon: <SportsMartialArtsIcon className="emerald-nav-icon" />, path: "/sport", type: "sport" },
+  { label: "资料", icon: <PersonIcon className="emerald-nav-icon" />, path: "/info", type: "info" },
+  { label: "论坛", icon: <ForumIcon className="emerald-nav-icon" />, path: "/forum", type: "forum" },
+  { label: "发布", icon: <AccountCircleIcon className="emerald-nav-icon" />, path: "/publish", type: "publish" },
+  { label: "求种", icon: <HelpIcon className="emerald-nav-icon" />, path: "/begseed", type: "help" },
 ];
 
+// 体育地区标签
 const areaTabs = [
-  { label: "篮球", icon: <MovieIcon fontSize="small" /> },
-  { label: "足球", icon: <EmailIcon fontSize="small" /> },
-  { label: "羽毛球", icon: <EmojiPeopleIcon fontSize="small" /> },
-  { label: "排球", icon: <PersonIcon fontSize="small" /> },
-  { label: "电竞", icon: <PersonIcon fontSize="small" /> },
+  { label: "篮球", value: "basketball" },
+  { label: "足球", value: "football" },
+  { label: "羽毛球", value: "badminton" },
+  { label: "排球", value: "volleyball" },
+  { label: "电竞", value: "esports" }
 ];
 
 export default function SportPage() {
@@ -72,8 +73,8 @@
     ["其他类型1", "其他类型2"] // 其他
   ];
   const sportTypes = sportTypesList[activeTab] || [];
-
   useEffect(() => {
+    // 根据选中的标签获取体育列表
     const area = areaTabs[activeTab].label;
     fetch(`${API_BASE_URL}/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
       .then(res => res.json())
@@ -87,128 +88,212 @@
     fetch(`${API_BASE_URL}/api/search-seeds?tag=${encodeURIComponent(area)}&keyword=${encodeURIComponent(searchText)}`)
       .then(res => res.json())
       .then(data => {
+        console.log('搜索返回数据:', data);
         setSportList(data);
       })
       .catch(() => setSportList([]));
   };
-
   return (
-    <div className="container">
-      {/* 顶部空白与体育界面一致，用户栏绝对定位在页面右上角 */}
-      <div style={{ height: 80 }} />
-      <div className="user-bar" style={{ position: 'fixed', top: 18, right: 42, zIndex: 100, display: 'flex', alignItems: 'center', background: '#e0f3ff', borderRadius: 12, padding: '6px 18px', boxShadow: '0 2px 8px #b2d8ea', minWidth: 320, minHeight: 48, width: 420 }}>
-        <div style={{ cursor: 'pointer', marginRight: 16 }} onClick={() => navigate('/user')}>
-          {userInfo.avatar_url ? (
-            <img src={userInfo.avatar_url} alt="用户头像" style={{ width: 38, height: 38, borderRadius: '50%', objectFit: 'cover' }} />
-          ) : (
-            <AccountCircleIcon style={{ fontSize: 38, color: '#1a237e', background: '#e0f3ff', borderRadius: '50%' }} />
-          )}
-        </div>
-        <div style={{ color: '#222', fontWeight: 500, marginRight: 24 }}>{userInfo.username || '用户栏'}</div>
-        <div style={{ display: 'flex', gap: 28, flex: 1, justifyContent: 'flex-end', alignItems: 'center' }}>
-          <span style={{ color: '#1976d2', fontWeight: 500 }}>魔力值: <b>{userPT.magic}</b></span>
-          <span style={{ color: '#1976d2', fontWeight: 500 }}>分享率: <b>{userPT.ratio}</b></span>
-          <span style={{ color: '#1976d2', fontWeight: 500 }}>上传量: <b>{userPT.upload}</b></span>
-          <span style={{ color: '#1976d2', fontWeight: 500 }}>下载量: <b>{userPT.download}</b></span>
-        </div>
+    <div className="emerald-home-container">
+      {/* 流星雨背景效果 */}
+      <div className="meteor-shower">
+        <div className="meteor">💫</div>
+        <div className="meteor">⭐</div>
+        <div className="meteor">✨</div>
+        <div className="meteor">🌟</div>
+        <div className="meteor">💫</div>
+        <div className="meteor">⭐</div>
+        <div className="meteor">✨</div>
+        <div className="meteor">🌟</div>
+        <div className="meteor">💫</div>
+        <div className="meteor">⭐</div>
       </div>
-      {/* 下方内容整体下移，留出与体育界面一致的间距 */}
-      <div style={{ height: 32 }} />
-      <nav className="nav-bar card">
-        {navItems.map((item) => (
-          <div
-            key={item.label}
-            className={item.label === "体育" ? "nav-item active" : "nav-item"}
-            onClick={() => navigate(item.path)}
-          >
-            {item.icon}
-            <span>{item.label}</span>
-          </div>
-        ))}
-      </nav>
-      <div className="search-section card">
-        <input
-          className="search-input"
-          placeholder="输入搜索关键词"
-          value={searchText}
-          onChange={e => setSearchText(e.target.value)}
-        />
-        <button className="search-btn" onClick={handleSearch}>
-          <span role="img" aria-label="search">🔍</span>
-        </button>
+
+      {/* 浮动园林装饰元素 */}
+      <div className="floating-garden-elements">
+        <div className="garden-element">🌿</div>
+        <div className="garden-element">🦋</div>
+        <div className="garden-element">🌺</div>
+        <div className="garden-element">🌸</div>
       </div>
-      <div className="area-tabs" style={{ display: 'flex', justifyContent: 'center', gap: 24, margin: '18px 0' }}>
-        {areaTabs.map((tab, idx) => (
-          <div
-            key={tab.label}
-            className={activeTab === idx ? "area-tab active" : "area-tab"}
-            onClick={() => setActiveTab(idx)}
-          >
-            {tab.icon} <span>{tab.label}</span>
-          </div>
-        ))}
-      </div>
-      <div className="table-section">
-        <table className="sport-table">
-          <thead>
-            <tr>
-              <th>体育类型</th>
-              <th>标题</th>
-              <th>发布者</th>
-              <th>大小</th>
-              <th>热度</th>
-              <th>折扣倍率</th>
-            </tr>
-          </thead>
-          <tbody>
-            {sportList.length > 0 ? (
-              sportList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.username}</td>
-                  <td>{item.seedsize}</td>
-                  <td>{item.downloadtimes}</td>
-                  <td>{item.discount == null ? 1 : item.discount}</td>
-                </tr>
-              ))
+
+      <div className="emerald-content">
+        {/* NeuraFlux用户栏 */}
+        <div className="emerald-user-bar">
+          <div className="emerald-user-avatar" onClick={() => navigate('/user')}>
+            {userInfo.avatar_url ? (
+              <img src={userInfo.avatar_url} alt="用户头像" style={{ width: 38, height: 38, borderRadius: '50%', objectFit: 'cover' }} />
             ) : (
-              sportTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                  <td>--</td>
-                  <td>--</td>
-                  <td>1</td>
-                </tr>
-              ))
+              <AccountCircleIcon style={{ fontSize: 38, color: 'white' }} />
             )}
-          </tbody>
-        </table>
+          </div>
+          <div className="emerald-brand-section">
+            <div className="emerald-brand-icon">⚡</div>
+            <div className="emerald-user-label">NeuraFlux</div>
+          </div>
+          <div className="emerald-user-stats">
+            <span className="emerald-stat-item">
+              魔力值: <span className="emerald-stat-value">{userPT.magic}</span>
+            </span>
+            <span className="emerald-stat-item">
+              分享率: <span className="emerald-stat-value">{userPT.ratio}</span>
+            </span>
+            <span className="emerald-stat-item">
+              上传: <span className="emerald-stat-value">{userPT.upload}GB</span>
+            </span>
+            <span className="emerald-stat-item">
+              下载: <span className="emerald-stat-value">{userPT.download}GB</span>
+            </span>
+          </div>
+        </div>
+
+        {/* NeuraFlux导航栏 */}
+        <nav className="emerald-nav-bar">
+          {navItems.map((item) => (
+            <div
+              key={item.label}
+              className={`emerald-nav-item ${item.label === "体育" ? "active" : ""}`}
+              data-type={item.type}
+              onClick={() => navigate(item.path)}
+            >
+              {item.icon}
+              <span className="emerald-nav-label">{item.label}</span>
+            </div>
+          ))}
+        </nav>
+
+        {/* 体育内容区域 */}
+        <div className="emerald-content-section">
+          <h1 className="emerald-page-title">⚽ 体育资源</h1>
+          <p style={{ textAlign: 'center', color: '#2d5016', fontSize: '18px', marginBottom: '30px' }}>
+            欢迎来到NeuraFlux体育频道，这里有最新最热门的体育资源
+          </p>
+          
+          {/* 搜索栏 */}
+          <div style={{ 
+            display: 'flex', 
+            justifyContent: 'center', 
+            marginBottom: '30px',
+            gap: '15px'
+          }}>
+            <input
+              type="text"
+              placeholder="搜索体育资源..."
+              value={searchText}
+              onChange={(e) => setSearchText(e.target.value)}
+              style={{
+                padding: '12px 20px',
+                borderRadius: '20px',
+                border: '2px solid rgba(144, 238, 144, 0.3)',
+                background: 'rgba(240, 255, 240, 0.5)',
+                fontSize: '16px',
+                width: '300px',
+                fontFamily: 'Lora, serif'
+              }}
+            />
+            <button
+              onClick={handleSearch}
+              style={{
+                padding: '12px 24px',
+                borderRadius: '20px',
+                border: 'none',
+                background: 'linear-gradient(135deg, #2d5016 0%, #90ee90 100%)',
+                color: 'white',
+                fontSize: '16px',
+                cursor: 'pointer',
+                fontFamily: 'Lora, serif'
+              }}
+            >
+              搜索
+            </button>
+          </div>
+
+          {/* 地区分类标签 */}
+          <div style={{ 
+            display: 'flex', 
+            justifyContent: 'center', 
+            marginBottom: '30px',
+            gap: '15px',
+            flexWrap: 'wrap'
+          }}>
+            {areaTabs.map((tab, index) => (
+              <button
+                key={tab.value}
+                onClick={() => setActiveTab(index)}
+                style={{
+                  padding: '10px 20px',
+                  borderRadius: '15px',
+                  border: '2px solid rgba(144, 238, 144, 0.3)',
+                  background: activeTab === index 
+                    ? 'linear-gradient(135deg, #90ee90 0%, #2d5016 100%)' 
+                    : 'rgba(240, 255, 240, 0.3)',
+                  color: activeTab === index ? 'white' : '#2d5016',
+                  fontSize: '14px',
+                  cursor: 'pointer',
+                  fontFamily: 'Lora, serif',
+                  transition: 'all 0.3s ease'
+                }}
+              >
+                {tab.label}
+              </button>
+            ))}
+          </div>
+
+          {/* 体育列表 */}
+          <div className="emerald-table-section">
+            <table className="emerald-table">
+              <thead>
+                <tr>
+                  <th>体育类型</th>
+                  <th>标题</th>
+                  <th>发布者</th>
+                  <th>大小</th>
+                  <th>热度</th>
+                  <th>折扣倍率</th>
+                </tr>
+              </thead>
+              <tbody>
+                {sportList.length > 0 ? (
+                  sportList.map((item, index) => (
+                    <tr key={item.id || index}>
+                      <td>{item.seedtag}</td>
+                      <td>
+                        <a href={`/torrent/${item.seedid}`}>
+                          {item.title}
+                        </a>
+                      </td>
+                      <td>{item.username}</td>
+                      <td>{item.seedsize}</td>
+                      <td>{item.downloadtimes}</td>
+                      <td>{item.discount == null ? 1 : item.discount}</td>
+                    </tr>
+                  ))
+                ) : (
+                  sportTypes.map((type, index) => (
+                    <tr key={type}>
+                      <td>{type}</td>
+                      <td>
+                        <a href={`/torrent/${type}`}>
+                          种子{index + 1}
+                        </a>
+                      </td>
+                      <td>发布者{index + 1}</td>
+                      <td>--</td>
+                      <td>--</td>
+                      <td>1</td>
+                    </tr>
+                  ))
+                )}
+              </tbody>
+            </table>
+          </div>
+        </div>
       </div>
-      <div style={{ height: 32 }} />
-      <Pagination />
     </div>
   );
 }
 
+// Pagination组件暂时不使用
 function Pagination() {
   const [page, setPage] = React.useState(3);
   const total = 5;
