Files
home/css/about.css
hehh 6bb4ce7b5e feat(about): 优化页面样式与功能增强
- 新增渐变色彩变量,用于文本和标签的视觉效果提升
- 增强导航项和操作按钮的悬停动效与交互反馈
- 重构技术标签和兴趣模块,支持动态渐变色彩展示
- 优化移动端布局,包括底部导航、技术标签滚动及兴趣模块适配
- 引入Artalk主题切换支持,提升评论区体验一致性
- 博客内容获取逻辑升级:优先使用RSS源并添加缓存机制
- GitHub仓库数据过滤非原创项目,并增加fork数量显示
- 技术标签3D球体增大半径以改善标签分布与可读性
- 页面结构调整,明确划分开源项目与博客文章区域
- 修复多处移动端显示异常问题,提高整体响应式表现
2025-11-23 16:37:12 +08:00

839 lines
23 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);
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;
}
.nav-item {
flex-direction: column;
gap: 2px;
font-size: 0.7rem;
padding: 8px 0;
}
.nav-item i {
font-size: 1.4rem;
}
.nav-label {
font-size: 10px;
}
.action-btn .btn-text {
display: none;
}
.action-btn {
font-size: 1.2rem;
padding: 5px;
background: transparent;
}
/* 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;
}