/* ======================================== Val's Journey — 梦幻但克制的暗色主题 Echo 设计 | 清爽 · 优雅 · 夜间友好 ======================================== */ /* CSS 变量定义 */ :root { /* 背景色系 - 深海感 */ --color-bg-deep: #0a0c14; --color-bg-surface: #111320; --color-bg-elevated: #161829; --color-bg-header: rgba(10, 12, 20, 0.85); /* 强调色 - 月光蓝紫系 */ --color-accent: #a5b4fc; --color-accent-soft: #818cf8; --color-accent-glow: rgba(165, 180, 252, 0.15); --color-gold: #fbbf24; /* 文字色阶 */ --color-text-primary: #e2e8f0; --color-text-secondary: #94a3b8; --color-text-muted: #64748b; /* 边框 */ --color-border: rgba(148, 163, 184, 0.1); --color-border-hover: rgba(165, 180, 252, 0.25); /* 间距系统 */ --space-xs: 0.5rem; --space-sm: 0.75rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-2xl: 3rem; /* 圆角 */ --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; /* 字体 */ --font-sans: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", -apple-system, BlinkMacSystemFont, sans-serif; --font-mono: "SF Mono", "Fira Code", "JetBrains Mono", Consolas, monospace; } /* 基础重置 */ *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: var(--font-sans); background-color: var(--color-bg-deep); color: var(--color-text-primary); line-height: 1.85; font-size: 17px; letter-spacing: 0.01em; margin: 0; padding: 0; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* 页面加载淡入动画 */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } body > * { animation: fadeInUp 0.4s ease-out; } /* ======================================== 导航栏 ======================================== */ header { position: sticky; top: 0; z-index: 100; background: var(--color-bg-header); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid var(--color-border); padding: var(--space-md) 0; } header .nav-container { max-width: 720px; margin: 0 auto; padding: 0 var(--space-md); display: flex; align-items: center; justify-content: space-between; } header h1 { margin: 0; font-size: 1.5rem; font-weight: 500; letter-spacing: 0.02em; } header h1 a { color: var(--color-text-primary); text-decoration: none; background: linear-gradient(135deg, var(--color-text-primary) 0%, var(--color-accent) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; transition: opacity 0.2s ease; } header h1 a:hover { opacity: 0.85; } header nav { display: flex; gap: var(--space-lg); } header nav a { color: var(--color-text-secondary); font-size: 0.9375rem; text-decoration: none; position: relative; transition: color 0.2s ease; } header nav a::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 1.5px; background: var(--color-accent); transition: width 0.2s ease; } header nav a:hover { color: var(--color-accent); } header nav a:hover::after { width: 100%; } /* ======================================== 主内容区 ======================================== */ main { max-width: 720px; margin: 0 auto; padding: var(--space-xl) var(--space-md); min-height: calc(100vh - 200px); } /* 首页描述语 */ .hero-desc { color: var(--color-text-secondary); font-size: 1.125rem; margin-bottom: var(--space-2xl); padding-bottom: var(--space-xl); border-bottom: 1px solid var(--color-border); line-height: 1.75; } /* ======================================== 首页卡片列表 ======================================== */ .section-title { font-size: 0.8125rem; font-weight: 500; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: var(--space-lg); display: flex; align-items: center; gap: var(--space-sm); } .section-title::before { content: ''; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--color-accent); box-shadow: 0 0 8px var(--color-accent-glow); } .journey-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--space-md); } .journey-card { display: block; background: var(--color-bg-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: var(--space-lg); text-decoration: none; transition: all 0.2s ease-out; position: relative; overflow: hidden; } .journey-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent, var(--color-accent-glow), transparent); opacity: 0; transition: opacity 0.2s ease; } .journey-card:hover { background: var(--color-bg-elevated); border-color: var(--color-border-hover); transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3), 0 0 0 1px var(--color-accent-glow); } .journey-card:hover::before { opacity: 1; } .journey-card-title { color: var(--color-text-primary); font-size: 1.125rem; font-weight: 500; margin: 0 0 var(--space-xs) 0; line-height: 1.5; } .journey-card:hover .journey-card-title { color: var(--color-accent); } .journey-card-meta { display: flex; align-items: center; gap: var(--space-sm); color: var(--color-text-muted); font-size: 0.8125rem; font-family: var(--font-mono); } .journey-card-meta time { color: var(--color-text-secondary); } /* 空状态 */ .empty-state { text-align: center; padding: var(--space-2xl) var(--space-md); color: var(--color-text-muted); } .empty-state-icon { font-size: 3rem; margin-bottom: var(--space-md); opacity: 0.5; } /* ======================================== 文章页样式 ======================================== */ article { animation: fadeInUp 0.5s ease-out; } article header { position: static; background: transparent; backdrop-filter: none; border-bottom: none; padding: 0; margin-bottom: var(--space-xl); } article h1, article h2 { color: var(--color-text-primary); margin-top: var(--space-2xl); margin-bottom: var(--space-md); line-height: 1.35; font-weight: 600; } article h1 { font-size: 1.875rem; margin-top: 0; letter-spacing: -0.01em; } article h2 { font-size: 1.375rem; padding-bottom: var(--space-xs); border-bottom: 1px solid var(--color-border); } article .post-meta { display: flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-xl); color: var(--color-text-muted); font-size: 0.875rem; font-family: var(--font-mono); } article .post-meta time { color: var(--color-text-secondary); } /* 文章内容 */ article p { margin-bottom: var(--space-lg); } article p:last-child { margin-bottom: 0; } article a { color: var(--color-accent); text-decoration: none; border-bottom: 1px solid transparent; transition: all 0.2s ease; } article a:hover { color: var(--color-accent-soft); border-bottom-color: var(--color-accent); } article code { background: var(--color-bg-surface); padding: 0.15em 0.4em; border-radius: var(--radius-sm); font-family: var(--font-mono); font-size: 0.9em; color: var(--color-accent); } article pre { background: var(--color-bg-surface); padding: var(--space-md); border-radius: var(--radius-md); overflow-x: auto; border: 1px solid var(--color-border); } article pre code { background: none; padding: 0; color: var(--color-text-primary); } article blockquote { margin: var(--space-lg) 0; padding: var(--space-md) var(--space-lg); border-left: 3px solid var(--color-accent); background: var(--color-bg-surface); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; color: var(--color-text-secondary); font-style: italic; } article ul, article ol { margin-bottom: var(--space-lg); padding-left: var(--space-lg); } article li { margin-bottom: var(--space-xs); } article hr { border: none; height: 1px; background: linear-gradient(90deg, transparent, var(--color-border), transparent); margin: var(--space-2xl) 0; } /* 标签样式 */ .tag-list { display: flex; flex-wrap: wrap; gap: var(--space-xs); margin-top: var(--space-xl); padding-top: var(--space-lg); border-top: 1px solid var(--color-border); } .tag { display: inline-flex; align-items: center; padding: 0.25em 0.75em; background: var(--color-bg-surface); border: 1px solid var(--color-border); border-radius: 9999px; font-size: 0.8125rem; color: var(--color-text-secondary); text-decoration: none; transition: all 0.2s ease; } .tag:hover { background: var(--color-bg-elevated); border-color: var(--color-border-hover); color: var(--color-accent); } /* ======================================== 页脚 ======================================== */ footer { text-align: center; padding: var(--space-2xl) var(--space-md); color: var(--color-text-muted); font-size: 0.8125rem; border-top: 1px solid var(--color-border); margin-top: auto; } footer a { color: var(--color-text-secondary); text-decoration: none; transition: color 0.2s ease; } footer a:hover { color: var(--color-accent); } /* ======================================== 响应式设计 ======================================== */ @media (max-width: 640px) { body { font-size: 16px; line-height: 1.8; } header h1 { font-size: 1.25rem; } header nav { gap: var(--space-md); } main { padding: var(--space-lg) var(--space-md); } .journey-card { padding: var(--space-md); } article h1 { font-size: 1.5rem; } article h2 { font-size: 1.25rem; } .hero-desc { font-size: 1rem; } } /* 减少动画偏好 */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* 选中文字样式 */ ::selection { background: var(--color-accent-glow); color: var(--color-accent); } /* 滚动条美化 */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--color-bg-deep); } ::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--color-text-muted); }