Files
home/css/about.css
hehh a1a20b7ffd feat(about): 优化关于页面样式与功能
- 添加毛玻璃效果和背景模糊滤镜
- 改进导航栏布局和激活状态样式
- 优化操作按钮样式和交互反馈
- 完善语言切换功能,支持中英文字样显示
- 增强主题切换逻辑,同步按钮激活状态
- 改进博客文章渲染,支持多分类标签展示
- 优化日期格式化函数,适配中英文显示
- 调整标签云布局算法,改善视觉效果
- 增加标签网格定位和缩放限制
- 优化球形标签云旋转逻辑和自动旋转速度
2025-11-23 16:52:55 +08:00

853 lines
24 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* about.css - Aurora Nexus v2.0 */
/* =========================================
1. Design Tokens (Variables)
========================================= */
:root {
/* Fonts: System preferred for speed & legibility */
--font-main: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;
--font-serif: "Georgia", "Times New Roman", "Songti SC", serif;
--font-mono: "JetBrains Mono", "Fira Code", Consolas, monospace;
/* Day Theme (晨曦) */
--bg-base: #f2f4f7;
--bg-grad-1: #a1c4fd;
--bg-grad-2: #c2e9fb;
--glass-bg: rgba(255, 255, 255, 0.65);
--glass-border: 1px solid rgba(255, 255, 255, 0.9);
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.05);
--glass-blur: 20px;
--text-primary: #2d3436;
--text-secondary: #636e72;
--text-tertiary: #b2bec3;
--accent: #6c5ce7;
--accent-glow: rgba(108, 92, 231, 0.2);
--dock-bg: rgba(255, 255, 255, 0.85);
--radius: 24px;
/* 渐变色彩 */
--gradient-1: linear-gradient(135deg, #a1c4fd, #6c5ce7);
--gradient-2: linear-gradient(135deg, #c2e9fb, #00cec9);
--gradient-3: linear-gradient(135deg, #ff9a9e, #f093fb);
--gradient-4: linear-gradient(135deg, #a8edea, #4facfe);
--gradient-5: linear-gradient(135deg, #d299c2, #fef9d7);
}
[data-theme="night"] {
/* Night Theme (霓虹) */
--bg-base: #0f0f12;
--bg-grad-1: #2d3436;
--bg-grad-2: #000000;
--glass-bg: rgba(30, 30, 35, 0.65);
--glass-border: 1px solid rgba(255, 255, 255, 0.08);
--glass-shadow: 0 12px 40px rgba(0, 0, 0, 0.6);
--text-primary: #dfe6e9;
--text-secondary: #b2bec3;
--text-tertiary: #636e72;
--accent: #00cec9;
--accent-glow: rgba(0, 206, 201, 0.4);
--dock-bg: rgba(30, 30, 35, 0.9);
}
/* Global Reset */
* { box-sizing: border-box; margin: 0; padding: 0; outline: none; -webkit-tap-highlight-color: transparent; }
html { font-size: 16px; }
body {
font-family: var(--font-main);
background: var(--bg-base);
color: var(--text-primary);
line-height: 1.6;
overflow-x: hidden;
transition: background 0.5s, color 0.3s;
min-height: 100vh;
}
/* Ambient Background */
.aurora-canvas {
position: fixed; inset: 0; z-index: -1; overflow: hidden; pointer-events: none;
}
.glow-spot {
position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.5;
animation: float 20s infinite alternate;
}
.spot-1 { top: -10%; left: -10%; width: 50vw; height: 50vw; background: var(--bg-grad-1); }
.spot-2 { bottom: -10%; right: -10%; width: 60vw; height: 60vw; background: var(--bg-grad-2); animation-delay: -5s; }
.noise-layer {
position: absolute; inset: 0; opacity: 0.03;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
}
@keyframes float { 0% { transform: translate(0,0); } 100% { transform: translate(30px, 50px); } }
/* =========================================
2. Universal Glass Components
========================================= */
.glass-nav, .bento-card, .glass-panel, .modal-glass {
background: var(--glass-bg);
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
border: var(--glass-border);
box-shadow: var(--glass-shadow);
border-radius: var(--radius);
transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s;
}
.bento-card:hover, .glass-panel:hover {
transform: translateY(-4px);
box-shadow: 0 20px 50px rgba(0,0,0,0.1);
border-color: var(--accent);
}
/* Typography Effects */
.gradient-text {
background: linear-gradient(135deg, var(--text-primary), var(--accent));
-webkit-background-clip: text; background-clip: text; color: transparent;
}
[data-theme="night"] .gradient-text { text-shadow: 0 0 20px var(--accent-glow); }
.neon-font { font-family: var(--font-mono); font-weight: 700; color: var(--text-primary); }
[data-theme="night"] .neon-font { color: #fff; text-shadow: 0 0 10px var(--accent); }
.glow-title {
font-size: 1.3rem;
font-weight: 700;
display: flex;
align-items: center;
gap: 8px;
color: var(--text-primary);
text-shadow: 0 0 10px rgba(108, 92, 231, 0.3);
}
/* =========================================
3. Navigation
========================================= */
/* Desktop Nav */
@media (min-width: 769px) {
.glass-nav {
position: fixed; top: 20px; left: 50%; transform: translateX(-50%);
width: 90%; max-width: 1200px; height: 68px; padding: 0 30px; z-index: 1000;
border-radius: 100px;
}
.nav-inner { display: flex; justify-content: space-between; align-items: center; height: 100%; }
.logo-brand { font-family: var(--font-serif); font-size: 1.5rem; font-weight: 700; color: var(--text-primary); text-decoration: none; }
.logo-accent { color: var(--accent); font-size: 2rem; line-height: 0; }
.nav-menu { display: flex; align-items: center; gap: 24px; }
.nav-item {
display: flex; align-items: center; gap: 6px; color: var(--text-secondary);
text-decoration: none; font-weight: 500; font-size: 0.95rem; transition: color 0.3s;
padding: 8px 16px;
border-radius: 20px;
}
.nav-item:hover, .nav-item.active {
color: var(--text-primary);
background: rgba(108, 92, 231, 0.1);
}
.nav-item i { font-size: 1.2rem; }
.nav-divider { width: 1px; height: 20px; background: var(--text-tertiary); opacity: 0.3; }
/* 增强主题和语言切换按钮样式 */
.action-btn {
display: flex; align-items: center; gap: 4px;
color: var(--text-primary);
font-size: 0.9rem;
opacity: 0.8;
transition: all 0.3s;
padding: 8px 16px;
border-radius: 20px;
background: rgba(128,128,128,0.1);
border: none;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.action-btn:hover {
opacity: 1;
background: var(--accent);
color: white;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(108, 92, 231, 0.3);
}
.action-btn:active {
transform: translateY(0);
}
[data-theme="day"] .icon-sun { display: none; }
[data-theme="night"] .icon-moon { display: none; }
}
/* =========================================
4. Layout: Bento Grid (Responsive)
========================================= */
.main-container { max-width: 1200px; margin: 120px auto 60px; padding: 0 30px; }
.bento-grid {
display: grid; gap: 24px;
/* PC: 3 Col, 2 Row Main */
grid-template-columns: 320px 1fr 260px;
grid-template-rows: 240px 220px auto;
grid-template-areas:
"profile bio stats"
"profile bio mbti"
"tech tech interests";
}
/* --- Areas --- */
.area-profile { grid-area: profile; }
.area-bio { grid-area: bio; }
.area-stats { grid-area: stats; }
.area-mbti { grid-area: mbti; }
.area-tech { grid-area: tech; }
.area-interests { grid-area: interests; }
.mobile-social { display: none; }
/* --- Profile Card --- */
.area-profile { padding: 30px; display: flex; flex-direction: column; justify-content: space-between; align-items: center; text-align: center; }
.avatar-ring {
position: relative; width: 120px; height: 120px; border-radius: 50%;
padding: 4px; border: 1px solid var(--text-tertiary);
}
.avatar-img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
.status-dot {
position: absolute; bottom: 0; right: 0; background: #2ecc71; color: #fff;
font-size: 0.65rem; padding: 2px 8px; border-radius: 10px; border: 2px solid var(--bg-base);
}
.hero-name { font-size: 2rem; font-family: var(--font-serif); margin: 15px 0 5px; font-weight: 800; color: var(--text-primary); }
.hero-role { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: 10px; }
.location-tag { font-size: 0.85rem; color: var(--text-tertiary); display: flex; align-items: center; justify-content: center; gap: 4px; }
.social-dock { display: flex; gap: 12px; margin-top: 20px; }
.s-icon {
width: 36px; height: 36px; border-radius: 50%; background: rgba(128,128,128,0.1);
display: flex; align-items: center; justify-content: center; color: var(--text-secondary);
transition: all 0.3s; text-decoration: none;
}
.s-icon:hover { background: var(--accent); color: #fff; transform: translateY(-3px); }
/* --- Bio Card --- */
.area-bio { padding: 35px; display: flex; flex-direction: column; justify-content: center; position: relative; }
.card-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 2px; color: var(--text-tertiary); margin-bottom: 15px; }
.bio-text { font-size: 1rem; color: var(--text-primary); margin-bottom: 20px; text-align: justify; }
.quote-box { border-left: 3px solid var(--accent); padding-left: 15px; font-style: italic; color: var(--text-secondary); font-size: 0.9rem; }
/* --- Stats --- */
.area-stats { display: flex; flex-direction: column; justify-content: space-around; padding: 20px 30px; }
.stat-item { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(128,128,128,0.1); padding: 10px 0; }
.stat-item:last-child { border-bottom: none; }
.stat-val { font-size: 1.5rem; }
.stat-key { font-size: 0.8rem; color: var(--text-tertiary); text-transform: uppercase; }
/* --- MBTI --- */
.area-mbti { padding: 30px; display: flex; align-items: center; }
.mbti-inner { width: 100%; }
.mbti-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 10px; }
.mbti-code { font-size: 2.2rem; font-weight: 900; font-family: var(--font-mono); }
.mbti-name { font-weight: 600; color: var(--text-secondary); }
.mbti-icon { font-size: 1.5rem; }
.mbti-desc { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: 15px; line-height: 1.5; }
.mbti-tags { display: flex; gap: 8px; flex-wrap: wrap; }
.tag { font-size: 0.75rem; background: rgba(128,128,128,0.1); padding: 4px 10px; border-radius: 6px; color: var(--text-secondary); }
/* --- Tech Stack (PC) --- */
.area-tech { display: flex; flex-direction: column; position: relative; overflow: hidden; }
.card-header { padding: 20px 25px; border-bottom: 1px solid rgba(128,128,128,0.1); }
.card-header h3 { font-size: 1.1rem; color: var(--text-primary); margin: 0; }
/* PC 3D Container */
.tech-wrapper { flex: 1; position: relative; min-height: 250px; width: 100%; }
.tech-tag-3d {
position: absolute;
font-size: 0.85rem;
font-weight: 600;
color: var(--text-primary);
padding: 6px 12px;
border-radius: 6px;
user-select: none;
white-space: nowrap;
backface-visibility: hidden;
/* 移除背景色和边框,只保留文字渐变效果 */
background: none;
border: none;
/* 添加文字渐变 */
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
pointer-events: none; /* 禁用鼠标事件避免干扰 */
}
[data-theme="night"] .tech-tag-3d {
color: #00cec9;
}
/* 不同颜色的标签 */
.tech-tag-3d.tag-color-1, .tech-tag-mobile.tag-color-1 {
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.tech-tag-3d.tag-color-2, .tech-tag-mobile.tag-color-2 {
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.tech-tag-3d.tag-color-3, .tech-tag-mobile.tag-color-3 {
background: var(--gradient-3);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.tech-tag-3d.tag-color-4, .tech-tag-mobile.tag-color-4 {
background: var(--gradient-4);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.tech-tag-3d.tag-color-5, .tech-tag-mobile.tag-color-5 {
background: var(--gradient-5);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* --- Interests --- */
.area-interests { padding: 20px; }
.interest-list {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
height: 100%;
align-content: center;
}
.interest-item {
background: rgba(128,128,128,0.05);
padding: 15px;
border-radius: 12px;
display: flex;
align-items: center;
gap: 12px;
transition: background 0.3s;
}
.interest-item:hover { background: rgba(128,128,128,0.1); }
.i-emoji { font-size: 1.5rem; }
.i-text { display: flex; flex-direction: column; min-width: 0; } /* 添加 min-width: 0 防止溢出 */
.i-text strong {
font-size: 0.9rem;
color: var(--text-primary);
/* 为兴趣标签添加渐变色彩 */
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.i-text span {
font-size: 0.75rem;
color: var(--text-tertiary);
/* 为兴趣描述添加渐变色彩 */
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* =========================================
5. Content Sections (Blog/Github)
========================================= */
.content-section {
display: flex;
flex-direction: column;
gap: 24px;
margin-top: 40px;
}
.col-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.glow-title {
font-size: 1.3rem;
font-weight: 700;
display: flex;
align-items: center;
gap: 8px;
color: var(--text-primary);
}
.more-link {
font-size: 0.9rem;
color: var(--accent);
font-weight: 600;
text-decoration: none;
}
.glass-panel {
padding: 20px;
min-height: 300px;
}
/* Github Lists */
.projects-list {
margin-top: 15px;
display: flex;
flex-direction: column;
gap: 10px;
max-height: 400px;
overflow-y: auto;
}
.repo-card {
padding: 15px;
background: rgba(128,128,128,0.05);
border-radius: 12px;
cursor: pointer;
border: 1px solid transparent;
transition: border 0.3s;
}
.repo-card:hover {
border-color: var(--accent);
}
.repo-head {
display: flex;
justify-content: space-between;
font-weight: 700;
color: var(--text-primary);
font-size: 0.95rem;
}
.repo-desc {
font-size: 0.8rem;
color: var(--text-secondary);
margin-top: 6px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* Blog List */
.blog-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.blog-item {
padding: 12px 16px;
border-radius: 12px;
background: rgba(128,128,128,0.03);
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
transition: background 0.3s;
}
.blog-item:hover {
background: rgba(128,128,128,0.08);
}
.b-info {
flex: 1;
min-width: 0;
margin-right: 15px;
}
.b-title {
font-weight: 600;
font-size: 0.95rem;
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.b-date {
font-size: 0.75rem;
color: var(--text-tertiary);
}
.b-cat {
font-size: 0.75rem;
color: var(--accent);
background: rgba(128,128,128,0.1);
padding: 2px 8px;
border-radius: 4px;
white-space: nowrap;
}
/* Loading Skeleton */
.skeleton-card {
height: 60px;
background: rgba(128,128,128,0.1);
border-radius: 10px;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { opacity: 0.6; }
50% { opacity: 1; }
100% { opacity: 0.6; }
}
/* Comments */
.comments-wrapper {
margin: 40px 0 80px;
}
.comment-box {
padding: 30px;
}
/* =========================================
6. Tablet Adaptive (768px - 1024px)
========================================= */
@media (min-width: 769px) and (max-width: 1024px) {
.bento-grid {
grid-template-columns: 1fr 1fr;
grid-template-areas:
"profile stats"
"profile mbti"
"bio bio"
"tech tech"
"interests interests";
grid-template-rows: auto;
}
.area-profile { flex-direction: row; gap: 20px; }
.content-section {
display: flex;
flex-direction: column;
}
/* 修复平板模式下兴趣模块的高度问题 */
.interest-list {
grid-template-columns: 1fr 1fr;
max-height: 150px; /* 限制高度 */
overflow: hidden;
}
.i-text {
flex-direction: row;
align-items: center;
gap: 8px;
}
.i-text strong, .i-text span {
white-space: nowrap;
}
/* 兴趣模块文本渐变色彩 */
.i-text strong {
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.i-text span {
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
}
/* =========================================
7. Mobile Layout (< 768px)
========================================= */
@media (max-width: 768px) {
.main-container {
margin: 20px auto 100px;
padding: 0 16px;
}
/* Bottom Dock */
.glass-nav {
position: fixed;
top: auto;
bottom: 0;
left: 0;
width: 100%;
height: auto;
border-radius: 0;
background: var(--dock-bg);
backdrop-filter: blur(12px) saturate(120%);
-webkit-backdrop-filter: blur(12px) saturate(120%);
border-top: 1px solid rgba(128,128,128,0.1);
padding-bottom: env(safe-area-inset-bottom);
z-index: 1000;
}
.logo-brand, .nav-divider {
display: none;
}
.nav-menu {
width: 100%;
justify-content: space-around;
padding: 10px 0;
display: flex;
}
.nav-item {
flex-direction: column;
gap: 2px;
font-size: 0.7rem;
padding: 8px 0;
color: var(--text-secondary);
}
.nav-item i {
font-size: 1.4rem;
}
.nav-label {
font-size: 10px;
color: var(--text-primary);
}
.nav-item.active {
color: var(--text-primary);
}
.action-btn .btn-text {
display: none;
}
.action-btn {
font-size: 1.2rem;
padding: 8px;
background: rgba(128,128,128,0.08);
border-radius: 12px;
transition: all 0.2s ease;
}
.action-btn.is-active {
background: rgba(108, 92, 231, 0.25);
color: #fff;
}
/* Stacking Bento */
.bento-grid {
display: flex;
flex-direction: column;
gap: 16px;
}
/* Profile Mobile */
.area-profile {
padding: 20px;
flex-direction: row;
gap: 15px;
align-items: center;
text-align: left;
}
.avatar-ring {
width: 80px;
height: 80px;
padding: 2px;
margin: 0;
}
.status-dot {
right: 0;
bottom: 0;
width: 12px;
height: 12px;
font-size: 0;
padding: 0;
}
.hero-name {
margin: 0 0 4px;
font-size: 1.5rem;
}
.hero-role {
font-size: 0.8rem;
margin-bottom: 6px;
}
.location-tag {
justify-content: flex-start;
}
.desktop-social {
display: none;
}
/* Mobile Stats */
.area-stats {
flex-direction: row;
padding: 15px;
}
.stat-item {
flex-direction: column;
border-bottom: none;
border-right: 1px solid rgba(128,128,128,0.1);
padding: 0 10px;
flex: 1;
text-align: center;
}
.stat-item:last-child {
border-right: none;
}
.stat-val {
font-size: 1.2rem;
}
/* Mobile Tech Scroll (Horizontal) */
.area-tech {
height: auto;
}
.tech-wrapper {
display: none;
} /* Hide PC wrapper */
.tech-wrapper.mobile-scroll {
display: grid;
height: auto;
min-height: 120px;
grid-template-rows: repeat(3, 30px); /* 三行每行30px */
grid-auto-flow: column;
gap: 10px;
overflow-x: auto;
padding: 10px 0 20px;
scroll-snap-type: x mandatory;
/* 添加淡入淡出效果 */
mask-image: linear-gradient(
to right,
transparent 0%,
black 10%,
black 90%,
transparent 100%
);
-webkit-mask-image: linear-gradient(
to right,
transparent 0%,
black 10%,
black 90%,
transparent 100%
);
/* 添加持续滚动动画 */
animation: scrollLine 15s linear infinite;
}
@keyframes scrollLine {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.tech-tag-mobile {
scroll-snap-align: start;
padding: 6px 12px;
border-radius: 20px;
font-size: 0.8rem;
font-family: var(--font-mono);
white-space: nowrap;
border: none;
font-weight: bold;
/* 添加文字渐变效果 */
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
pointer-events: none;
}
/* Mobile Social */
.mobile-social {
display: flex;
justify-content: space-around;
padding: 20px;
}
.ms-btn {
width: 40px;
height: 40px;
border-radius: 50%;
background: rgba(128,128,128,0.1);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-secondary);
font-size: 1.4rem;
}
.content-section {
display: flex;
flex-direction: column;
}
/* 修复兴趣模块在移动端的溢出问题 */
.interest-list {
grid-template-columns: 1fr;
max-height: none;
}
.interest-item {
min-width: 0;
}
.i-text {
min-width: 0;
}
/* 修复移动端兴趣模块标签和描述在同一行 */
.i-text {
flex-direction: row;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.i-text strong, .i-text span {
white-space: nowrap;
}
/* 兴趣模块文本渐变色彩 */
.i-text strong {
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.i-text span {
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
}
/* =========================================
8. Modal & Footer
========================================= */
.modal-overlay {
position: fixed;
inset: 0;
z-index: 2000;
background: rgba(0,0,0,0.6);
backdrop-filter: blur(8px);
display: none;
align-items: center;
justify-content: center;
}
.modal-glass {
width: 300px;
padding: 30px;
text-align: center;
position: relative;
}
.modal-close {
position: absolute;
top: 15px;
right: 15px;
font-size: 1.5rem;
color: var(--text-secondary);
}
.qr-box {
margin: 20px 0;
}
.qr-box img {
width: 100%;
border-radius: 12px;
}
.qr-fallback {
padding: 40px;
background: #eee;
border-radius: 12px;
font-size: 0.8rem;
}
.site-footer {
text-align: center;
color: var(--text-tertiary);
font-size: 0.75rem;
padding-bottom: 100px;
}