🔄 卡若AI 同步 2026-02-17 15:40 | 变更 17 个文件 | 排除 >20MB: 4 个
Some checks failed
Sync GitHub to CKB NAS Gitea / sync (push) Has been cancelled

This commit is contained in:
2026-02-17 15:40:00 +08:00
parent 189863db26
commit 5caf3b1f50
17 changed files with 2902 additions and 420 deletions

View File

@@ -0,0 +1,7 @@
# Gitea 推送配置(可选)
# 在局域网时用此 IP 直连,避免走代理;不填或留空则始终用域名(外网走代理)
# 示例GITEA_LAN_IP=192.168.1.100
GITEA_LAN_IP=
# 外网时使用的代理(本机 Clash 等)。留空则不走代理
GITEA_HTTP_PROXY=http://127.0.0.1:7897

View File

@@ -0,0 +1,94 @@
#!/bin/bash
# ============================================
# Gitea 智能推送:局域网用 LAN IP 直连,外网用域名+代理
# 用法:在仓库根目录执行,或传入 REPO_DIR
# 依赖:同目录下 gitea_push.conf可选 GITEA_LAN_IP、GITEA_HTTP_PROXY
# ============================================
REPO_DIR="${1:-/Users/karuo/Documents/个人/卡若AI}"
REMOTE="${2:-gitea}"
BRANCH="${3:-main}"
CONF_DIR="$(dirname "$0")"
CONF="$CONF_DIR/gitea_push.conf"
cd "$REPO_DIR" || exit 1
# 读取配置(去掉注释和空行)
GITEA_LAN_IP=""
GITEA_HTTP_PROXY="http://127.0.0.1:7897"
if [ -f "$CONF" ]; then
while IFS= read -r line; do
[[ "$line" =~ ^#.*$ ]] && continue
[[ -z "${line// /}" ]] && continue
if [[ "$line" =~ ^GITEA_LAN_IP=(.*)$ ]]; then
GITEA_LAN_IP="${BASH_REMATCH[1]}"
GITEA_LAN_IP="${GITEA_LAN_IP%%#*}"
GITEA_LAN_IP="${GITEA_LAN_IP// /}"
elif [[ "$line" =~ ^GITEA_HTTP_PROXY=(.*)$ ]]; then
GITEA_HTTP_PROXY="${BASH_REMATCH[1]}"
GITEA_HTTP_PROXY="${GITEA_HTTP_PROXY%%#*}"
GITEA_HTTP_PROXY="${GITEA_HTTP_PROXY// /}"
fi
done < "$CONF"
fi
ORIG_URL=$(git remote get-url "$REMOTE" 2>/dev/null)
[ -z "$ORIG_URL" ] && { echo "[gitea_push_smart] 错误remote $REMOTE 不存在"; exit 1; }
# 从 URL 提取http://user:token@host:3000/fnvtk/karuo-ai.git
AUTH_PREFIX="${ORIG_URL%%@*}@"
PATH_PART="${ORIG_URL#*@}"
REPO_PATH="${PATH_PART#*:3000/}"
[ -z "$REPO_PATH" ] && REPO_PATH="fnvtk/karuo-ai.git"
do_push() {
if [ -n "$1" ]; then
export HTTP_PROXY="$1" HTTPS_PROXY="$1" ALL_PROXY="$1"
echo "[gitea_push_smart] 使用代理推送(外网)..."
else
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
echo "[gitea_push_smart] 直连推送(局域网)..."
fi
git push "$REMOTE" "$BRANCH" 2>&1
return $?
}
MAX_TRY=3
# 1) 若配置了 LAN IP 且能连通 3000则用 LAN 推送
if [ -n "$GITEA_LAN_IP" ]; then
CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "http://${GITEA_LAN_IP}:3000/" 2>/dev/null)
if [ "$CODE" = "200" ]; then
LAN_URL="http://${AUTH_PREFIX}${GITEA_LAN_IP}:3000/${REPO_PATH}"
git remote set-url "$REMOTE" "$LAN_URL"
for i in $(seq 1 $MAX_TRY); do
echo "[gitea_push_smart] 第 $i/$MAX_TRY 次尝试(局域网 $GITEA_LAN_IP:3000..."
if do_push ""; then
git remote set-url "$REMOTE" "$ORIG_URL"
echo "[gitea_push_smart] 推送成功(局域网)"
exit 0
fi
[ $i -lt $MAX_TRY ] && sleep 5
done
git remote set-url "$REMOTE" "$ORIG_URL"
fi
fi
# 2) 使用域名 + 代理推送(外网)
for i in $(seq 1 $MAX_TRY); do
echo "[gitea_push_smart] 第 $i/$MAX_TRY 次尝试(外网域名 + 代理)..."
if [ -n "$GITEA_HTTP_PROXY" ]; then
if do_push "$GITEA_HTTP_PROXY"; then
echo "[gitea_push_smart] 推送成功(外网)"
exit 0
fi
else
if do_push ""; then
echo "[gitea_push_smart] 推送成功"
exit 0
fi
fi
[ $i -lt $MAX_TRY ] && echo "[gitea_push_smart] 5 秒后重试..." && sleep 5
done
echo "[gitea_push_smart] 错误:$MAX_TRY 次尝试均失败"
exit 1

View File

@@ -0,0 +1,18 @@
#!/bin/bash
# 手动推送直到成功 - 网络不稳定时使用
# 用法: bash 手动推送直到成功.sh
REPO_DIR="/Users/karuo/Documents/个人/卡若AI"
cd "$REPO_DIR" || exit 1
for i in 1 2 3 4 5 6 7 8 9 10; do
echo "[$(date '+%H:%M:%S')] 第 $i 次尝试..."
if git push gitea main 2>&1; then
echo "✅ 推送成功"
exit 0
fi
echo "⏳ 5 秒后重试..."
sleep 5
done
echo "❌ 10 次尝试后仍未成功,请检查网络后重试"
exit 1

View File

@@ -85,10 +85,16 @@ fi
log "提交成功:${CHANGED_COUNT} 个文件"
# ============================================
# Step 4: 推送到 Gitea
# Step 4: 推送到 Gitea(智能:局域网用 IP外网用域名+代理)
# ============================================
git push "$REMOTE" "$BRANCH" --quiet 2>&1
PUSH_RESULT=$?
PUSH_SCRIPT="$REPO_DIR/01_卡资/金仓_存储备份/Gitea管理/脚本/gitea_push_smart.sh"
if [ -x "$PUSH_SCRIPT" ]; then
bash "$PUSH_SCRIPT" "$REPO_DIR" "$REMOTE" "$BRANCH" 2>&1 | tee -a "$LOG_FILE"
PUSH_RESULT=${PIPESTATUS[0]}
else
git push "$REMOTE" "$BRANCH" --quiet 2>&1
PUSH_RESULT=$?
fi
if [ $PUSH_RESULT -eq 0 ]; then
log "推送成功 → gitea/$BRANCH"

View File

@@ -292,6 +292,20 @@ sudo killall -HUP mDNSResponder
echo "DNS 缓存已刷新"
```
### Cursor 上传占用降低
已在 `~/Library/Application Support/Cursor/User/settings.json` 中建议或已配置:
- `"redhat.telemetry.enabled": false` — 关闭 Red Hat 扩展遥测上传
- `"telemetry.telemetryLevel": "off"` — 关闭 IDE 遥测
- `"cursor.general.enableCodebaseIndexing": false` — 关闭代码库索引(避免整库分块上传)
**需在 Cursor 内手动操作(进一步降上传):**
1. **开启 Privacy Mode**`Cursor``Settings``General` → 打开 **Privacy Mode**(代码不存 Cursor/第三方,部分 AI 能力会受限)
2. **少 @ 大文件**:对话里少引用整文件,只 @ 必要片段,可明显减少单次请求上传量
3. **不用时关扩展**:禁用暂时不用的扩展,减少后台同步与遥测
---
## 8. 性能基准
@@ -391,6 +405,7 @@ echo "=========================================="
| Finder 无响应 | `killall Finder` |
| Docker 异常 | 重启 Docker Desktop 或 `docker system prune` |
| 网络异常 | 刷新 DNS`sudo dscacheutil -flushcache` |
| Cursor 上传大 | 关遥测/关代码库索引见上文「Cursor 上传占用降低」;可开 Privacy Mode |
| iCloud 不同步 | `killall bird && killall cloudd` |
| Spotlight 搜索慢 | `sudo mdutil -E /` 重建索引 |

View File

@@ -1,6 +1,6 @@
{
"access_token": "u-76soiQf0t11GcweJFhpzl4l5mgMBk1qpWoaaZxM00AOj",
"refresh_token": "ur-6isX.Eitt5rHrnvVBecFhql5mqUBk1gpM8aaUNM00wz7",
"access_token": "u-7FEQ3dsVpbBVy1HPRK6OCul5mUMBk1gNMoaaENM00Byi",
"refresh_token": "ur-58aJUppSxdOFYJhaRlNUaMl5miOBk1UNpEaaIMQ00xD6",
"name": "飞书用户",
"auth_time": "2026-02-14T08:56:27.486169"
"auth_time": "2026-02-17T10:27:47.958573"
}

View File

@@ -0,0 +1,93 @@
#!/usr/bin/env python3
"""
2月15日后工作小结 → 飞书日志(集中写在一日内)
数据来源分布式算力矩阵、Soul派对101/102场、全量扫描、经验沉淀、聊天与文件
"""
import os
import sys
import subprocess
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
if SCRIPT_DIR not in sys.path:
sys.path.insert(0, SCRIPT_DIR)
from auto_log import get_token_silent, ensure_service, CONFIG, WIKI_URL
# 2月15日今 工作小结(一条事件)
DATE_STR = "2月18日"
CALLOUT = "[总结] 2月15日"
TASKS = [
{
"person": "卡若",
"events": ["分布式算力矩阵", "全量扫描", "Soul派对", "安全与运维", "经验沉淀"],
"quadrant": "重要紧急",
"t_targets": [
"分布式算力矩阵→三次对话吸收+资产全景+安全加固 📊 (85%)",
"全量扫描→33.9万IP防断网跑完+6984验证+1281高价值主机 🔍 (100%)",
"Soul派对→101场(2/16)与102场(2/17)纪要+主题迭代 🎙️ (100%)",
"安全运维→小型宝塔攻击链处理+SSH加固待办+CKB NAS绑定 🛡️ (70%)",
],
"n_process": [
"【算力矩阵】2/15三次Agent对话吸收→资产清单(公司NAS/家NAS/存客宝/kr宝塔)→PCDN收益模型→规模化测算→部署路线(Docker/chroot)→紧急待办P0-P2",
"【全量扫描】2/16 33.9万IP、并发2000防断网→TCP存活8257、协议验证6984、高价值1281→反填04暴力破解→家宽优化SKILL吸收",
"【Soul派对】101场(程序员AI工具链×电动车民宿×金融)、102场(过年第一个红包发给谁×人生三贵人)→纪要产出+长图→话题迭代",
"【安全】小型宝塔XMRig/后门清理→攻击IP封禁→存客宝/kr宝塔SSH待开→CKB NAS网心云绑定15880802661待执行",
],
"t_thoughts": [
"算力矩阵先摸清资产与安全,再规模化;家宽降并发可跑完全程",
"派对纪要沉淀话题与视角,红包/贵人主题可延展内容",
],
"w_work": ["运维部署", "安全加固", "扫描与验证", "内容纪要", "经验沉淀"],
"f_feedback": [
"全量扫描完成 ✅",
"Soul 101/102场纪要 ✅",
"算力矩阵总结+待办明确 ✅",
"CKB绑定+宝塔加固待办 ⏰",
],
},
{
"person": "卡资",
"events": ["扫描模块", "主机库校验", "金仓备份"],
"quadrant": "重要不紧急",
"t_targets": [
"01_扫描模块→家宽防断网实践+SKILL更新 📁 (100%)",
"主机库校验→2/16报告+smart_brute下游就绪 🔐 (100%)",
],
"n_process": [
"【扫描】references/扫描断网分析与优化、全量扫描最终结果_20260216、verified_scan/ssh_reachable写入",
"【校验】主机库_校验报告_20260216、全量扫描反填04暴力破解",
],
"t_thoughts": ["家宽并发2000/批次4000可稳定跑完全程"],
"w_work": ["运维脚本", "文档与报告"],
"f_feedback": ["扫描与校验闭环 ✅"],
},
]
def main():
print("=" * 50)
print("📅 写入飞书2月15日后工作小结单日汇总")
print("=" * 50)
ensure_service()
print("\n🔑 获取 Token静默...")
token = get_token_silent()
if not token:
print("❌ 无法获取 Token")
sys.exit(1)
# 使用 auto_log 的 write_log + build_blocks需传入自定义 DATE_STR 和 TASKS
from auto_log import write_log
print("\n📝 写入飞书日志...")
ok = write_log(token, DATE_STR, TASKS)
if ok:
subprocess.run(["open", WIKI_URL], capture_output=True)
print(f"\n📎 已打开飞书: {WIKI_URL}")
print("\n✅ 完成!")
else:
print("\n❌ 写入失败")
sys.exit(1)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,533 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>1月27日程序员AI工具链×电动车民宿×金融视角 - 卡若派对纪要</title>
<style>
/* ===== 非101风格简约编辑风结构同 meeting.html ===== */
:root {
--accent: #475569;
--accent-soft: #e2e8f0;
--white: #ffffff;
--bg-page: #f8fafc;
--text-primary: #0f172a;
--text-secondary: #475569;
--text-muted: #64748b;
--border: #e2e8f0;
--border-strong: #cbd5e1;
--key-bg: #f1f5f9;
--key-border: #cbd5e1;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-page);
min-height: 100vh;
color: var(--text-primary);
line-height: 1.65;
}
.container { max-width: 1120px; margin: 0 auto; padding: 32px 28px; }
.section-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 2px solid var(--border);
font-size: 1.2rem;
font-weight: 800;
color: var(--text-primary);
}
.section-head .section-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
color: var(--accent);
background: var(--accent-soft);
border: 2px solid var(--border-strong);
border-radius: 8px;
font-size: 0.95rem;
font-weight: 800;
}
.section-head .section-num.blue,
.section-head .section-num.orange,
.section-head .section-num.green,
.section-head .section-num.purple { color: var(--accent); background: var(--accent-soft); border-color: var(--border-strong); }
.section-head .section-icon { font-size: 1.25rem; opacity: 0.85; }
.header {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
padding: 32px 36px 24px;
margin-bottom: 28px;
box-shadow: none;
}
.header h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--text-primary);
margin-bottom: 12px;
line-height: 1.3;
letter-spacing: -0.02em;
}
.header .subtitle {
font-size: 0.95rem;
color: var(--text-secondary);
margin-bottom: 18px;
max-width: 720px;
line-height: 1.55;
}
.header .nav-tags { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 18px; }
.header .nav-tag {
display: inline-flex;
align-items: center;
gap: 6px;
background: var(--accent-soft);
color: var(--text-secondary);
padding: 8px 14px;
border-radius: 20px;
font-size: 0.82rem;
font-weight: 600;
border: 1px solid var(--border);
}
.header .nav-tag .nav-icon { font-size: 1rem; }
.header .meta {
display: flex;
flex-wrap: wrap;
gap: 16px;
font-size: 0.88rem;
color: var(--text-muted);
padding-top: 12px;
border-top: 1px solid var(--border);
}
.speakers-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.speaker-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
overflow: hidden;
box-shadow: none;
}
.speaker-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: var(--text-primary);
background: var(--accent-soft);
border-bottom: 1px solid var(--border);
}
.speaker-card .head .head-icon {
width: 28px;
height: 28px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.speaker-card .head.blue,
.speaker-card .head.orange,
.speaker-card .head.green,
.speaker-card .head.purple { background: var(--accent-soft); color: var(--text-primary); border-bottom-color: var(--border); }
.speaker-card .body { padding: 16px; }
.speaker-card .role { font-weight: 700; font-size: 0.9rem; color: var(--text-primary); margin-bottom: 8px; }
.speaker-card .topics { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; }
.speaker-card .pills { display: flex; flex-wrap: wrap; gap: 6px; }
.speaker-card .pill {
font-size: 0.72rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 10px;
background: var(--accent-soft);
color: var(--text-secondary);
border: 1px solid var(--border);
}
.speaker-card .pill.blue,
.speaker-card .pill.orange,
.speaker-card .pill.green,
.speaker-card .pill.purple,
.speaker-card .pill.red { background: var(--accent-soft); color: var(--text-secondary); border-color: var(--border); }
.lean-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.lean-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-top: 4px solid var(--accent);
overflow: hidden;
box-shadow: none;
}
.lean-card.orange,
.lean-card.blue,
.lean-card.green { border-top-color: var(--accent); }
.lean-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: var(--text-primary);
background: var(--accent-soft);
border-bottom: 1px solid var(--border);
}
.lean-card .head .lean-icon {
width: 26px;
height: 26px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
}
.lean-card .head.orange,
.lean-card .head.blue,
.lean-card .head.green { background: var(--accent-soft); color: var(--text-primary); }
.lean-card .body { padding: 16px; }
.lean-card h4 { font-size: 0.88rem; font-weight: 700; margin-bottom: 8px; color: var(--text-primary); }
.lean-card ul { list-style: none; }
.lean-card li {
font-size: 0.82rem;
padding: 5px 0;
padding-left: 16px;
position: relative;
color: var(--text-secondary);
}
.lean-card li::before { content: "▪"; position: absolute; left: 0; color: var(--text-muted); font-weight: bold; }
.lean-card li .inline-tag { font-size: 0.7rem; padding: 2px 6px; border-radius: 4px; margin-right: 4px; font-weight: 600; background: var(--accent-soft); color: var(--text-secondary); }
.lean-card li .tag-项目,
.lean-card li .tag-产品,
.lean-card li .tag-运营,
.lean-card li .tag-商业 { background: var(--accent-soft); color: var(--text-secondary); }
.flow-wrap {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
padding: 24px 28px;
margin-bottom: 32px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.flow-node {
display: flex;
flex-direction: column;
align-items: center;
min-width: 88px;
}
.flow-node .circle {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: var(--text-primary);
background: var(--accent-soft);
border: 2px solid var(--border-strong);
margin-bottom: 6px;
}
.flow-node .circle.blue,
.flow-node .circle.purple,
.flow-node .circle.orange,
.flow-node .circle.red,
.flow-node .circle.green { background: var(--accent-soft); color: var(--text-primary); border-color: var(--border-strong); }
.flow-node .label { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); text-align: center; }
.flow-node .time { font-size: 0.7rem; color: var(--text-muted); margin-top: 2px; }
.flow-arrow { color: var(--border-strong); font-size: 1.1rem; font-weight: bold; }
.hot-list { margin-bottom: 32px; }
.hot-item {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
margin-bottom: 16px;
overflow: hidden;
}
.hot-item .top-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px 20px;
background: var(--bg-page);
border-bottom: 1px solid var(--border);
}
.hot-item .signal-tag {
flex-shrink: 0;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.75rem;
font-weight: 700;
background: var(--accent);
color: var(--white);
}
.hot-item .signal-tag.ai,
.hot-item .signal-tag.user,
.hot-item .signal-tag.expert,
.hot-item .signal-tag.question { background: var(--accent); color: var(--white); }
.hot-item .signal-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }
.hot-item .topic-wrap { flex: 1; }
.hot-item .topic-wrap .q-icon { color: var(--accent); font-weight: 800; margin-right: 6px; }
.hot-item .topic-wrap .topic-title { font-weight: 800; font-size: 1rem; color: var(--text-primary); }
.hot-item .content { padding: 16px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.65; }
.hot-item .content ul { margin: 10px 0 0 20px; }
.hot-item .content li { margin: 5px 0; }
.hot-item .key-point {
margin: 0 20px 16px;
padding: 14px 16px;
background: var(--key-bg);
border: 1px solid var(--key-border);
border-radius: 10px;
font-size: 0.88rem;
font-weight: 600;
color: var(--text-primary);
}
.hot-item .key-point .label {
display: inline-block;
background: var(--accent-soft);
color: var(--accent);
padding: 3px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 800;
margin-bottom: 8px;
border: 1px solid var(--border);
}
.next-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.next-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-top: 4px solid var(--accent);
padding: 20px;
}
.next-card.blue,
.next-card.purple,
.next-card.red { border-top-color: var(--accent); }
.next-card .next-icon {
width: 36px;
height: 36px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
margin-bottom: 12px;
background: var(--accent-soft);
border: 1px solid var(--border);
}
.next-card.orange .next-icon,
.next-card.blue .next-icon,
.next-card.purple .next-icon,
.next-card.red .next-icon { background: var(--accent-soft); border: 1px solid var(--border); }
.next-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.next-card .desc { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.55; }
.progress-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.progress-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-left: 5px solid var(--accent);
padding: 20px;
}
.progress-card.blue { border-left-color: var(--accent); }
.progress-card .progress-icon { font-size: 1.3rem; margin-bottom: 10px; }
.progress-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.progress-card .desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; }
.footer {
text-align: center;
padding: 28px;
font-size: 0.82rem;
color: var(--text-muted);
border-top: 1px solid var(--border);
margin-top: 12px;
}
.footer .brand { color: var(--accent); font-weight: 700; }
@media (max-width: 900px) {
.speakers-row { grid-template-columns: repeat(2, 1fr); }
.lean-row { grid-template-columns: 1fr; }
.next-grid { grid-template-columns: 1fr; }
.progress-row { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.speakers-row { grid-template-columns: 1fr; }
.flow-wrap { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
}
</style>
</head>
<body>
<div class="container">
<header class="header">
<h1>1月27日程序员AI工具链×电动车民宿×金融视角</h1>
<p class="subtitle">汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。</p>
<div class="nav-tags">
<span class="nav-tag"><span class="nav-icon">👤</span>分享人</span>
<span class="nav-tag"><span class="nav-icon">🎯</span>目标</span>
<span class="nav-tag"><span class="nav-icon"></span>关键问题</span>
<span class="nav-tag"><span class="nav-icon">💡</span>AI复盘</span>
</div>
<div class="meta">
<span>⏱ 2小时26分47秒</span>
<span>👥 600+</span>
<span>📍 Soul派对早场</span>
<span>📅 2026-01-27 06:54</span>
</div>
</header>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">👤</span>
分享人介绍
</h2>
<div class="speakers-row"><div class="speaker-card">
<div class="head blue"><span class="head-icon">👤</span>卡若</div>
<div class="body"><p class="role">派对主持人·融资运营</p><p class="topics">电动车×民宿撮合·不良资产收购·金融杠杆论</p></div>
</div>
<div class="speaker-card">
<div class="head orange"><span class="head-icon">👤</span>程序员6号</div>
<div class="body"><p class="role">全栈开发·Cursor用户</p><p class="topics">20年编码经历·AI超级个体探索·量化交易脚本</p></div>
</div>
<div class="speaker-card">
<div class="head green"><span class="head-icon">👤</span>何包</div>
<div class="body"><p class="role">电动车创始人</p><p class="topics">泉州1000+车队·民宿酒店渠道·低成本扩张</p></div>
</div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num orange"></span>
<span class="section-icon">📌</span>
精益介绍
</h2>
<div class="lean-row"><div class="lean-card orange"><div class="head orange"><span class="lean-icon">📌</span>程序员AI转型从代码到产品</div><div class="body"><h4>Cursor新功能详解</h4><ul><li>桌面控制能力升级(昨晚新增)</li><li>IDE+可视化界面友好</li><li>公司全员配置使用(含文员)</li></ul><h4>程序员创业陷阱</h4><ul><li>99%创业失败=思维闭环</li><li>技术≠产品≠商业化</li><li>从业比创业稳定百倍</li></ul></div></div>
<div class="lean-card blue"><div class="head blue"><span class="lean-icon"></span>电动车民宿合作2万投入年赚百万</div><div class="body"><h4>何包模式拆解</h4><ul><li>与民宿合作摆放电动车</li><li>民宿不出钱,只需展位</li><li>泉州1000+车·月流水400万+</li></ul><h4>厦门落地挑战</h4><ul><li>需要岛内民宿代运营者牵头</li><li>投入20万覆盖10-20家民宿</li><li>需要执行人·资金only≠项目</li></ul></div></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🕐</span>
会议流程
</h2>
<div class="flow-wrap"><div class="flow-node"><div class="circle blue">🎙️</div><span class="label">开场介绍</span><span class="time">06:00-06:10</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle purple">👥</div><span class="label">嘉宾分享</span><span class="time">06:10-07:30</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle orange">💡</div><span class="label">干货提炼</span><span class="time">07:30-08:00</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle red">🤝</div><span class="label">项目对接</span><span class="time">08:00-08:40</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle green">📋</div><span class="label">总结收尾</span><span class="time">08:40-09:00</span></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num purple"></span>
<span class="section-icon"></span>
热点研讨
</h2>
<div class="hot-list"><div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">04:40-05:34</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">Cursor电脑控制能力</span></div>
</div>
<div class="content">昨晚刚升级新版本增加自动操控电脑界面能力。相比Claude Code的区别在于可视化界面更友好、配置更简单。</div>
<div class="key-point"><span class="label">重点</span><br/>信号工具门槛再次降低普通大学生培训2周就能达到3-5年经验水平</div>
</div>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">18:59-21:59</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">电动车民宿模式复制性</span></div>
</div>
<div class="content">何包的模式民宿方零投入只需门口摆5-10辆电动车。所有成本由何包团队承担。</div>
<div class="key-point"><span class="label">重点</span><br/>亮点投入20万可覆盖10-20家民宿。相对酒店投资低10倍</div>
</div>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">30:05-40:59</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">全球债务与AI的必然性</span></div>
</div>
<div class="content">346万亿债务无法真实还清。央行必然选大通胀+印钱路线。AI就是印钱的理由。</div>
<div class="key-point"><span class="label">重点</span><br/>结论2026年唯一的印钞通行证就是AI</div>
</div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">📋</span>
下次分享
</h2>
<div class="next-grid"><div class="next-card orange"><div class="next-icon">📌</div><div class="title">AI工具链现状</div><div class="desc"><strong>Cursor > Claude Code</strong>:可视化+配置友好+电脑控制</div></div>
<div class="next-card blue"><div class="next-icon">🎯</div><div class="title">电动车民宿扩张路径</div><div class="desc"><strong>何包模式:</strong>零成本渠道(民宿不出钱)</div></div>
<div class="next-card purple"><div class="next-icon">📋</div><div class="title">待定</div><div class="desc">下期公布</div></div>
<div class="next-card red"><div class="next-icon">💡</div><div class="title">待定</div><div class="desc">下期公布</div></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🚀</span>
项目推进
</h2>
<div class="progress-row"><div class="progress-card "><div class="progress-icon">🚀</div><div class="title">项目推进</div><div class="desc">如果你有民宿代运营背景或厦门岛内民宿资源可以尝试对接何包的电动车项目。投入相对低20万左右ROI清晰。<br/><small style="color:#6b7280;">群友何包已准备详细商业计划书,可在派对直接对接</small></div></div>
<div class="progress-card blue"><div class="progress-icon">📊</div><div class="title">项目推进</div><div class="desc">现在Cursor等AI工具已成标配。如果还没掌握可以像文员一样快速上手。懂工具的人现在还是少数。<br/><small style="color:#6b7280;">机会AI工具链会持续迭代早学早用早变现</small></div></div></div>
</section>
<footer class="footer">
<p>版权所有 © 2026 <span class="brand">Karuo.AI</span></p>
<p style="margin-top: 8px;">Power by Karuo.AI · 每天 06:00-09:00 Soul派对直播</p>
</footer>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

View File

@@ -0,0 +1,495 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>1月27日程序员AI工具链×电动车民宿×金融视角 - 卡若派对纪要</title>
<style>
/* ===== 101场配色体系与参考图一致===== */
:root {
--blue: #2563eb;
--blue-light: #dbeafe;
--orange-red: #ea580c;
--orange-red-light: #ffedd5;
--green: #16a34a;
--green-light: #dcfce7;
--purple: #7c3aed;
--purple-light: #ede9fe;
--red: #dc2626;
--red-light: #fee2e2;
--yellow-key: #fef08a;
--yellow-key-bg: #fef9c3;
--white: #ffffff;
--bg-page: #fafafa;
--text-primary: #1a1a2e;
--text-secondary: #4b5563;
--text-muted: #6b7280;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-page);
min-height: 100vh;
color: var(--text-primary);
line-height: 1.65;
}
.container { max-width: 1120px; margin: 0 auto; padding: 32px 28px; }
/* ========== 区块标题(带图标+色条)========== */
.section-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 3px solid transparent;
font-size: 1.2rem;
font-weight: 800;
color: var(--text-primary);
}
.section-head .section-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
color: #fff;
border-radius: 8px;
font-size: 0.95rem;
font-weight: 800;
}
.section-head .section-num.blue { background: var(--blue); }
.section-head .section-num.orange { background: var(--orange-red); }
.section-head .section-num.green { background: var(--green); }
.section-head .section-num.purple { background: var(--purple); }
.section-head .section-icon { font-size: 1.25rem; opacity: 0.9; }
/* ========== 顶部标题区 ========== */
.header {
background: var(--white);
border-radius: 16px;
box-shadow: 0 4px 20px rgba(0,0,0,0.06);
padding: 32px 36px 24px;
margin-bottom: 28px;
border: 1px solid rgba(0,0,0,0.05);
}
.header h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--text-primary);
margin-bottom: 12px;
line-height: 1.3;
letter-spacing: -0.02em;
}
.header .subtitle {
font-size: 0.95rem;
color: var(--text-secondary);
margin-bottom: 18px;
max-width: 720px;
line-height: 1.55;
}
/* 导航标签行与101场一致分享人/目标/关键问题/AI复盘*/
.header .nav-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 18px;
}
.header .nav-tag {
display: inline-flex;
align-items: center;
gap: 6px;
background: #f3f4f6;
color: var(--text-secondary);
padding: 8px 14px;
border-radius: 22px;
font-size: 0.82rem;
font-weight: 600;
}
.header .nav-tag .nav-icon { font-size: 1rem; }
.header .meta {
display: flex;
flex-wrap: wrap;
gap: 16px;
font-size: 0.88rem;
color: var(--text-muted);
padding-top: 12px;
border-top: 1px solid #eee;
}
/* ========== 一、分享人介绍(四色卡+白底图标+性格/项目标签)========== */
.speakers-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.speaker-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.speaker-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.speaker-card .head .head-icon {
width: 28px;
height: 28px;
background: rgba(255,255,255,0.25);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.speaker-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.speaker-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.speaker-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.speaker-card .head.purple { background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); }
.speaker-card .body { padding: 16px; }
.speaker-card .role { font-weight: 700; font-size: 0.9rem; color: var(--text-primary); margin-bottom: 8px; }
.speaker-card .topics { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; }
/* 性格/项目小标签INTJ、项目、产品等*/
.speaker-card .pills { display: flex; flex-wrap: wrap; gap: 6px; }
.speaker-card .pill {
font-size: 0.72rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 12px;
}
.speaker-card .pill.blue { background: var(--blue-light); color: #1d4ed8; }
.speaker-card .pill.orange { background: var(--orange-red-light); color: #c2410c; }
.speaker-card .pill.green { background: var(--green-light); color: #15803d; }
.speaker-card .pill.purple { background: var(--purple-light); color: #6d28d9; }
.speaker-card .pill.red { background: var(--red-light); color: #b91c1c; }
/* ========== 二、精益介绍(三卡+图标+项目/产品/运营/商业标签)========== */
.lean-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.lean-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border-top: 4px solid var(--blue);
}
.lean-card.orange { border-top-color: var(--orange-red); }
.lean-card.blue { border-top-color: var(--blue); }
.lean-card.green { border-top-color: var(--green); }
.lean-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.lean-card .head .lean-icon {
width: 26px;
height: 26px;
background: rgba(255,255,255,0.3);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
}
.lean-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.lean-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.lean-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.lean-card .body { padding: 16px; }
.lean-card h4 { font-size: 0.88rem; font-weight: 700; margin-bottom: 8px; color: var(--text-primary); }
.lean-card ul { list-style: none; }
.lean-card li {
font-size: 0.82rem;
padding: 5px 0;
padding-left: 16px;
position: relative;
color: var(--text-secondary);
}
.lean-card li::before { content: "▪"; position: absolute; left: 0; color: var(--text-muted); font-weight: bold; }
.lean-card li .inline-tag {
display: inline-block;
font-size: 0.7rem;
padding: 2px 6px;
border-radius: 4px;
margin-right: 4px;
font-weight: 600;
}
.lean-card li .tag-项目 { background: var(--orange-red-light); color: #c2410c; }
.lean-card li .tag-产品 { background: var(--blue-light); color: #1d4ed8; }
.lean-card li .tag-运营 { background: var(--green-light); color: #15803d; }
.lean-card li .tag-商业 { background: var(--red-light); color: #b91c1c; }
/* ========== 三、会议流程图(彩色圆+白图标+步骤号)========== */
.flow-wrap {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 24px 28px;
margin-bottom: 32px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.flow-node {
display: flex;
flex-direction: column;
align-items: center;
min-width: 88px;
}
.flow-node .circle {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: #fff;
margin-bottom: 6px;
}
.flow-node .circle.blue { background: var(--blue); }
.flow-node .circle.purple { background: var(--purple); }
.flow-node .circle.orange { background: var(--orange-red); }
.flow-node .circle.red { background: var(--red); }
.flow-node .circle.green { background: var(--green); }
.flow-node .label { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); text-align: center; }
.flow-node .time { font-size: 0.7rem; color: var(--text-muted); margin-top: 2px; }
.flow-arrow { color: #cbd5e1; font-size: 1.1rem; font-weight: bold; }
/* ========== 四、热点研讨(信号标签+时间+Q:+重点黄框)========== */
.hot-list { margin-bottom: 32px; }
.hot-item {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
margin-bottom: 16px;
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.hot-item .top-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px 20px;
background: #fafafa;
border-bottom: 1px solid #f1f3f4;
}
/* 左侧信号标签AI思考/用户观点/专家洞察/AI提问*/
.hot-item .signal-tag {
flex-shrink: 0;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.75rem;
font-weight: 700;
color: #fff;
}
.hot-item .signal-tag.ai { background: var(--red); }
.hot-item .signal-tag.user { background: var(--blue); }
.hot-item .signal-tag.expert { background: var(--purple); }
.hot-item .signal-tag.question { background: var(--green); }
.hot-item .signal-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }
.hot-item .topic-wrap { flex: 1; }
.hot-item .topic-wrap .q-icon { color: var(--blue); font-weight: 800; margin-right: 6px; }
.hot-item .topic-wrap .topic-title { font-weight: 800; font-size: 1rem; color: var(--text-primary); }
.hot-item .content { padding: 16px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.65; }
.hot-item .content ul { margin: 10px 0 0 20px; }
.hot-item .content li { margin: 5px 0; }
/* 重点与101场一致的浅黄标签框*/
.hot-item .key-point {
margin: 0 20px 16px;
padding: 14px 16px;
background: var(--yellow-key-bg);
border: 1px solid var(--yellow-key);
border-radius: 10px;
font-size: 0.88rem;
font-weight: 600;
color: #713f12;
}
.hot-item .key-point .label {
display: inline-block;
background: var(--yellow-key);
color: #a16207;
padding: 3px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 800;
margin-bottom: 8px;
}
/* ========== 五、下次分享2x2 四色卡+图标)========== */
.next-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.next-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-top: 4px solid var(--orange-red);
}
.next-card.blue { border-top-color: var(--blue); }
.next-card.purple { border-top-color: var(--purple); }
.next-card.red { border-top-color: var(--red); }
.next-card .next-icon {
width: 36px;
height: 36px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
margin-bottom: 12px;
}
.next-card.orange .next-icon { background: var(--orange-red-light); }
.next-card.blue .next-icon { background: var(--blue-light); }
.next-card.purple .next-icon { background: var(--purple-light); }
.next-card.red .next-icon { background: var(--red-light); }
.next-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.next-card .desc { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.55; }
/* ========== 六、项目推进(两卡+绿/蓝)========== */
.progress-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.progress-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-left: 5px solid var(--green);
}
.progress-card.blue { border-left-color: var(--blue); }
.progress-card .progress-icon { font-size: 1.3rem; margin-bottom: 10px; }
.progress-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.progress-card .desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; }
/* ========== 页脚 ========== */
.footer {
text-align: center;
padding: 28px;
font-size: 0.82rem;
color: var(--text-muted);
border-top: 1px solid #e5e7eb;
margin-top: 12px;
}
.footer .brand { color: var(--blue); font-weight: 700; }
@media (max-width: 900px) {
.speakers-row { grid-template-columns: repeat(2, 1fr); }
.lean-row { grid-template-columns: 1fr; }
.next-grid { grid-template-columns: 1fr; }
.progress-row { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.speakers-row { grid-template-columns: 1fr; }
.flow-wrap { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
}
</style>
</head>
<body>
<div class="container">
<header class="header">
<h1>1月27日程序员AI工具链×电动车民宿×金融视角</h1>
<p class="subtitle">汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。</p>
<div class="nav-tags">
<span class="nav-tag"><span class="nav-icon">👤</span>分享人</span>
<span class="nav-tag"><span class="nav-icon">🎯</span>目标</span>
<span class="nav-tag"><span class="nav-icon"></span>关键问题</span>
<span class="nav-tag"><span class="nav-icon">💡</span>AI复盘</span>
</div>
<div class="meta">
<span>⏱ 2小时26分47秒</span>
<span>👥 600+</span>
<span>📍 Soul派对早场</span>
<span>📅 2026-01-27 06:54</span>
</div>
</header>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">👤</span>
分享人介绍
</h2>
<div class="speakers-row">{{#speakers}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num orange"></span>
<span class="section-icon">📌</span>
精益介绍
</h2>
<div class="lean-row">{{#modules}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🕐</span>
会议流程
</h2>
<div class="flow-wrap">{{#flow_steps}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num purple"></span>
<span class="section-icon"></span>
热点研讨
</h2>
<div class="hot-list">{{#highlights}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">📋</span>
下次分享
</h2>
<div class="next-grid">{{#next_share}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🚀</span>
项目推进
</h2>
<div class="progress-row">{{#actions}}</div>
</section>
<footer class="footer">
<p>版权所有 © 2026 <span class="brand">Karuo.AI</span></p>
<p style="margin-top: 8px;">Power by Karuo.AI · 每天 06:00-09:00 Soul派对直播</p>
</footer>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

View File

@@ -0,0 +1,551 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2026年2月17日过年第一个红包发给谁×人生三贵人 - 卡若派对纪要</title>
<style>
/* ===== 101场配色体系与参考图一致===== */
:root {
--blue: #2563eb;
--blue-light: #dbeafe;
--orange-red: #ea580c;
--orange-red-light: #ffedd5;
--green: #16a34a;
--green-light: #dcfce7;
--purple: #7c3aed;
--purple-light: #ede9fe;
--red: #dc2626;
--red-light: #fee2e2;
--yellow-key: #fef08a;
--yellow-key-bg: #fef9c3;
--white: #ffffff;
--bg-page: #fafafa;
--text-primary: #1a1a2e;
--text-secondary: #4b5563;
--text-muted: #6b7280;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-page);
min-height: 100vh;
color: var(--text-primary);
line-height: 1.65;
}
.container { max-width: 1120px; margin: 0 auto; padding: 32px 28px; }
/* ========== 区块标题(带图标+色条)========== */
.section-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 3px solid transparent;
font-size: 1.2rem;
font-weight: 800;
color: var(--text-primary);
}
.section-head .section-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
color: #fff;
border-radius: 8px;
font-size: 0.95rem;
font-weight: 800;
}
.section-head .section-num.blue { background: var(--blue); }
.section-head .section-num.orange { background: var(--orange-red); }
.section-head .section-num.green { background: var(--green); }
.section-head .section-num.purple { background: var(--purple); }
.section-head .section-icon { font-size: 1.25rem; opacity: 0.9; }
/* ========== 顶部标题区 ========== */
.header {
background: var(--white);
border-radius: 16px;
box-shadow: 0 4px 20px rgba(0,0,0,0.06);
padding: 32px 36px 24px;
margin-bottom: 28px;
border: 1px solid rgba(0,0,0,0.05);
}
.header h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--text-primary);
margin-bottom: 12px;
line-height: 1.3;
letter-spacing: -0.02em;
}
.header .subtitle {
font-size: 0.95rem;
color: var(--text-secondary);
margin-bottom: 18px;
max-width: 720px;
line-height: 1.55;
}
/* 导航标签行与101场一致分享人/目标/关键问题/AI复盘*/
.header .nav-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 18px;
}
.header .nav-tag {
display: inline-flex;
align-items: center;
gap: 6px;
background: #f3f4f6;
color: var(--text-secondary);
padding: 8px 14px;
border-radius: 22px;
font-size: 0.82rem;
font-weight: 600;
}
.header .nav-tag .nav-icon { font-size: 1rem; }
.header .meta {
display: flex;
flex-wrap: wrap;
gap: 16px;
font-size: 0.88rem;
color: var(--text-muted);
padding-top: 12px;
border-top: 1px solid #eee;
}
/* ========== 一、分享人介绍(四色卡+白底图标+性格/项目标签)========== */
.speakers-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.speaker-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.speaker-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.speaker-card .head .head-icon {
width: 28px;
height: 28px;
background: rgba(255,255,255,0.25);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.speaker-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.speaker-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.speaker-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.speaker-card .head.purple { background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); }
.speaker-card .body { padding: 16px; }
.speaker-card .role { font-weight: 700; font-size: 0.9rem; color: var(--text-primary); margin-bottom: 8px; }
.speaker-card .topics { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; }
/* 性格/项目小标签INTJ、项目、产品等*/
.speaker-card .pills { display: flex; flex-wrap: wrap; gap: 6px; }
.speaker-card .pill {
font-size: 0.72rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 12px;
}
.speaker-card .pill.blue { background: var(--blue-light); color: #1d4ed8; }
.speaker-card .pill.orange { background: var(--orange-red-light); color: #c2410c; }
.speaker-card .pill.green { background: var(--green-light); color: #15803d; }
.speaker-card .pill.purple { background: var(--purple-light); color: #6d28d9; }
.speaker-card .pill.red { background: var(--red-light); color: #b91c1c; }
/* ========== 二、精益介绍(三卡+图标+项目/产品/运营/商业标签)========== */
.lean-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.lean-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border-top: 4px solid var(--blue);
}
.lean-card.orange { border-top-color: var(--orange-red); }
.lean-card.blue { border-top-color: var(--blue); }
.lean-card.green { border-top-color: var(--green); }
.lean-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.lean-card .head .lean-icon {
width: 26px;
height: 26px;
background: rgba(255,255,255,0.3);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
}
.lean-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.lean-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.lean-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.lean-card .body { padding: 16px; }
.lean-card h4 { font-size: 0.88rem; font-weight: 700; margin-bottom: 8px; color: var(--text-primary); }
.lean-card ul { list-style: none; }
.lean-card li {
font-size: 0.82rem;
padding: 5px 0;
padding-left: 16px;
position: relative;
color: var(--text-secondary);
}
.lean-card li::before { content: "▪"; position: absolute; left: 0; color: var(--text-muted); font-weight: bold; }
.lean-card li .inline-tag {
display: inline-block;
font-size: 0.7rem;
padding: 2px 6px;
border-radius: 4px;
margin-right: 4px;
font-weight: 600;
}
.lean-card li .tag-项目 { background: var(--orange-red-light); color: #c2410c; }
.lean-card li .tag-产品 { background: var(--blue-light); color: #1d4ed8; }
.lean-card li .tag-运营 { background: var(--green-light); color: #15803d; }
.lean-card li .tag-商业 { background: var(--red-light); color: #b91c1c; }
/* ========== 三、会议流程图(彩色圆+白图标+步骤号)========== */
.flow-wrap {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 24px 28px;
margin-bottom: 32px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.flow-node {
display: flex;
flex-direction: column;
align-items: center;
min-width: 88px;
}
.flow-node .circle {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: #fff;
margin-bottom: 6px;
}
.flow-node .circle.blue { background: var(--blue); }
.flow-node .circle.purple { background: var(--purple); }
.flow-node .circle.orange { background: var(--orange-red); }
.flow-node .circle.red { background: var(--red); }
.flow-node .circle.green { background: var(--green); }
.flow-node .label { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); text-align: center; }
.flow-node .time { font-size: 0.7rem; color: var(--text-muted); margin-top: 2px; }
.flow-arrow { color: #cbd5e1; font-size: 1.1rem; font-weight: bold; }
/* ========== 四、热点研讨(信号标签+时间+Q:+重点黄框)========== */
.hot-list { margin-bottom: 32px; }
.hot-item {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
margin-bottom: 16px;
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.hot-item .top-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px 20px;
background: #fafafa;
border-bottom: 1px solid #f1f3f4;
}
/* 左侧信号标签AI思考/用户观点/专家洞察/AI提问*/
.hot-item .signal-tag {
flex-shrink: 0;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.75rem;
font-weight: 700;
color: #fff;
}
.hot-item .signal-tag.ai { background: var(--red); }
.hot-item .signal-tag.user { background: var(--blue); }
.hot-item .signal-tag.expert { background: var(--purple); }
.hot-item .signal-tag.question { background: var(--green); }
.hot-item .signal-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }
.hot-item .topic-wrap { flex: 1; }
.hot-item .topic-wrap .q-icon { color: var(--blue); font-weight: 800; margin-right: 6px; }
.hot-item .topic-wrap .topic-title { font-weight: 800; font-size: 1rem; color: var(--text-primary); }
.hot-item .content { padding: 16px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.65; }
.hot-item .content ul { margin: 10px 0 0 20px; }
.hot-item .content li { margin: 5px 0; }
/* 重点与101场一致的浅黄标签框*/
.hot-item .key-point {
margin: 0 20px 16px;
padding: 14px 16px;
background: var(--yellow-key-bg);
border: 1px solid var(--yellow-key);
border-radius: 10px;
font-size: 0.88rem;
font-weight: 600;
color: #713f12;
}
.hot-item .key-point .label {
display: inline-block;
background: var(--yellow-key);
color: #a16207;
padding: 3px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 800;
margin-bottom: 8px;
}
/* ========== 五、下次分享2x2 四色卡+图标)========== */
.next-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.next-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-top: 4px solid var(--orange-red);
}
.next-card.blue { border-top-color: var(--blue); }
.next-card.purple { border-top-color: var(--purple); }
.next-card.red { border-top-color: var(--red); }
.next-card .next-icon {
width: 36px;
height: 36px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
margin-bottom: 12px;
}
.next-card.orange .next-icon { background: var(--orange-red-light); }
.next-card.blue .next-icon { background: var(--blue-light); }
.next-card.purple .next-icon { background: var(--purple-light); }
.next-card.red .next-icon { background: var(--red-light); }
.next-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.next-card .desc { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.55; }
/* ========== 六、项目推进(两卡+绿/蓝)========== */
.progress-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.progress-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-left: 5px solid var(--green);
}
.progress-card.blue { border-left-color: var(--blue); }
.progress-card .progress-icon { font-size: 1.3rem; margin-bottom: 10px; }
.progress-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.progress-card .desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; }
/* ========== 页脚 ========== */
.footer {
text-align: center;
padding: 28px;
font-size: 0.82rem;
color: var(--text-muted);
border-top: 1px solid #e5e7eb;
margin-top: 12px;
}
.footer .brand { color: var(--blue); font-weight: 700; }
@media (max-width: 900px) {
.speakers-row { grid-template-columns: repeat(2, 1fr); }
.lean-row { grid-template-columns: 1fr; }
.next-grid { grid-template-columns: 1fr; }
.progress-row { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.speakers-row { grid-template-columns: 1fr; }
.flow-wrap { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
}
</style>
</head>
<body>
<div class="container">
<header class="header">
<h1>2026年2月17日过年第一个红包发给谁×人生三贵人</h1>
<p class="subtitle">汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。</p>
<div class="nav-tags">
<span class="nav-tag"><span class="nav-icon">👤</span>分享人</span>
<span class="nav-tag"><span class="nav-icon">🎯</span>目标</span>
<span class="nav-tag"><span class="nav-icon"></span>关键问题</span>
<span class="nav-tag"><span class="nav-icon">💡</span>AI复盘</span>
</div>
<div class="meta">
<span>⏱ 50分钟42秒</span>
<span>👥 94+</span>
<span>📍 Soul派对早场</span>
<span>📅 2026-02-17 8:01</span>
</div>
</header>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">👤</span>
分享人介绍
</h2>
<div class="speakers-row"><div class="speaker-card">
<div class="head blue"><span class="head-icon">👤</span>主持人</div>
<div class="body"><p class="role">派对主理·102场</p><p class="topics">红包与贵人·无我利他·伴侣与决策</p></div>
</div>
<div class="speaker-card">
<div class="head orange"><span class="head-icon">👤</span>群友</div>
<div class="body"><p class="role">互动分享</p><p class="topics">收获与付出·红包是心意·亲密付</p></div>
</div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num orange"></span>
<span class="section-icon">📌</span>
精益介绍
</h2>
<div class="lean-row"><div class="lean-card orange"><div class="head orange"><span class="lean-icon">📌</span>人生三贵人:引路人·皮鞭·后盾</div><div class="body"><h4>第一个贵人</h4><ul><li>亏过一个亿的男人13年做收银机/美团模式、太早做市场</li><li>认知很高,带来思维启发与优质人脉</li><li>引路人型:泡茶聊天时直接给解决方案、有求必应</li></ul><h4>第二个贵人</h4><ul><li>樊登福建区负责人,皮鞭型</li><li>决策不对时敢提、敢说:这事可能不对</li><li>人生只做一件最重要的事</li></ul></div></div>
<div class="lean-card blue"><div class="head blue"><span class="lean-icon"></span>红包与链接</div><div class="body"><h4>红包类型</h4><ul><li>心意型9块9也开心表达气氛、无经济压力</li><li>建联型:礼尚往来、建立联系</li><li>交易型:有的不收,收了等于承诺、要资源要场地的不收</li></ul><h4>原则</h4><ul><li>付出时忘掉自己、无我利他,回馈自然来</li><li>照顾好自己的前提下,优先身边人</li><li>红包可用亲密付(发现新大陆)</li></ul></div></div>
<div class="lean-card green"><div class="head green"><span class="lean-icon">⚙️</span>Soul与派对</div><div class="body"><h4>102场体会</h4><ul><li>大机会:一线供应链、真心话、多视角</li><li>第一波10人很容易稳住梯度机制</li><li>每天做会议纪要发群;总结很重要</li></ul></div></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🕐</span>
会议流程
</h2>
<div class="flow-wrap"><div class="flow-node"><div class="circle blue">🎙️</div><span class="label">开场介绍</span><span class="time">06:00-06:10</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle purple">👥</div><span class="label">嘉宾分享</span><span class="time">06:10-07:30</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle orange">💡</div><span class="label">干货提炼</span><span class="time">07:30-08:00</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle red">🤝</div><span class="label">项目对接</span><span class="time">08:00-08:40</span></div>
<span class="flow-arrow"></span>
<div class="flow-node"><div class="circle green">📋</div><span class="label">总结收尾</span><span class="time">08:40-09:00</span></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num purple"></span>
<span class="section-icon"></span>
热点研讨
</h2>
<div class="hot-list"><div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">17:04-23:00</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">三个贵人:引路人·皮鞭·后盾</span></div>
</div>
<div class="content">今年红包只发三人:引路人(亏过一个亿、认知高人脉好)、皮鞭(樊登福建负责人、敢纠偏决策)、后盾(老婆、财务生活全管)。顺序对外利他型,对内伴侣第一。</div>
<div class="key-point"><span class="label">重点</span><br/>贵人不是数量,是角色分工:给视野、给纠偏、给兜底。离自己近的人优先,永远的原则。</div>
</div>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">28:46-30:02</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">红包是心意不是金额</span></div>
</div>
<div class="content">微信设200元上限的本意是双方无经济压力表达节日气氛。9块9也很开心。红包可以用亲密付。</div>
<div class="key-point"><span class="label">重点</span><br/>心意>金额。设上限恰恰是让人敢发、对方敢收,关系不异化为交易。</div>
</div>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">26:01-27:15</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">无我利他才有回馈</span></div>
</div>
<div class="content">付出时把自己忘掉,不想自己的事,慢慢就有回馈。他们来找我泡茶、有需求,我直接帮解决;我只要他们的视角给我看不到的东西。</div>
<div class="key-point"><span class="label">重点</span><br/>收获一定伴随付出,但付出时若算计回报就有阻碍。给解决方案、有求必应,换视角与链接。</div>
</div>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag user">用户观点</span><div class="signal-time">35:14-41:43</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">伴侣相处:迭代与三个卡点</span></div>
</div>
<div class="content">不内耗、秒道歉两人要迭代、update。出去找地方摊开讲三个卡点如加工资未统一、人的问题每人说三件解决盲区。先认错、再谈事。</div>
<div class="key-point"><span class="label">重点</span><br/>关系要迭代。卡点列出来直接讲,事归事、人归人;伴侣会沟通、不积压,才能不内耗往前冲。</div>
</div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">📋</span>
下次分享
</h2>
<div class="next-grid"><div class="next-card orange"><div class="next-icon">📌</div><div class="title">红包与贵人</div><div class="desc"><strong>三贵人:</strong>引路人(视野+人脉)、皮鞭(纠偏决策)、后盾(生活+财务)</div></div>
<div class="next-card blue"><div class="next-icon">🎯</div><div class="title">伴侣与决策</div><div class="desc"><strong>不内耗:</strong>秒道歉、要迭代,卡点摊开讲</div></div>
<div class="next-card purple"><div class="next-icon">📋</div><div class="title">待定</div><div class="desc">下期公布</div></div>
<div class="next-card red"><div class="next-icon">💡</div><div class="title">待定</div><div class="desc">下期公布</div></div></div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🚀</span>
项目推进
</h2>
<div class="progress-row"><div class="progress-card "><div class="progress-icon">🚀</div><div class="title">项目推进</div><div class="desc">把人生三贵人写成文章发出去,加深链接。红包发完可借回馈时机聊几句。<br/><small style="color:#6b7280;">今日已发老婆;另两位等起来再发,发时顺便聊天</small></div></div>
<div class="progress-card blue"><div class="progress-icon">📊</div><div class="title">项目推进</div><div class="desc">每天会议纪要发群102场继续做总结。关注订阅群主不然看不到派对。<br/><small style="color:#6b7280;">Soul第一波10人易稳住有梯度多视角、一线供应链是机会</small></div></div></div>
</section>
<footer class="footer">
<p>版权所有 © 2026 <span class="brand">Karuo.AI</span></p>
<p style="margin-top: 8px;">Power by Karuo.AI · 每天 06:00-09:00 Soul派对直播</p>
</footer>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

View File

@@ -5,388 +5,490 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{title}} - 卡若派对纪要</title>
<style>
/* ===== 101场配色体系与参考图一致===== */
:root {
--blue: #2563eb;
--blue-light: #dbeafe;
--orange-red: #ea580c;
--orange-red-light: #ffedd5;
--green: #16a34a;
--green-light: #dcfce7;
--purple: #7c3aed;
--purple-light: #ede9fe;
--red: #dc2626;
--red-light: #fee2e2;
--yellow-key: #fef08a;
--yellow-key-bg: #fef9c3;
--white: #ffffff;
--bg-page: #fafafa;
--text-primary: #1a1a2e;
--text-secondary: #4b5563;
--text-muted: #6b7280;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background: radial-gradient(at 20% 20%, rgba(168, 85, 247, 0.15) 0%, transparent 50%),
radial-gradient(at 80% 20%, rgba(59, 130, 246, 0.12) 0%, transparent 50%),
radial-gradient(at 40% 80%, rgba(34, 197, 94, 0.1) 0%, transparent 50%),
radial-gradient(at 90% 70%, rgba(244, 114, 182, 0.08) 0%, transparent 50%),
linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-page);
min-height: 100vh;
color: #1a1a1a;
line-height: 1.6;
color: var(--text-primary);
line-height: 1.65;
}
.container { max-width: 1200px; margin: 0 auto; padding: 24px; }
.container { max-width: 1120px; margin: 0 auto; padding: 32px 28px; }
/* 毛玻璃基础样式 */
.glass {
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 16px;
}
.glass-card {
background: rgba(255, 255, 255, 0.65);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.4);
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05);
border-radius: 12px;
}
/* 颜色变体 */
.glass-blue {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.12) 0%, rgba(59, 130, 246, 0.06) 100%);
border: 1px solid rgba(59, 130, 246, 0.25);
}
.glass-green {
background: linear-gradient(135deg, rgba(34, 197, 94, 0.12) 0%, rgba(34, 197, 94, 0.06) 100%);
border: 1px solid rgba(34, 197, 94, 0.25);
}
.glass-purple {
background: linear-gradient(135deg, rgba(168, 85, 247, 0.12) 0%, rgba(168, 85, 247, 0.06) 100%);
border: 1px solid rgba(168, 85, 247, 0.25);
}
.glass-orange {
background: linear-gradient(135deg, rgba(249, 115, 22, 0.12) 0%, rgba(249, 115, 22, 0.06) 100%);
border: 1px solid rgba(249, 115, 22, 0.25);
}
.glass-red {
background: linear-gradient(135deg, rgba(239, 68, 68, 0.12) 0%, rgba(239, 68, 68, 0.06) 100%);
border: 1px solid rgba(239, 68, 68, 0.25);
}
.glass-yellow {
background: linear-gradient(135deg, rgba(234, 179, 8, 0.12) 0%, rgba(234, 179, 8, 0.06) 100%);
border: 1px solid rgba(234, 179, 8, 0.25);
}
.glass-pink {
background: linear-gradient(135deg, rgba(244, 114, 182, 0.12) 0%, rgba(244, 114, 182, 0.06) 100%);
border: 1px solid rgba(244, 114, 182, 0.25);
}
.glass-teal {
background: linear-gradient(135deg, rgba(20, 184, 166, 0.12) 0%, rgba(20, 184, 166, 0.06) 100%);
border: 1px solid rgba(20, 184, 166, 0.25);
}
.glass-indigo {
background: linear-gradient(135deg, rgba(99, 102, 241, 0.12) 0%, rgba(99, 102, 241, 0.06) 100%);
border: 1px solid rgba(99, 102, 241, 0.25);
}
.glass-gray {
background: rgba(248, 250, 252, 0.8);
border: 1px solid rgba(148, 163, 184, 0.2);
}
/* Header */
.header {
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 50%, #f1f5f9 100%);
padding: 32px;
margin-bottom: 24px;
}
.header h1 { font-size: 2rem; font-weight: 700; margin-bottom: 8px; }
.header .subtitle { font-size: 1.1rem; color: #64748b; margin-bottom: 16px; }
.header .meta { display: flex; flex-wrap: wrap; gap: 12px; }
.header .meta-item {
background: rgba(255,255,255,0.7);
backdrop-filter: blur(8px);
padding: 8px 16px;
border-radius: 8px;
font-size: 0.9rem;
border: 1px solid rgba(255,255,255,0.4);
}
/* 流程图 */
.flow-chart {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
padding: 20px;
margin-bottom: 24px;
flex-wrap: wrap;
}
.flow-step {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
background: rgba(255,255,255,0.8);
border-radius: 8px;
font-size: 0.85rem;
font-weight: 500;
border: 1px solid rgba(0,0,0,0.08);
}
.flow-step .icon { font-size: 1.1rem; }
.flow-arrow { color: #94a3b8; font-size: 1.2rem; }
/* Section */
.section { margin-bottom: 24px; }
.section-title {
/* ========== 区块标题(带图标+色条)========== */
.section-head {
display: flex;
align-items: center;
gap: 10px;
font-size: 1.25rem;
font-weight: 700;
margin-bottom: 16px;
padding-bottom: 8px;
border-bottom: 2px solid #e2e8f0;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 3px solid transparent;
font-size: 1.2rem;
font-weight: 800;
color: var(--text-primary);
}
.section-title .icon { font-size: 1.4rem; }
.section-title .num {
.section-head .section-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
color: white;
border-radius: 50%;
font-size: 0.85rem;
font-weight: 700;
width: 32px;
height: 32px;
color: #fff;
border-radius: 8px;
font-size: 0.95rem;
font-weight: 800;
}
.section-head .section-num.blue { background: var(--blue); }
.section-head .section-num.orange { background: var(--orange-red); }
.section-head .section-num.green { background: var(--green); }
.section-head .section-num.purple { background: var(--purple); }
.section-head .section-icon { font-size: 1.25rem; opacity: 0.9; }
/* Grid */
.grid { display: grid; gap: 16px; }
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
.grid-3 { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
/* Speaker Card */
.speaker-card {
padding: 16px;
transition: transform 0.2s, box-shadow 0.2s;
/* ========== 顶部标题区 ========== */
.header {
background: var(--white);
border-radius: 16px;
box-shadow: 0 4px 20px rgba(0,0,0,0.06);
padding: 32px 36px 24px;
margin-bottom: 28px;
border: 1px solid rgba(0,0,0,0.05);
}
.speaker-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(0,0,0,0.08);
}
.speaker-card .name { font-weight: 700; color: #1a1a1a; }
.speaker-card .role { font-size: 0.85rem; color: #64748b; }
.speaker-card .topics { font-size: 0.8rem; color: #94a3b8; margin-top: 4px; }
/* Module Card */
.module-card { padding: 20px; }
.module-card h4 { font-weight: 600; margin-bottom: 12px; }
.module-card ul { list-style: none; }
.module-card li {
font-size: 0.9rem;
padding: 4px 0;
display: flex;
align-items: flex-start;
gap: 8px;
}
.module-card li::before {
content: "✓";
color: #22c55e;
font-weight: bold;
}
.module-card li.negative::before {
content: "✗";
color: #ef4444;
}
/* Highlight Card */
.highlight-card {
padding: 20px;
.header h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--text-primary);
margin-bottom: 12px;
line-height: 1.3;
letter-spacing: -0.02em;
}
.highlight-card .header-row {
.header .subtitle {
font-size: 0.95rem;
color: var(--text-secondary);
margin-bottom: 18px;
max-width: 720px;
line-height: 1.55;
}
/* 导航标签行与101场一致分享人/目标/关键问题/AI复盘*/
.header .nav-tags {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 8px;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 18px;
}
.highlight-card h4 { font-weight: 700; }
.highlight-card .time {
font-size: 0.75rem;
padding: 4px 8px;
border-radius: 4px;
background: rgba(0,0,0,0.05);
.header .nav-tag {
display: inline-flex;
align-items: center;
gap: 6px;
background: #f3f4f6;
color: var(--text-secondary);
padding: 8px 14px;
border-radius: 22px;
font-size: 0.82rem;
font-weight: 600;
}
.highlight-card .content { font-size: 0.9rem; margin-bottom: 8px; }
.highlight-card .insight {
font-size: 0.8rem;
color: #64748b;
padding-top: 8px;
border-top: 1px dashed rgba(0,0,0,0.1);
.header .nav-tag .nav-icon { font-size: 1rem; }
.header .meta {
display: flex;
flex-wrap: wrap;
gap: 16px;
font-size: 0.88rem;
color: var(--text-muted);
padding-top: 12px;
border-top: 1px solid #eee;
}
/* Takeaway Card - 单行对齐 */
.takeaway-card { padding: 20px; }
.takeaway-card h4 { font-weight: 700; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
.takeaway-card ul { list-style: none; }
.takeaway-card li {
font-size: 0.85rem;
padding: 8px 0;
border-bottom: 1px solid rgba(0,0,0,0.05);
/* ========== 一、分享人介绍(四色卡+白底图标+性格/项目标签)========== */
.speakers-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.speaker-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.speaker-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.takeaway-card li:last-child { border-bottom: none; }
.takeaway-card li strong { color: #1a1a1a; min-width: 100px; }
.speaker-card .head .head-icon {
width: 28px;
height: 28px;
background: rgba(255,255,255,0.25);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.speaker-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.speaker-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.speaker-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.speaker-card .head.purple { background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); }
.speaker-card .body { padding: 16px; }
.speaker-card .role { font-weight: 700; font-size: 0.9rem; color: var(--text-primary); margin-bottom: 8px; }
.speaker-card .topics { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; }
/* 性格/项目小标签INTJ、项目、产品等*/
.speaker-card .pills { display: flex; flex-wrap: wrap; gap: 6px; }
.speaker-card .pill {
font-size: 0.72rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 12px;
}
.speaker-card .pill.blue { background: var(--blue-light); color: #1d4ed8; }
.speaker-card .pill.orange { background: var(--orange-red-light); color: #c2410c; }
.speaker-card .pill.green { background: var(--green-light); color: #15803d; }
.speaker-card .pill.purple { background: var(--purple-light); color: #6d28d9; }
.speaker-card .pill.red { background: var(--red-light); color: #b91c1c; }
/* Action Card */
.action-card {
/* ========== 二、精益介绍(三卡+图标+项目/产品/运营/商业标签)========== */
.lean-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.lean-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
overflow: hidden;
border-top: 4px solid var(--blue);
}
.lean-card.orange { border-top-color: var(--orange-red); }
.lean-card.blue { border-top-color: var(--blue); }
.lean-card.green { border-top-color: var(--green); }
.lean-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: #fff;
}
.lean-card .head .lean-icon {
width: 26px;
height: 26px;
background: rgba(255,255,255,0.3);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
}
.lean-card .head.orange { background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%); }
.lean-card .head.blue { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); }
.lean-card .head.green { background: linear-gradient(135deg, #16a34a 0%, #15803d 100%); }
.lean-card .body { padding: 16px; }
.lean-card h4 { font-size: 0.88rem; font-weight: 700; margin-bottom: 8px; color: var(--text-primary); }
.lean-card ul { list-style: none; }
.lean-card li {
font-size: 0.82rem;
padding: 5px 0;
padding-left: 16px;
position: relative;
color: var(--text-secondary);
}
.lean-card li::before { content: "▪"; position: absolute; left: 0; color: var(--text-muted); font-weight: bold; }
.lean-card li .inline-tag {
display: inline-block;
font-size: 0.7rem;
padding: 2px 6px;
border-radius: 4px;
margin-right: 4px;
font-weight: 600;
}
.lean-card li .tag-项目 { background: var(--orange-red-light); color: #c2410c; }
.lean-card li .tag-产品 { background: var(--blue-light); color: #1d4ed8; }
.lean-card li .tag-运营 { background: var(--green-light); color: #15803d; }
.lean-card li .tag-商业 { background: var(--red-light); color: #b91c1c; }
/* ========== 三、会议流程图(彩色圆+白图标+步骤号)========== */
.flow-wrap {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 24px 28px;
margin-bottom: 32px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.flow-node {
display: flex;
flex-direction: column;
align-items: center;
min-width: 88px;
}
.flow-node .circle {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: #fff;
margin-bottom: 6px;
}
.flow-node .circle.blue { background: var(--blue); }
.flow-node .circle.purple { background: var(--purple); }
.flow-node .circle.orange { background: var(--orange-red); }
.flow-node .circle.red { background: var(--red); }
.flow-node .circle.green { background: var(--green); }
.flow-node .label { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); text-align: center; }
.flow-node .time { font-size: 0.7rem; color: var(--text-muted); margin-top: 2px; }
.flow-arrow { color: #cbd5e1; font-size: 1.1rem; font-weight: bold; }
/* ========== 四、热点研讨(信号标签+时间+Q:+重点黄框)========== */
.hot-list { margin-bottom: 32px; }
.hot-item {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
margin-bottom: 16px;
overflow: hidden;
border: 1px solid rgba(0,0,0,0.05);
}
.hot-item .top-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px 20px;
background: #fafafa;
border-bottom: 1px solid #f1f3f4;
}
/* 左侧信号标签AI思考/用户观点/专家洞察/AI提问*/
.hot-item .signal-tag {
flex-shrink: 0;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.75rem;
font-weight: 700;
color: #fff;
}
.hot-item .signal-tag.ai { background: var(--red); }
.hot-item .signal-tag.user { background: var(--blue); }
.hot-item .signal-tag.expert { background: var(--purple); }
.hot-item .signal-tag.question { background: var(--green); }
.hot-item .signal-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }
.hot-item .topic-wrap { flex: 1; }
.hot-item .topic-wrap .q-icon { color: var(--blue); font-weight: 800; margin-right: 6px; }
.hot-item .topic-wrap .topic-title { font-weight: 800; font-size: 1rem; color: var(--text-primary); }
.hot-item .content { padding: 16px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.65; }
.hot-item .content ul { margin: 10px 0 0 20px; }
.hot-item .content li { margin: 5px 0; }
/* 重点与101场一致的浅黄标签框*/
.hot-item .key-point {
margin: 0 20px 16px;
padding: 14px 16px;
background: var(--yellow-key-bg);
border: 1px solid var(--yellow-key);
border-radius: 10px;
font-size: 0.88rem;
font-weight: 600;
color: #713f12;
}
.hot-item .key-point .label {
display: inline-block;
background: var(--yellow-key);
color: #a16207;
padding: 3px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 800;
margin-bottom: 8px;
}
/* ========== 五、下次分享2x2 四色卡+图标)========== */
.next-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.next-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-top: 4px solid var(--orange-red);
}
.next-card.blue { border-top-color: var(--blue); }
.next-card.purple { border-top-color: var(--purple); }
.next-card.red { border-top-color: var(--red); }
.next-card .next-icon {
width: 36px;
height: 36px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
margin-bottom: 12px;
}
.action-card .content { font-size: 0.9rem; }
.action-card .note {
font-size: 0.8rem;
color: #64748b;
margin-top: 8px;
}
.next-card.orange .next-icon { background: var(--orange-red-light); }
.next-card.blue .next-icon { background: var(--blue-light); }
.next-card.purple .next-icon { background: var(--purple-light); }
.next-card.red .next-icon { background: var(--red-light); }
.next-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.next-card .desc { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.55; }
/* Footer */
/* ========== 六、项目推进(两卡+绿/蓝)========== */
.progress-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.progress-card {
background: var(--white);
border-radius: 14px;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
padding: 20px;
border-left: 5px solid var(--green);
}
.progress-card.blue { border-left-color: var(--blue); }
.progress-card .progress-icon { font-size: 1.3rem; margin-bottom: 10px; }
.progress-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.progress-card .desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; }
/* ========== 页脚 ========== */
.footer {
text-align: center;
padding: 32px;
margin-top: 24px;
background: rgba(248,250,252,0.8);
border-radius: 16px;
padding: 28px;
font-size: 0.82rem;
color: var(--text-muted);
border-top: 1px solid #e5e7eb;
margin-top: 12px;
}
.footer p { font-size: 0.85rem; color: #64748b; }
.footer .brand { font-weight: 600; color: #3b82f6; }
.footer .brand { color: var(--blue); font-weight: 700; }
/* Responsive */
@media (max-width: 768px) {
.container { padding: 16px; }
.header h1 { font-size: 1.5rem; }
.grid-2, .grid-3 { grid-template-columns: 1fr; }
.flow-chart { flex-direction: column; }
@media (max-width: 900px) {
.speakers-row { grid-template-columns: repeat(2, 1fr); }
.lean-row { grid-template-columns: 1fr; }
.next-grid { grid-template-columns: 1fr; }
.progress-row { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.speakers-row { grid-template-columns: 1fr; }
.flow-wrap { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
}
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<header class="header glass">
<header class="header">
<h1>{{title}}</h1>
<p class="subtitle">{{subtitle}}</p>
<p class="subtitle">汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。</p>
<div class="nav-tags">
<span class="nav-tag"><span class="nav-icon">👤</span>分享人</span>
<span class="nav-tag"><span class="nav-icon">🎯</span>目标</span>
<span class="nav-tag"><span class="nav-icon"></span>关键问题</span>
<span class="nav-tag"><span class="nav-icon">💡</span>AI复盘</span>
</div>
<div class="meta">
<span class="meta-item">⏱ {{duration}}</span>
<span class="meta-item">👥 {{participants_count}} 参与</span>
<span class="meta-item">📍 {{location}}</span>
<span class="meta-item">📅 {{date}} {{time}}</span>
<span>⏱ {{duration}}</span>
<span>👥 {{participants_count}}</span>
<span>📍 {{location}}</span>
<span>📅 {{date}} {{time}}</span>
</div>
</header>
<!-- 派对流程图 -->
<div class="flow-chart glass">
<div class="flow-step"><span class="icon">🎙️</span> 开场介绍</div>
<span class="flow-arrow"></span>
<div class="flow-step"><span class="icon">👥</span> 嘉宾分享</div>
<span class="flow-arrow"></span>
<div class="flow-step"><span class="icon">💡</span> 干货提炼</div>
<span class="flow-arrow"></span>
<div class="flow-step"><span class="icon">🤝</span> 项目对接</div>
<span class="flow-arrow"></span>
<div class="flow-step"><span class="icon">📋</span> 总结收尾</div>
</div>
<!-- 派对分享人 -->
<section class="section">
<h2 class="section-title">
<span class="num">1</span>
<span class="icon">🎤</span> 派对分享人
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">👤</span>
分享人介绍
</h2>
<div class="grid grid-2">
{{#speakers}}
<div class="speaker-card glass-card glass-gray">
<p><span class="name">{{name}}</span> <span class="role">/ {{role}}</span></p>
<p class="topics">{{topics}}</p>
</div>
{{/speakers}}
</div>
<div class="speakers-row">{{#speakers}}</div>
</section>
<!-- 分享项目 -->
<section class="section">
<h2 class="section-title">
<span class="num">2</span>
<span class="icon">📌</span> 分享项目
<section>
<h2 class="section-head">
<span class="section-num orange"></span>
<span class="section-icon">📌</span>
精益介绍
</h2>
{{#modules}}
<div style="margin-bottom: 24px;">
<h3 style="font-size: 1.1rem; font-weight: 700; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid {{border_color}};">
{{index}}️⃣ {{title}}
</h3>
<div class="grid grid-2">
{{#items}}
<div class="module-card glass-card glass-{{color}}">
<h4>{{title}}</h4>
<ul>
{{#points}}
<li class="{{class}}">{{text}}</li>
{{/points}}
</ul>
</div>
{{/items}}
</div>
</div>
{{/modules}}
<div class="lean-row">{{#modules}}</div>
</section>
<!-- 重点片段 -->
<section class="section">
<h2 class="section-title">
<span class="num">3</span>
<span class="icon">🔥</span> 重点片段
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🕐</span>
会议流程
</h2>
{{#highlights}}
<div class="highlight-card glass-card glass-{{color}}">
<div class="header-row">
<h4>{{emoji}} {{title}}</h4>
<span class="time">{{time}}</span>
</div>
<p class="content">{{content}}</p>
<p class="insight">💡 {{insight}}</p>
</div>
{{/highlights}}
<div class="flow-wrap">{{#flow_steps}}</div>
</section>
<!-- 干货提炼 -->
<section class="section">
<h2 class="section-title">
<span class="num">4</span>
<span class="icon"></span> 干货提炼
<section>
<h2 class="section-head">
<span class="section-num purple"></span>
<span class="section-icon"></span>
热点研讨
</h2>
<div class="grid grid-2">
{{#takeaways}}
<div class="takeaway-card glass-card glass-{{color}}">
<h4>{{emoji}} {{title}}</h4>
<ul>
{{#points}}
<li>{{.}}</li>
{{/points}}
</ul>
</div>
{{/takeaways}}
</div>
<div class="hot-list">{{#highlights}}</div>
</section>
<!-- 项目推进 -->
<section class="section">
<h2 class="section-title">
<span class="num">5</span>
<span class="icon">🚀</span> 项目推进
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">📋</span>
下次分享
</h2>
{{#actions}}
<div class="action-card glass-card glass-{{color}}">
<p class="content">{{content}}</p>
{{#note}}<p class="note">📌 {{note}}</p>{{/note}}
</div>
{{/actions}}
<div class="next-grid">{{#next_share}}</div>
</section>
<!-- Footer -->
<footer class="footer glass">
<p><span class="brand">卡若团队</span> 整理 | {{generate_date}}</p>
<p style="margin-top: 8px;">每天 06:00-09:00 Soul派对直播 · 欢迎加入分享</p>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🚀</span>
项目推进
</h2>
<div class="progress-row">{{#actions}}</div>
</section>
<footer class="footer">
<p>版权所有 © 2026 <span class="brand">Karuo.AI</span></p>
<p style="margin-top: 8px;">Power by Karuo.AI · 每天 06:00-09:00 Soul派对直播</p>
</footer>
</div>
</body>

View File

@@ -0,0 +1,482 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{title}} - 卡若派对纪要</title>
<style>
/* ===== 非101风格简约编辑风结构同 meeting.html ===== */
:root {
--accent: #475569;
--accent-soft: #e2e8f0;
--white: #ffffff;
--bg-page: #f8fafc;
--text-primary: #0f172a;
--text-secondary: #475569;
--text-muted: #64748b;
--border: #e2e8f0;
--border-strong: #cbd5e1;
--key-bg: #f1f5f9;
--key-border: #cbd5e1;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-page);
min-height: 100vh;
color: var(--text-primary);
line-height: 1.65;
}
.container { max-width: 1120px; margin: 0 auto; padding: 32px 28px; }
.section-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 2px solid var(--border);
font-size: 1.2rem;
font-weight: 800;
color: var(--text-primary);
}
.section-head .section-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
color: var(--accent);
background: var(--accent-soft);
border: 2px solid var(--border-strong);
border-radius: 8px;
font-size: 0.95rem;
font-weight: 800;
}
.section-head .section-num.blue,
.section-head .section-num.orange,
.section-head .section-num.green,
.section-head .section-num.purple { color: var(--accent); background: var(--accent-soft); border-color: var(--border-strong); }
.section-head .section-icon { font-size: 1.25rem; opacity: 0.85; }
.header {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
padding: 32px 36px 24px;
margin-bottom: 28px;
box-shadow: none;
}
.header h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--text-primary);
margin-bottom: 12px;
line-height: 1.3;
letter-spacing: -0.02em;
}
.header .subtitle {
font-size: 0.95rem;
color: var(--text-secondary);
margin-bottom: 18px;
max-width: 720px;
line-height: 1.55;
}
.header .nav-tags { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 18px; }
.header .nav-tag {
display: inline-flex;
align-items: center;
gap: 6px;
background: var(--accent-soft);
color: var(--text-secondary);
padding: 8px 14px;
border-radius: 20px;
font-size: 0.82rem;
font-weight: 600;
border: 1px solid var(--border);
}
.header .nav-tag .nav-icon { font-size: 1rem; }
.header .meta {
display: flex;
flex-wrap: wrap;
gap: 16px;
font-size: 0.88rem;
color: var(--text-muted);
padding-top: 12px;
border-top: 1px solid var(--border);
}
.speakers-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.speaker-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
overflow: hidden;
box-shadow: none;
}
.speaker-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: var(--text-primary);
background: var(--accent-soft);
border-bottom: 1px solid var(--border);
}
.speaker-card .head .head-icon {
width: 28px;
height: 28px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.speaker-card .head.blue,
.speaker-card .head.orange,
.speaker-card .head.green,
.speaker-card .head.purple { background: var(--accent-soft); color: var(--text-primary); border-bottom-color: var(--border); }
.speaker-card .body { padding: 16px; }
.speaker-card .role { font-weight: 700; font-size: 0.9rem; color: var(--text-primary); margin-bottom: 8px; }
.speaker-card .topics { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; }
.speaker-card .pills { display: flex; flex-wrap: wrap; gap: 6px; }
.speaker-card .pill {
font-size: 0.72rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 10px;
background: var(--accent-soft);
color: var(--text-secondary);
border: 1px solid var(--border);
}
.speaker-card .pill.blue,
.speaker-card .pill.orange,
.speaker-card .pill.green,
.speaker-card .pill.purple,
.speaker-card .pill.red { background: var(--accent-soft); color: var(--text-secondary); border-color: var(--border); }
.lean-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.lean-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-top: 4px solid var(--accent);
overflow: hidden;
box-shadow: none;
}
.lean-card.orange,
.lean-card.blue,
.lean-card.green { border-top-color: var(--accent); }
.lean-card .head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
font-weight: 800;
font-size: 0.95rem;
color: var(--text-primary);
background: var(--accent-soft);
border-bottom: 1px solid var(--border);
}
.lean-card .head .lean-icon {
width: 26px;
height: 26px;
background: var(--white);
border: 1px solid var(--border);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
}
.lean-card .head.orange,
.lean-card .head.blue,
.lean-card .head.green { background: var(--accent-soft); color: var(--text-primary); }
.lean-card .body { padding: 16px; }
.lean-card h4 { font-size: 0.88rem; font-weight: 700; margin-bottom: 8px; color: var(--text-primary); }
.lean-card ul { list-style: none; }
.lean-card li {
font-size: 0.82rem;
padding: 5px 0;
padding-left: 16px;
position: relative;
color: var(--text-secondary);
}
.lean-card li::before { content: "▪"; position: absolute; left: 0; color: var(--text-muted); font-weight: bold; }
.lean-card li .inline-tag { font-size: 0.7rem; padding: 2px 6px; border-radius: 4px; margin-right: 4px; font-weight: 600; background: var(--accent-soft); color: var(--text-secondary); }
.lean-card li .tag-项目,
.lean-card li .tag-产品,
.lean-card li .tag-运营,
.lean-card li .tag-商业 { background: var(--accent-soft); color: var(--text-secondary); }
.flow-wrap {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
padding: 24px 28px;
margin-bottom: 32px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.flow-node {
display: flex;
flex-direction: column;
align-items: center;
min-width: 88px;
}
.flow-node .circle {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: var(--text-primary);
background: var(--accent-soft);
border: 2px solid var(--border-strong);
margin-bottom: 6px;
}
.flow-node .circle.blue,
.flow-node .circle.purple,
.flow-node .circle.orange,
.flow-node .circle.red,
.flow-node .circle.green { background: var(--accent-soft); color: var(--text-primary); border-color: var(--border-strong); }
.flow-node .label { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); text-align: center; }
.flow-node .time { font-size: 0.7rem; color: var(--text-muted); margin-top: 2px; }
.flow-arrow { color: var(--border-strong); font-size: 1.1rem; font-weight: bold; }
.hot-list { margin-bottom: 32px; }
.hot-item {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
margin-bottom: 16px;
overflow: hidden;
}
.hot-item .top-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px 20px;
background: var(--bg-page);
border-bottom: 1px solid var(--border);
}
.hot-item .signal-tag {
flex-shrink: 0;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.75rem;
font-weight: 700;
background: var(--accent);
color: var(--white);
}
.hot-item .signal-tag.ai,
.hot-item .signal-tag.user,
.hot-item .signal-tag.expert,
.hot-item .signal-tag.question { background: var(--accent); color: var(--white); }
.hot-item .signal-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }
.hot-item .topic-wrap { flex: 1; }
.hot-item .topic-wrap .q-icon { color: var(--accent); font-weight: 800; margin-right: 6px; }
.hot-item .topic-wrap .topic-title { font-weight: 800; font-size: 1rem; color: var(--text-primary); }
.hot-item .content { padding: 16px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.65; }
.hot-item .content ul { margin: 10px 0 0 20px; }
.hot-item .content li { margin: 5px 0; }
.hot-item .key-point {
margin: 0 20px 16px;
padding: 14px 16px;
background: var(--key-bg);
border: 1px solid var(--key-border);
border-radius: 10px;
font-size: 0.88rem;
font-weight: 600;
color: var(--text-primary);
}
.hot-item .key-point .label {
display: inline-block;
background: var(--accent-soft);
color: var(--accent);
padding: 3px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 800;
margin-bottom: 8px;
border: 1px solid var(--border);
}
.next-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.next-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-top: 4px solid var(--accent);
padding: 20px;
}
.next-card.blue,
.next-card.purple,
.next-card.red { border-top-color: var(--accent); }
.next-card .next-icon {
width: 36px;
height: 36px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
margin-bottom: 12px;
background: var(--accent-soft);
border: 1px solid var(--border);
}
.next-card.orange .next-icon,
.next-card.blue .next-icon,
.next-card.purple .next-icon,
.next-card.red .next-icon { background: var(--accent-soft); border: 1px solid var(--border); }
.next-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.next-card .desc { font-size: 0.83rem; color: var(--text-secondary); line-height: 1.55; }
.progress-row {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 32px;
}
.progress-card {
background: var(--white);
border-radius: 12px;
border: 1px solid var(--border);
border-left: 5px solid var(--accent);
padding: 20px;
}
.progress-card.blue { border-left-color: var(--accent); }
.progress-card .progress-icon { font-size: 1.3rem; margin-bottom: 10px; }
.progress-card .title { font-weight: 800; font-size: 1rem; color: var(--text-primary); margin-bottom: 8px; }
.progress-card .desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; }
.footer {
text-align: center;
padding: 28px;
font-size: 0.82rem;
color: var(--text-muted);
border-top: 1px solid var(--border);
margin-top: 12px;
}
.footer .brand { color: var(--accent); font-weight: 700; }
@media (max-width: 900px) {
.speakers-row { grid-template-columns: repeat(2, 1fr); }
.lean-row { grid-template-columns: 1fr; }
.next-grid { grid-template-columns: 1fr; }
.progress-row { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.speakers-row { grid-template-columns: 1fr; }
.flow-wrap { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
}
</style>
</head>
<body>
<div class="container">
<header class="header">
<h1>{{title}}</h1>
<p class="subtitle">汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。</p>
<div class="nav-tags">
<span class="nav-tag"><span class="nav-icon">👤</span>分享人</span>
<span class="nav-tag"><span class="nav-icon">🎯</span>目标</span>
<span class="nav-tag"><span class="nav-icon"></span>关键问题</span>
<span class="nav-tag"><span class="nav-icon">💡</span>AI复盘</span>
</div>
<div class="meta">
<span>⏱ {{duration}}</span>
<span>👥 {{participants_count}}</span>
<span>📍 {{location}}</span>
<span>📅 {{date}} {{time}}</span>
</div>
</header>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">👤</span>
分享人介绍
</h2>
<div class="speakers-row">{{#speakers}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num orange"></span>
<span class="section-icon">📌</span>
精益介绍
</h2>
<div class="lean-row">{{#modules}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🕐</span>
会议流程
</h2>
<div class="flow-wrap">{{#flow_steps}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num purple"></span>
<span class="section-icon"></span>
热点研讨
</h2>
<div class="hot-list">{{#highlights}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num blue"></span>
<span class="section-icon">📋</span>
下次分享
</h2>
<div class="next-grid">{{#next_share}}</div>
</section>
<section>
<h2 class="section-head">
<span class="section-num green"></span>
<span class="section-icon">🚀</span>
项目推进
</h2>
<div class="progress-row">{{#actions}}</div>
</section>
<footer class="footer">
<p>版权所有 © 2026 <span class="brand">Karuo.AI</span></p>
<p style="margin-top: 8px;">Power by Karuo.AI · 每天 06:00-09:00 Soul派对直播</p>
</footer>
</div>
</body>
</html>

View File

@@ -0,0 +1,65 @@
# 智能纪要模板说明(与 101 场视觉一致)
> 配色、图标、信号标签、重点框均与参考图 101场.jpg 对齐,便于**结构清晰、重点突出、易区分**。
---
## 一、配色体系CSS 变量)
| 用途 | 变量/色值 | 说明 |
|------------|------------------|----------------|
| 主蓝 | `#2563eb` | 分享人卡1、流程、下次分享卡2 |
| 橙红 | `#ea580c` | 分享人卡2、精益卡1、流程、下次分享卡1 |
| 绿 | `#16a34a` | 分享人卡3、精益卡3、流程、项目卡1 |
| 紫 | `#7c3aed` | 分享人卡4、流程、下次分享卡3 |
| 红 | `#dc2626` | 信号「AI思考」、流程、下次分享卡4 |
| **重点黄** | `#fef08a` / `#fef9c3` | 热点研讨底部「重点」框,强对比 |
| 页面底 | `#fafafa` | 浅灰底,不抢内容 |
---
## 二、六大区块与节奏
| 区块 | 标题样式 | 内容样式 | 图标/信号 |
|------------|--------------------|----------|-----------|
| **一、分享人介绍** | 蓝色方标「一」+ 👤 | 4 张横卡:蓝/橙/绿/紫顶条 + 白底小图标 + 姓名/角色/话题 | 顶条内 👤;可加性格/项目标签INTJ、私域等 |
| **二、精益介绍** | 橙色方标「二」+ 📌 | 3 张横卡:橙/蓝/绿顶条 + 白底图标(📌✓⚙️) + 子标题与要点 | 项目/产品/运营/商业可用小色块标签 |
| **三、会议流程** | 绿色方标「三」+ 🕐 | 横向 5 个**彩色圆**(蓝/紫/橙/红/绿)+ 圆内白图标 + 步骤名 + 时间 | 🎙️👥💡🤝📋 |
| **四、热点研讨** | 紫色方标「四」+ ❓ | 每条:**左侧信号标签** + 时间 + **Q: 标题** + 正文 + **重点(黄框)** | 信号AI思考(红)/用户观点(蓝)/专家洞察(紫)/AI提问(绿) |
| **五、下次分享** | 蓝色方标「五」+ 📋 | 2×2 四卡:橙/蓝/紫/红顶条 + 图标 + 标题 + 简述 | 📌🎯📋💡 |
| **六、项目推进** | 绿色方标「六」+ 🚀 | 2 张横卡:绿/蓝左边条 + 图标 + 标题 + 说明 | 🚀📊 |
---
## 三、JSON 字段与模板对应
- **speakers[]**`name`, `role`, `topics`;可选 `tags``pills`(如 `["INTJ","私域"]`)→ 渲染为彩色小标签。
- **modules[]**`title`, `color`(orange/blue/green), `items[]` → 精益介绍三卡。
- **flow_times[]**5 个时间串 → 会议流程下方时间。
- **highlights[]**`title`, `time`, `content`, `insight`;可选 **`signal`**`ai`|`user`|`expert`|`question` → 左侧信号标签与配色。
- **actions[]**:前 2 条 → 项目推进;第 36 条(不足用 takeaways 补)→ 下次分享 4 卡。
---
## 四、重点与信号(和 101 场一致)
- **重点**:每条热点研讨底部为**浅黄背景框**,标题为「重点」,内容为 `insight`,用于强调结论/启示。
- **信号**:热点研讨左侧为**彩色小标签**,区分来源/类型:
- **AI思考**(红)
- **用户观点**(蓝)
- **专家洞察**(紫)
- **AI提问**(绿)
---
## 五、模板文件位置
- HTML 模板:`templates/meeting.html`
- 生成脚本:`脚本/generate_meeting.py`
- 本说明:`智能纪要模板说明.md`
生成命令示例:
```bash
python3 generate_meeting.py --input "xxx_meeting.json" --output "../output/xxx.html"
```

View File

@@ -59,127 +59,144 @@ def simple_template_render(template: str, data: dict) -> str:
def generate_html(data: dict, template_path: Path) -> str:
"""生成HTML内容"""
# 读取模板
"""生成HTML内容101场风格分享人/精益/流程图/热点研讨含深度思考/下次分享/项目推进)"""
import re
with open(template_path, "r", encoding="utf-8") as f:
template = f.read()
# 添加生成日期
data["generate_date"] = datetime.now().strftime("%Y年%m月%d%H:%M")
# 生成分享人HTML
# 一、分享人介绍4色卡+白底图标+性格/项目标签与101场一致
head_colors = ["blue", "orange", "green", "purple"]
flow_icons = ["🎙️", "👥", "💡", "🤝", "📋"]
speakers_html = ""
for speaker in data.get("speakers", []):
for i, speaker in enumerate(data.get("speakers", [])[:4]):
hc = head_colors[i % len(head_colors)]
name = speaker.get("name", "")
role = speaker.get("role", "")
topics = speaker.get("topics", "")
tags = speaker.get("tags", speaker.get("pills", []))
if isinstance(tags, str):
tags = [tags] if tags else []
pills_html = ""
pill_colors = ["blue", "orange", "green", "purple", "red"]
for pi, tag in enumerate(tags[:5]):
pc = pill_colors[pi % len(pill_colors)]
pills_html += f'<span class="pill {pc}">{tag}</span>'
if pills_html:
pills_html = f'<div class="pills">{pills_html}</div>'
speakers_html += f'''
<div class="speaker-card glass-card glass-gray">
<p><span class="name">{speaker["name"]}</span> <span class="role">/ {speaker["role"]}</span></p>
<p class="topics">{speaker["topics"]}</p>
<div class="speaker-card">
<div class="head {hc}"><span class="head-icon">👤</span>{name or "分享人"}</div>
<div class="body"><p class="role">{role}</p><p class="topics">{topics}</p>{pills_html}</div>
</div>
'''
# 生成核心模块HTML
# 二、精益介绍3卡+图标与101场项目/产品/运营/商业标签可放在 points 前)
lean_colors = ["orange", "blue", "green"]
lean_icons = ["📌", "", "⚙️"]
modules_html = ""
for i, module in enumerate(data.get("modules", []), 1):
color = module.get("color", "blue")
border_color = BORDER_COLORS.get(color, "#e2e8f0")
items_html = ""
for item in module.get("items", []):
points_html = ""
for i, module in enumerate(data.get("modules", [])[:3]):
lc = lean_colors[i % len(lean_colors)]
icon = lean_icons[i % len(lean_icons)]
title = module.get("title", "")
body_parts = []
for item in module.get("items", [])[:2]:
pts = []
for point in item.get("points", []):
if isinstance(point, dict):
cls = point.get("class", "")
text = point.get("text", "")
pts.append(f'<li>{text}</li>')
else:
cls = ""
text = point
points_html += f'<li class="{cls}">{text}</li>'
items_html += f'''
<div class="module-card glass-card glass-{color}">
<h4>{item.get("title", "")}</h4>
<ul>{points_html}</ul>
</div>
'''
modules_html += f'''
<div style="margin-bottom: 24px;">
<h3 style="font-size: 1.1rem; font-weight: 700; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 2px solid {border_color};">
{i}️⃣ {module.get("title", "")}
</h3>
<div class="grid grid-2">
{items_html}
</div>
</div>
'''
pts.append(f'<li>{point}</li>')
body_parts.append(f'<h4>{item.get("title", "")}</h4><ul>{"".join(pts)}</ul>')
body_inner = "".join(body_parts)
modules_html += f'<div class="lean-card {lc}"><div class="head {lc}"><span class="lean-icon">{icon}</span>{title}</div><div class="body">{body_inner}</div></div>\n'
# 生成重点片段HTML
# 三、会议流程图:彩色圆+白图标+步骤号与101场一致
time_slots = data.get("flow_times") or ["06:00-06:10", "06:10-07:30", "07:30-08:00", "08:00-08:40", "08:40-09:00"]
if isinstance(time_slots, str):
time_slots = ["06:00", "06:30", "07:30", "08:00", "08:50"]
labels = ["开场介绍", "嘉宾分享", "干货提炼", "项目对接", "总结收尾"]
circle_colors = ["blue", "purple", "orange", "red", "green"]
flow_steps_html = ""
for j, label in enumerate(labels):
t = time_slots[j] if j < len(time_slots) else ""
cc = circle_colors[j % len(circle_colors)]
icon = flow_icons[j] if j < len(flow_icons) else ""
flow_steps_html += f'<div class="flow-node"><div class="circle {cc}">{icon}</div><span class="label">{label}</span><span class="time">{t}</span></div>\n'
if j < len(labels) - 1:
flow_steps_html += '<span class="flow-arrow">→</span>\n'
# 四、热点研讨信号标签AI思考/用户观点/专家洞察/AI提问+ Q: + 重点黄框与101场一致
signal_map = {"ai": "AI思考", "user": "用户观点", "expert": "专家洞察", "question": "AI提问"}
signal_class = {"ai": "ai", "user": "user", "expert": "expert", "question": "question"}
highlights_html = ""
for highlight in data.get("highlights", []):
color = highlight.get("color", "blue")
emoji = COLOR_EMOJIS.get(color, "💡")
sig = highlight.get("signal", "user")
sig_text = signal_map.get(sig, "用户观点")
sig_cls = signal_class.get(sig, "user")
title = highlight.get("title", "")
time_val = highlight.get("time", "")
content = highlight.get("content", "")
insight = highlight.get("insight", "")
highlights_html += f'''
<div class="highlight-card glass-card glass-{color}">
<div class="header-row">
<h4>{emoji} {highlight.get("title", "")}</h4>
<span class="time">{highlight.get("time", "")}</span>
<div class="hot-item">
<div class="top-row">
<div><span class="signal-tag {sig_cls}">{sig_text}</span><div class="signal-time">{time_val}</div></div>
<div class="topic-wrap"><span class="q-icon">Q:</span><span class="topic-title">{title}</span></div>
</div>
<p class="content">{highlight.get("content", "")}</p>
<p class="insight">💡 {highlight.get("insight", "")}</p>
<div class="content">{content}</div>
<div class="key-point"><span class="label">重点</span><br/>{insight}</div>
</div>
'''
# 生成干货分享HTML
takeaways_html = ""
for takeaway in data.get("takeaways", []):
color = takeaway.get("color", "yellow")
emoji = COLOR_EMOJIS.get(color, "💡")
points_html = "".join([f"<li>{p}</li>" for p in takeaway.get("points", [])])
takeaways_html += f'''
<div class="takeaway-card glass-card glass-{color}">
<h4>{emoji} {takeaway.get("title", "")}</h4>
<ul>{points_html}</ul>
</div>
'''
# 五、下次分享4卡 橙/蓝/紫/红 + 图标与101场一致
actions_list = data.get("actions", [])
takeaways_list = data.get("takeaways", [])
next_sources = list(actions_list[2:6]) if len(actions_list) > 2 else []
takeaways_copy = list(takeaways_list)
while len(next_sources) < 4 and takeaways_copy:
tw = takeaways_copy.pop(0)
pt = (tw.get("points", []) or [""])[0]
desc = pt[:80] if isinstance(pt, str) else str(pt)[:80]
next_sources.append({"content": tw.get("title", ""), "note": desc})
while len(next_sources) < 4:
next_sources.append({"content": "待定", "note": "下期公布"})
next_colors = ["orange", "blue", "purple", "red"]
next_icons = ["📌", "🎯", "📋", "💡"]
next_share_html = ""
for i, item in enumerate(next_sources[:4]):
title = item.get("content", item.get("title", "待定"))[:22]
desc = (item.get("note", "") or "")[:85]
nc = next_colors[i % len(next_colors)]
ni = next_icons[i % len(next_icons)]
next_share_html += f'<div class="next-card {nc}"><div class="next-icon">{ni}</div><div class="title">{title}</div><div class="desc">{desc}</div></div>\n'
# 生成行动项HTML
# 六、项目推进:绿/蓝两卡 + 图标与101场一致
progress_icons = ["🚀", "📊"]
actions_html = ""
for i, action in enumerate(data.get("actions", [])):
colors = ["blue", "purple", "green", "orange"]
color = colors[i % len(colors)]
note_html = f'<p class="note">💬 {action.get("note", "")}</p>' if action.get("note") else ""
actions_html += f'''
<div class="action-card glass-card glass-{color}">
<p class="content">{action.get("content", "")}</p>
{note_html}
</div>
'''
for i, action in enumerate((data.get("actions", []))[:2]):
content = action.get("content", "")
note = action.get("note", "")
card_class = "blue" if i == 1 else ""
icon = progress_icons[i] if i < len(progress_icons) else "🚀"
actions_html += f'<div class="progress-card {card_class}"><div class="progress-icon">{icon}</div><div class="title">项目推进</div><div class="desc">{content}<br/><small style="color:#6b7280;">{note}</small></div></div>\n'
# 替换模板中的占位符
html = template
# 替换列表部分
# 移除模板语法插入生成的HTML
import re
# 替换 speakers
html = re.sub(r'\{\{#speakers\}\}.*?\{\{/speakers\}\}', speakers_html, html, flags=re.DOTALL)
# 替换 modules
html = re.sub(r'\{\{#modules\}\}.*?\{\{/modules\}\}', modules_html, html, flags=re.DOTALL)
# 替换 highlights
html = re.sub(r'\{\{#highlights\}\}.*?\{\{/highlights\}\}', highlights_html, html, flags=re.DOTALL)
# 替换 takeaways
html = re.sub(r'\{\{#takeaways\}\}.*?\{\{/takeaways\}\}', takeaways_html, html, flags=re.DOTALL)
# 替换 actions
html = re.sub(r'\{\{#actions\}\}.*?\{\{/actions\}\}', actions_html, html, flags=re.DOTALL)
# 替换简单变量
# 支持两种模板:有 {{/xxx}} 的块替换,或仅 {{#xxx}} 的单占位符替换
def replace_block(html, name, content):
block_pattern = r'\{\{#' + name + r'\}\}.*?\{\{/' + name + r'\}\}'
if re.search(block_pattern, html, flags=re.DOTALL):
return re.sub(block_pattern, content.strip(), html, flags=re.DOTALL)
return html.replace('{{#' + name + '}}', content.strip())
html = replace_block(html, 'speakers', speakers_html)
html = replace_block(html, 'modules', modules_html)
html = replace_block(html, 'flow_steps', flow_steps_html)
html = replace_block(html, 'highlights', highlights_html)
html = replace_block(html, 'next_share', next_share_html)
html = replace_block(html, 'actions', actions_html)
html = simple_template_render(html, data)
return html
@@ -361,6 +378,7 @@ def main():
parser.add_argument("--demo", action="store_true", help="生成示例文件")
parser.add_argument("--input", "-i", type=str, help="输入JSON文件路径")
parser.add_argument("--output", "-o", type=str, help="输出HTML文件路径")
parser.add_argument("--template", "-t", type=str, default="meeting.html", help="模板文件名,如 meeting.html 或 meeting_alt.html")
parser.add_argument("--interactive", action="store_true", help="交互式输入")
args = parser.parse_args()
@@ -389,7 +407,10 @@ def main():
output_path = OUTPUT_DIR / output_name
# 生成HTML
template_path = TEMPLATE_DIR / "meeting.html"
template_name = args.template if hasattr(args, "template") and args.template else "meeting.html"
template_path = TEMPLATE_DIR / template_name
if not template_path.exists():
template_path = TEMPLATE_DIR / "meeting.html"
html = generate_html(data, template_path)
# 写入文件