Просмотр исходного кода

feat: 构建层次化字体系统,标题用衬线体,正文用非衬线体

Daily Deploy Bot 1 день назад
Родитель
Сommit
aa679cbbcd
3 измененных файлов с 167 добавлено и 0 удалено
  1. 60 0
      site/README.md
  2. 9 0
      site/deploy/compose.yaml
  3. 98 0
      site/static/css/site.css

+ 60 - 0
site/README.md

@@ -0,0 +1,60 @@
+# Hugo personal site for RobotDaily
+
+这个目录是个人站 Hugo 源码,同时容纳三个分区:
+
+- `content/ai-daily/`:RobotDaily 自动同步进来的每日简报
+- `content/blog/`:个人博客
+- `content/resume/`:简历页
+
+## 端口说明
+
+当前验证阶段走 **`9081`** 端口,保持 WordPress 不动。
+最终切到 `9080` 时再停 WordPress。
+
+## 本地部署(验证阶段)
+
+直接启动 Hugo 站点(`9081` 端口):
+
+```bash
+cd site/deploy
+docker compose up -d --build
+```
+
+访问:http://localhost:9081
+
+## 最终切到 9080
+
+```bash
+docker stop wordpress-wordpress-1
+docker stop personal-hugo-site
+docker compose up -d --build
+```
+
+## 每日简报同步
+
+`arxiv-digest/scripts/run_daily.py` 新增了 `--publish-hugo`,会把当天 `robotdaily.md` 转成 Hugo 页面,写入:
+
+```text
+site/content/ai-daily/YYYY-MM-DD.md
+```
+
+示例:
+
+```bash
+cd arxiv-digest
+python3 scripts/run_daily.py --skip-enrich --publish-hugo
+```
+
+如果同步完还要上线最新内容,再执行一次:
+
+```bash
+cd site/deploy
+docker compose up -d --build
+```
+
+## 后续可改
+
+- `site/hugo.yaml`:站点标题、菜单、基础描述
+- `content/resume/_index.md`:简历内容
+- `content/blog/`:博客文章
+- `layouts/`:页面样式

+ 9 - 0
site/deploy/compose.yaml

@@ -0,0 +1,9 @@
+services:
+  personal-site:
+    build:
+      context: ..
+      dockerfile: deploy/Dockerfile
+    container_name: personal-hugo-site
+    ports:
+      - "9081:80"
+    restart: unless-stopped

+ 98 - 0
site/static/css/site.css

@@ -0,0 +1,98 @@
+:root {
+  /* 莫兰迪低饱和亮色主题 */
+  --bg: #faf8f5;
+  --panel: #ffffff;
+  --panel-soft: #f5f3f0;
+  --text: #2d2a26;
+  --muted: #6b665e;
+  --accent: #9c7c75;
+  --accent-2: #7a8b9c;
+  --border: rgba(45,42,38,0.08);
+  --pink-soft: #f7f1f2;
+  --cream-soft: #fef9f3;
+}
+* { box-sizing: border-box; }
+body {
+  margin: 0;
+  background:
+    radial-gradient(circle at top right, rgba(156, 124, 117, 0.08), transparent 35%),
+    radial-gradient(circle at bottom left, rgba(122, 139, 156, 0.06), transparent 30%),
+    var(--bg);
+  color: var(--text);
+  font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;
+  line-height: 1.8;
+  font-size: 16px;
+  letter-spacing: 0.01em;
+}
+a { color: var(--accent); text-decoration: none; }
+a:hover { text-decoration: underline; }
+.wrap { width: min(960px, calc(100% - 32px)); margin: 0 auto; }
+.site-header { position: sticky; top: 0; backdrop-filter: blur(8px); background: rgba(255,255,255,0.85); border-bottom: 1px solid var(--border); }
+.header-inner { display: flex; justify-content: space-between; gap: 24px; padding: 18px 0; align-items: center; }
+.site-title {
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-size: 1.4rem;
+  font-weight: 700;
+  color: var(--text);
+  letter-spacing: -0.02em;
+}
+.site-tagline { margin: 6px 0 0; color: var(--muted); font-size: 0.95rem; }
+.site-nav { display: flex; gap: 16px; flex-wrap: wrap; }
+.site-nav a { color: var(--text); font-weight: 500; }
+main.wrap { padding: 32px 0 48px; }
+.card { background: var(--panel); border: 1px solid var(--border); border-radius: 16px; padding: 24px; box-shadow: 0 4px 16px rgba(45,42,38,0.04); }
+.hero { padding: 28px 24px; margin-bottom: 24px; background: linear-gradient(135deg, var(--pink-soft) 0%, var(--cream-soft) 100%); border: 1px solid var(--border); }
+.hero h1 {
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-size: 1.8rem;
+  font-weight: 700;
+  margin: 0 0 8px;
+}
+.eyebrow { display: inline-block; margin-bottom: 8px; color: var(--accent); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.06em; font-weight: 600; }
+.grid { display: grid; gap: 16px; margin-bottom: 24px; }
+.three-up { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
+.section-card h2, .post-item h2, .post-item h3 {
+  margin-top: 0;
+  color: var(--text);
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-weight: 600;
+}
+.section-card h2 { font-size: 1.2rem; }
+.post-item h2 { font-size: 1.15rem; }
+.post-item h3 { font-size: 1.05rem; }
+.section-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
+.section-head h2 {
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-size: 1.2rem;
+  font-weight: 600;
+  margin: 0;
+}
+.post-list { display: grid; gap: 16px; }
+.meta { color: var(--muted); font-size: 0.9rem; }
+.article h1 {
+  margin-bottom: 12px;
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-size: 1.8rem;
+  letter-spacing: -0.03em;
+  font-weight: 700;
+}
+.article h2, .article h3, .article h4, .article h5, .article h6 {
+  font-family: "Noto Serif SC", "Source Han Serif CN", "Songti SC", "SimSun", serif;
+  font-weight: 600;
+  margin-top: 1.5em;
+}
+.article h2 { font-size: 1.4rem; }
+.article h3 { font-size: 1.2rem; }
+.prose :first-child { margin-top: 0; }
+.prose img { max-width: 100%; height: auto; border-radius: 8px; }
+.prose blockquote { margin: 1.2rem 0; padding: 1rem 1.2rem; background: var(--panel-soft); border-left: 3px solid var(--accent); border-radius: 8px; color: var(--text); }
+.prose code { background: var(--panel-soft); padding: 0.2rem 0.4rem; border-radius: 4px; font-size: 0.9em; }
+.prose pre { background: var(--panel-soft); padding: 16px; border-radius: 10px; overflow-x: auto; border: 1px solid var(--border); }
+.tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
+.tag { display: inline-flex; padding: 5px 11px; border-radius: 999px; background: var(--panel-soft); color: var(--text); font-size: 0.85rem; border: 1px solid var(--border); font-weight: 500; }
+.site-footer { padding: 0 0 48px; color: var(--muted); font-size: 0.9rem; }
+@media (max-width: 720px) {
+  .header-inner, .section-head { flex-direction: column; align-items: flex-start; }
+  .card, .hero { padding: 20px; }
+  .article h1 { font-size: 1.5rem; }
+}