Files
home/css/about.css
hehh b179431aaa feat(about): 优化技术标签云渲染与状态管理
- 引入 sessionStorage 缓存技术标签云状态,提升页面切换性能
- 区分移动端与桌面端渲染逻辑,实现响应式适配
- 抽离 3D 球体动画初始化方法,增强代码可维护性
- 添加窗口大小变化监听器,动态调整渲染内容
- 实现标签云生成与状态保存功能,避免重复计算
- 优化动画性能,使用 requestAnimationFrame 处理鼠标交互
2025-11-30 02:13:13 +08:00

2103 lines
52 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 {
--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;
--bg-base: #f3f4f6;
--bg-grad-1: #a1c4fd;
--bg-grad-2: #c2e9fb;
--glass-bg: rgba(255, 255, 255, 0.75);
--glass-border: 1px solid rgba(255, 255, 255, 0.9);
--glass-shadow: 0 12px 36px rgba(0, 0, 0, 0.12);
--glass-blur: 28px;
--text-primary: #1f2937;
--text-secondary: #4b5563;
--text-tertiary: #6b7280;
--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);
--gradient-6: linear-gradient(135deg, #f6d365, #fda085);
--gradient-7: linear-gradient(135deg, #84fab0, #8fd3f4);
--gradient-8: linear-gradient(135deg, #fccb90, #d57eeb);
--gradient-9: linear-gradient(135deg, #ffecd2, #fcb69f);
--gradient-10: linear-gradient(135deg, #cfd9df, #e2ebf0);
--day-tag-1: #0ea5e9;
--day-tag-2: #ef4444;
--day-tag-3: #10b981;
--day-tag-4: #f59e0b;
}
[data-theme="night"] {
--bg-base: #0f0f12;
--bg-grad-1: #2d3436;
--bg-grad-2: #000000;
--glass-bg: rgba(30, 30, 35, 0.55);
--glass-border: 1px solid rgba(255, 255, 255, 0.15);
--glass-shadow: 0 18px 60px rgba(0, 0, 0, 0.65);
--text-primary: #ffffff;
--text-secondary: #e0e0e0;
--text-tertiary: #b0b0b0;
--accent: #00cec9;
--accent-glow: rgba(0, 206, 201, 0.4);
--dock-bg: rgba(30, 30, 35, 0.95);
}
/* =========================================
2. Global Reset & Base Styles
========================================= */
* {
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;
-webkit-font-smoothing: antialiased;
color-scheme: light;
}
/* 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");
}
/* =========================================
3. Universal Glass Components
========================================= */
.glass-nav, .bento-card, .glass-panel, .modal-glass {
background: var(--glass-bg);
backdrop-filter: blur(var(--glass-blur)) saturate(130%);
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(130%);
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 28px 60px rgba(0, 0, 0, 0.15);
border-color: var(--accent);
}
/* Typography Effects & Animations */
.gradient-text {
background: linear-gradient(135deg, var(--text-primary), var(--accent));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.neon-font {
font-family: var(--font-mono);
font-weight: 700;
color: var(--text-primary);
}
.grad-text-1 {
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.grad-text-2 {
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.grad-text-3 {
background: var(--gradient-3);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.night-glow {
text-shadow: 0 0 10px var(--accent-glow);
}
.glow-cycle {
animation: hueCycle 8s linear infinite;
}
.animated-gradient {
background-image: linear-gradient(90deg, var(--text-primary), var(--accent), var(--text-primary));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: gradientShift 6s linear infinite;
text-shadow: 0 0 8px rgba(108, 92, 231, 0.2);
}
/* Animation Definitions */
@keyframes float {
0% { transform: translate(0, 0); }
100% { transform: translate(30px, 50px); }
}
@keyframes hueCycle {
0% { filter: hue-rotate(0deg); }
100% { filter: hue-rotate(360deg); }
}
@keyframes gradientShift {
0% { background-position: 0% 50%; }
100% { background-position: 200% 50%; }
}
@keyframes waveGlow {
0% { background-position: 0% 50%; }
100% { background-position: 200% 50%; }
}
@keyframes breatheGlowAdvanced {
0% {
box-shadow:
0 0 15px rgba(100, 200, 255, 0.4),
0 0 30px rgba(100, 200, 255, 0.2),
inset 0 0 10px rgba(60, 180, 255, 0.15);
}
25% {
box-shadow:
0 0 25px rgba(130, 220, 255, 0.6),
0 0 45px rgba(70, 190, 255, 0.35),
inset 0 0 15px rgba(50, 170, 255, 0.25);
}
50% {
box-shadow:
0 0 35px rgba(180, 100, 255, 0.7),
0 0 60px rgba(150, 80, 255, 0.5),
inset 0 0 20px rgba(120, 60, 220, 0.3);
}
75% {
box-shadow:
0 0 25px rgba(100, 255, 200, 0.6),
0 0 50px rgba(80, 230, 180, 0.4),
inset 0 0 15px rgba(60, 200, 160, 0.25);
}
100% {
box-shadow:
0 0 15px rgba(100, 200, 255, 0.4),
0 0 30px rgba(100, 200, 255, 0.2),
inset 0 0 10px rgba(60, 180, 255, 0.15);
}
}
@keyframes pulse {
0% { opacity: 0.6; }
50% { opacity: 1; }
100% { opacity: 0.6; }
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(2px); }
to { opacity: 1; transform: none; }
}
@keyframes rowMarquee {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.icon-moon {
transition: opacity 3s ease;
}
/* Theme-Specific Typography Styles */
[data-theme="night"] .gradient-text {
text-shadow: 0 0 20px var(--accent-glow);
}
[data-theme="night"] .tech-tag-3d,
[data-theme="night"] .tech-tag-mobile {
text-shadow: 0 0 6px rgba(255, 255, 255, 0.12), 0 0 12px var(--accent-glow);
}
[data-theme="night"] .neon-font {
color: #ffffff;
text-shadow: 0 0 15px var(--accent), 0 0 25px var(--accent);
font-weight: bold;
}
[data-theme="day"] .icon-sun {
color: #ffa500;
font-size: 1.3rem;
}
[data-theme="night"] .icon-moon {
color: #8b5cf6;
font-size: 1.3rem;
}
.nav-menu .action-btn.is-active .icon-sun {
opacity: 0;
}
.nav-menu .action-btn.is-active .icon-moon {
opacity: 1;
}
.nav-menu .action-btn:not(.is-active) .icon-sun {
opacity: 1;
}
.nav-menu .action-btn:not(.is-active) .icon-moon {
opacity: 0;
}
/* =========================================
4. Navigation
========================================= */
/* Desktop Nav (≥769px) */
@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 Buttons (Theme/Language) */
.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);
}
}
/* Mobile Nav (<=768px) */
@media (max-width: 768px) {
.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 {
position: fixed;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
z-index: 1000;
display: flex;
align-items: center;
gap: 8px;
padding: 3px;
border-radius: 32px;
background: var(--glass-bg);
border: var(--glass-border);
box-shadow: var(--glass-shadow);
backdrop-filter: blur(12px);
width: calc(100% - 40px);
max-width: 400px;
}
.nav-menu .nav-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 12px 8px;
border-radius: 20px;
color: var(--text-secondary);
text-decoration: none;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
/* Active状态高亮 */
.nav-menu .nav-item.active {
background: var(--accent-light);
color: var(--accent);
box-shadow: 0 4px 12px rgba(var(--accent-rgb), 0.2);
}
/* 图标+文字适配 */
.nav-menu .nav-item i {
font-size: 1.2rem;
margin-bottom: 4px;
}
.nav-menu .nav-label {
font-size: 0.7rem;
font-weight: 500;
}
/* 分割线适配 */
.nav-menu .nav-divider {
width: 1px;
height: 30px;
background: var(--text-tertiary);
opacity: 0.3;
margin: 0 4px;
}
.action-btn {
display: none;
}
.action-btn .btn-text {
display: none;
}
[data-theme="night"] .nav-menu {
background: rgba(20, 20, 30, 0.85);
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
}
[data-theme="night"] .nav-menu .nav-item.active,
[data-theme="night"] .nav-menu .action-btn.is-active {
text-shadow: 0 0 6px rgba(161, 196, 253, 0.4);
}
[data-theme="night"] .nav-menu .nav-item:hover:not(.active) {
color: #fff;
background: rgba(255, 255, 255, 0.1);
}
}
/* =========================================
5. Layout: Bento Grid (Responsive)
========================================= */
.main-container {
max-width: 1200px;
margin: 120px auto 60px;
padding: 0 30px;
}
/* Desktop Grid (≥1025px) */
.bento-grid {
display: grid;
gap: 24px;
grid-template-columns: 320px 1fr 260px;
grid-template-rows: 240px 220px auto;
grid-template-areas:
"profile bio stats"
"profile bio mbti"
"tech tech interests";
}
/* Tablet Grid (769px-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;
}
}
/* Mobile Grid (<=768px) */
@media (max-width: 768px) {
.main-container {
margin: 20px auto 100px;
padding: 0 16px;
}
.bento-grid {
display: flex;
flex-direction: column;
gap: 16px;
}
}
/* Grid Areas Definition */
.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; }
/* =========================================
6. Section Styles
========================================= */
/* Profile Card */
.area-profile {
padding: 30px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
text-align: center;
isolation: isolate;
contain: layout style;
}
.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);
isolation: isolate;
}
.hero-role {
font-size: 0.9rem;
color: var(--text-secondary);
margin-bottom: 10px;
isolation: isolate;
}
.location-tag {
font-size: 0.85rem;
color: var(--text-tertiary);
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
}
/* Tablet Profile Layout */
@media (min-width: 769px) and (max-width: 1024px) {
.area-profile {
flex-direction: row;
gap: 20px;
}
}
/* Mobile Profile Layout */
@media (max-width: 768px) {
.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;
}
}
/* Night Theme Profile Styles */
[data-theme="night"] .area-profile {
position: relative;
z-index: 2;
transform: translateZ(0);
animation: breatheGlowAdvanced 6s ease-in-out infinite alternate;
}
[data-theme="night"] .hero-name {
background: linear-gradient(90deg, #ff7eb3, #ff758c, #ff6b6b, #ff9a8b) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
text-shadow:
0 0 10px rgba(255, 126, 179, 0.8),
0 0 20px rgba(255, 117, 140, 0.7),
0 0 30px rgba(255, 107, 107, 0.6),
0 0 40px rgba(255, 154, 139, 0.5);
transform: translateZ(0);
-webkit-text-stroke: 0.3px rgba(0, 0, 0, 0.3);
}
[data-theme="night"] .hero-role {
background: linear-gradient(90deg, #4facfe, #00f2fe, #43e97b, #38f9d7) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
text-shadow:
0 0 8px rgba(79, 172, 254, 0.7),
0 0 16px rgba(0, 242, 254, 0.6),
0 0 24px rgba(67, 233, 123, 0.5),
0 0 32px rgba(56, 249, 215, 0.4);
transform: translateZ(0);
-webkit-text-stroke: 0.2px rgba(0, 0, 0, 0.2);
}
/* Social Links */
.social-dock {
display: flex;
gap: 12px;
margin-top: 20px;
}
.s-icon {
width: 46px;
height: 46px;
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);
}
.s-icon:hover i {
color: transparent !important;
-webkit-text-fill-color: transparent;
}
.s-icon i {
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
.s-icon[href*="github.com"] i { background: var(--gradient-7); }
.s-icon[href^="mailto:"] i { background: var(--gradient-6); }
.s-icon[href*="blog.hehouhui.cn"] i { background: var(--gradient-3); }
.s-icon[href*="zhihu.com"] i { background: var(--gradient-4); }
.s-icon[href*="juejin.cn"] i { background: var(--gradient-1); }
.s-icon[onclick*="toggleWechat"] i { background: var(--gradient-5); }
/* Night Theme Social Styles */
[data-theme="night"] .s-icon {
box-shadow: 0 0 10px var(--accent-glow);
}
[data-theme="night"] .s-icon i {
text-shadow: 0 0 25px var(--accent-glow);
}
[data-theme="night"] .social-dock .s-icon {
filter: hue-rotate(0deg);
animation: hueCycle 10s linear infinite;
}
/* Desktop Social Layout */
@media (min-width: 769px) {
.mobile-social {
display: none !important;
}
.social-dock { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; justify-items: center; }
.s-icon { width: 42px; height: 42px; }
.s-icon i { font-size: 1.6rem; }
}
/* Mobile Social Layout */
.mobile-social {
display: none;
}
@media (max-width: 768px) {
.mobile-social {
display: flex;
justify-content: space-around;
padding: 20px;
}
.desktop-social {
display: none;
}
.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;
}
/* Night Theme Mobile Social Glow */
[data-theme="night"] .ms-btn:nth-child(1) { box-shadow: 0 0 20px rgba(132, 250, 176, 0.8); }
[data-theme="night"] .ms-btn:nth-child(2) { box-shadow: 0 0 20px rgba(246, 211, 101, 0.8); }
[data-theme="night"] .ms-btn:nth-child(3) { box-shadow: 0 0 20px rgba(255, 154, 158, 0.8); }
[data-theme="night"] .ms-btn:nth-child(4) { box-shadow: 0 0 20px rgba(168, 237, 234, 0.8); }
[data-theme="night"] .ms-btn:nth-child(5) { box-shadow: 0 0 20px rgba(210, 153, 194, 0.8); }
[data-theme="night"] .ms-btn:nth-child(6) { box-shadow: 0 0 20px rgba(161, 196, 253, 0.8); }
}
/* Social Icon Color Reset */
.social-dock .s-icon {
color: var(--text-primary);
}
.social-dock .s-icon i {
background: none !important;
-webkit-background-clip: initial !important;
background-clip: initial !important;
-webkit-text-fill-color: initial !important;
color: currentColor !important;
text-shadow: none !important;
}
/* Bio Card */
.area-bio {
padding: 35px;
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
}
.card-label {
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 2px;
color: var(--text-tertiary);
margin-bottom: 15px;
}
.bio-text {
display: -webkit-box;
-webkit-line-clamp: 7;
-webkit-box-orient: vertical;
overflow: hidden;
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;
}
.link-btn {
background: none;
border: none;
color: var(--accent);
cursor: pointer;
font-size: 0.85rem;
}
/* Language-Specific Bio Styles */
[data-lang="en"] .bio-text {
font-size: 1rem;
line-height: 1.5;
font-family: 'Noto Serif', serif;
font-style: oblique;
}
/* Night Theme Bio Styles */
[data-theme="night"] .card-label {
background: linear-gradient(90deg, #4facfe 0%, #6c5ce7 50%, #4facfe 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
[data-theme="night"] .bio-text {
background: linear-gradient(90deg, #4facfe 0%, #6c5ce7 50%, #4facfe 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
background-size: 200% auto;
animation: waveGlow 3s linear infinite;
}
/* 引用文本(技术追求描述)- 黑夜模式渐变 */
[data-theme="night"] .area-bio .quote-box p {
background: linear-gradient(120deg, #a1c4fd, #6c5ce7) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-webkit-text-fill-color: transparent !important;
color: transparent !important;
text-shadow: 0 0 2px rgba(161, 196, 253, 0.3) !important; /* 轻微发光不模糊 */
}
/* Mobile Quote Collapse */
@media (max-width: 768px) {
.quote-box p.quote-collapsed {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
}
/* Stats Card */
.area-stats {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 8px;
padding: 20px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(128, 128, 128, 0.1);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
.stat-item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 12px;
border-radius: 12px;
background: rgba(255, 255, 255, 0.9);
transition: all 0.3s ease;
min-width: 0;
text-align: center;
}
.stat-item:hover {
background: rgba(108, 92, 231, 0.1);
transform: translateY(-3px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.stat-val {
font-size: 1.5rem;
margin-bottom: 5px;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-weight: bold;
}
.stat-key {
font-size: 0.75rem;
color: var(--text-tertiary);
text-transform: uppercase;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Night Theme Stats Styles */
[data-theme="night"] .area-stats {
background: rgba(30, 30, 35, 0.85);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}
[data-theme="night"] .area-stats:hover {
border-color: var(--accent);
box-shadow: 0 0 15px var(--accent-glow);
}
[data-theme="night"] .stat-item {
background: rgba(255, 255, 255, 0.15);
}
[data-theme="night"] .stat-item:hover {
background: rgba(108, 92, 231, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
[data-theme="night"] .stat-val {
color: #fff;
text-shadow: 0 0 10px var(--accent-glow);
}
[data-theme="night"] .stat-key {
color: var(--text-secondary);
text-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
}
/* Responsive Stats Layout */
@media (min-width: 1025px) and (max-width: 1445px), (min-width: 1201px) {
.area-stats {
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 12px;
}
}
@media (min-width: 769px) and (max-width: 1024px) {
.area-stats {
grid-template-columns: repeat(5, 1fr);
gap: 6px;
}
.stat-item {
padding: 10px 5px;
}
.stat-val {
font-size: 1.3rem;
}
.stat-key {
font-size: 0.7rem;
}
}
@media (max-width: 768px) {
.area-stats {
grid-template-columns: repeat(5, 1fr);
padding: 15px 10px;
gap: 4px;
}
.stat-item {
padding: 8px 2px;
}
.stat-val {
font-size: 1.1rem;
margin-bottom: 3px;
}
[data-lang="en"] .stat-key {
font-size: 6px !important;
}
}
@media (min-width: 1446px) {
.area-stats {
grid-template-columns: repeat(5, 1fr);
gap: 8px;
}
}
/* MBTI Card */
.area-mbti {
padding: 3px;
display: flex;
align-items: center;
}
.mbti-inner {
width: 100%;
}
.mbti-head {
margin-left: 20px;
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 {
margin-left: 15px;
font-size: 0.7rem;
color: var(--text-secondary);
margin-bottom: 15px;
line-height: 1.3;
font-style: italic;
}
.mbti-tags {
display: grid;
gap: 1px;
grid-template-columns: 1fr 1fr;
flex-wrap: wrap;
flex-direction: row;
justify-content: flex-start;
}
@media (max-width: 768px) {
.mbti-tags {
margin-left: 20px;
}
}
.mbti-tags .tag {
font-size: 0.75rem;
padding: 4px 10px;
border-radius: 6px;
background: none !important;
border: none !important;
background-color: transparent !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
-webkit-text-fill-color: transparent !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
}
.mbti-tags .tag.tag-color-1 {
background: var(--gradient-1) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
.mbti-tags .tag.tag-color-2 {
background: var(--gradient-2) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
.mbti-tags .tag.tag-color-3 {
background: var(--gradient-3) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
.mbti-tags .tag.tag-color-4 {
background: var(--gradient-4) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
/* Theme-Specific MBTI Styles */
[data-theme="day"] .mbti-desc {
background: linear-gradient(90deg, #6c5ce7 0%, #3b82f6 50%, #0ea5e9 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
[data-theme="night"] .mbti-desc {
background: linear-gradient(90deg, #a162e8 0%, #8b5cf6 50%, #6c5ce7 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
border-radius: 8px;
padding: 8px 12px;
}
/* Tech Stack Card */
.area-tech {
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
contain: layout style;
}
.card-header {
padding: 20px 25px;
border-bottom: 1px solid rgba(128, 128, 128, 0.1);
display: flex;
justify-content: space-between;
align-items: center;
}
.card-header h3 {
font-size: 1.1rem;
color: var(--text-primary);
margin: 0;
background: var(--gradient-2);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
font-style: inherit;
font-weight: 700;
}
.card-subtitle {
font-size: 0.8rem;
background: var(--gradient-3);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* Desktop Tech 3D Layout */
.tech-wrapper {
flex: 1;
position: relative;
min-height: 280px;
width: 100%;
overflow: hidden;
}
.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;
will-change: transform;
border: none;
outline: none;
box-shadow: none;
background-color: transparent !important;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
text-decoration: none;
pointer-events: none;
z-index: 10;
contain: layout style;
}
/* Mobile Tech Scroll Layout */
@media (max-width: 768px) {
.area-tech {
height: auto;
}
.tech-wrapper {
display: none;
}
.tech-wrapper.mobile-scroll {
display: grid;
height: auto;
min-height: 120px;
grid-template-rows: repeat(3, 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 20%, black 80%, transparent 100%);
-webkit-mask-image: linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%);
}
.tech-row {
display: flex;
gap: 10px;
align-items: center;
white-space: nowrap;
will-change: transform;
animation: rowMarquee var(--row-speed) linear infinite;
}
.row-1 { --row-speed: 24s; }
.row-2 { --row-speed: 28s; }
.row-3 { --row-speed: 32s; }
.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;
outline: none;
box-shadow: none;
background-color: transparent !important;
font-weight: bold;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
text-decoration: none;
pointer-events: none;
z-index: 10;
contain: layout style;
}
}
/* Tech Tag Color Definitions */
/* Day Theme */
[data-theme="day"] .tech-tag-3d.tag-color-1,
[data-theme="day"] .tech-tag-mobile.tag-color-1 {
background: none !important;
-webkit-background-clip: initial !important;
background-clip: initial !important;
color: #0ea5e9 !important;
-webkit-text-fill-color: #0ea5e9 !important;
}
[data-theme="day"] .tech-tag-3d.tag-color-2,
[data-theme="day"] .tech-tag-mobile.tag-color-2 { color: #ef4444 !important; -webkit-text-fill-color: #ef4444 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-3,
[data-theme="day"] .tech-tag-mobile.tag-color-3 { color: #10b981 !important; -webkit-text-fill-color: #10b981 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-4,
[data-theme="day"] .tech-tag-mobile.tag-color-4 { color: #f59e0b !important; -webkit-text-fill-color: #f59e0b !important; }
[data-theme="day"] .tech-tag-3d.tag-color-5,
[data-theme="day"] .tech-tag-mobile.tag-color-5 { color: #8b5cf6 !important; -webkit-text-fill-color: #8b5cf6 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-6,
[data-theme="day"] .tech-tag-mobile.tag-color-6 { color: #ec4899 !important; -webkit-text-fill-color: #ec4899 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-7,
[data-theme="day"] .tech-tag-mobile.tag-color-7 { color: #06b6d4 !important; -webkit-text-fill-color: #06b6d4 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-8,
[data-theme="day"] .tech-tag-mobile.tag-color-8 { color: #f97316 !important; -webkit-text-fill-color: #f97316 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-9,
[data-theme="day"] .tech-tag-mobile.tag-color-9 { color: #6b7280 !important; -webkit-text-fill-color: #6b7280 !important; }
[data-theme="day"] .tech-tag-3d.tag-color-10,
[data-theme="day"] .tech-tag-mobile.tag-color-10 { color: #1f2937 !important; -webkit-text-fill-color: #1f2937 !important; }
/* Night Theme */
[data-theme="night"] .tech-tag-3d.tag-color-1,
[data-theme="night"] .tech-tag-mobile.tag-color-1 {
background: var(--gradient-1) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-2,
[data-theme="night"] .tech-tag-mobile.tag-color-2 {
background: var(--gradient-2) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-3,
[data-theme="night"] .tech-tag-mobile.tag-color-3 {
background: var(--gradient-3) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-4,
[data-theme="night"] .tech-tag-mobile.tag-color-4 {
background: var(--gradient-4) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-5,
[data-theme="night"] .tech-tag-mobile.tag-color-5 {
background: var(--gradient-5) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-6,
[data-theme="night"] .tech-tag-mobile.tag-color-6 {
background: var(--gradient-6) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-7,
[data-theme="night"] .tech-tag-mobile.tag-color-7 {
background: var(--gradient-7) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-8,
[data-theme="night"] .tech-tag-mobile.tag-color-8 {
background: var(--gradient-8) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-9,
[data-theme="night"] .tech-tag-mobile.tag-color-9 {
background: var(--gradient-9) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
[data-theme="night"] .tech-tag-3d.tag-color-10,
[data-theme="night"] .tech-tag-mobile.tag-color-10 {
background: var(--gradient-10) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
color: transparent !important;
background-color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
/* Gradient Fallback for Unsupported Browsers */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
.tech-tag-3d, .tech-tag-mobile {
background: none !important;
color: var(--text-primary) !important;
}
.tech-tag-3d[class*="tag-color-"], .tech-tag-mobile[class*="tag-color-"] {
background: none !important;
color: var(--text-primary) !important;
}
}
/* Theme-Specific Card Header Styles */
[data-theme="night"] .card-header h3 {
text-shadow: 0 0 10px var(--accent-glow);
}
:not([data-theme="night"]) .glow-title,
:not([data-theme="night"]) .card-header h3 {
background: linear-gradient(90deg, var(--text-primary), var(--accent), var(--text-primary));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
/* Interests Card */
.area-interests {
padding: 20px;
contain: layout style;
}
.interest-list {
display: grid;
grid-template-columns: repeat(2, 1fr); /* 关键2列布局 */
gap: 15px;
margin-top: 1rem;
align-content: center;
}
.interest-item {
padding: 15px;
border-radius: 12px;
display: flex;
flex-direction: column; /* 关键垂直排列原错误是row */
align-items: center; /* 内容居中 */
gap: 10px; /* emoji与文字的间距 */
transition: background 0.25s;
}
.interest-item:hover {
background: rgba(255, 255, 255, 0.9);
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.10);
border-color: rgba(108, 92, 231, 0.25);
}
.i-emoji {
font-size: 2rem;
color: var(--text-primary);
-webkit-text-fill-color: initial;
flex-shrink: 0;
}
.i-text {
display: flex;
text-align: center;
min-width: 0;
gap: 4px;
}
.i-text strong {
font-size: 0.9rem;
font-weight: 600;
white-space: nowrap;
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
.i-text span:not(.i-emoji) {
font-size: 0.75rem;
line-height: 1.6;
}
/* Night Theme Interests Styles */
/* 修复黑夜模式下Interest模块模糊问题 */
[data-theme="night"] .interest-item {
background: rgba(30, 30, 35, 0.5); /* 提高背景不透明度,增强对比度 */
border-color: rgba(255, 255, 255, 0.2);
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4); /* 降低阴影模糊,减少干扰 */
isolation: isolate; /* 避免父容器模糊影响内部内容 */
}
[data-theme="night"] .interest-item:hover {
background: rgba(30, 30, 35, 0.7);
border-color: var(--accent);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
/* 简化文字阴影,降低模糊程度,提高对比度 */
[data-theme="night"] .i-text strong {
background: var(--gradient-1) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-webkit-text-fill-color: transparent !important;
color: transparent !important;
/* 减少阴影层数+降低模糊半径,只保留轻微发光 */
text-shadow: 0 0 4px var(--accent-glow);
}
[data-theme="night"] .i-text span:not(.i-emoji) {
background: var(--gradient-2) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-webkit-text-fill-color: transparent !important;
color: transparent !important;
text-shadow: 0 0 3px var(--accent-glow);
}
/* Responsive Interests Layout */
@media (min-width: 1025px) {
.interest-list {
grid-template-columns: 1fr 1fr;
gap: 15px;
}
}
@media (min-width: 769px) and (max-width: 1024px) {
.interest-list {
grid-template-columns: 1fr 1fr;
overflow: hidden;
}
.interest-item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 10px;
min-width: 0;
padding: 15px;
}
.i-emoji {
margin-bottom: 6px;
}
.i-text {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 6px;
min-width: 0;
width: 100%;
}
.i-text strong, .i-text span {
white-space: normal;
word-break: break-word;
overflow-wrap: break-word;
}
}
@media (max-width: 768px) {
.interest-list {
grid-template-columns: 1fr;
max-height: none;
}
.interest-item {
min-width: 0;
padding: 12px;
}
.i-text {
min-width: 0;
flex-direction: row;
align-items: center;
gap: 8px;
overflow: hidden;
word-break: break-all;
text-overflow: ellipsis;
white-space: nowrap;
flex-wrap: wrap;
}
.i-text strong, .i-text span {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.i-text strong {
flex: 0 1 auto;
}
.i-text span:not(.i-emoji) {
flex: 1 1 100%;
white-space: normal;
}
}
/* =========================================
7. 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);
font-style: normal;
-webkit-font-smoothing: antialiased;
}
.more-link {
font-size: 0.9rem;
color: var(--accent);
font-weight: 600;
text-decoration: none;
}
.glass-panel {
padding: 20px;
min-height: 300px;
}
/* Github Projects List */
.projects-list {
margin-top: 15px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: 14px;
}
.repo-card {
padding: 14px;
background: rgba(128, 128, 128, 0.05);
border-radius: 12px;
cursor: pointer;
border: 1px solid transparent;
transition: border 0.3s, transform 0.2s ease;
}
.repo-card:hover {
border-color: var(--accent);
transform: translateY(-2px);
}
.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: 8px;
display: -webkit-box;
-webkit-line-clamp: 3;
-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;
background: var(--gradient-3);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.b-date {
font-size: 0.75rem;
color: var(--text-tertiary);
background: var(--gradient-5);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.b-cat {
font-size: 0.75rem;
color: var(--accent);
background: var(--gradient-4);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
background: none;
padding: 0;
border-radius: 0;
white-space: nowrap;
}
/* Blog Container Readability Fix */
#blog-container .b-title {
background: none !important;
-webkit-background-clip: initial;
background-clip: initial;
color: var(--text-primary) !important;
-webkit-text-fill-color: initial;
}
#blog-container .b-cat {
background: none !important;
-webkit-background-clip: initial;
background-clip: initial;
color: var(--text-secondary) !important;
-webkit-text-fill-color: initial;
}
#blog-container .b-date {
background: none !important;
-webkit-background-clip: initial;
background-clip: initial;
color: var(--text-tertiary) !important;
-webkit-text-fill-color: initial;
}
/* Night Theme Blog Styles */
[data-theme="night"] .b-title,
[data-theme="night"] .b-cat,
[data-theme="night"] .b-date {
text-shadow: 0 0 8px var(--accent-glow);
}
/* Loading Skeleton */
.skeleton-card {
height: 60px;
background: rgba(128, 128, 128, 0.1);
border-radius: 10px;
animation: pulse 1.5s infinite;
}
/* Comments Section */
.comments-wrapper {
margin: 40px 0 80px;
}
.comment-box {
padding: 30px;
}
/* Responsive Comment Box */
@media (min-width: 769px) and (max-width: 1024px) {
.comment-box {
padding: 24px;
}
}
@media (max-width: 768px) {
.comment-box {
padding: 16px;
}
}
/* =========================================
8. Floating Action Button (FAB)
========================================= */
.mobile-fab {
position: fixed;
right: 16px;
bottom: 33vh;
z-index: 1100;
cursor: move;
user-select: none;
display: block !important;
}
.fab-main {
display: flex;
align-items: center;
gap: 6px;
background: var(--accent);
color: #fff;
border: none;
border-radius: 22px;
padding: 10px 14px;
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.25);
opacity: 0.9;
transition: all 0.3s ease;
}
.fab-main:hover {
opacity: 1;
transform: scale(1.05);
}
.fab-main:active {
transform: scale(0.95);
}
.fab-label {
font-size: 12px;
font-weight: 500;
}
.fab-menu {
display: none;
flex-direction: column;
gap: 10px;
margin-top: 10px;
}
.fab-item {
display: flex;
align-items: center;
gap: 6px;
background: var(--glass-bg);
color: var(--text-primary);
border-radius: 18px;
padding: 8px 12px;
border: var(--glass-border);
box-shadow: var(--glass-shadow);
opacity: 0.8;
}
.fab-menu.open {
display: flex;
animation: fadeIn 0.3s ease both;
}
/* FAB Global Base Styles (Day/Night Common) */
.fab-main {
display: flex;
align-items: center;
gap: 6px;
color: var(--text-primary);
border: none;
border-radius: 22px;
padding: 10px 14px;
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.25);
opacity: 0.95;
transition: opacity 0.2s, transform 0.2s;
}
.fab-label {
font-size: 12px;
font-weight: 500;
}
.fab-menu {
display: none;
flex-direction: column;
gap: 10px;
margin-top: 10px;
}
.fab-item {
display: flex;
align-items: center;
gap: 6px;
background: var(--glass-bg);
color: var(--text-primary);
border-radius: 18px;
padding: 8px 12px;
border: var(--glass-border);
box-shadow: var(--glass-shadow);
}
/* Night Theme FAB Styles */
[data-theme="night"] .fab-main {
background: linear-gradient(135deg, #a1c4fd, #6c5ce7);
color: white;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.6), 0 0 16px rgba(108, 92, 231, 0.5);
box-shadow:
0 8px 18px rgba(0, 0, 0, 0.3),
0 0 15px rgba(108, 92, 231, 0.4);
opacity: 1;
}
[data-theme="night"] .fab-item {
color: white;
text-shadow: 0 0 6px rgba(255, 255, 255, 0.5);
opacity: 1;
}
[data-theme="night"] #fab-lang {
background: linear-gradient(135deg, #a1c4fd, #6c5ce7);
box-shadow: var(--glass-shadow), 0 0 12px rgba(108, 92, 231, 0.4);
}
[data-theme="night"] #fab-theme {
background: linear-gradient(135deg, #c2e9fb, #00cec9);
box-shadow: var(--glass-shadow), 0 0 12px rgba(0, 206, 201, 0.4);
}
[data-theme="night"] #fab-music {
background: linear-gradient(135deg, #ff9a9e, #f093fb);
box-shadow: var(--glass-shadow), 0 0 12px rgba(240, 147, 251, 0.4);
}
/* Music Module Hidden (As Per Original Comment) */
.site-audio {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
opacity: 0;
pointer-events: none;
display: none;
}
/* =========================================
9. 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);
cursor: pointer;
transition: color 0.3s;
}
.modal-close:hover {
color: var(--accent);
}
.qr-box {
margin: 20px 0;
}
.qr-box img {
width: 100%;
border-radius: 12px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
.qr-fallback {
padding: 40px;
background: #eee;
border-radius: 12px;
font-size: 0.8rem;
color: var(--text-tertiary);
}
.site-footer {
text-align: center;
color: var(--text-tertiary);
font-size: 0.75rem;
padding-bottom: 100px;
margin-top: 40px;
}
.site-footer a {
color: var(--text-tertiary);
text-decoration: none;
transition: color 0.3s;
}
.site-footer a:hover {
color: var(--accent);
text-decoration: underline;
}
/* =========================================
10. Responsive Adjustments (Final Tweaks)
========================================= */
/* Ensure Mobile Social Stays Hidden on Desktop */
@media (min-width: 769px) {
.mobile-social {
display: none !important;
}
}
/* Fade-In Animation for Dynamic Content */
.fade-in {
animation: fadeIn 0.3s ease both;
}
/* Fix Tech Tag Marquee on Mobile */
@media (max-width: 768px) {
.tech-wrapper.mobile-scroll {
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%
);
}
}
/* Ensure Consistent Font Smoothing */
* {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Prevent Horizontal Scroll on Small Screens */
html, body {
overflow-x: hidden;
}
/* Fix Stat Key Font Size on English Mobile */
@media (max-width: 768px) {
[data-lang="en"] .stat-key {
font-size: 6px !important;
}
}
/* Final Theme Consistency Checks */
[data-theme="night"] {
color-scheme: dark;
}
/* Ensure Glass Effects Work on All Browsers */
@supports not (backdrop-filter: blur(8px)) {
.glass-nav, .bento-card, .glass-panel, .modal-glass, .fab-main, .fab-item {
background: var(--bg-base);
opacity: 0.98;
}
[data-theme="night"] .glass-nav,
[data-theme="night"] .bento-card,
[data-theme="night"] .glass-panel,
[data-theme="night"] .modal-glass,
[data-theme="night"] .fab-main,
[data-theme="night"] .fab-item {
background: var(--bg-base);
opacity: 0.95;
}
}