合并冲突

Change-Id: I3b6ac5ae87aad8fe746eceecc8f92fc5574b50a8
diff --git a/src/app.tsx b/src/app.tsx
index 38f76b4..c5a779f 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -61,7 +61,7 @@
 }
 
 // ProLayout 支持的api https://procomponents.ant.design/components/layout
-export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
+export const layout: ({initialState, setInitialState}: { initialState: any; setInitialState: any }) => any = ({ initialState, setInitialState }) => {
   return {
     actionsRender: () => [<Question key="doc" />, <SelectLang key="SelectLang" />],
     avatarProps: {
@@ -115,14 +115,6 @@
         width: '331px',
       },
     ],
-    links: isDev
-      ? [
-        <Link key="openapi" to="/umi/plugin/openapi" target="_blank">
-          <LinkOutlined />
-          <span>OpenAPI 文档</span>
-        </Link>,
-      ]
-      : [],
     menuHeaderRender: undefined,
     // 自定义 403 页面
     // unAccessible: <div>unAccessible</div>,
diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx
index f204ac2..ce8fe07 100644
--- a/src/components/Footer/index.tsx
+++ b/src/components/Footer/index.tsx
@@ -8,26 +8,7 @@
       style={{
         background: 'none',
       }}
-      links={[
-        {
-          key: 'Ant Design Pro',
-          title: 'Ant Design Pro',
-          href: 'https://pro.ant.design',
-          blankTarget: true,
-        },
-        {
-          key: 'github',
-          title: <GithubOutlined />,
-          href: 'https://github.com/ant-design/ant-design-pro',
-          blankTarget: true,
-        },
-        {
-          key: 'Ant Design',
-          title: 'Ant Design',
-          href: 'https://ant.design',
-          blankTarget: true,
-        },
-      ]}
+      copyright={`${new Date().getFullYear()} ThunderHub JRX MSY ZYT HXQ LJB`}
     />
   );
 };
diff --git a/src/components/RightContent/index.tsx b/src/components/RightContent/index.tsx
index 20a7831..a6f40be 100644
--- a/src/components/RightContent/index.tsx
+++ b/src/components/RightContent/index.tsx
@@ -22,7 +22,7 @@
         height: 26,
       }}
       onClick={() => {
-        window.open('https://pro.ant.design/docs/getting-started');
+        window.open('https://kdocs.cn/l/cukLn6L241Ou');
       }}
     >
       <QuestionCircleOutlined />
diff --git a/src/global.less b/src/global.less
index a9a0c51..97fa011 100644
--- a/src/global.less
+++ b/src/global.less
@@ -16,6 +16,7 @@
 .ant-layout {
   min-height: 100vh;
 }
+
 .ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed {
   left: unset;
 }
