refactor:删除已弃用的组件和样式,迁移到 Tailwind CSS

- 改进项目页面、网站页面、友链页面
- 从 styles.css 中移除全局样式。
- 添加 tailwind.config.ts 以配置 Tailwind CSS。
- 更新 tsconfig.json,加入 Vue 组件的新路径映射。
This commit is contained in:
2025-12-15 23:38:44 +08:00
parent a6d4c8a27b
commit ba95a16f21
44 changed files with 1102 additions and 1498 deletions

353
app/styles.global.css Normal file
View File

@@ -0,0 +1,353 @@
@import "tailwindcss";
/* Font Awesome 字体优化 */
@font-face {
font-family: "Font Awesome 6 Solid";
src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-solid-900.woff2") format("woff2");
font-display: swap;
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "Font Awesome 6 Brands";
src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-brands-400.woff2") format("woff2");
font-display: swap;
font-weight: 400;
font-style: normal;
}
@layer base {
html {
height: 100%;
scroll-behavior: smooth;
}
:root {
color-scheme: light dark;
background: #0f1629;
color: #e8eefc;
}
body {
margin: 0;
min-height: 100%;
background: radial-gradient(circle at 20% 20%, #1b2b4b, #0f1629);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1,
h2,
h3 {
margin: 0;
margin-bottom: 0.5rem;
font-weight: 600;
}
p {
margin-top: 0.375rem;
margin-bottom: 0.375rem;
}
a {
color: #7cc1ff;
text-decoration: none;
transition: color 0.2s ease;
}
a:hover {
color: #a8d5ff;
}
}
@layer components {
.info-card {
@apply rounded-[14px] border border-white/10
bg-gradient-to-br from-white/5 to-white/0
px-4 py-3.5 transition-all duration-200;
}
}
@layer components {
.app-shell {
position: relative;
min-height: 100vh;
color: #e8eefc;
overflow: hidden;
display: flex;
flex-direction: column;
z-index: 0;
isolation: isolate;
}
.background-overlay {
position: fixed;
inset: 0;
pointer-events: none;
z-index: -10;
background-repeat: no-repeat;
}
.content-stack {
position: relative;
z-index: 10;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.app-body {
position: relative;
z-index: 10;
flex: 1;
display: flex;
flex-direction: column;
}
.background-toggle {
position: fixed;
right: 1.125rem;
bottom: 1.125rem;
z-index: 40;
display: inline-flex;
align-items: center;
gap: 0.375rem;
padding: 0.625rem 0.875rem;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.25);
background: rgba(255, 255, 255, 0.14);
backdrop-filter: blur(10px);
color: #f7fbff;
font-weight: 600;
cursor: pointer;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.28);
transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, border-color 0.18s ease;
}
.background-toggle:hover,
.background-toggle:focus-visible {
background: rgba(124, 193, 255, 0.25);
border-color: rgba(124, 193, 255, 0.65);
box-shadow: 0 14px 36px rgba(124, 193, 255, 0.28);
outline: none;
}
.background-toggle:active {
transform: translateY(1px) scale(0.99);
}
.background-toggle.active {
background: linear-gradient(135deg, rgba(124, 193, 255, 0.4), rgba(255, 255, 255, 0.2));
border-color: rgba(124, 193, 255, 0.8);
color: #0f1629;
box-shadow: 0 16px 42px rgba(124, 193, 255, 0.32);
}
.background-toggle .toggle-icon {
font-size: 18px;
line-height: 1;
}
.background-toggle .toggle-label {
font-size: 14px;
letter-spacing: 0.2px;
}
.card {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 1rem;
padding: 1.125rem 1.25rem;
backdrop-filter: blur(8px);
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.25);
transition: all 0.3s ease;
}
.card:hover {
border-color: rgba(255, 255, 255, 0.15);
box-shadow: 0 12px 48px rgba(124, 193, 255, 0.15);
}
.page {
max-width: 960px;
margin: 0 auto;
padding: 2rem 1rem 3rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.chips {
display: flex;
flex-wrap: wrap;
gap: 0.625rem;
}
.chips a,
.chip {
padding: 0.375rem 0.75rem;
border-radius: 999px;
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.1);
color: #e8eefc;
font-size: 0.875rem;
font-weight: 500;
transition: all 0.2s ease;
}
.chips a:hover,
.chip:hover {
background: rgba(124, 193, 255, 0.2);
border-color: rgba(124, 193, 255, 0.4);
color: #a8d5ff;
transform: translateY(-2px);
}
.list {
list-style: none;
padding: 0;
margin: 0;
}
.list li {
margin-bottom: 0.5rem;
}
.netease-mini-player,
.netease-mini-player-embed,
.nmpv2-player,
.nmpv2-root {
position: fixed !important;
bottom: 20px !important;
left: 20px !important;
right: auto !important;
max-width: calc(100% - 40px) !important;
z-index: 40001 !important;
margin: 0 !important;
transform: none !important;
}
.netease-mini-player > * {
box-sizing: border-box;
}
.netease-mini-player.minimized {
width: 80px !important;
height: 80px !important;
border-radius: 50% !important;
padding: 0 !important;
overflow: hidden !important;
box-shadow: none !important;
}
.netease-mini-player.minimized .album-cover-container {
width: 100% !important;
height: 100% !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
border-radius: 50% !important;
overflow: hidden !important;
}
.netease-mini-player.minimized .album-cover {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
border-radius: 50% !important;
}
.netease-mini-player[data-position="bottom-left"] .playlist-container,
.netease-mini-player[data-position="bottom-right"] .playlist-container {
position: fixed !important;
bottom: calc(20px + 80px) !important;
}
.muted {
color: #a8b3cf;
font-size: 0.875rem;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
.fade-down-enter-active,
.fade-down-leave-active {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.fade-down-enter-from {
opacity: 0;
transform: translateY(0.5rem);
}
.fade-down-leave-to {
opacity: 0;
transform: translateY(-0.5rem);
}
.fade-up-enter-active,
.fade-up-leave-active {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.fade-up-enter-from {
opacity: 0;
transform: translateY(-0.5rem);
}
.fade-up-leave-to {
opacity: 0;
transform: translateY(0.5rem);
}
}
@layer utilities {
.truncate-lines-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.truncate-lines-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.glass {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.glass-sm {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(4px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
@media (max-width: 640px) {
.background-toggle {
right: 0.75rem;
bottom: 0.75rem;
padding: 0.5625rem 0.75rem;
gap: 0.3125rem;
}
.background-toggle .toggle-label {
font-size: 0.8125rem;
}
}
}