Compare commits
2 Commits
6b7a057cb4
...
4d3f34e1c8
| Author | SHA1 | Date | |
|---|---|---|---|
| 4d3f34e1c8 | |||
|
|
d830b73770 |
@@ -1,4 +1,3 @@
|
|||||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
|
|
||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
/* @tailwind base;
|
/* @tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@@ -7,7 +6,8 @@
|
|||||||
:root {
|
:root {
|
||||||
--background: #ffffff;
|
--background: #ffffff;
|
||||||
--foreground: #171717;
|
--foreground: #171717;
|
||||||
--navbar-height: 64px; /* 与pt-16对应 */
|
--navbar-height: 64px;
|
||||||
|
/* 与pt-16对应 */
|
||||||
--primary-orange: #f97316;
|
--primary-orange: #f97316;
|
||||||
--primary-orange-dark: #ea580c;
|
--primary-orange-dark: #ea580c;
|
||||||
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
body {
|
body {
|
||||||
color: var(--foreground);
|
color: var(--foreground);
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
font-family: 'Inter', Arial, Helvetica, sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ body {
|
|||||||
background-color: #1f2937;
|
background-color: #1f2937;
|
||||||
border-color: #c2410c;
|
border-color: #c2410c;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-minecraft:hover {
|
.card-minecraft:hover {
|
||||||
border-color: var(--primary-orange);
|
border-color: var(--primary-orange);
|
||||||
}
|
}
|
||||||
@@ -159,96 +159,97 @@ body {
|
|||||||
|
|
||||||
/* 现代布局解决方案 */
|
/* 现代布局解决方案 */
|
||||||
@layer utilities {
|
@layer utilities {
|
||||||
|
|
||||||
/* 全屏减去navbar高度 */
|
/* 全屏减去navbar高度 */
|
||||||
.h-screen-nav {
|
.h-screen-nav {
|
||||||
height: calc(100vh - var(--navbar-height));
|
height: calc(100vh - var(--navbar-height));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 侧栏最大高度,确保底部按钮可见 */
|
/* 侧栏最大高度,确保底部按钮可见 */
|
||||||
.sidebar-max-height {
|
.sidebar-max-height {
|
||||||
max-height: calc(100vh - var(--navbar-height) - 120px);
|
max-height: calc(100vh - var(--navbar-height) - 120px);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 首页hero section专用高度 */
|
/* 首页hero section专用高度 */
|
||||||
.min-h-screen-nav {
|
.min-h-screen-nav {
|
||||||
min-height: calc(100vh - var(--navbar-height));
|
min-height: calc(100vh - var(--navbar-height));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 增强的过渡效果 */
|
/* 增强的过渡效果 */
|
||||||
.transition-all-enhanced {
|
.transition-all-enhanced {
|
||||||
transition: all var(--transition-normal);
|
transition: all var(--transition-normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
.transition-colors-enhanced {
|
.transition-colors-enhanced {
|
||||||
transition: color var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal);
|
transition: color var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
.transition-transform-enhanced {
|
.transition-transform-enhanced {
|
||||||
transition: transform var(--transition-normal);
|
transition: transform var(--transition-normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 微交互效果 */
|
/* 微交互效果 */
|
||||||
.micro-interaction {
|
.micro-interaction {
|
||||||
transition: all var(--transition-fast);
|
transition: all var(--transition-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.micro-interaction:hover {
|
.micro-interaction:hover {
|
||||||
transform: scale(1.02);
|
transform: scale(1.02);
|
||||||
}
|
}
|
||||||
|
|
||||||
.micro-interaction:active {
|
.micro-interaction:active {
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 加载动画 */
|
/* 加载动画 */
|
||||||
.animate-pulse-slow {
|
.animate-pulse-slow {
|
||||||
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.animate-pulse-fast {
|
.animate-pulse-fast {
|
||||||
animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 弹跳动画 */
|
/* 弹跳动画 */
|
||||||
.animate-bounce-slow {
|
.animate-bounce-slow {
|
||||||
animation: bounce 2s infinite;
|
animation: bounce 2s infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.animate-bounce-fast {
|
.animate-bounce-fast {
|
||||||
animation: bounce 1s infinite;
|
animation: bounce 1s infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 旋转动画 */
|
/* 旋转动画 */
|
||||||
.animate-spin-slow {
|
.animate-spin-slow {
|
||||||
animation: spin 3s linear infinite;
|
animation: spin 3s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.animate-spin-fast {
|
.animate-spin-fast {
|
||||||
animation: spin 1s linear infinite;
|
animation: spin 1s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 渐变动画 */
|
/* 渐变动画 */
|
||||||
.animate-gradient {
|
.animate-gradient {
|
||||||
background-size: 200% 200%;
|
background-size: 200% 200%;
|
||||||
animation: gradient 3s ease infinite;
|
animation: gradient 3s ease infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 阴影动画 */
|
/* 阴影动画 */
|
||||||
.shadow-animated {
|
.shadow-animated {
|
||||||
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
||||||
transition: box-shadow var(--transition-normal);
|
transition: box-shadow var(--transition-normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
.shadow-animated:hover {
|
.shadow-animated:hover {
|
||||||
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 模糊动画 */
|
/* 模糊动画 */
|
||||||
.backdrop-blur-animated {
|
.backdrop-blur-animated {
|
||||||
backdrop-filter: blur(8px);
|
backdrop-filter: blur(8px);
|
||||||
transition: backdrop-filter var(--transition-normal);
|
transition: backdrop-filter var(--transition-normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
.backdrop-blur-animated:hover {
|
.backdrop-blur-animated:hover {
|
||||||
backdrop-filter: blur(16px);
|
backdrop-filter: blur(16px);
|
||||||
}
|
}
|
||||||
@@ -259,18 +260,23 @@ body {
|
|||||||
0% {
|
0% {
|
||||||
background-position: 0% 50%;
|
background-position: 0% 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
background-position: 100% 50%;
|
background-position: 100% 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
background-position: 0% 50%;
|
background-position: 0% 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes float {
|
@keyframes float {
|
||||||
0%, 100% {
|
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
transform: translateY(0px);
|
transform: translateY(0px);
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
transform: translateY(-10px);
|
transform: translateY(-10px);
|
||||||
}
|
}
|
||||||
@@ -280,6 +286,7 @@ body {
|
|||||||
0% {
|
0% {
|
||||||
background-position: -200% 0;
|
background-position: -200% 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
background-position: 200% 0;
|
background-position: 200% 0;
|
||||||
}
|
}
|
||||||
@@ -290,6 +297,7 @@ body {
|
|||||||
transform: translateY(30px);
|
transform: translateY(30px);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -301,6 +309,7 @@ body {
|
|||||||
transform: translateY(-30px);
|
transform: translateY(-30px);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -312,6 +321,7 @@ body {
|
|||||||
transform: translateX(-30px);
|
transform: translateX(-30px);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -323,6 +333,7 @@ body {
|
|||||||
transform: translateX(30px);
|
transform: translateX(30px);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -334,6 +345,7 @@ body {
|
|||||||
transform: scale(0.9);
|
transform: scale(0.9);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -345,6 +357,7 @@ body {
|
|||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
transform: scale(0.9);
|
transform: scale(0.9);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
@@ -378,23 +391,19 @@ body {
|
|||||||
|
|
||||||
/* 加载状态样式 */
|
/* 加载状态样式 */
|
||||||
.loading-shimmer {
|
.loading-shimmer {
|
||||||
background: linear-gradient(
|
background: linear-gradient(90deg,
|
||||||
90deg,
|
#f0f0f0 0%,
|
||||||
#f0f0f0 0%,
|
#e0e0e0 50%,
|
||||||
#e0e0e0 50%,
|
#f0f0f0 100%);
|
||||||
#f0f0f0 100%
|
|
||||||
);
|
|
||||||
background-size: 200% 100%;
|
background-size: 200% 100%;
|
||||||
animation: shimmer 1.5s infinite;
|
animation: shimmer 1.5s infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .loading-shimmer {
|
.dark .loading-shimmer {
|
||||||
background: linear-gradient(
|
background: linear-gradient(90deg,
|
||||||
90deg,
|
#374151 0%,
|
||||||
#374151 0%,
|
#4b5563 50%,
|
||||||
#4b5563 50%,
|
#374151 100%);
|
||||||
#374151 100%
|
|
||||||
);
|
|
||||||
background-size: 200% 100%;
|
background-size: 200% 100%;
|
||||||
animation: shimmer 1.5s infinite;
|
animation: shimmer 1.5s infinite;
|
||||||
}
|
}
|
||||||
@@ -426,7 +435,10 @@ body {
|
|||||||
|
|
||||||
/* 响应式动效 */
|
/* 响应式动效 */
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
*, *::before, *::after {
|
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
animation-duration: 0.01ms !important;
|
animation-duration: 0.01ms !important;
|
||||||
animation-iteration-count: 1 !important;
|
animation-iteration-count: 1 !important;
|
||||||
transition-duration: 0.01ms !important;
|
transition-duration: 0.01ms !important;
|
||||||
@@ -435,15 +447,16 @@ body {
|
|||||||
|
|
||||||
/* 触摸设备优化 */
|
/* 触摸设备优化 */
|
||||||
@media (hover: none) and (pointer: coarse) {
|
@media (hover: none) and (pointer: coarse) {
|
||||||
|
|
||||||
.btn-carrot:hover,
|
.btn-carrot:hover,
|
||||||
.btn-carrot-outline:hover,
|
.btn-carrot-outline:hover,
|
||||||
.card-minecraft:hover {
|
.card-minecraft:hover {
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-carrot:active,
|
.btn-carrot:active,
|
||||||
.btn-carrot-outline:active,
|
.btn-carrot-outline:active,
|
||||||
.card-minecraft:active {
|
.card-minecraft:active {
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { Inter } from "next/font/google";
|
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import Navbar from "@/components/Navbar";
|
import Navbar from "@/components/Navbar";
|
||||||
import { AuthProvider } from "@/contexts/AuthContext";
|
import { AuthProvider } from "@/contexts/AuthContext";
|
||||||
@@ -9,12 +8,6 @@ import { ErrorNotificationContainer } from "@/components/ErrorNotification";
|
|||||||
import ScrollToTop from "@/components/ScrollToTop";
|
import ScrollToTop from "@/components/ScrollToTop";
|
||||||
import PageTransition from "@/components/PageTransition";
|
import PageTransition from "@/components/PageTransition";
|
||||||
|
|
||||||
const inter = Inter({
|
|
||||||
subsets: ["latin"],
|
|
||||||
weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
|
|
||||||
display: 'swap',
|
|
||||||
});
|
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "CarrotSkin - 现代化Minecraft Yggdrasil皮肤站",
|
title: "CarrotSkin - 现代化Minecraft Yggdrasil皮肤站",
|
||||||
description: "新一代Minecraft Yggdrasil皮肤站,为创作者打造的现代化皮肤管理平台",
|
description: "新一代Minecraft Yggdrasil皮肤站,为创作者打造的现代化皮肤管理平台",
|
||||||
@@ -34,7 +27,7 @@ export default function RootLayout({
|
|||||||
}>) {
|
}>) {
|
||||||
return (
|
return (
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
<body className={inter.className}>
|
<body>
|
||||||
<AuthProvider>
|
<AuthProvider>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<PageTransition>
|
<PageTransition>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const config: Config = {
|
|||||||
},
|
},
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
'minecraft': ['Minecraft', 'monospace'],
|
'minecraft': ['Minecraft', 'monospace'],
|
||||||
'sans': ['Inter', 'system-ui', 'sans-serif'],
|
'sans': ['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', 'Helvetica', 'Arial', 'sans-serif'],
|
||||||
},
|
},
|
||||||
animation: {
|
animation: {
|
||||||
'float': 'float 3s ease-in-out infinite',
|
'float': 'float 3s ease-in-out infinite',
|
||||||
|
|||||||
Reference in New Issue
Block a user