@@ -39,12 +40,15 @@
   .ant-table {
     width: 100%;
     overflow-x: auto;
-    &-thead > tr,
-    &-tbody > tr {
-      > th,
-      > td {
+
+    &-thead>tr,
+    &-tbody>tr {
+
+      >th,
+      >td {
         white-space: pre;
-        > span {
+
+        >span {
           display: block;
         }
       }
diff --git a/src/pages/Bounty/Detail.tsx b/src/pages/Bounty/Detail.tsx
index 41a25df..78743da 100644
--- a/src/pages/Bounty/Detail.tsx
+++ b/src/pages/Bounty/Detail.tsx
@@ -36,7 +36,7 @@
 
       if (res.code === 200) {
         message.success('采纳成功');
-        setBounty(prev => {
+        setBounty((prev: API.BountyDetail) => {
           console.log('【状态更新】', {
             old: prev.submissions,
             new: prev.submissions?.map(sub =>
@@ -49,7 +49,7 @@
             submissions: prev.submissions?.map(sub =>
               sub.id === submissionId ? { ...sub, status: 1 } : sub
             )
-          };
+          } as API.BountyDetail;
         });
       } else {
         message.error(`采纳失败: ${res.msg}`);
@@ -75,14 +75,14 @@
       }
 
       const blob = await downloadAttachment(attachmentPath);
-      const url = window.URL.createObjectURL(blob);
+      const url = (window as any).URL.createObjectURL(blob);
       const a = document.createElement('a');
       a.href = url;
       a.download = attachmentPath.split('/').pop() || 'file';
       document.body.appendChild(a);
       a.click();
       a.remove();
-      window.URL.revokeObjectURL(url);
+      (window as any).URL.revokeObjectURL(url);
     } catch (err) {
       message.error('下载附件失败,请重试');
       console.error('下载附件失败:', err);
@@ -104,7 +104,7 @@
         console.error('获取用户信息失败:', err);
       }
     };
-    fetchProfile();
+    fetchProfile().then(r => {});
   }, []);
 
 
@@ -134,7 +134,7 @@
       }
     };
 
-    loadBountyDetail();
+    loadBountyDetail().then(r => {});
   }, [id]);
 
   return (
diff --git a/src/pages/Home/css/stars-style.css b/src/pages/Home/css/stars-style.css
new file mode 100644
index 0000000..0f37c1f
--- /dev/null
+++ b/src/pages/Home/css/stars-style.css
@@ -0,0 +1,1559 @@
+.main {
+  display: flex;
+  z-index: 1;
+  position: relative;
+  opacity: 0.8;
+}
+
+.origin,
+.origin::before,
+.origin::after {
+  margin: 0;
+  border: 0;
+  padding: 0;
+  box-sizing: border-box;
+  z-index: 0;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate3d(-50%, -50%, 0);
+  transform: translate3d(-50%, -50%, 0);
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+
+.teee {
+  z-index: 2;
+  font-size: 50px;
+}
+
+html {
+  height: 100vh;
+  width: 100vw;
+}
+
+body,
+.galaxy {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+body {
+  background: #0e0220;
+  height: 100%;
+  width: 100%;
+  overflow-x: hidden;
+  -webkit-perspective: 100vmin;
+  perspective: 100vmin;
+}
+
+.origin,
+.control,
+.galaxy,
+.star {
+  position: absolute;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+
+.origin {
+  -webkit-transform: translate3d(0vw, 0vh, 0vmin);
+  transform: translate3d(0vw, 0vh, 0vmin);
+}
+
+.control {
+  -webkit-transform: scale3d(0, 0, 0);
+  transform: scale3d(0, 0, 0);
+  -webkit-animation: appear 10s linear forwards;
+  animation: appear 10s linear forwards;
+}
+
+.galaxy {
+  -webkit-animation: rotation 10s linear infinite;
+  animation: rotation 10s linear infinite;
+}
+
+.star,
+.star::before,
+.star::after {
+  position: absolute;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+
+.star::before,
+.star::after {
+  background: var(--background);
+  border-radius: 50%;
+  box-shadow: var(--shadow);
+  content: '';
+  height: var(--size);
+  width: var(--size);
+}
+
+.star::before {
+  -webkit-transform: var(--transform);
+  transform: var(--transform);
+}
+
+.star::after {
+  -webkit-transform: scale3d(-1, -1, -1) var(--transform);
+  transform: scale3d(-1, -1, -1) var(--transform);
+}
+
+.star:nth-of-type(1) {
+  --size: 0.2835921021vmin;
+  --background: #642674;
+  --shadow: 0 0 0.1750153474vmin 0.0363164749vmin #642674;
+  --transform: rotate3d(1, 0, 0, 328deg) rotate3d(0, 1, 0, 135deg) rotate3d(0, 0, 1, 96deg) translate3d(0, 0, 82.541015291vmin);
+}
+
+.star:nth-of-type(2) {
+  --size: 0.7413082831vmin;
+  --background: #fff299;
+  --shadow: 0 0 0.6505248375vmin 0.3246593503vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 172deg) rotate3d(0, 1, 0, 111deg) rotate3d(0, 0, 1, 130deg) translate3d(0, 0, 87.5727103039vmin);
+}
+
+.star:nth-of-type(3) {
+  --size: 0.4260554564vmin;
+  --background: #8380f5;
+  --shadow: 0 0 0.5861517082vmin 0.2004683041vmin #8380f5;
+  --transform: rotate3d(1, 0, 0, 250deg) rotate3d(0, 1, 0, 310deg) rotate3d(0, 0, 1, 317deg) translate3d(0, 0, 78.8602777857vmin);
+}
+
+.star:nth-of-type(4) {
+  --size: 0.7103443369vmin;
+  --background: #f2eda3;
+  --shadow: 0 0 0.7010757604vmin 0.2007248801vmin #f2eda3;
+  --transform: rotate3d(1, 0, 0, 69deg) rotate3d(0, 1, 0, 100deg) rotate3d(0, 0, 1, 83deg) translate3d(0, 0, 87.0936338506vmin);
+}
+
+.star:nth-of-type(5) {
+  --size: 0.663428383vmin;
+  --background: #722b83;
+  --shadow: 0 0 0.80461304vmin 0.2224569914vmin #722b83;
+  --transform: rotate3d(1, 0, 0, 5deg) rotate3d(0, 1, 0, 265deg) rotate3d(0, 0, 1, 118deg) translate3d(0, 0, 88.4998499479vmin);
+}
+
+.star:nth-of-type(6) {
+  --size: 0.7176506352vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.3877486259vmin 0.3321995916vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 91deg) rotate3d(0, 1, 0, 309deg) rotate3d(0, 0, 1, 358deg) translate3d(0, 0, 89.2378760161vmin);
+}
+
+.star:nth-of-type(7) {
+  --size: 0.310865557vmin;
+  --background: #642674;
+  --shadow: 0 0 0.3792362228vmin 0.0753154867vmin #642674;
+  --transform: rotate3d(1, 0, 0, 315deg) rotate3d(0, 1, 0, 109deg) rotate3d(0, 0, 1, 267deg) translate3d(0, 0, 86.8954812814vmin);
+}
+
+.star:nth-of-type(8) {
+  --size: 0.7206382278vmin;
+  --background: #5a2268;
+  --shadow: 0 0 0.4802848584vmin 0.3214256666vmin #682878;
+  --transform: rotate3d(1, 0, 0, 331deg) rotate3d(0, 1, 0, 113deg) rotate3d(0, 0, 1, 309deg) translate3d(0, 0, 71.2468353149vmin);
+}
+
+.star:nth-of-type(9) {
+  --size: 0.424013172vmin;
+  --background: #6b297c;
+  --shadow: 0 0 0.4529582791vmin 0.0383392416vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 223deg) rotate3d(0, 1, 0, 352deg) rotate3d(0, 0, 1, 277deg) translate3d(0, 0, 79.1411897476vmin);
+}
+
+.star:nth-of-type(10) {
+  --size: 0.7107513334vmin;
+  --background: #ff5880;
+  --shadow: 0 0 0.9962013414vmin 0.1962571025vmin #ff5880;
+  --transform: rotate3d(1, 0, 0, 101deg) rotate3d(0, 1, 0, 107deg) rotate3d(0, 0, 1, 16deg) translate3d(0, 0, 70.1759644933vmin);
+}
+
+.star:nth-of-type(11) {
+  --size: 0.5707603905vmin;
+  --background: #6b297c;
+  --shadow: 0 0 0.3749602159vmin 0.200128313vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 243deg) rotate3d(0, 1, 0, 77deg) rotate3d(0, 0, 1, 193deg) translate3d(0, 0, 71.7100001416vmin);
+}
+
+.star:nth-of-type(12) {
+  --size: 0.5798447244vmin;
+  --background: #6c69f3;
+  --shadow: 0 0 0.5713127208vmin 0.1327069878vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 205deg) rotate3d(0, 1, 0, 54deg) rotate3d(0, 0, 1, 42deg) translate3d(0, 0, 80.4488561184vmin);
+}
+
+.star:nth-of-type(13) {
+  --size: 0.677564678vmin;
+  --background: #8df48e;
+  --shadow: 0 0 0.3432892544vmin 0.1001157273vmin #bbf8bc;
+  --transform: rotate3d(1, 0, 0, 120deg) rotate3d(0, 1, 0, 110deg) rotate3d(0, 0, 1, 201deg) translate3d(0, 0, 82.7612765812vmin);
+}
+
+.star:nth-of-type(14) {
+  --size: 0.4961091404vmin;
+  --background: #13a9e9;
+  --shadow: 0 0 0.4328784371vmin 0.2340385488vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 357deg) rotate3d(0, 1, 0, 143deg) rotate3d(0, 0, 1, 266deg) translate3d(0, 0, 78.8844240801vmin);
+}
+
+.star:nth-of-type(15) {
+  --size: 0.4095470191vmin;
+  --background: #12a2e0;
+  --shadow: 0 0 0.5125966447vmin 0.0001667585vmin #36b7ef;
+  --transform: rotate3d(1, 0, 0, 359deg) rotate3d(0, 1, 0, 298deg) rotate3d(0, 0, 1, 311deg) translate3d(0, 0, 76.3303084405vmin);
+}
+
+.star:nth-of-type(16) {
+  --size: 0.7408991482vmin;
+  --background: #ea1b90;
+  --shadow: 0 0 0.5636452941vmin 0.3366402359vmin #ea1b90;
+  --transform: rotate3d(1, 0, 0, 54deg) rotate3d(0, 1, 0, 19deg) rotate3d(0, 0, 1, 167deg) translate3d(0, 0, 70.4007677602vmin);
+}
+
+.star:nth-of-type(17) {
+  --size: 0.5275932186vmin;
+  --background: #dd1486;
+  --shadow: 0 0 0.3797963007vmin 0.1531168848vmin #eb2495;
+  --transform: rotate3d(1, 0, 0, 178deg) rotate3d(0, 1, 0, 222deg) rotate3d(0, 0, 1, 277deg) translate3d(0, 0, 72.288528018vmin);
+}
+
+.star:nth-of-type(18) {
+  --size: 0.5093118435vmin;
+  --background: #ea1b90;
+  --shadow: 0 0 0.3970329884vmin 0.0773944724vmin #ea1b90;
+  --transform: rotate3d(1, 0, 0, 268deg) rotate3d(0, 1, 0, 327deg) rotate3d(0, 0, 1, 46deg) translate3d(0, 0, 76.8482204992vmin);
+}
+
+.star:nth-of-type(19) {
+  --size: 0.6952201696vmin;
+  --background: #f4efb0;
+  --shadow: 0 0 0.5488628261vmin 0.0060727272vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 51deg) rotate3d(0, 1, 0, 92deg) rotate3d(0, 0, 1, 131deg) translate3d(0, 0, 76.3199369121vmin);
+}
+
+.star:nth-of-type(20) {
+  --size: 0.6499208005vmin;
+  --background: #f46f6f;
+  --shadow: 0 0 0.8953697874vmin 0.0508831665vmin #f89f9f;
+  --transform: rotate3d(1, 0, 0, 247deg) rotate3d(0, 1, 0, 336deg) rotate3d(0, 0, 1, 52deg) translate3d(0, 0, 75.7195953194vmin);
+}
+
+.star:nth-of-type(21) {
+  --size: 0.4313161361vmin;
+  --background: #ff76ad;
+  --shadow: 0 0 0.3734112201vmin 0.0457078964vmin #ff80b3;
+  --transform: rotate3d(1, 0, 0, 102deg) rotate3d(0, 1, 0, 353deg) rotate3d(0, 0, 1, 150deg) translate3d(0, 0, 84.5243263407vmin);
+}
+
+.star:nth-of-type(22) {
+  --size: 0.3240513094vmin;
+  --background: #8885f5;
+  --shadow: 0 0 0.4107185309vmin 0.1598999491vmin #8885f5;
+  --transform: rotate3d(1, 0, 0, 4deg) rotate3d(0, 1, 0, 56deg) rotate3d(0, 0, 1, 19deg) translate3d(0, 0, 68.252893429vmin);
+}
+
+.star:nth-of-type(23) {
+  --size: 0.6749804977vmin;
+  --background: #ff5880;
+  --shadow: 0 0 0.4141135488vmin 0.1769542018vmin #ff5880;
+  --transform: rotate3d(1, 0, 0, 358deg) rotate3d(0, 1, 0, 231deg) rotate3d(0, 0, 1, 134deg) translate3d(0, 0, 67.9039057691vmin);
+}
+
+.star:nth-of-type(24) {
+  --size: 0.6867114982vmin;
+  --background: #f3efac;
+  --shadow: 0 0 0.6317027386vmin 0.1537394151vmin #f3efac;
+  --transform: rotate3d(1, 0, 0, 14deg) rotate3d(0, 1, 0, 237deg) rotate3d(0, 0, 1, 354deg) translate3d(0, 0, 68.1685987935vmin);
+}
+
+.star:nth-of-type(25) {
+  --size: 0.2975356259vmin;
+  --background: #8df48e;
+  --shadow: 0 0 0.4398389524vmin 0.1469801421vmin #bbf8bc;
+  --transform: rotate3d(1, 0, 0, 359deg) rotate3d(0, 1, 0, 97deg) rotate3d(0, 0, 1, 147deg) translate3d(0, 0, 72.8612817003vmin);
+}
+
+.star:nth-of-type(26) {
+  --size: 0.2837776299vmin;
+  --background: #f68c8c;
+  --shadow: 0 0 0.3889918047vmin 0.0249919736vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 5deg) rotate3d(0, 1, 0, 61deg) rotate3d(0, 0, 1, 110deg) translate3d(0, 0, 87.1599145942vmin);
+}
+
+.star:nth-of-type(27) {
+  --size: 0.5670151251vmin;
+  --background: #6b297c;
+  --shadow: 0 0 0.6020377769vmin 0.150933111vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 234deg) rotate3d(0, 1, 0, 215deg) rotate3d(0, 0, 1, 198deg) translate3d(0, 0, 71.7383274494vmin);
+}
+
+.star:nth-of-type(28) {
+  --size: 0.4194113403vmin;
+  --background: #ff8fbc;
+  --shadow: 0 0 0.38499725vmin 0.0846148475vmin #ff8fbc;
+  --transform: rotate3d(1, 0, 0, 84deg) rotate3d(0, 1, 0, 61deg) rotate3d(0, 0, 1, 313deg) translate3d(0, 0, 80.6542144621vmin);
+}
+
+.star:nth-of-type(29) {
+  --size: 0.605556292vmin;
+  --background: #fbfcfd;
+  --shadow: 0 0 0.8654118937vmin 0.1521606756vmin #fbfcfd;
+  --transform: rotate3d(1, 0, 0, 136deg) rotate3d(0, 1, 0, 191deg) rotate3d(0, 0, 1, 329deg) translate3d(0, 0, 81.3092544414vmin);
+}
+
+.star:nth-of-type(30) {
+  --size: 0.4811772514vmin;
+  --background: #b2f7b3;
+  --shadow: 0 0 0.3313041848vmin 0.1300370323vmin #b2f7b3;
+  --transform: rotate3d(1, 0, 0, 16deg) rotate3d(0, 1, 0, 104deg) rotate3d(0, 0, 1, 62deg) translate3d(0, 0, 73.868380679vmin);
+}
+
+.star:nth-of-type(31) {
+  --size: 0.4767887783vmin;
+  --background: #f1f4f7;
+  --shadow: 0 0 0.5256370696vmin 0.193330741vmin #f1f4f7;
+  --transform: rotate3d(1, 0, 0, 308deg) rotate3d(0, 1, 0, 56deg) rotate3d(0, 0, 1, 249deg) translate3d(0, 0, 75.3259937348vmin);
+}
+
+.star:nth-of-type(32) {
+  --size: 0.3488615182vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.1783888201vmin 0.0877796286vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 22deg) rotate3d(0, 1, 0, 56deg) rotate3d(0, 0, 1, 120deg) translate3d(0, 0, 87.9945198278vmin);
+}
+
+.star:nth-of-type(33) {
+  --size: 0.6272794925vmin;
+  --background: #7e7bf5;
+  --shadow: 0 0 0.4018138602vmin 0.0036085878vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 72deg) rotate3d(0, 1, 0, 4deg) rotate3d(0, 0, 1, 108deg) translate3d(0, 0, 74.9429716204vmin);
+}
+
+.star:nth-of-type(34) {
+  --size: 0.5980763449vmin;
+  --background: #f68c8c;
+  --shadow: 0 0 0.609028633vmin 0.0206698956vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 43deg) rotate3d(0, 1, 0, 294deg) rotate3d(0, 0, 1, 120deg) translate3d(0, 0, 76.1165457048vmin);
+}
+
+.star:nth-of-type(35) {
+  --size: 0.6185383144vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.372974437vmin 0.1348613878vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 184deg) rotate3d(0, 1, 0, 2deg) rotate3d(0, 0, 1, 25deg) translate3d(0, 0, 67.3368436297vmin);
+}
+
+.star:nth-of-type(36) {
+  --size: 0.4141415773vmin;
+  --background: #ff8fbc;
+  --shadow: 0 0 0.5083147474vmin 0.0947692398vmin #ff8fbc;
+  --transform: rotate3d(1, 0, 0, 200deg) rotate3d(0, 1, 0, 4deg) rotate3d(0, 0, 1, 111deg) translate3d(0, 0, 80.5099805988vmin);
+}
+
+.star:nth-of-type(37) {
+  --size: 0.464004449vmin;
+  --background: #31b6ef;
+  --shadow: 0 0 0.4434728559vmin 0.0845349624vmin #31b6ef;
+  --transform: rotate3d(1, 0, 0, 331deg) rotate3d(0, 1, 0, 5deg) rotate3d(0, 0, 1, 207deg) translate3d(0, 0, 73.7570183556vmin);
+}
+
+.star:nth-of-type(38) {
+  --size: 0.4698868978vmin;
+  --background: #e8edf1;
+  --shadow: 0 0 0.3505111485vmin 0.0437121938vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 121deg) rotate3d(0, 1, 0, 85deg) rotate3d(0, 0, 1, 48deg) translate3d(0, 0, 73.9383472235vmin);
+}
+
+.star:nth-of-type(39) {
+  --size: 0.5291774426vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.6760046753vmin 0.2242731162vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 99deg) rotate3d(0, 1, 0, 353deg) rotate3d(0, 0, 1, 352deg) translate3d(0, 0, 77.1554461862vmin);
+}
+
+.star:nth-of-type(40) {
+  --size: 0.397408839vmin;
+  --background: #eb2495;
+  --shadow: 0 0 0.4577027818vmin 0.1326726142vmin #eb2495;
+  --transform: rotate3d(1, 0, 0, 283deg) rotate3d(0, 1, 0, 238deg) rotate3d(0, 0, 1, 22deg) translate3d(0, 0, 85.7114320814vmin);
+}
+
+.star:nth-of-type(41) {
+  --size: 0.603770632vmin;
+  --background: #9ff6a0;
+  --shadow: 0 0 0.7902997107vmin 0.0263510083vmin #a9f6aa;
+  --transform: rotate3d(1, 0, 0, 107deg) rotate3d(0, 1, 0, 341deg) rotate3d(0, 0, 1, 119deg) translate3d(0, 0, 83.7631686076vmin);
+}
+
+.star:nth-of-type(42) {
+  --size: 0.465232013vmin;
+  --background: #5e246c;
+  --shadow: 0 0 0.5225434805vmin 0.1472809201vmin #642674;
+  --transform: rotate3d(1, 0, 0, 41deg) rotate3d(0, 1, 0, 7deg) rotate3d(0, 0, 1, 92deg) translate3d(0, 0, 84.8182932106vmin);
+}
+
+.star:nth-of-type(43) {
+  --size: 0.6262782247vmin;
+  --background: #eb1f93;
+  --shadow: 0 0 0.3668392443vmin 0.0923044749vmin #eb1f93;
+  --transform: rotate3d(1, 0, 0, 256deg) rotate3d(0, 1, 0, 72deg) rotate3d(0, 0, 1, 278deg) translate3d(0, 0, 84.8646247391vmin);
+}
+
+.star:nth-of-type(44) {
+  --size: 0.6596081053vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.430519321vmin 0.138734676vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 162deg) rotate3d(0, 1, 0, 315deg) rotate3d(0, 0, 1, 3deg) translate3d(0, 0, 67.4594641047vmin);
+}
+
+.star:nth-of-type(45) {
+  --size: 0.2847169677vmin;
+  --background: #ec2d99;
+  --shadow: 0 0 0.3148592915vmin 0.0475358208vmin #ec2d99;
+  --transform: rotate3d(1, 0, 0, 203deg) rotate3d(0, 1, 0, 335deg) rotate3d(0, 0, 1, 53deg) translate3d(0, 0, 80.8401831944vmin);
+}
+
+.star:nth-of-type(46) {
+  --size: 0.5982546971vmin;
+  --background: #fff4ad;
+  --shadow: 0 0 0.3740264621vmin 0.0220836309vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 287deg) rotate3d(0, 1, 0, 195deg) rotate3d(0, 0, 1, 316deg) translate3d(0, 0, 84.3902592852vmin);
+}
+
+.star:nth-of-type(47) {
+  --size: 0.3460276847vmin;
+  --background: #fff29e;
+  --shadow: 0 0 0.2354502895vmin 0.0467396953vmin #fff4a8;
+  --transform: rotate3d(1, 0, 0, 260deg) rotate3d(0, 1, 0, 288deg) rotate3d(0, 0, 1, 287deg) translate3d(0, 0, 76.8940861586vmin);
+}
+
+.star:nth-of-type(48) {
+  --size: 0.5596928991vmin;
+  --background: #f0ea96;
+  --shadow: 0 0 0.7607250341vmin 0.2489202044vmin #f2ec9e;
+  --transform: rotate3d(1, 0, 0, 143deg) rotate3d(0, 1, 0, 68deg) rotate3d(0, 0, 1, 299deg) translate3d(0, 0, 68.7212870368vmin);
+}
+
+.star:nth-of-type(49) {
+  --size: 0.2606228013vmin;
+  --background: #5a2268;
+  --shadow: 0 0 0.2000348246vmin 0.0770928869vmin #682878;
+  --transform: rotate3d(1, 0, 0, 161deg) rotate3d(0, 1, 0, 308deg) rotate3d(0, 0, 1, 60deg) translate3d(0, 0, 79.1863949655vmin);
+}
+
+.star:nth-of-type(50) {
+  --size: 0.6080022812vmin;
+  --background: #fff29e;
+  --shadow: 0 0 0.8312878476vmin 0.2685253509vmin #fff4a8;
+  --transform: rotate3d(1, 0, 0, 349deg) rotate3d(0, 1, 0, 256deg) rotate3d(0, 0, 1, 161deg) translate3d(0, 0, 69.0454961211vmin);
+}
+
+.star:nth-of-type(51) {
+  --size: 0.6308082519vmin;
+  --background: #f9b890;
+  --shadow: 0 0 0.5806088691vmin 0.0975256905vmin #f9b890;
+  --transform: rotate3d(1, 0, 0, 150deg) rotate3d(0, 1, 0, 203deg) rotate3d(0, 0, 1, 172deg) translate3d(0, 0, 65.0219072235vmin);
+}
+
+.star:nth-of-type(52) {
+  --size: 0.6358630529vmin;
+  --background: #f0ea96;
+  --shadow: 0 0 0.8041647058vmin 0.2733630044vmin #f2ec9e;
+  --transform: rotate3d(1, 0, 0, 247deg) rotate3d(0, 1, 0, 47deg) rotate3d(0, 0, 1, 129deg) translate3d(0, 0, 76.8858560927vmin);
+}
+
+.star:nth-of-type(53) {
+  --size: 0.258578505vmin;
+  --background: #5e246c;
+  --shadow: 0 0 0.2370299913vmin 0.0514659196vmin #642674;
+  --transform: rotate3d(1, 0, 0, 166deg) rotate3d(0, 1, 0, 91deg) rotate3d(0, 0, 1, 54deg) translate3d(0, 0, 65.0763202274vmin);
+}
+
+.star:nth-of-type(54) {
+  --size: 0.6863312693vmin;
+  --background: #a9f6aa;
+  --shadow: 0 0 0.5525499989vmin 0.1330258874vmin #a9f6aa;
+  --transform: rotate3d(1, 0, 0, 311deg) rotate3d(0, 1, 0, 151deg) rotate3d(0, 0, 1, 62deg) translate3d(0, 0, 68.5381740092vmin);
+}
+
+.star:nth-of-type(55) {
+  --size: 0.3153180967vmin;
+  --background: #36b7ef;
+  --shadow: 0 0 0.4088170459vmin 0.0815502545vmin #36b7ef;
+  --transform: rotate3d(1, 0, 0, 96deg) rotate3d(0, 1, 0, 44deg) rotate3d(0, 0, 1, 96deg) translate3d(0, 0, 67.3711748168vmin);
+}
+
+.star:nth-of-type(56) {
+  --size: 0.2738237241vmin;
+  --background: #a9f6aa;
+  --shadow: 0 0 0.3410957316vmin 0.1091095537vmin #a9f6aa;
+  --transform: rotate3d(1, 0, 0, 19deg) rotate3d(0, 1, 0, 199deg) rotate3d(0, 0, 1, 232deg) translate3d(0, 0, 68.6130981123vmin);
+}
+
+.star:nth-of-type(57) {
+  --size: 0.7279799305vmin;
+  --background: #f4f7f9;
+  --shadow: 0 0 0.8106203033vmin 0.2982988197vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 266deg) rotate3d(0, 1, 0, 190deg) rotate3d(0, 0, 1, 336deg) translate3d(0, 0, 72.2311430666vmin);
+}
+
+.star:nth-of-type(58) {
+  --size: 0.4755597648vmin;
+  --background: #d81383;
+  --shadow: 0 0 0.7104403245vmin 0.1956941268vmin #ec2997;
+  --transform: rotate3d(1, 0, 0, 184deg) rotate3d(0, 1, 0, 2deg) rotate3d(0, 0, 1, 349deg) translate3d(0, 0, 72.6784743962vmin);
+}
+
+.star:nth-of-type(59) {
+  --size: 0.4782404758vmin;
+  --background: #e4ebef;
+  --shadow: 0 0 0.4281260562vmin 0.2170947923vmin #f8f9fb;
+  --transform: rotate3d(1, 0, 0, 49deg) rotate3d(0, 1, 0, 327deg) rotate3d(0, 0, 1, 175deg) translate3d(0, 0, 89.2713807917vmin);
+}
+
+.star:nth-of-type(60) {
+  --size: 0.2964480316vmin;
+  --background: #f3efac;
+  --shadow: 0 0 0.2536986779vmin 0.0131278677vmin #f3efac;
+  --transform: rotate3d(1, 0, 0, 8deg) rotate3d(0, 1, 0, 36deg) rotate3d(0, 0, 1, 187deg) translate3d(0, 0, 87.2897718006vmin);
+}
+
+.star:nth-of-type(61) {
+  --size: 0.4950567207vmin;
+  --background: #722b83;
+  --shadow: 0 0 0.5751843893vmin 0.0637395051vmin #722b83;
+  --transform: rotate3d(1, 0, 0, 124deg) rotate3d(0, 1, 0, 229deg) rotate3d(0, 0, 1, 293deg) translate3d(0, 0, 86.8516811606vmin);
+}
+
+.star:nth-of-type(62) {
+  --size: 0.6968564634vmin;
+  --background: #6764f3;
+  --shadow: 0 0 0.5822409922vmin 0.3057737592vmin #8380f5;
+  --transform: rotate3d(1, 0, 0, 158deg) rotate3d(0, 1, 0, 93deg) rotate3d(0, 0, 1, 312deg) translate3d(0, 0, 87.4192006408vmin);
+}
+
+.star:nth-of-type(63) {
+  --size: 0.6210690798vmin;
+  --background: #f68282;
+  --shadow: 0 0 0.3311509731vmin 0.0602709837vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 137deg) rotate3d(0, 1, 0, 255deg) rotate3d(0, 0, 1, 313deg) translate3d(0, 0, 81.4470528151vmin);
+}
+
+.star:nth-of-type(64) {
+  --size: 0.4810203113vmin;
+  --background: #ff76ad;
+  --shadow: 0 0 0.3101639264vmin 0.0580835808vmin #ff80b3;
+  --transform: rotate3d(1, 0, 0, 104deg) rotate3d(0, 1, 0, 254deg) rotate3d(0, 0, 1, 275deg) translate3d(0, 0, 80.6208890189vmin);
+}
+
+.star:nth-of-type(65) {
+  --size: 0.435821928vmin;
+  --background: #96f597;
+  --shadow: 0 0 0.468401592vmin 0.0249656019vmin #b2f7b3;
+  --transform: rotate3d(1, 0, 0, 152deg) rotate3d(0, 1, 0, 227deg) rotate3d(0, 0, 1, 79deg) translate3d(0, 0, 77.1249749052vmin);
+}
+
+.star:nth-of-type(66) {
+  --size: 0.4772019721vmin;
+  --background: #f79a60;
+  --shadow: 0 0 0.3841178942vmin 0.1531861374vmin #f9b890;
+  --transform: rotate3d(1, 0, 0, 18deg) rotate3d(0, 1, 0, 177deg) rotate3d(0, 0, 1, 235deg) translate3d(0, 0, 76.3255865521vmin);
+}
+
+.star:nth-of-type(67) {
+  --size: 0.5674481297vmin;
+  --background: #e4ebef;
+  --shadow: 0 0 0.6485218032vmin 0.0711831777vmin #f8f9fb;
+  --transform: rotate3d(1, 0, 0, 69deg) rotate3d(0, 1, 0, 258deg) rotate3d(0, 0, 1, 48deg) translate3d(0, 0, 72.9836878012vmin);
+}
+
+.star:nth-of-type(68) {
+  --size: 0.585418409vmin;
+  --background: #dd1486;
+  --shadow: 0 0 0.3032211738vmin 0.2523558281vmin #eb2495;
+  --transform: rotate3d(1, 0, 0, 337deg) rotate3d(0, 1, 0, 158deg) rotate3d(0, 0, 1, 289deg) translate3d(0, 0, 89.7667201697vmin);
+}
+
+.star:nth-of-type(69) {
+  --size: 0.3053087982vmin;
+  --background: #d31380;
+  --shadow: 0 0 0.2221057874vmin 0.0399455253vmin #ec2d99;
+  --transform: rotate3d(1, 0, 0, 205deg) rotate3d(0, 1, 0, 132deg) rotate3d(0, 0, 1, 135deg) translate3d(0, 0, 74.7457940313vmin);
+}
+
+.star:nth-of-type(70) {
+  --size: 0.6152716804vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.3651403257vmin 0.1986129325vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 235deg) rotate3d(0, 1, 0, 27deg) rotate3d(0, 0, 1, 155deg) translate3d(0, 0, 82.3198147262vmin);
+}
+
+.star:nth-of-type(71) {
+  --size: 0.5015899655vmin;
+  --background: #2cb4ee;
+  --shadow: 0 0 0.6017289468vmin 0.0338592473vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 273deg) rotate3d(0, 1, 0, 319deg) rotate3d(0, 0, 1, 121deg) translate3d(0, 0, 72.3247893456vmin);
+}
+
+.star:nth-of-type(72) {
+  --size: 0.4009822025vmin;
+  --background: #ff2f61;
+  --shadow: 0 0 0.2155965687vmin 0.0789391544vmin #ff4d79;
+  --transform: rotate3d(1, 0, 0, 200deg) rotate3d(0, 1, 0, 29deg) rotate3d(0, 0, 1, 84deg) translate3d(0, 0, 85.7204676868vmin);
+}
+
+.star:nth-of-type(73) {
+  --size: 0.5038002035vmin;
+  --background: #f3eea7;
+  --shadow: 0 0 0.7387975469vmin 0.1209493195vmin #f3eea7;
+  --transform: rotate3d(1, 0, 0, 160deg) rotate3d(0, 1, 0, 312deg) rotate3d(0, 0, 1, 39deg) translate3d(0, 0, 78.8984973433vmin);
+}
+
+.star:nth-of-type(74) {
+  --size: 0.322391987vmin;
+  --background: #e8edf1;
+  --shadow: 0 0 0.4598287061vmin 0.1241924899vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 66deg) rotate3d(0, 1, 0, 285deg) rotate3d(0, 0, 1, 250deg) translate3d(0, 0, 89.8868276497vmin);
+}
+
+.star:nth-of-type(75) {
+  --size: 0.2512510291vmin;
+  --background: #dee6ec;
+  --shadow: 0 0 0.3374825744vmin 0.0065538666vmin #fefefe;
+  --transform: rotate3d(1, 0, 0, 24deg) rotate3d(0, 1, 0, 346deg) rotate3d(0, 0, 1, 279deg) translate3d(0, 0, 79.2529969213vmin);
+}
+
+.star:nth-of-type(76) {
+  --size: 0.2538529777vmin;
+  --background: #5e246c;
+  --shadow: 0 0 0.2941019659vmin 0.0525700956vmin #642674;
+  --transform: rotate3d(1, 0, 0, 256deg) rotate3d(0, 1, 0, 80deg) rotate3d(0, 0, 1, 191deg) translate3d(0, 0, 82.0983557664vmin);
+}
+
+.star:nth-of-type(77) {
+  --size: 0.4401636887vmin;
+  --background: #572164;
+  --shadow: 0 0 0.6214934661vmin 0.2027200199vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 245deg) rotate3d(0, 1, 0, 311deg) rotate3d(0, 0, 1, 85deg) translate3d(0, 0, 76.2748953279vmin);
+}
+
+.star:nth-of-type(78) {
+  --size: 0.518904717vmin;
+  --background: #fff29e;
+  --shadow: 0 0 0.7635731955vmin 0.0958331743vmin #fff4a8;
+  --transform: rotate3d(1, 0, 0, 103deg) rotate3d(0, 1, 0, 171deg) rotate3d(0, 0, 1, 148deg) translate3d(0, 0, 68.4438322402vmin);
+}
+
+.star:nth-of-type(79) {
+  --size: 0.6571576132vmin;
+  --background: #642674;
+  --shadow: 0 0 0.7163674872vmin 0.2550026937vmin #642674;
+  --transform: rotate3d(1, 0, 0, 349deg) rotate3d(0, 1, 0, 13deg) rotate3d(0, 0, 1, 188deg) translate3d(0, 0, 80.7101695645vmin);
+}
+
+.star:nth-of-type(80) {
+  --size: 0.527861166vmin;
+  --background: #f57474;
+  --shadow: 0 0 0.4641840544vmin 0.0019271159vmin #f79a9a;
+  --transform: rotate3d(1, 0, 0, 81deg) rotate3d(0, 1, 0, 347deg) rotate3d(0, 0, 1, 125deg) translate3d(0, 0, 69.9854691664vmin);
+}
+
+.star:nth-of-type(81) {
+  --size: 0.7173110142vmin;
+  --background: #27b2ee;
+  --shadow: 0 0 0.4299060309vmin 0.2651480234vmin #27b2ee;
+  --transform: rotate3d(1, 0, 0, 297deg) rotate3d(0, 1, 0, 287deg) rotate3d(0, 0, 1, 27deg) translate3d(0, 0, 69.2479403783vmin);
+}
+
+.star:nth-of-type(82) {
+  --size: 0.729641019vmin;
+  --background: #ff76ad;
+  --shadow: 0 0 0.7755311561vmin 0.3102907183vmin #ff80b3;
+  --transform: rotate3d(1, 0, 0, 66deg) rotate3d(0, 1, 0, 32deg) rotate3d(0, 0, 1, 309deg) translate3d(0, 0, 74.4171467908vmin);
+}
+
+.star:nth-of-type(83) {
+  --size: 0.6525212588vmin;
+  --background: #f9af82;
+  --shadow: 0 0 0.5857216508vmin 0.0064787689vmin #f9af82;
+  --transform: rotate3d(1, 0, 0, 35deg) rotate3d(0, 1, 0, 322deg) rotate3d(0, 0, 1, 164deg) translate3d(0, 0, 67.132298363vmin);
+}
+
+.star:nth-of-type(84) {
+  --size: 0.3155100426vmin;
+  --background: #f57979;
+  --shadow: 0 0 0.3391797496vmin 0.0729239021vmin #f79595;
+  --transform: rotate3d(1, 0, 0, 192deg) rotate3d(0, 1, 0, 33deg) rotate3d(0, 0, 1, 226deg) translate3d(0, 0, 81.3797678575vmin);
+}
+
+.star:nth-of-type(85) {
+  --size: 0.337645331vmin;
+  --background: #12a5e4;
+  --shadow: 0 0 0.481304554vmin 0.0687161072vmin #31b6ef;
+  --transform: rotate3d(1, 0, 0, 14deg) rotate3d(0, 1, 0, 48deg) rotate3d(0, 0, 1, 41deg) translate3d(0, 0, 77.156485312vmin);
+}
+
+.star:nth-of-type(86) {
+  --size: 0.6591728104vmin;
+  --background: #f79a60;
+  --shadow: 0 0 0.944985924vmin 0.3027452093vmin #f9b890;
+  --transform: rotate3d(1, 0, 0, 78deg) rotate3d(0, 1, 0, 59deg) rotate3d(0, 0, 1, 254deg) translate3d(0, 0, 84.0423938812vmin);
+}
+
+.star:nth-of-type(87) {
+  --size: 0.2838914956vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.2032195853vmin 0.0068446371vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 138deg) rotate3d(0, 1, 0, 180deg) rotate3d(0, 0, 1, 7deg) translate3d(0, 0, 68.7697028525vmin);
+}
+
+.star:nth-of-type(88) {
+  --size: 0.5331993832vmin;
+  --background: #ebf0f3;
+  --shadow: 0 0 0.7035757107vmin 0.1601349632vmin #f1f4f7;
+  --transform: rotate3d(1, 0, 0, 356deg) rotate3d(0, 1, 0, 253deg) rotate3d(0, 0, 1, 315deg) translate3d(0, 0, 67.7761955vmin);
+}
+
+.star:nth-of-type(89) {
+  --size: 0.5435894432vmin;
+  --background: #fff6bd;
+  --shadow: 0 0 0.797721057vmin 0.213365253vmin #fff6bd;
+  --transform: rotate3d(1, 0, 0, 159deg) rotate3d(0, 1, 0, 48deg) rotate3d(0, 0, 1, 107deg) translate3d(0, 0, 71.8611434079vmin);
+}
+
+.star:nth-of-type(90) {
+  --size: 0.2789100344vmin;
+  --background: #f46f6f;
+  --shadow: 0 0 0.3196135292vmin 0.0629046625vmin #f89f9f;
+  --transform: rotate3d(1, 0, 0, 149deg) rotate3d(0, 1, 0, 215deg) rotate3d(0, 0, 1, 234deg) translate3d(0, 0, 85.0801536462vmin);
+}
+
+.star:nth-of-type(91) {
+  --size: 0.3208128218vmin;
+  --background: #5e5af2;
+  --shadow: 0 0 0.444897282vmin 0.0958317592vmin #8c8af6;
+  --transform: rotate3d(1, 0, 0, 306deg) rotate3d(0, 1, 0, 87deg) rotate3d(0, 0, 1, 346deg) translate3d(0, 0, 76.6158065208vmin);
+}
+
+.star:nth-of-type(92) {
+  --size: 0.5287948322vmin;
+  --background: #13a9e9;
+  --shadow: 0 0 0.6200606463vmin 0.1107448479vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 4deg) rotate3d(0, 1, 0, 226deg) rotate3d(0, 0, 1, 6deg) translate3d(0, 0, 85.7103105316vmin);
+}
+
+.star:nth-of-type(93) {
+  --size: 0.6240498363vmin;
+  --background: #ff62a1;
+  --shadow: 0 0 0.877182383vmin 0.1847424951vmin #ff95bf;
+  --transform: rotate3d(1, 0, 0, 85deg) rotate3d(0, 1, 0, 309deg) rotate3d(0, 0, 1, 302deg) translate3d(0, 0, 78.9467807389vmin);
+}
+
+.star:nth-of-type(94) {
+  --size: 0.3449673134vmin;
+  --background: #12a2e0;
+  --shadow: 0 0 0.4181607496vmin 0.0780889337vmin #36b7ef;
+  --transform: rotate3d(1, 0, 0, 37deg) rotate3d(0, 1, 0, 301deg) rotate3d(0, 0, 1, 210deg) translate3d(0, 0, 70.8693232848vmin);
+}
+
+.star:nth-of-type(95) {
+  --size: 0.5863003882vmin;
+  --background: #f8a673;
+  --shadow: 0 0 0.3869423657vmin 0.1025911294vmin #f8ac7d;
+  --transform: rotate3d(1, 0, 0, 132deg) rotate3d(0, 1, 0, 286deg) rotate3d(0, 0, 1, 209deg) translate3d(0, 0, 72.353871498vmin);
+}
+
+.star:nth-of-type(96) {
+  --size: 0.6403999408vmin;
+  --background: #ff4371;
+  --shadow: 0 0 0.6877842584vmin 0.0173299144vmin #ff4371;
+  --transform: rotate3d(1, 0, 0, 242deg) rotate3d(0, 1, 0, 225deg) rotate3d(0, 0, 1, 227deg) translate3d(0, 0, 73.515910063vmin);
+}
+
+.star:nth-of-type(97) {
+  --size: 0.5883792388vmin;
+  --background: #f57474;
+  --shadow: 0 0 0.6251725549vmin 0.1251215149vmin #f79a9a;
+  --transform: rotate3d(1, 0, 0, 274deg) rotate3d(0, 1, 0, 271deg) rotate3d(0, 0, 1, 319deg) translate3d(0, 0, 65.4953932949vmin);
+}
+
+.star:nth-of-type(98) {
+  --size: 0.527169823vmin;
+  --background: #f68c8c;
+  --shadow: 0 0 0.5463073281vmin 0.2013524859vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 54deg) rotate3d(0, 1, 0, 62deg) rotate3d(0, 0, 1, 152deg) translate3d(0, 0, 76.4204388415vmin);
+}
+
+.star:nth-of-type(99) {
+  --size: 0.6709008508vmin;
+  --background: #15acec;
+  --shadow: 0 0 0.8218730194vmin 0.3257682601vmin #27b2ee;
+  --transform: rotate3d(1, 0, 0, 231deg) rotate3d(0, 1, 0, 128deg) rotate3d(0, 0, 1, 25deg) translate3d(0, 0, 71.6958122785vmin);
+}
+
+.star:nth-of-type(100) {
+  --size: 0.4355329406vmin;
+  --background: #fff4ad;
+  --shadow: 0 0 0.4270818287vmin 0.0163815659vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 129deg) rotate3d(0, 1, 0, 273deg) rotate3d(0, 0, 1, 151deg) translate3d(0, 0, 66.1473023161vmin);
+}
+
+.star:nth-of-type(101) {
+  --size: 0.2940582937vmin;
+  --background: #adf7ae;
+  --shadow: 0 0 0.2260812858vmin 0.0243094359vmin #adf7ae;
+  --transform: rotate3d(1, 0, 0, 313deg) rotate3d(0, 1, 0, 337deg) rotate3d(0, 0, 1, 161deg) translate3d(0, 0, 70.8306546106vmin);
+}
+
+.star:nth-of-type(102) {
+  --size: 0.4953900379vmin;
+  --background: #eee784;
+  --shadow: 0 0 0.5806451874vmin 0.0280731498vmin #f4efb0;
+  --transform: rotate3d(1, 0, 0, 276deg) rotate3d(0, 1, 0, 109deg) rotate3d(0, 0, 1, 251deg) translate3d(0, 0, 73.9826890658vmin);
+}
+
+.star:nth-of-type(103) {
+  --size: 0.4308572682vmin;
+  --background: #f4f7f9;
+  --shadow: 0 0 0.353513609vmin 0.1499099892vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 53deg) rotate3d(0, 1, 0, 28deg) rotate3d(0, 0, 1, 76deg) translate3d(0, 0, 89.9276409805vmin);
+}
+
+.star:nth-of-type(104) {
+  --size: 0.6597958518vmin;
+  --background: #8885f5;
+  --shadow: 0 0 0.3697899365vmin 0.1384415528vmin #8885f5;
+  --transform: rotate3d(1, 0, 0, 68deg) rotate3d(0, 1, 0, 344deg) rotate3d(0, 0, 1, 8deg) translate3d(0, 0, 74.0653185255vmin);
+}
+
+.star:nth-of-type(105) {
+  --size: 0.254098056vmin;
+  --background: #ff527c;
+  --shadow: 0 0 0.2519240355vmin 0.0289149294vmin #ff527c;
+  --transform: rotate3d(1, 0, 0, 41deg) rotate3d(0, 1, 0, 212deg) rotate3d(0, 0, 1, 209deg) translate3d(0, 0, 66.6094367403vmin);
+}
+
+.star:nth-of-type(106) {
+  --size: 0.3669637825vmin;
+  --background: #f9b287;
+  --shadow: 0 0 0.2020342216vmin 0.1779763842vmin #f9b287;
+  --transform: rotate3d(1, 0, 0, 317deg) rotate3d(0, 1, 0, 15deg) rotate3d(0, 0, 1, 267deg) translate3d(0, 0, 80.2599507986vmin);
+}
+
+.star:nth-of-type(107) {
+  --size: 0.5898631722vmin;
+  --background: #fefefe;
+  --shadow: 0 0 0.4955423649vmin 0.0223589171vmin #fefefe;
+  --transform: rotate3d(1, 0, 0, 145deg) rotate3d(0, 1, 0, 57deg) rotate3d(0, 0, 1, 12deg) translate3d(0, 0, 77.1965130529vmin);
+}
+
+.star:nth-of-type(108) {
+  --size: 0.7025897231vmin;
+  --background: #13a9e9;
+  --shadow: 0 0 0.4337269959vmin 0.0472701756vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 76deg) rotate3d(0, 1, 0, 249deg) rotate3d(0, 0, 1, 334deg) translate3d(0, 0, 80.4569507699vmin);
+}
+
+.star:nth-of-type(109) {
+  --size: 0.260756449vmin;
+  --background: #f3eea7;
+  --shadow: 0 0 0.3223361721vmin 0.0151438967vmin #f3eea7;
+  --transform: rotate3d(1, 0, 0, 54deg) rotate3d(0, 1, 0, 352deg) rotate3d(0, 0, 1, 113deg) translate3d(0, 0, 87.2873788712vmin);
+}
+
+.star:nth-of-type(110) {
+  --size: 0.7179712623vmin;
+  --background: #fff4ad;
+  --shadow: 0 0 0.455730349vmin 0.0963612853vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 74deg) rotate3d(0, 1, 0, 31deg) rotate3d(0, 0, 1, 123deg) translate3d(0, 0, 83.9342739536vmin);
+}
+
+.star:nth-of-type(111) {
+  --size: 0.3115510805vmin;
+  --background: #f46f6f;
+  --shadow: 0 0 0.3454354873vmin 0.0793295504vmin #f89f9f;
+  --transform: rotate3d(1, 0, 0, 304deg) rotate3d(0, 1, 0, 260deg) rotate3d(0, 0, 1, 103deg) translate3d(0, 0, 83.2970364208vmin);
+}
+
+.star:nth-of-type(112) {
+  --size: 0.7473909203vmin;
+  --background: #ff527c;
+  --shadow: 0 0 0.5700500951vmin 0.116077314vmin #ff527c;
+  --transform: rotate3d(1, 0, 0, 5deg) rotate3d(0, 1, 0, 284deg) rotate3d(0, 0, 1, 139deg) translate3d(0, 0, 73.3505393163vmin);
+}
+
+.star:nth-of-type(113) {
+  --size: 0.3705991177vmin;
+  --background: #f57e7e;
+  --shadow: 0 0 0.4839364426vmin 0.1767047991vmin #f79090;
+  --transform: rotate3d(1, 0, 0, 277deg) rotate3d(0, 1, 0, 116deg) rotate3d(0, 0, 1, 118deg) translate3d(0, 0, 75.4818095549vmin);
+}
+
+.star:nth-of-type(114) {
+  --size: 0.7131004635vmin;
+  --background: #ff95bf;
+  --shadow: 0 0 0.9510799354vmin 0.2683257357vmin #ff95bf;
+  --transform: rotate3d(1, 0, 0, 16deg) rotate3d(0, 1, 0, 97deg) rotate3d(0, 0, 1, 36deg) translate3d(0, 0, 79.2575289586vmin);
+}
+
+.star:nth-of-type(115) {
+  --size: 0.5295627565vmin;
+  --background: #f79a9a;
+  --shadow: 0 0 0.5396122146vmin 0.2088795218vmin #f79a9a;
+  --transform: rotate3d(1, 0, 0, 175deg) rotate3d(0, 1, 0, 238deg) rotate3d(0, 0, 1, 288deg) translate3d(0, 0, 70.3148778459vmin);
+}
+
+.star:nth-of-type(116) {
+  --size: 0.4153815638vmin;
+  --background: #91f493;
+  --shadow: 0 0 0.2560773567vmin 0.1965614034vmin #b7f8b7;
+  --transform: rotate3d(1, 0, 0, 232deg) rotate3d(0, 1, 0, 206deg) rotate3d(0, 0, 1, 235deg) translate3d(0, 0, 74.7422074615vmin);
+}
+
+.star:nth-of-type(117) {
+  --size: 0.4791157284vmin;
+  --background: #91f493;
+  --shadow: 0 0 0.3852375713vmin 0.1176745846vmin #b7f8b7;
+  --transform: rotate3d(1, 0, 0, 164deg) rotate3d(0, 1, 0, 336deg) rotate3d(0, 0, 1, 102deg) translate3d(0, 0, 67.9896207696vmin);
+}
+
+.star:nth-of-type(118) {
+  --size: 0.7119006784vmin;
+  --background: #8885f5;
+  --shadow: 0 0 0.3706367049vmin 0.098332394vmin #8885f5;
+  --transform: rotate3d(1, 0, 0, 273deg) rotate3d(0, 1, 0, 252deg) rotate3d(0, 0, 1, 341deg) translate3d(0, 0, 85.102128726vmin);
+}
+
+.star:nth-of-type(119) {
+  --size: 0.5845456519vmin;
+  --background: #6c69f3;
+  --shadow: 0 0 0.6961585165vmin 0.149800332vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 30deg) rotate3d(0, 1, 0, 196deg) rotate3d(0, 0, 1, 281deg) translate3d(0, 0, 78.35818313vmin);
+}
+
+.star:nth-of-type(120) {
+  --size: 0.2688657636vmin;
+  --background: #ec2d99;
+  --shadow: 0 0 0.2055246649vmin 0.105154111vmin #ec2d99;
+  --transform: rotate3d(1, 0, 0, 359deg) rotate3d(0, 1, 0, 10deg) rotate3d(0, 0, 1, 29deg) translate3d(0, 0, 89.8185433622vmin);
+}
+
+.star:nth-of-type(121) {
+  --size: 0.565860969vmin;
+  --background: #fff194;
+  --shadow: 0 0 0.4436652178vmin 0.0831826793vmin #fff5b2;
+  --transform: rotate3d(1, 0, 0, 233deg) rotate3d(0, 1, 0, 113deg) rotate3d(0, 0, 1, 195deg) translate3d(0, 0, 70.5762534108vmin);
+}
+
+.star:nth-of-type(122) {
+  --size: 0.5673606571vmin;
+  --background: #ff76ad;
+  --shadow: 0 0 0.4956630698vmin 0.0265084444vmin #ff80b3;
+  --transform: rotate3d(1, 0, 0, 171deg) rotate3d(0, 1, 0, 187deg) rotate3d(0, 0, 1, 78deg) translate3d(0, 0, 67.783783694vmin);
+}
+
+.star:nth-of-type(123) {
+  --size: 0.7398141211vmin;
+  --background: #f79090;
+  --shadow: 0 0 0.9168583733vmin 0.0747021462vmin #f79090;
+  --transform: rotate3d(1, 0, 0, 288deg) rotate3d(0, 1, 0, 149deg) rotate3d(0, 0, 1, 39deg) translate3d(0, 0, 71.5470741354vmin);
+}
+
+.star:nth-of-type(124) {
+  --size: 0.3774916559vmin;
+  --background: #7e7bf5;
+  --shadow: 0 0 0.4400679479vmin 0.0378531291vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 134deg) rotate3d(0, 1, 0, 268deg) rotate3d(0, 0, 1, 139deg) translate3d(0, 0, 65.1021286579vmin);
+}
+
+.star:nth-of-type(125) {
+  --size: 0.5468544464vmin;
+  --background: #501f5d;
+  --shadow: 0 0 0.7658094809vmin 0.1216904121vmin #722b83;
+  --transform: rotate3d(1, 0, 0, 3deg) rotate3d(0, 1, 0, 199deg) rotate3d(0, 0, 1, 273deg) translate3d(0, 0, 87.9945196094vmin);
+}
+
+.star:nth-of-type(126) {
+  --size: 0.5021421204vmin;
+  --background: #ff5880;
+  --shadow: 0 0 0.6534292444vmin 0.0336267882vmin #ff5880;
+  --transform: rotate3d(1, 0, 0, 89deg) rotate3d(0, 1, 0, 195deg) rotate3d(0, 0, 1, 64deg) translate3d(0, 0, 82.4534850577vmin);
+}
+
+.star:nth-of-type(127) {
+  --size: 0.3719012552vmin;
+  --background: #f8a673;
+  --shadow: 0 0 0.2432399339vmin 0.068105469vmin #f8ac7d;
+  --transform: rotate3d(1, 0, 0, 247deg) rotate3d(0, 1, 0, 76deg) rotate3d(0, 0, 1, 1deg) translate3d(0, 0, 79.4403734538vmin);
+}
+
+.star:nth-of-type(128) {
+  --size: 0.5475683773vmin;
+  --background: #f79a60;
+  --shadow: 0 0 0.6487286718vmin 0.0225486439vmin #f9b890;
+  --transform: rotate3d(1, 0, 0, 258deg) rotate3d(0, 1, 0, 92deg) rotate3d(0, 0, 1, 265deg) translate3d(0, 0, 66.3305514768vmin);
+}
+
+.star:nth-of-type(129) {
+  --size: 0.3951916921vmin;
+  --background: #23b1ed;
+  --shadow: 0 0 0.4443155453vmin 0.0512405247vmin #23b1ed;
+  --transform: rotate3d(1, 0, 0, 290deg) rotate3d(0, 1, 0, 109deg) rotate3d(0, 0, 1, 2deg) translate3d(0, 0, 84.8567570636vmin);
+}
+
+.star:nth-of-type(130) {
+  --size: 0.48237135vmin;
+  --background: #fff299;
+  --shadow: 0 0 0.5412749126vmin 0.1311959008vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 276deg) rotate3d(0, 1, 0, 38deg) rotate3d(0, 0, 1, 16deg) translate3d(0, 0, 66.9595625075vmin);
+}
+
+.star:nth-of-type(131) {
+  --size: 0.7119473959vmin;
+  --background: #bbf8bc;
+  --shadow: 0 0 0.8920436985vmin 0.0030703935vmin #bbf8bc;
+  --transform: rotate3d(1, 0, 0, 211deg) rotate3d(0, 1, 0, 218deg) rotate3d(0, 0, 1, 193deg) translate3d(0, 0, 65.5385478374vmin);
+}
+
+.star:nth-of-type(132) {
+  --size: 0.3202633873vmin;
+  --background: #f57474;
+  --shadow: 0 0 0.2694503853vmin 0.0487318274vmin #f79a9a;
+  --transform: rotate3d(1, 0, 0, 254deg) rotate3d(0, 1, 0, 100deg) rotate3d(0, 0, 1, 185deg) translate3d(0, 0, 83.0729836386vmin);
+}
+
+.star:nth-of-type(133) {
+  --size: 0.3693512308vmin;
+  --background: #ff8fbc;
+  --shadow: 0 0 0.3424377512vmin 0.1367813444vmin #ff8fbc;
+  --transform: rotate3d(1, 0, 0, 307deg) rotate3d(0, 1, 0, 81deg) rotate3d(0, 0, 1, 140deg) translate3d(0, 0, 65.3529131171vmin);
+}
+
+.star:nth-of-type(134) {
+  --size: 0.5674485667vmin;
+  --background: #6b297c;
+  --shadow: 0 0 0.5944878812vmin 0.1474451957vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 156deg) rotate3d(0, 1, 0, 353deg) rotate3d(0, 0, 1, 192deg) translate3d(0, 0, 77.1282702157vmin);
+}
+
+.star:nth-of-type(135) {
+  --size: 0.4252676639vmin;
+  --background: #fefefe;
+  --shadow: 0 0 0.6265593126vmin 0.0892728194vmin #fefefe;
+  --transform: rotate3d(1, 0, 0, 181deg) rotate3d(0, 1, 0, 14deg) rotate3d(0, 0, 1, 154deg) translate3d(0, 0, 68.6388693294vmin);
+}
+
+.star:nth-of-type(136) {
+  --size: 0.3937178438vmin;
+  --background: #9bf59c;
+  --shadow: 0 0 0.2135286606vmin 0.1912116271vmin #adf7ae;
+  --transform: rotate3d(1, 0, 0, 186deg) rotate3d(0, 1, 0, 13deg) rotate3d(0, 0, 1, 217deg) translate3d(0, 0, 68.0044759771vmin);
+}
+
+.star:nth-of-type(137) {
+  --size: 0.5393671691vmin;
+  --background: #f7a36e;
+  --shadow: 0 0 0.6261441979vmin 0.1069635426vmin #f9af82;
+  --transform: rotate3d(1, 0, 0, 8deg) rotate3d(0, 1, 0, 36deg) rotate3d(0, 0, 1, 105deg) translate3d(0, 0, 74.0180205218vmin);
+}
+
+.star:nth-of-type(138) {
+  --size: 0.7013405457vmin;
+  --background: #f8a673;
+  --shadow: 0 0 0.8007306891vmin 0.0216215527vmin #f8ac7d;
+  --transform: rotate3d(1, 0, 0, 62deg) rotate3d(0, 1, 0, 307deg) rotate3d(0, 0, 1, 86deg) translate3d(0, 0, 87.5142917006vmin);
+}
+
+.star:nth-of-type(139) {
+  --size: 0.440666097vmin;
+  --background: #572164;
+  --shadow: 0 0 0.2429337798vmin 0.0755378402vmin #6b297c;
+  --transform: rotate3d(1, 0, 0, 244deg) rotate3d(0, 1, 0, 111deg) rotate3d(0, 0, 1, 54deg) translate3d(0, 0, 76.5048763626vmin);
+}
+
+.star:nth-of-type(140) {
+  --size: 0.5083180472vmin;
+  --background: #f9b287;
+  --shadow: 0 0 0.6392046079vmin 0.2261197001vmin #f9b287;
+  --transform: rotate3d(1, 0, 0, 95deg) rotate3d(0, 1, 0, 207deg) rotate3d(0, 0, 1, 223deg) translate3d(0, 0, 78.4308620961vmin);
+}
+
+.star:nth-of-type(141) {
+  --size: 0.5745439119vmin;
+  --background: #f8ac7d;
+  --shadow: 0 0 0.5477029053vmin 0.0824357941vmin #f8ac7d;
+  --transform: rotate3d(1, 0, 0, 357deg) rotate3d(0, 1, 0, 65deg) rotate3d(0, 0, 1, 335deg) translate3d(0, 0, 71.5790550648vmin);
+}
+
+.star:nth-of-type(142) {
+  --size: 0.5819131075vmin;
+  --background: #6c69f3;
+  --shadow: 0 0 0.5865833062vmin 0.1163282549vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 282deg) rotate3d(0, 1, 0, 7deg) rotate3d(0, 0, 1, 213deg) translate3d(0, 0, 69.9660126623vmin);
+}
+
+.star:nth-of-type(143) {
+  --size: 0.4493367881vmin;
+  --background: #f8ac7d;
+  --shadow: 0 0 0.5997309208vmin 0.0153997267vmin #f8ac7d;
+  --transform: rotate3d(1, 0, 0, 113deg) rotate3d(0, 1, 0, 129deg) rotate3d(0, 0, 1, 280deg) translate3d(0, 0, 84.900686543vmin);
+}
+
+.star:nth-of-type(144) {
+  --size: 0.5186654989vmin;
+  --background: #eb2495;
+  --shadow: 0 0 0.7117792794vmin 0.0910421857vmin #eb2495;
+  --transform: rotate3d(1, 0, 0, 118deg) rotate3d(0, 1, 0, 72deg) rotate3d(0, 0, 1, 238deg) translate3d(0, 0, 69.3100938892vmin);
+}
+
+.star:nth-of-type(145) {
+  --size: 0.2846511632vmin;
+  --background: #ea1b90;
+  --shadow: 0 0 0.3078698597vmin 0.0690684863vmin #ea1b90;
+  --transform: rotate3d(1, 0, 0, 97deg) rotate3d(0, 1, 0, 105deg) rotate3d(0, 0, 1, 246deg) translate3d(0, 0, 67.113061351vmin);
+}
+
+.star:nth-of-type(146) {
+  --size: 0.745448097vmin;
+  --background: #ff2a5e;
+  --shadow: 0 0 0.6753031105vmin 0.0574525588vmin #ff527c;
+  --transform: rotate3d(1, 0, 0, 104deg) rotate3d(0, 1, 0, 88deg) rotate3d(0, 0, 1, 88deg) translate3d(0, 0, 83.9759630931vmin);
+}
+
+.star:nth-of-type(147) {
+  --size: 0.2748496321vmin;
+  --background: #ff4371;
+  --shadow: 0 0 0.3982082352vmin 0.0248214332vmin #ff4371;
+  --transform: rotate3d(1, 0, 0, 174deg) rotate3d(0, 1, 0, 99deg) rotate3d(0, 0, 1, 65deg) translate3d(0, 0, 81.8907295916vmin);
+}
+
+.star:nth-of-type(148) {
+  --size: 0.6064014241vmin;
+  --background: #13a9e9;
+  --shadow: 0 0 0.3707498195vmin 0.2839859823vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 79deg) rotate3d(0, 1, 0, 43deg) rotate3d(0, 0, 1, 115deg) translate3d(0, 0, 65.6962808765vmin);
+}
+
+.star:nth-of-type(149) {
+  --size: 0.628392344vmin;
+  --background: #9ff6a0;
+  --shadow: 0 0 0.7702688646vmin 0.1630364376vmin #a9f6aa;
+  --transform: rotate3d(1, 0, 0, 191deg) rotate3d(0, 1, 0, 181deg) rotate3d(0, 0, 1, 152deg) translate3d(0, 0, 83.247296726vmin);
+}
+
+.star:nth-of-type(150) {
+  --size: 0.2766899835vmin;
+  --background: #8df48e;
+  --shadow: 0 0 0.1796252066vmin 0.0938496762vmin #bbf8bc;
+  --transform: rotate3d(1, 0, 0, 257deg) rotate3d(0, 1, 0, 88deg) rotate3d(0, 0, 1, 11deg) translate3d(0, 0, 84.1609551058vmin);
+}
+
+.star:nth-of-type(151) {
+  --size: 0.5985997356vmin;
+  --background: #efe788;
+  --shadow: 0 0 0.7412898525vmin 0.2372142826vmin #f3efac;
+  --transform: rotate3d(1, 0, 0, 100deg) rotate3d(0, 1, 0, 72deg) rotate3d(0, 0, 1, 3deg) translate3d(0, 0, 77.3391130618vmin);
+}
+
+.star:nth-of-type(152) {
+  --size: 0.6833124672vmin;
+  --background: #5e5af2;
+  --shadow: 0 0 0.6748761952vmin 0.2815791292vmin #8c8af6;
+  --transform: rotate3d(1, 0, 0, 158deg) rotate3d(0, 1, 0, 266deg) rotate3d(0, 0, 1, 125deg) translate3d(0, 0, 69.8099636989vmin);
+}
+
+.star:nth-of-type(153) {
+  --size: 0.3244482772vmin;
+  --background: #8df48e;
+  --shadow: 0 0 0.4776511777vmin 0.0506765488vmin #bbf8bc;
+  --transform: rotate3d(1, 0, 0, 334deg) rotate3d(0, 1, 0, 183deg) rotate3d(0, 0, 1, 38deg) translate3d(0, 0, 65.1480188818vmin);
+}
+
+.star:nth-of-type(154) {
+  --size: 0.5865015391vmin;
+  --background: #31b6ef;
+  --shadow: 0 0 0.4587519476vmin 0.2907358496vmin #31b6ef;
+  --transform: rotate3d(1, 0, 0, 245deg) rotate3d(0, 1, 0, 83deg) rotate3d(0, 0, 1, 224deg) translate3d(0, 0, 79.2115754713vmin);
+}
+
+.star:nth-of-type(155) {
+  --size: 0.6418164986vmin;
+  --background: #fff4ad;
+  --shadow: 0 0 0.8742652656vmin 0.3044098021vmin #fff4ad;
+  --transform: rotate3d(1, 0, 0, 220deg) rotate3d(0, 1, 0, 158deg) rotate3d(0, 0, 1, 183deg) translate3d(0, 0, 82.3471701327vmin);
+}
+
+.star:nth-of-type(156) {
+  --size: 0.3924210031vmin;
+  --background: #f79090;
+  --shadow: 0 0 0.2401290961vmin 0.1526627088vmin #f79090;
+  --transform: rotate3d(1, 0, 0, 26deg) rotate3d(0, 1, 0, 91deg) rotate3d(0, 0, 1, 135deg) translate3d(0, 0, 72.35430446vmin);
+}
+
+.star:nth-of-type(157) {
+  --size: 0.6468524174vmin;
+  --background: #9bf59c;
+  --shadow: 0 0 0.6649009017vmin 0.0525220307vmin #adf7ae;
+  --transform: rotate3d(1, 0, 0, 1deg) rotate3d(0, 1, 0, 159deg) rotate3d(0, 0, 1, 125deg) translate3d(0, 0, 80.5067111782vmin);
+}
+
+.star:nth-of-type(158) {
+  --size: 0.3323539122vmin;
+  --background: #fff194;
+  --shadow: 0 0 0.3566276937vmin 0.1530056284vmin #fff5b2;
+  --transform: rotate3d(1, 0, 0, 353deg) rotate3d(0, 1, 0, 13deg) rotate3d(0, 0, 1, 126deg) translate3d(0, 0, 72.1166511483vmin);
+}
+
+.star:nth-of-type(159) {
+  --size: 0.31646009vmin;
+  --background: #f4f7f9;
+  --shadow: 0 0 0.1981216305vmin 0.0926125405vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 86deg) rotate3d(0, 1, 0, 178deg) rotate3d(0, 0, 1, 230deg) translate3d(0, 0, 78.1899931809vmin);
+}
+
+.star:nth-of-type(160) {
+  --size: 0.3373672261vmin;
+  --background: #f0e991;
+  --shadow: 0 0 0.3284723873vmin 0.11252101vmin #f2eda3;
+  --transform: rotate3d(1, 0, 0, 23deg) rotate3d(0, 1, 0, 272deg) rotate3d(0, 0, 1, 145deg) translate3d(0, 0, 76.3833848917vmin);
+}
+
+.star:nth-of-type(161) {
+  --size: 0.6597139671vmin;
+  --background: #fff194;
+  --shadow: 0 0 0.348364956vmin 0.175144739vmin #fff5b2;
+  --transform: rotate3d(1, 0, 0, 179deg) rotate3d(0, 1, 0, 202deg) rotate3d(0, 0, 1, 76deg) translate3d(0, 0, 85.609557274vmin);
+}
+
+.star:nth-of-type(162) {
+  --size: 0.4720650544vmin;
+  --background: #ff95bf;
+  --shadow: 0 0 0.6544027222vmin 0.0199667713vmin #ff95bf;
+  --transform: rotate3d(1, 0, 0, 160deg) rotate3d(0, 1, 0, 285deg) rotate3d(0, 0, 1, 265deg) translate3d(0, 0, 77.8912766018vmin);
+}
+
+.star:nth-of-type(163) {
+  --size: 0.6504635179vmin;
+  --background: #f9b58b;
+  --shadow: 0 0 0.3600429363vmin 0.2166635323vmin #f9b58b;
+  --transform: rotate3d(1, 0, 0, 118deg) rotate3d(0, 1, 0, 225deg) rotate3d(0, 0, 1, 40deg) translate3d(0, 0, 71.8222777094vmin);
+}
+
+.star:nth-of-type(164) {
+  --size: 0.5325199865vmin;
+  --background: #12a2e0;
+  --shadow: 0 0 0.4454094924vmin 0.0852077867vmin #36b7ef;
+  --transform: rotate3d(1, 0, 0, 217deg) rotate3d(0, 1, 0, 192deg) rotate3d(0, 0, 1, 353deg) translate3d(0, 0, 86.4416174817vmin);
+}
+
+.star:nth-of-type(165) {
+  --size: 0.4968343895vmin;
+  --background: #722b83;
+  --shadow: 0 0 0.5027812162vmin 0.0309032529vmin #722b83;
+  --transform: rotate3d(1, 0, 0, 310deg) rotate3d(0, 1, 0, 214deg) rotate3d(0, 0, 1, 104deg) translate3d(0, 0, 74.250386032vmin);
+}
+
+.star:nth-of-type(166) {
+  --size: 0.4070272702vmin;
+  --background: #8c8af6;
+  --shadow: 0 0 0.3348557376vmin 0.0470772996vmin #8c8af6;
+  --transform: rotate3d(1, 0, 0, 74deg) rotate3d(0, 1, 0, 208deg) rotate3d(0, 0, 1, 28deg) translate3d(0, 0, 79.2312556205vmin);
+}
+
+.star:nth-of-type(167) {
+  --size: 0.5998247757vmin;
+  --background: #23b1ed;
+  --shadow: 0 0 0.8733473762vmin 0.0167294498vmin #23b1ed;
+  --transform: rotate3d(1, 0, 0, 201deg) rotate3d(0, 1, 0, 180deg) rotate3d(0, 0, 1, 185deg) translate3d(0, 0, 66.1833883329vmin);
+}
+
+.star:nth-of-type(168) {
+  --size: 0.3205347313vmin;
+  --background: #2cb4ee;
+  --shadow: 0 0 0.4741132217vmin 0.0190354755vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 65deg) rotate3d(0, 1, 0, 217deg) rotate3d(0, 0, 1, 56deg) translate3d(0, 0, 80.3969031422vmin);
+}
+
+.star:nth-of-type(169) {
+  --size: 0.7090341137vmin;
+  --background: #91f493;
+  --shadow: 0 0 0.4300248122vmin 0.108613794vmin #b7f8b7;
+  --transform: rotate3d(1, 0, 0, 7deg) rotate3d(0, 1, 0, 55deg) rotate3d(0, 0, 1, 105deg) translate3d(0, 0, 76.736415884vmin);
+}
+
+.star:nth-of-type(170) {
+  --size: 0.7391062072vmin;
+  --background: #6c69f3;
+  --shadow: 0 0 0.898611915vmin 0.1256507575vmin #7e7bf5;
+  --transform: rotate3d(1, 0, 0, 247deg) rotate3d(0, 1, 0, 264deg) rotate3d(0, 0, 1, 77deg) translate3d(0, 0, 66.7895773037vmin);
+}
+
+.star:nth-of-type(171) {
+  --size: 0.3733028621vmin;
+  --background: #ff95bf;
+  --shadow: 0 0 0.2911786461vmin 0.0309409998vmin #ff95bf;
+  --transform: rotate3d(1, 0, 0, 289deg) rotate3d(0, 1, 0, 334deg) rotate3d(0, 0, 1, 305deg) translate3d(0, 0, 66.4539259776vmin);
+}
+
+.star:nth-of-type(172) {
+  --size: 0.4891868121vmin;
+  --background: #ff2a5e;
+  --shadow: 0 0 0.2594703003vmin 0.2227761378vmin #ff527c;
+  --transform: rotate3d(1, 0, 0, 195deg) rotate3d(0, 1, 0, 143deg) rotate3d(0, 0, 1, 317deg) translate3d(0, 0, 87.9635708843vmin);
+}
+
+.star:nth-of-type(173) {
+  --size: 0.4119280924vmin;
+  --background: #6e2a7f;
+  --shadow: 0 0 0.4685372869vmin 0.0938892954vmin #6e2a7f;
+  --transform: rotate3d(1, 0, 0, 323deg) rotate3d(0, 1, 0, 234deg) rotate3d(0, 0, 1, 278deg) translate3d(0, 0, 80.6341952765vmin);
+}
+
+.star:nth-of-type(174) {
+  --size: 0.4261297333vmin;
+  --background: #f68282;
+  --shadow: 0 0 0.3633210596vmin 0.147554465vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 85deg) rotate3d(0, 1, 0, 183deg) rotate3d(0, 0, 1, 108deg) translate3d(0, 0, 79.0180212698vmin);
+}
+
+.star:nth-of-type(175) {
+  --size: 0.593472091vmin;
+  --background: #e8edf1;
+  --shadow: 0 0 0.8574128853vmin 0.0660091617vmin #f4f7f9;
+  --transform: rotate3d(1, 0, 0, 298deg) rotate3d(0, 1, 0, 229deg) rotate3d(0, 0, 1, 297deg) translate3d(0, 0, 77.2810004248vmin);
+}
+
+.star:nth-of-type(176) {
+  --size: 0.6560468139vmin;
+  --background: #fff29e;
+  --shadow: 0 0 0.9717613786vmin 0.1643923695vmin #fff4a8;
+  --transform: rotate3d(1, 0, 0, 304deg) rotate3d(0, 1, 0, 177deg) rotate3d(0, 0, 1, 272deg) translate3d(0, 0, 72.6681074102vmin);
+}
+
+.star:nth-of-type(177) {
+  --size: 0.3664586186vmin;
+  --background: #fff6b7;
+  --shadow: 0 0 0.5474307018vmin 0.0966238329vmin #fff6b7;
+  --transform: rotate3d(1, 0, 0, 15deg) rotate3d(0, 1, 0, 0deg) rotate3d(0, 0, 1, 40deg) translate3d(0, 0, 67.3739016491vmin);
+}
+
+.star:nth-of-type(178) {
+  --size: 0.3719079952vmin;
+  --background: #dd1486;
+  --shadow: 0 0 0.3871602498vmin 0.0528767108vmin #eb2495;
+  --transform: rotate3d(1, 0, 0, 346deg) rotate3d(0, 1, 0, 353deg) rotate3d(0, 0, 1, 27deg) translate3d(0, 0, 75.9136830098vmin);
+}
+
+.star:nth-of-type(179) {
+  --size: 0.4075449116vmin;
+  --background: #96f597;
+  --shadow: 0 0 0.5044488594vmin 0.1924779645vmin #b2f7b3;
+  --transform: rotate3d(1, 0, 0, 260deg) rotate3d(0, 1, 0, 259deg) rotate3d(0, 0, 1, 269deg) translate3d(0, 0, 80.1258407661vmin);
+}
+
+.star:nth-of-type(180) {
+  --size: 0.5238080076vmin;
+  --background: #e11488;
+  --shadow: 0 0 0.2685241165vmin 0.0923795318vmin #eb1f93;
+  --transform: rotate3d(1, 0, 0, 105deg) rotate3d(0, 1, 0, 288deg) rotate3d(0, 0, 1, 207deg) translate3d(0, 0, 87.6879280364vmin);
+}
+
+.star:nth-of-type(181) {
+  --size: 0.3418518203vmin;
+  --background: #ff4875;
+  --shadow: 0 0 0.5048192627vmin 0.0070984255vmin #ff4875;
+  --transform: rotate3d(1, 0, 0, 217deg) rotate3d(0, 1, 0, 335deg) rotate3d(0, 0, 1, 7deg) translate3d(0, 0, 81.6643791202vmin);
+}
+
+.star:nth-of-type(182) {
+  --size: 0.600317733vmin;
+  --background: #ff4875;
+  --shadow: 0 0 0.3543092875vmin 0.1147303551vmin #ff4875;
+  --transform: rotate3d(1, 0, 0, 9deg) rotate3d(0, 1, 0, 209deg) rotate3d(0, 0, 1, 217deg) translate3d(0, 0, 69.9904429678vmin);
+}
+
+.star:nth-of-type(183) {
+  --size: 0.6754735366vmin;
+  --background: #ff3465;
+  --shadow: 0 0 0.8190910344vmin 0.2583487273vmin #ff4875;
+  --transform: rotate3d(1, 0, 0, 198deg) rotate3d(0, 1, 0, 198deg) rotate3d(0, 0, 1, 346deg) translate3d(0, 0, 89.2711173049vmin);
+}
+
+.star:nth-of-type(184) {
+  --size: 0.5627646462vmin;
+  --background: #f9af82;
+  --shadow: 0 0 0.4355240663vmin 0.2700558841vmin #f9af82;
+  --transform: rotate3d(1, 0, 0, 312deg) rotate3d(0, 1, 0, 121deg) rotate3d(0, 0, 1, 125deg) translate3d(0, 0, 74.0139585345vmin);
+}
+
+.star:nth-of-type(185) {
+  --size: 0.5615295194vmin;
+  --background: #f89f9f;
+  --shadow: 0 0 0.4778048726vmin 0.2610579147vmin #f89f9f;
+  --transform: rotate3d(1, 0, 0, 270deg) rotate3d(0, 1, 0, 240deg) rotate3d(0, 0, 1, 150deg) translate3d(0, 0, 78.1145554387vmin);
+}
+
+.star:nth-of-type(186) {
+  --size: 0.4251756044vmin;
+  --background: #706df4;
+  --shadow: 0 0 0.3531640583vmin 0.0038865434vmin #7a77f4;
+  --transform: rotate3d(1, 0, 0, 279deg) rotate3d(0, 1, 0, 267deg) rotate3d(0, 0, 1, 319deg) translate3d(0, 0, 73.9649787887vmin);
+}
+
+.star:nth-of-type(187) {
+  --size: 0.5587641734vmin;
+  --background: #682878;
+  --shadow: 0 0 0.7782748645vmin 0.0401161836vmin #682878;
+  --transform: rotate3d(1, 0, 0, 189deg) rotate3d(0, 1, 0, 27deg) rotate3d(0, 0, 1, 284deg) translate3d(0, 0, 71.1183279519vmin);
+}
+
+.star:nth-of-type(188) {
+  --size: 0.4629818137vmin;
+  --background: #d31380;
+  --shadow: 0 0 0.453879265vmin 0.0369628435vmin #ec2d99;
+  --transform: rotate3d(1, 0, 0, 330deg) rotate3d(0, 1, 0, 219deg) rotate3d(0, 0, 1, 330deg) translate3d(0, 0, 67.8878219946vmin);
+}
+
+.star:nth-of-type(189) {
+  --size: 0.6727394318vmin;
+  --background: #ff85b6;
+  --shadow: 0 0 0.9445814215vmin 0.1416075901vmin #ff85b6;
+  --transform: rotate3d(1, 0, 0, 281deg) rotate3d(0, 1, 0, 282deg) rotate3d(0, 0, 1, 192deg) translate3d(0, 0, 66.3508036913vmin);
+}
+
+.star:nth-of-type(190) {
+  --size: 0.293886118vmin;
+  --background: #ff80b3;
+  --shadow: 0 0 0.225978381vmin 0.0494802807vmin #ff80b3;
+  --transform: rotate3d(1, 0, 0, 82deg) rotate3d(0, 1, 0, 160deg) rotate3d(0, 0, 1, 84deg) translate3d(0, 0, 70.0848656599vmin);
+}
+
+.star:nth-of-type(191) {
+  --size: 0.6850639009vmin;
+  --background: #8885f5;
+  --shadow: 0 0 1.0019260133vmin 0.0033618918vmin #8885f5;
+  --transform: rotate3d(1, 0, 0, 200deg) rotate3d(0, 1, 0, 333deg) rotate3d(0, 0, 1, 204deg) translate3d(0, 0, 81.6190344048vmin);
+}
+
+.star:nth-of-type(192) {
+  --size: 0.7300595572vmin;
+  --background: #2cb4ee;
+  --shadow: 0 0 0.3996791804vmin 0.323591439vmin #2cb4ee;
+  --transform: rotate3d(1, 0, 0, 246deg) rotate3d(0, 1, 0, 288deg) rotate3d(0, 0, 1, 216deg) translate3d(0, 0, 66.9326371008vmin);
+}
+
+.star:nth-of-type(193) {
+  --size: 0.5128914731vmin;
+  --background: #ff3969;
+  --shadow: 0 0 0.3378043065vmin 0.1389471885vmin #ff4371;
+  --transform: rotate3d(1, 0, 0, 40deg) rotate3d(0, 1, 0, 37deg) rotate3d(0, 0, 1, 222deg) translate3d(0, 0, 86.8685068066vmin);
+}
+
+.star:nth-of-type(194) {
+  --size: 0.5180731818vmin;
+  --background: #f79d65;
+  --shadow: 0 0 0.5312364761vmin 0.0503144208vmin #f9b58b;
+  --transform: rotate3d(1, 0, 0, 150deg) rotate3d(0, 1, 0, 254deg) rotate3d(0, 0, 1, 297deg) translate3d(0, 0, 66.0184469282vmin);
+}
+
+.star:nth-of-type(195) {
+  --size: 0.4908227975vmin;
+  --background: #f68282;
+  --shadow: 0 0 0.6187544434vmin 0.1989507417vmin #f68c8c;
+  --transform: rotate3d(1, 0, 0, 178deg) rotate3d(0, 1, 0, 310deg) rotate3d(0, 0, 1, 46deg) translate3d(0, 0, 72.004798336vmin);
+}
+
+.star:nth-of-type(196) {
+  --size: 0.2902511725vmin;
+  --background: #ec2997;
+  --shadow: 0 0 0.2620299093vmin 0.0893861923vmin #ec2997;
+  --transform: rotate3d(1, 0, 0, 55deg) rotate3d(0, 1, 0, 18deg) rotate3d(0, 0, 1, 177deg) translate3d(0, 0, 71.9807759735vmin);
+}
+
+.star:nth-of-type(197) {
+  --size: 0.6297574232vmin;
+  --background: #fff08a;
+  --shadow: 0 0 0.7295601333vmin 0.120066613vmin #fff6bd;
+  --transform: rotate3d(1, 0, 0, 302deg) rotate3d(0, 1, 0, 10deg) rotate3d(0, 0, 1, 358deg) translate3d(0, 0, 89.5082403411vmin);
+}
+
+.star:nth-of-type(198) {
+  --size: 0.673347973vmin;
+  --background: #ff255a;
+  --shadow: 0 0 0.8968263173vmin 0.2553848179vmin #ff5880;
+  --transform: rotate3d(1, 0, 0, 67deg) rotate3d(0, 1, 0, 188deg) rotate3d(0, 0, 1, 308deg) translate3d(0, 0, 75.0537451079vmin);
+}
+
+.star:nth-of-type(199) {
+  --size: 0.3696698196vmin;
+  --background: #f57979;
+  --shadow: 0 0 0.4968562209vmin 0.0324237311vmin #f79595;
+  --transform: rotate3d(1, 0, 0, 73deg) rotate3d(0, 1, 0, 249deg) rotate3d(0, 0, 1, 163deg) translate3d(0, 0, 69.3074203222vmin);
+}
+
+.star:nth-of-type(200) {
+  --size: 0.411696944vmin;
+  --background: #b7f8b7;
+  --shadow: 0 0 0.4727227086vmin 0.0876544247vmin #b7f8b7;
+  --transform: rotate3d(1, 0, 0, 330deg) rotate3d(0, 1, 0, 328deg) rotate3d(0, 0, 1, 0deg) translate3d(0, 0, 65.7846004049vmin);
+}
+
+@-webkit-keyframes rotation {
+  100% {
+    -webkit-transform: rotate3d(1, 1, 1, 360deg);
+    transform: rotate3d(1, 1, 1, 360deg);
+  }
+}
+
+@keyframes rotation {
+  100% {
+    -webkit-transform: rotate3d(1, 1, 1, 360deg);
+    transform: rotate3d(1, 1, 1, 360deg);
+  }
+}
+
+@-webkit-keyframes appear {
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes appear {
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@-webkit-keyframes scale {
+
+  0%,
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(0.75, 0.75, 0.75);
+    transform: scale3d(0.75, 0.75, 0.75);
+  }
+}
+
+@keyframes scale {
+
+  0%,
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(0.75, 0.75, 0.75);
+    transform: scale3d(0.75, 0.75, 0.75);
+  }
+}
\ No newline at end of file
diff --git a/src/pages/Home/index.module.css b/src/pages/Home/index.module.css
new file mode 100644
index 0000000..cf6faa4
--- /dev/null
+++ b/src/pages/Home/index.module.css
@@ -0,0 +1,359 @@
+.homeContainer {
+  padding: 20px;
+  margin-top: 20px;
+  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
+  border-radius: 15px;
+  min-height: 100vh;
+}
+
+.searchBarContainer {
+  display: flex;
+  justify-content: center;
+  position: fixed;
+  top: 60px;
+  left: 0;
+  right: 0;
+  /* z-index: 1000; */
+  padding: 10px 0;
+  background: rgba(255, 255, 255, 0.05);
+  min-width: fit-content
+}
+
+.searchInput {
+  width: 80%;
+  padding: 8px;
+  font-size: 18px;
+  max-width: 1000px;
+  border: 2px solid #333;
+  border-radius: 8px;
+  background: rgba(255, 255, 255, 0.1);
+  color: white;
+  backdrop-filter: blur(5px);
+}
+
+.searchInput:focus {
+  outline: none;
+  border: 2px solid #666;
+  /* 灰色高亮边框 */
+}
+
+
+.secondRow {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 20px;
+}
+
+.leftBox {
+  margin-left: 20px;
+  flex: 1;
+  padding: 20px;
+  background: rgba(255, 255, 255, 0.05);
+  border-radius: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  backdrop-filter: blur(5px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  max-width: 500px;
+  min-width: 500px;
+  gap: 15px;
+}
+
+.rightCard {
+  flex: 1;
+  padding: 20px;
+  background: linear-gradient(135deg, rgba(26, 26, 46, 0.8), rgba(22, 33, 62, 0.8));
+  /* 星空渐变背景 */
+  border-radius: 12px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  backdrop-filter: blur(10px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  max-width: 350px;
+  margin-left: 20px;
+  height: 200px;
+}
+
+.rightCard2 {
+  flex: 1;
+  padding: 10px;
+  background: linear-gradient(135deg, rgba(26, 26, 46, 0.8), rgba(22, 33, 62, 0.8));
+  /* 星空渐变背景 */
+  border-radius: 12px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  backdrop-filter: blur(10px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  max-width: 200px;
+  width: 100px;
+  margin-left: 20px;
+  height: 200px;
+}
+
+/* 覆盖Ant Design Card默认样式 */
+.rightCard .ant-card {
+  background: transparent;
+  border-radius: 12px;
+}
+
+.rightCard .ant-card-head {
+  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.rightCard .ant-card-head-title {
+  color: #fff;
+  font-size: 16px;
+}
+
+/* 覆盖Statistic组件样式 */
+.rightCard .ant-statistic-title {
+  color: #a8b2d1;
+  font-size: 12px;
+}
+
+.rightCard .ant-statistic-content-value {
+  color: #fff;
+  font-size: 16px;
+  font-weight: 600;
+}
+
+/* 覆盖Button组件样式 */
+.rightCard .ant-btn {
+  padding: 10px;
+  background: linear-gradient(135deg, #4a69bd, #6c5ce7);
+  border: none;
+  border-radius: 8px;
+  color: white;
+  font-size: 14px;
+  transition: transform 0.2s;
+}
+
+.rightCard .ant-btn:hover {
+  transform: translateY(-2px);
+  background: linear-gradient(135deg, #3c56a8, #5b4ac7);
+  color: white;
+}
+
+.rightCard .ant-btn-primary {
+  background: linear-gradient(135deg, #6c5ce7, #4a69bd);
+  /* 主按钮颜色调整 */
+}
+
+.statsContainer {
+  display: flex;
+  justify-content: space-between;
+  gap: 10px;
+  margin-bottom: 15px;
+}
+
+.statItem {
+  flex: 1;
+  padding: 12px;
+  background: rgba(255, 255, 255, 0.03);
+  border-radius: 8px;
+  text-align: center;
+}
+
+.statTitle {
+  font-size: 12px;
+  color: #a8b2d1;
+  margin-bottom: 4px;
+}
+
+.statValue {
+  font-size: 16px;
+  color: #fff;
+  font-weight: 600;
+}
+
+.buttonGroup {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+}
+
+.actionButton {
+  padding: 10px;
+  background: linear-gradient(135deg, #4a69bd, #6c5ce7);
+  /* 星空蓝紫色渐变 */
+  border: none;
+  border-radius: 8px;
+  color: white;
+  font-size: 14px;
+  cursor: pointer;
+  transition: transform 0.2s;
+}
+
+.actionButton:hover {
+  transform: translateY(-2px);
+  background: linear-gradient(135deg, #3c56a8, #5b4ac7);
+}
+
+.textContent {
+  display: flex;
+
+  flex-direction: column;
+  /* 垂直排列 */
+  width: min-content;
+}
+
+.titlebox {
+  width: 220px;
+  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+}
+
+.middleBox {
+  margin-left: 20px;
+  flex: 1;
+  padding: 20px;
+  background: rgba(255, 255, 255, 0.05);
+  border-radius: 12px;
+  display: flex;
+  align-items: center;
+  backdrop-filter: blur(5px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  max-width: 350px;
+}
+
+.gitAnimation {
+  height: 150px;
+  min-width: 150px;
+  /* 固定动图区域宽度 */
+  /* 保持正方形 */
+  width: 150px;
+  min-width: 150px;
+  border-radius: 8px;
+  /* 移除背景色,使用实际图片 */
+}
+
+.gitSquare {
+  width: 100%;
+  /* 完全填充容器 */
+  height: 100%;
+  object-fit: cover;
+  /* 保持宽高比填充 */
+  border-radius: 8px;
+  min-width: 60px;
+  min-height: 60px;
+}
+
+.rightBox {
+  flex: 1;
+  padding: 20px;
+  background: rgba(255, 255, 255, 0.05);
+  border-radius: 12px;
+  margin-left: 20px;
+  backdrop-filter: blur(5px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.carouselContainer {
+  overflow: hidden;
+  position: relative;
+}
+
+.carouselItem {
+  padding: 10px 0;
+}
+
+.thirdRow {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: 24px;
+  margin-top: 32px;
+}
+
+.postCard {
+  background: rgba(255, 255, 255, 0.05);
+  border-radius: 16px;
+  backdrop-filter: blur(8px);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+  transition: all 0.3s ease;
+  padding: 16px;
+  min-width: 280px;
+  max-width: 320px;
+  display: flex;
+  flex-direction: column;
+  min-height: 200px;
+}
+
+.cardContent {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+  width: 100%;
+}
+
+.postCard:hover {
+  transform: translateY(-4px);
+  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
+}
+
+.cardContent {
+  display: flex;
+  gap: 16px;
+  width: 100%;
+}
+
+.cardImage {
+  width: 120px;
+  height: 90px;
+  object-fit: cover;
+  border-radius: 8px;
+  background: #f0f0f0;
+}
+
+.infoWrapper {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 8px;
+}
+
+.postTitle {
+  font-size: 14px;
+  font-weight: 500;
+  color: white;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  margin: 0;
+}
+
+.postAuthor {
+  font-size: 12px;
+  color: #ddd;
+  margin: 0;
+}
+
+.tagsContainer {
+  display: flex;
+  gap: 8px;
+  flex-wrap: wrap;
+  margin: 4px 0;
+}
+
+.tag {
+  font-size: 11px;
+  padding: 2px 8px;
+  background: rgba(255, 255, 255, 0.1);
+  border-radius: 12px;
+  color: #eee;
+}
+
+.statsContainer {
+  display: flex;
+  gap: 16px;
+  margin-top: auto;
+}
+
+.statItem {
+  display: flex;
+  align-items: center;
+  gap: 4px;
+  font-size: 12px;
+  color: #bbb;
+}
\ No newline at end of file
diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx
index 5f0caa0..7234c32 100644
--- a/src/pages/Home/index.tsx
+++ b/src/pages/Home/index.tsx
@@ -1,95 +1,413 @@
-import React, { useState } from 'react';
+// 写一个简单的欢迎界面
+import React, { useEffect, useState } from 'react';
+import { Card, Statistic, Row, Col, Divider, Button } from 'antd';
+import { LikeOutlined, HeartOutlined, EyeOutlined } from '@ant-design/icons';
+import { getUserInfo } from '@/services/session';
+import styles from './index.module.css'; // 假设我们创建了一个CSS模块文件
+import './css/stars-style.css'
+import { Flex } from 'antd';
+import { Typography } from "@mui/material";
+import { useRequest } from '@umijs/max';
+import { getPlanetList, updatePlanet, getUserPlanet, getPlanetInfo, PlanetEntity } from '@/services/planets/api';
 
-const planets = [
-    { name: 'Mercury', desc: 'The smallest planet.', img: 'https://images.unsplash.com/photo-1462331940025-496dfbfc7564?auto=format&fit=crop&w=400&q=80' },
-    { name: 'Venus', desc: 'The hottest planet.', img: 'https://images.unsplash.com/photo-1465101046530-73398c7f28ca?auto=format&fit=crop&w=400&q=80' },
-    { name: 'Earth', desc: 'Our home planet.', img: 'https://images.unsplash.com/photo-1465101178521-c1a9136a3b99?auto=format&fit=crop&w=400&q=80' },
-    { name: 'Mars', desc: 'The red planet.', img: 'https://images.unsplash.com/photo-1462331940025-496dfbfc7564?auto=format&fit=crop&w=400&q=80' },
-    { name: 'Jupiter', desc: 'The largest planet.', img: 'https://images.unsplash.com/photo-1465101178521-c1a9136a3b99?auto=format&fit=crop&w=400&q=80' },
-];
+const Welcome: React.FC = () => {
+  //  获取用户信息
+  // const { data: userInfo, loading } = useRequest(async () => {
+  //   return { data: await getUserInfo() };
+  // });
 
-const navItems = ['首页', '资源', '关于', '联系'];
+  const { data: userInfo, loading } = useRequest(async () => {
+    const userRes = await getUserInfo();
+    // 假设 userId 为字符串类型,需要将其转换为数字类型,同时处理可能的 undefined 情况
+    const userId = userRes.user.userId ? parseInt(userRes.user.userId, 10) : 1;
+    const UserplanetRes = await getUserPlanet({ userId });
+    const planetId = UserplanetRes.planetId || 1;
+    const planetRes = await getPlanetInfo({ planetId });
 
-const Home: React.FC = () => {
-    const [search, setSearch] = useState('');
+    return {
+      data: {
+        ...userRes.user,
+        planet: planetRes
+      }
+    };
+  });
 
-    const filteredPlanets = planets.filter(p =>
-        p.name.toLowerCase().includes(search.toLowerCase())
-    );
+  if (loading) {
+    return <div>loading...</div>;
+  }
 
-    return (
-        <div style={{ fontFamily: 'sans-serif', background: 'linear-gradient(to bottom, #0f2027, #2c5364)', minHeight: '100vh', color: '#fff' }}>
-            {/* 导航栏 */}
-            <nav style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '24px 48px', background: 'rgba(0,0,0,0.4)' }}>
-                <div style={{ fontWeight: 'bold', fontSize: 28, letterSpacing: 2 }}>🌌 PT星球</div>
-                <div>
-                    {navItems.map(item => (
-                        <a
-                            key={item}
-                            href="#"
-                            style={{
-                                color: '#fff',
-                                margin: '0 18px',
-                                textDecoration: 'none',
-                                fontSize: 18,
-                                transition: 'color 0.2s',
-                            }}
-                        >
-                            {item}
-                        </a>
-                    ))}
-                </div>
-            </nav>
+  const currentUser = userInfo;
 
-            {/* 搜索框 */}
-            <div style={{ display: 'flex', justifyContent: 'center', margin: '48px 0 32px 0' }}>
-                <input
-                    type="text"
-                    placeholder="搜索星球资源..."
-                    value={search}
-                    onChange={e => setSearch(e.target.value)}
-                    style={{
-                        width: 360,
-                        padding: '12px 20px',
-                        borderRadius: 24,
-                        border: 'none',
-                        fontSize: 18,
-                        outline: 'none',
-                        boxShadow: '0 2px 12px rgba(0,0,0,0.2)',
-                    }}
-                />
-            </div>
-
-            {/* 资源卡片 */}
-            <div style={{
-                display: 'flex',
-                flexWrap: 'wrap',
-                justifyContent: 'center',
-                gap: '32px',
-                padding: '0 48px 48px 48px'
-            }}>
-                {filteredPlanets.map(planet => (
-                    <div
-                        key={planet.name}
-                        style={{
-                            background: 'rgba(255,255,255,0.08)',
-                            borderRadius: 18,
-                            width: 260,
-                            boxShadow: '0 4px 24px rgba(0,0,0,0.18)',
-                            overflow: 'hidden',
-                            transition: 'transform 0.2s',
-                        }}
-                    >
-                        <img src={planet.img} alt={planet.name} style={{ width: '100%', height: 140, objectFit: 'cover' }} />
-                        <div style={{ padding: 20 }}>
-                            <div style={{ fontWeight: 'bold', fontSize: 22, marginBottom: 8 }}>{planet.name}</div>
-                            <div style={{ fontSize: 16, color: '#cfd8dc' }}>{planet.desc}</div>
-                        </div>
-                    </div>
-                ))}
-            </div>
+  console.log(currentUser)
+  return (
+    <div>
+      <div className="origin">
+        <div className="control">
+          <div className="galaxy">
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+            <div className="star"></div>
+          </div>
         </div>
-    );
+      </div>
+      <div className="main">
+        <div>
+
+          {/* 第一排:悬浮搜索框 */}
+          <div className={styles.searchBarContainer}>
+            <input type="text" placeholder="Search for everything..." className={styles.searchInput} />
+          </div>
+          <div style={{ display: "flex", marginTop: '40px' }}>
+            <div className={styles.leftBox}>
+              <div className={styles.textContent}>
+                <Typography
+                  variant="h4"
+                  sx={{
+                    color: "#fff",
+                    fontWeight: 600,
+                    mb: 2,
+                    letterSpacing: 2,
+                    textShadow: "0 2px 16px #0ea5e9",
+                  }}
+                >
+                  Welcome Back!
+                </Typography>
+
+                <h2 className={styles.titlebox}>{currentUser?.nickName},整点什么?</h2>
+                <Button style={{ width: "100px" }} size='small' type="primary" onClick={() => window.location.href = '/relation'}>我的形象</Button>
+              </div>
+              <div className={styles.gitAnimation}>
+                <img
+                  src={`/images/planets/${userInfo?.planet?.filename}.gif`}
+                  alt="用户形象"
+                  style={{
+                    width: 150,
+                    height: 150,
+                    borderRadius: '50%',
+                    border: '2px solid #4a4a7a',
+                    boxShadow: '0 0 15px #6a5acd'
+                  }}
+                />
+              </div>
+            </div>
+
+            {/* 新增右侧统计卡片(使用Ant Design组件) */}
+            <Card className={styles.rightCard} title="种子统计" bordered={false}>
+              <Row gutter={16}>
+                <Col span={8}>
+                  <Statistic title="总种子数" value={128} />
+                </Col>
+                <Col span={8}>
+                  <Statistic title="活跃种子" value={42} />
+                </Col>
+                <Col span={8}>
+                  <Statistic title="完成种子" value={86} />
+                </Col>
+              </Row>
+              <Divider />
+            </Card>
+            <Card className={styles.rightCard2} >
+
+              <Flex className={styles.buttonGroup}>
+                <div style={{
+                  fontSize: '16px',
+                  color: '#a8b2d1',
+                  letterSpacing: '1px'
+                }}>来看看星球的
+                </div>
+                <div style={{
+                  fontSize: '23px',
+                  color: '#0abde3',
+                  letterSpacing: '1px',
+                  fontWeight: 'bold',
+                }}>
+                  种子
+                </div>
+                <Button type="primary" onClick={() => window.location.href = '/torrent-upload'}>新建种子</Button>
+                <Button onClick={() => window.location.href = '/torrent-list'}>我的种子</Button>
+              </Flex>
+            </Card>
+
+            <Card className={styles.rightCard2} >
+
+              <Flex className={styles.buttonGroup}>
+                <div style={{
+                  fontSize: '16px',
+                  color: '#a8b2d1',
+                  letterSpacing: '1px'
+                }}>现在看看星球
+                </div>
+                <div style={{
+                  fontSize: '23px',
+                  color: '#e1b12c',
+                  letterSpacing: '1px',
+                  fontWeight: 'bold',
+                }}>
+                  动态
+                </div>
+                <Button color="orange" variant="solid" onClick={() => window.location.href = '/user-center'}>立即创作</Button>
+                <Button onClick={() => window.location.href = '/user-center'}>我的创作</Button>
+              </Flex>
+            </Card>
+
+          </div>
+
+          <div className={styles.homeContainer}>
+
+            {/* 第二排:左侧欢迎信息和右侧通知公告 */}
+            <div className={styles.secondRow}>
+              {/* 左侧框 */}
+              {/* 中间框:最新热点 */}
+              <div className={styles.middleBox}>
+                <div className={styles.hotSpot}>
+                  <h3 className={styles.hotTitle}>排行榜动态</h3>
+                  <ul className={styles.hotList}>
+                    {Array.from({ length: 5 }, (_, i) => (
+                      <li key={i} className={styles.hotItem}>
+                        <span className={styles.hotItemNumber}>{`${i + 1}`}</span>
+                        <span className={styles.hotItemText}>综合榜{`${i + 1}`}</span>
+                      </li>
+                    ))}
+                  </ul>
+                </div>
+              </div>
+
+              {/* 右侧框:通知公告(轮播样式) */}
+              <div className={styles.rightBox}>
+                <div className={styles.carouselContainer}>
+                  {/* 轮播内容,这里用几个div模拟 */}
+                  <div className={styles.carouselItem}>通知公告 1</div>
+                  <div className={styles.carouselItem}>通知公告 2</div>
+                  <div className={styles.carouselItem}>通知公告 3</div>
+                </div>
+              </div>
+            </div>
+            {/* 第三排:帖子卡片 */}
+            <div className={styles.thirdRow}>
+              {Array.from({ length: 16 }, (_, i) => (
+                <div className={styles.postCard} key={i}>
+                  <div className={styles.cardContent}>
+                    <h3 className={styles.postTitle}>模拟帖子标题{`${i + 1}`}(这是一个可能会很长的标题测试单行缩略效果)</h3>
+                    <img src="/images/post-cover.jpg" alt="帖子封面" className={styles.cardImage} />
+                    <div className={styles.infoWrapper}>
+                      <p className={styles.postAuthor}>作者:用户{`${i + 1}`}</p>
+                      <div className={styles.tagsContainer}>
+                        {['技术', '生活', '分享'].map((tag, idx) => (
+                          <span className={styles.tag} key={idx}>{tag}</span>
+                        ))}
+                      </div>
+                      <div className={styles.statsContainer}>
+                        <span className={styles.statItem}><LikeOutlined /> {Math.floor(Math.random() * 1000)}</span>
+                        <span className={styles.statItem}><HeartOutlined /> {Math.floor(Math.random() * 500)}</span>
+                        <span className={styles.statItem}><EyeOutlined /> {Math.floor(Math.random() * 5000)}</span>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              ))}
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  );
 };
 
-export default Home;
\ No newline at end of file
+export default Welcome;
diff --git a/src/pages/PostCenter/index.module.css b/src/pages/PostCenter/index.module.css
index 2b262e2..1c66ea5 100644
--- a/src/pages/PostCenter/index.module.css
+++ b/src/pages/PostCenter/index.module.css
@@ -29,10 +29,16 @@
   padding: 8px 16px;
   border-radius: 6px;
   transition: all 0.3s ease;
+  color: #000000;
+  font-weight: bold;
+
 }
 
 .categoryButton:hover {
-  background-color: #f0f0f0;
+  background: #888888;
+  color: #666;
+  font-weight: bold;
+  border: 1px solid #888888;
 }
 
 .searchContainer {
diff --git a/src/pages/Relation/index.tsx b/src/pages/Relation/index.tsx
new file mode 100644
index 0000000..a5d2d97
--- /dev/null
+++ b/src/pages/Relation/index.tsx
@@ -0,0 +1,258 @@
+import { useEffect, useState } from 'react';
+import { Card, List, Button, message, Carousel, Modal } from 'antd';
+import { getUserInfo } from '@/services/session';
+import { getPlanetList, updateUserPlanet, getUserPlanet, getPlanetInfo, PlanetEntity, getRandomUserPlanets } from '@/services/planets/api';
+import { useRequest } from '@umijs/max';
+import { getUser } from '@/services/system/user';
+
+const RelationPage = () => {
+    const [planetList, setPlanetList] = useState<PlanetEntity[]>([]);
+    const [relatedUsers, setRelatedUsers] = useState<any[]>([]);
+    const [selectedUser, setSelectedUser] = useState<any>(null);
+    const [userModalVisible, setUserModalVisible] = useState(false);
+    //  获取用户信息
+    const { data: userInfo, loading: userLoading } = useRequest(async () => {
+        const userRes = await getUserInfo();
+        // 假设 userId 为字符串类型,需要将其转换为数字类型,同时处理可能的 undefined 情况
+        const userId = userRes.user.userId ? parseInt(userRes.user.userId, 10) : 1;
+        const UserplanetRes = await getUserPlanet({ userId });
+        console.log(UserplanetRes);
+        const planetId = UserplanetRes.planetId || 1;
+        const planetRes = await getPlanetInfo({ planetId });
+
+        return {
+            data: {
+                ...userRes.user,
+                planet: planetRes
+            }
+        };
+    });
+
+
+
+
+    console.log(userInfo);
+    const [listLoading, setListLoading] = useState(false);
+    // 获取所有GIF列表
+    const fetchPlanetList = async () => {
+        try {
+            setListLoading(true);
+            const res = await getPlanetList({ pageNum: 1, pageSize: 100 });
+            console.log(res);
+            setPlanetList(res);
+        } catch (error) {
+            message.error('获取GIF列表失败');
+        } finally {
+            setListLoading(false);
+        }
+    };
+
+    // 获取相关用户信息
+    const fetchRelatedUsers = async () => {
+        try {
+            // 获取随机用户星球列表
+            const randomPlanetsNo = await getRandomUserPlanets();
+            const userId = userInfo?.userId ? parseInt(userInfo.userId, 10) : 1;
+            const randomPlanets = randomPlanetsNo.filter((item) => item.userId !== userId);
+            // 获取完整用户信息并关联星球数据
+            const usersWithPlanets = await Promise.all(
+                randomPlanets.map(async (item) => {
+
+                    // 确保 item.userId 为 number 类型,若为 undefined 则使用默认值 1
+                    const userIdToUse = typeof item.userId === 'number' ? item.userId : 1;
+                    const userRes = await getUser(userIdToUse);
+                    const planetRes = await getPlanetInfo({ planetId: item.planetId });
+                    return {
+                        user: userRes.data,
+                        planet: planetRes
+                    };
+                })
+            );
+
+            setRelatedUsers(usersWithPlanets);
+            console.log(usersWithPlanets);
+        } catch (error) {
+            message.error('获取相关用户失败');
+            console.error(error);
+        }
+    };
+
+    useEffect(() => {
+        fetchPlanetList();
+        fetchRelatedUsers();
+    }, []);
+    // 显示用户详情
+    const showUserDetails = (user: any) => {
+        setSelectedUser(user);
+        setUserModalVisible(true);
+    };
+    console.log(planetList);
+    // 更新用户形象
+    const handleUpdateAvatar = async (id: number | undefined) => {
+        if (!id) {
+            message.error('无效的星球ID');
+            return;
+        }
+        try {
+            console.log(id);
+            // 处理 userInfo.userId 可能为 undefined 的情况,若为 undefined 则使用默认值 '1'
+            const userIdStr = userInfo?.userId || '1';
+            console.log(userIdStr);
+            await updateUserPlanet({ planetId: id, userId: parseInt(userIdStr, 10) });
+            message.success('更新形象成功');
+            window.location.reload();
+        } catch (error) {
+            message.error('更新形象失败');
+        }
+    };
+    if (userLoading) {
+        return <div>Loading...</div>;
+    }
+
+    return (
+        <div>
+            <Card title="当前形象" style={{ background: 'transparent', borderColor: '#3a3a5c' }}>
+                {userInfo?.planet && (
+                    <div style={{ textAlign: 'center' }}>
+                        <img
+                            src={`/images/planets/${userInfo.planet.filename}.gif`}
+                            alt="用户形象"
+                            style={{
+                                width: 200,
+                                height: 200,
+                                borderRadius: '50%',
+                                border: '2px solid #4a4a7a',
+                                boxShadow: '0 0 15px #6a5acd'
+                            }}
+                        />
+                        <div style={{
+                            marginTop: 16,
+                            color: '#a8b2d1',
+                            fontSize: 16
+                        }}>
+                            当前形象: {userInfo.planet.name}
+                        </div>
+                    </div>
+                )}
+            </Card>
+
+            <Card title="选择新形象" style={{
+                marginTop: 24,
+                background: 'transparent',
+                borderColor: '#3a3a5c'
+            }}>
+                <Carousel
+                    dots={false}
+                    arrows={true}
+                    style={{ width: '100%', maxWidth: 800, margin: '0 auto' }}
+                >
+                    {planetList.map((item) => (
+                        <div key={item.planetId} style={{ textAlign: 'center', padding: '0 40px' }}>
+                            <div style={{ marginBottom: 16 }}>
+                                <img
+                                    src={`/images/planets/${item.filename}.gif`}
+                                    alt={item.name}
+                                    style={{
+                                        width: 200,
+                                        height: 200,
+                                        borderRadius: '50%',
+                                        border: '2px solid #4a4a7a',
+                                        boxShadow: '0 0 15px #6a5acd',
+                                        marginTop: 16,
+                                        margin: '0 auto'
+                                    }}
+                                />
+                            </div>
+                            <div style={{
+                                color: '#a8b2d1',
+                                marginBottom: 16
+                            }}>
+                                <div style={{ fontSize: 18, fontWeight: 'bold' }}>{item.name}</div>
+                                <div style={{ margin: '8px 0' }}>{item.description}</div>
+                                <div>创建时间: {item.createTime}</div>
+                            </div>
+                            <Button
+                                type="primary"
+                                onClick={() => handleUpdateAvatar(item.planetId)}
+                                style={{
+                                    background: 'linear-gradient(45deg, #6a5acd, #9370db)',
+                                    border: 'none'
+                                }}
+                            >
+                                选择
+                            </Button>
+                        </div>
+                    ))}
+                </Carousel>
+            </Card>
+
+            <Card title="与你相关的人" style={{
+                marginTop: 24,
+                background: 'transparent',
+                borderColor: '#3a3a5c'
+            }}>
+                <Carousel
+                    dots={false}
+                    arrows={true}
+                    style={{ width: '100%', maxWidth: 800, margin: '0 auto' }}
+                >
+                    {relatedUsers.map((item) => (
+                        <div key={item.userId} style={{ textAlign: 'center', padding: '0 40px' }}>
+                            <div style={{ marginBottom: 16 }}>
+                                <img
+                                    src={`/images/planets/${item.planet.filename}.gif`}
+                                    alt={item.planet.name}
+                                    style={{
+                                        width: 200,
+                                        height: 200,
+                                        borderRadius: '50%',
+                                        border: '2px solid #4a4a7a',
+                                        boxShadow: '0 0 15px #6a5acd',
+                                        margin: '0 auto'
+                                    }}
+                                />
+                            </div>
+                            <div style={{
+                                color: '#a8b2d1',
+                                marginBottom: 16
+                            }}>
+                                <div style={{ fontSize: 18, fontWeight: 'bold' }}>昵称:{item.user.nickName}</div>
+                                <div style={{ margin: '8px 0' }}>邮箱:{item.user.email}</div>
+                                <div>星球形象:{item.planet.name}</div>
+                            </div>
+                            <Button
+                                type="primary"
+                                onClick={() => showUserDetails(item.user)}
+                                style={{
+                                    background: 'linear-gradient(45deg, #6a5acd, #9370db)',
+                                    border: 'none'
+                                }}
+                            >
+                                查看详情
+                            </Button>
+                        </div>
+                    ))}
+                </Carousel>
+            </Card>
+
+            <Modal
+                title="用户详情"
+                visible={userModalVisible}
+                onCancel={() => setUserModalVisible(false)}
+                footer={null}
+                style={{ color: '#a8b2d1' }}
+            >
+                {selectedUser && (
+                    <div>
+                        <p>昵称: {selectedUser.nickName}</p>
+                        <p>邮箱: {selectedUser.email}</p>
+                        <p>电话: {selectedUser.phonenumber}</p>
+
+                    </div>
+                )}
+            </Modal>
+        </div>
+    );
+};
+
+export default RelationPage;
\ No newline at end of file
diff --git a/src/pages/System/User/index.tsx b/src/pages/System/User/index.tsx
index 6435787..5042208 100644
--- a/src/pages/System/User/index.tsx
+++ b/src/pages/System/User/index.tsx
@@ -1,4 +1,3 @@
-
 import React, { useState, useRef, useEffect } from 'react';
 import { useIntl, FormattedMessage, useAccess } from '@umijs/max';
 import { Card, Col, Dropdown, FormInstance, Row, Space, Switch } from 'antd';
@@ -257,7 +256,7 @@
           icon=<EditOutlined />
           hidden={!access.hasPerms('system:user:edit')}
           onClick={async () => {
-            fetchUserInfo(record.userId);
+            await fetchUserInfo(record.userId);
             const treeData = await getDeptTree({});
             setDeptTree(treeData);
             setModalVisible(true);
@@ -283,7 +282,7 @@
                 const success = await handleRemoveOne(record);
                 if (success) {
                   if (actionRef.current) {
-                    actionRef.current.reload();
+                    actionRef.current?.reload();
                   }
                 }
               },
@@ -499,7 +498,7 @@
             setModalVisible(false);
             setCurrentRow(undefined);
             if (actionRef.current) {
-              actionRef.current.reload();
+              actionRef.current?.reload();
             }
           }
         }}
diff --git a/src/pages/User/Center/index.tsx b/src/pages/User/Center/index.tsx
index 2ce308c..8622219 100644
--- a/src/pages/User/Center/index.tsx
+++ b/src/pages/User/Center/index.tsx
@@ -38,11 +38,11 @@
 export type tabKeyType = 'base' | 'password';
 
 const Center: React.FC = () => {
-  
+
   const [tabKey, setTabKey] = useState<tabKeyType>('base');
-  
+
   const [cropperModalOpen, setCropperModalOpen] = useState<boolean>(false);
-  
+
   //  获取用户信息
   const { data: userInfo, loading } = useRequest(async () => {
     return { data: await getUserInfo()};
@@ -188,7 +188,7 @@
       </Row>
       <AvatarCropper
         onFinished={() => {
-          setCropperModalOpen(false);     
+          setCropperModalOpen(false);
         }}
         open={cropperModalOpen}
         data={currentUser.avatar}
diff --git a/src/pages/User/Login/index.tsx b/src/pages/User/Login/index.tsx
index 585f97b..e29032e 100644
--- a/src/pages/User/Login/index.tsx
+++ b/src/pages/User/Login/index.tsx
@@ -85,7 +85,7 @@
 };
 
 const Login: React.FC = () => {
-  const [userLoginState, setUserLoginState] = useState<API.LoginResult>({code: 200});
+  const [userLoginState, setUserLoginState] = useState<API.LoginResult>({ code: 200 });
   const [type, setType] = useState<string>('account');
   const { initialState, setInitialState } = useModel('@@initialState');
   const [captchaCode, setCaptchaCode] = useState<string>('');
@@ -255,7 +255,7 @@
           }
           subTitle={
             <span style={{ color: '#b3c7f9', fontSize: 16 }}>
-              探索你的专属星球,畅享PT世界
+              探索你的专属星球,畅享PT世界  JRX MSY ZYT HXQ LJB
             </span>
           }
           initialValues={{
@@ -509,7 +509,7 @@
                   color: '#fff',
                   fontSize: 14,
                 }}>
-              <FormattedMessage id="pages.login.rememberMe"  defaultMessage="自动登录" />
+                <FormattedMessage id="pages.login.rememberMe" defaultMessage="自动登录" />
               </a>
             </ProFormCheckbox>
             <a
diff --git a/src/services/planets/api.ts b/src/services/planets/api.ts
new file mode 100644
index 0000000..4c443d3
--- /dev/null
+++ b/src/services/planets/api.ts
@@ -0,0 +1,79 @@
+import { request } from '@umijs/max';
+
+export interface PlanetEntity {
+    planetId?: number;
+    name?: string;
+    filename?: string;
+    description?: string;
+    createTime?: string;
+}
+
+export interface UserPlanetEntity {
+    userId?: number;
+    planetId?: number;
+    updateTime?: string;
+}
+
+export async function getPlanetList(params: {
+    pageNum?: number;
+    pageSize?: number;
+}) {
+    const res = await request<{ code: number; data: PlanetEntity[] }>('/api/planets/list', {
+        method: 'GET',
+        params,
+    });
+    return res.data;
+
+}
+
+export async function getPlanetInfo(params: { planetId: number | undefined; }): Promise<PlanetEntity> {
+    const res = await request<{ code: number; data: PlanetEntity }>(`/api/planets/info/${params.planetId}`, {
+        method: 'GET',
+    });
+    return res.data;
+}
+
+export async function uploadPlanetFile(file: File) {
+    const formData = new FormData();
+    formData.append('file', file);
+    return request('/api/planets/upload', {
+        method: 'POST',
+        data: formData,
+        requestType: 'form',
+    });
+}
+
+export async function getUserPlanet(params: { userId: number }) {
+    const res = await request<{ code: number; data: UserPlanetEntity }>('/api/planets/user', {
+        method: 'GET',
+        params,
+    });
+    return res.data;
+}
+
+export async function updatePlanet(entity: PlanetEntity) {
+    return request('/api/planets/update', {
+        method: 'POST',
+        data: entity,
+    });
+}
+export async function updateUserPlanet(entity: UserPlanetEntity) {
+    return request('/api/planets/updateUserPlanet', {
+        method: 'POST',
+        data: entity,
+    });
+}
+
+export async function deletePlanet(ids: number[]) {
+    return request('/api/planets/delete', {
+        method: 'POST',
+        data: ids,
+    });
+}
+
+export async function getRandomUserPlanets() {
+    const res = await request<{ code: number; data: UserPlanetEntity[] }>('/api/planets/random', {
+        method: 'GET',
+    })
+    return res.data;
+}
\ No newline at end of file
diff --git a/src/services/typings.d.ts b/src/services/typings.d.ts
index 468320e..0dd8b19 100644
--- a/src/services/typings.d.ts
+++ b/src/services/typings.d.ts
@@ -3,6 +3,9 @@
 
 declare namespace API {
 
+  import Dept = API.System.Dept;
+  import Role = API.System.Role;
+
   interface PageInfo {
     current?: number;
     pageSize?: number;