805 lines
26 KiB
HTML
805 lines
26 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>{{姓名}} · 简历</title>
|
|
<meta name="author" content="{{姓名}}">
|
|
<meta name="description" content="{{摘要}}">
|
|
<meta name="keywords" content="{{关键词}}">
|
|
<meta name="generator" content="Kami">
|
|
<style>
|
|
/* W04 / regular face for body text */
|
|
@font-face {
|
|
font-family: "TsangerJinKai02";
|
|
src: url("../fonts/TsangerJinKai02-W04.ttf") format("truetype"),
|
|
url("https://cdn.jsdelivr.net/gh/tw93/Kami@main/assets/fonts/TsangerJinKai02-W04.ttf") format("truetype");
|
|
font-weight: 400;
|
|
font-style: normal;
|
|
}
|
|
|
|
/* W05 / medium face for headings (no synthetic bold) */
|
|
@font-face {
|
|
font-family: "TsangerJinKai02";
|
|
src: url("../fonts/TsangerJinKai02-W05.ttf") format("truetype"),
|
|
url("https://cdn.jsdelivr.net/gh/tw93/Kami@main/assets/fonts/TsangerJinKai02-W05.ttf") format("truetype");
|
|
font-weight: 500;
|
|
font-style: normal;
|
|
}
|
|
|
|
@page {
|
|
size: A4;
|
|
margin: 11mm 13mm 11mm 13mm;
|
|
background: #f5f4ed;
|
|
}
|
|
|
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
|
|
:root {
|
|
--parchment: #f5f4ed;
|
|
--ivory: #faf9f5;
|
|
--border: #e8e6dc;
|
|
--border-soft: #e5e3d8;
|
|
--near-black: #141413;
|
|
--dark-warm: #3d3d3a;
|
|
--olive: #504e49;
|
|
--stone: #6b6a64;
|
|
--brand: #1B365D;
|
|
--brand-tint: #EEF2F7; /* solid equivalent of rgba(1B365D, 0.08), avoids tag double-rectangle bug */
|
|
--serif: "TsangerJinKai02", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", "STSong", Georgia, serif;
|
|
--sans: var(--serif);
|
|
}
|
|
|
|
html, body { background: var(--parchment); }
|
|
|
|
@media screen {
|
|
body { max-width: 210mm; margin: 0 auto; padding: 11mm 13mm; }
|
|
}
|
|
|
|
body {
|
|
color: var(--near-black);
|
|
font-family: var(--serif);
|
|
font-size: 9.2pt;
|
|
line-height: 1.42;
|
|
letter-spacing: 0.3pt;
|
|
widows: 3;
|
|
orphans: 3;
|
|
}
|
|
|
|
.serif {
|
|
font-family: var(--serif);
|
|
}
|
|
|
|
a { color: var(--brand); text-decoration: none; }
|
|
|
|
/* HEADER */
|
|
.header {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
margin-bottom: 4.2mm;
|
|
padding-bottom: 2.3mm;
|
|
border-bottom: 0.6pt solid var(--border);
|
|
}
|
|
.header > div:first-child { flex-shrink: 0; }
|
|
.name {
|
|
font-family: var(--serif);
|
|
font-size: 26.5pt;
|
|
font-weight: 500;
|
|
letter-spacing: 0.5pt;
|
|
color: var(--near-black);
|
|
line-height: 1;
|
|
margin-bottom: 0;
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 2.2mm;
|
|
white-space: nowrap;
|
|
}
|
|
.alias {
|
|
font-size: 12.5pt;
|
|
font-weight: 400;
|
|
color: var(--stone);
|
|
letter-spacing: 0.2pt;
|
|
}
|
|
.alias::before {
|
|
content: "";
|
|
}
|
|
.tagline { font-size: 9.5pt; color: var(--olive); line-height: 1.3; }
|
|
.tagline .accent { color: var(--brand); font-weight: 500; }
|
|
|
|
.contact {
|
|
text-align: right;
|
|
font-size: 9pt;
|
|
color: var(--stone);
|
|
line-height: 1.5;
|
|
margin-bottom: -0.5mm;
|
|
}
|
|
.contact a { color: var(--dark-warm); }
|
|
.contact .loc { color: var(--olive); font-weight: 500; }
|
|
.contact .role { color: var(--brand); font-size: 10.5pt; font-weight: 500; }
|
|
.contact .sep { color: var(--border); margin: 0 0.4em; }
|
|
|
|
/* METRICS */
|
|
.metrics {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
column-gap: 6mm;
|
|
margin-bottom: 3mm;
|
|
margin-left: 0;
|
|
margin-right: 0;
|
|
}
|
|
.metric {
|
|
background: transparent;
|
|
padding: 1mm 0 1.2mm;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 0.7mm;
|
|
min-width: 0;
|
|
break-inside: avoid;
|
|
}
|
|
.metric-value {
|
|
font-family: var(--serif);
|
|
font-size: 13pt;
|
|
font-weight: 500;
|
|
color: var(--brand);
|
|
line-height: 1;
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
.metric-label {
|
|
font-size: 9pt;
|
|
color: var(--olive);
|
|
line-height: 1.2;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.metric-value .unit {
|
|
font-size: 10.5pt;
|
|
margin-left: 0.3mm;
|
|
font-weight: 500;
|
|
color: var(--brand);
|
|
}
|
|
|
|
.metrics--stack .metric {
|
|
gap: 0.5mm;
|
|
padding-bottom: 2mm;
|
|
border-bottom: 0.3pt dotted var(--border);
|
|
}
|
|
|
|
/* SECTION */
|
|
.section-title {
|
|
font-family: var(--serif);
|
|
font-size: 12.5pt;
|
|
font-weight: 500;
|
|
color: var(--near-black);
|
|
border-bottom: 0.5pt solid var(--border);
|
|
padding: 0 0 1mm 0;
|
|
margin: 5.8mm 0 1.7mm 0;
|
|
display: flex;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: 2mm;
|
|
}
|
|
.section-title .sub {
|
|
font-family: var(--serif);
|
|
font-weight: 400;
|
|
font-size: 9pt;
|
|
color: var(--stone);
|
|
letter-spacing: 0.3pt;
|
|
}
|
|
|
|
section:first-of-type .section-title { margin-top: 0; }
|
|
.page-break > .section-title { margin-top: 0; }
|
|
|
|
/* Unify gap from section-title bottom border to first content's first line = 3mm
|
|
(section-title margin-bottom 1.8mm + first-child top spacing 1.2mm) */
|
|
.section-title + .skill-row { padding-top: 1.2mm; }
|
|
.section-title + .edu-row { padding-top: 1.2mm; }
|
|
|
|
/* SUMMARY */
|
|
.summary { font-size: 9.2pt; line-height: 1.42; color: var(--near-black); }
|
|
.summary .em-brand { color: var(--brand); }
|
|
.summary .hl { color: var(--brand); }
|
|
|
|
/* TIMELINE */
|
|
.timeline { display: flex; gap: 6mm; margin-bottom: 2mm; margin-left: 0; margin-right: 0; }
|
|
.tl-step {
|
|
flex: 1; background: transparent;
|
|
padding: 0.8mm 0;
|
|
break-inside: avoid;
|
|
}
|
|
.tl-top {
|
|
display: flex; align-items: baseline; gap: 1.5mm;
|
|
margin-bottom: 0.5mm;
|
|
}
|
|
.tl-year {
|
|
font-family: var(--serif);
|
|
font-size: 11pt; font-weight: 500;
|
|
color: var(--brand); line-height: 1;
|
|
}
|
|
.tl-head {
|
|
font-size: 11pt; font-weight: 500;
|
|
color: var(--near-black);
|
|
}
|
|
.tl-body { font-size: 9pt; color: var(--olive); line-height: 1.40; letter-spacing: 0.3pt; }
|
|
|
|
/* PROJECTS */
|
|
.project {
|
|
padding: 2.6mm 0;
|
|
break-inside: avoid;
|
|
}
|
|
.project:first-of-type { padding-top: 1.2mm; }
|
|
.proj-head {
|
|
display: block; margin-bottom: 0.75mm;
|
|
}
|
|
.proj-name {
|
|
font-family: var(--serif);
|
|
font-size: 11pt; font-weight: 500; color: var(--near-black);
|
|
}
|
|
.proj-kind { font-size: 11pt; color: var(--olive); margin-left: 1.5mm; }
|
|
.proj-role {
|
|
font-size: 9pt; color: var(--brand); font-weight: 500;
|
|
float: right; background: #EEF2F7;
|
|
padding: 0.4mm 1.2mm; border-radius: 2pt; letter-spacing: 0.05pt;
|
|
white-space: nowrap;
|
|
}
|
|
.proj-lines { display: table; width: 100%; }
|
|
.proj-row { display: table-row; }
|
|
.proj-label {
|
|
display: table-cell; width: 11mm;
|
|
font-size: 9pt; color: var(--brand);
|
|
font-weight: 500; letter-spacing: 0.2pt;
|
|
padding: 0.2mm 0 0.4mm 0; vertical-align: top;
|
|
}
|
|
.proj-text {
|
|
display: table-cell; font-size: 9pt;
|
|
color: var(--near-black); line-height: 1.40; letter-spacing: 0.3pt;
|
|
padding: 0 0 0.4mm 0.5mm;
|
|
}
|
|
.proj-text .hl { color: var(--brand); }
|
|
|
|
.team-culture {
|
|
margin-top: 2mm; padding: 1.5mm 2.5mm;
|
|
background: var(--brand-tint);
|
|
border-radius: 2pt;
|
|
font-size: 9pt; color: var(--olive); line-height: 1.40;
|
|
break-inside: avoid;
|
|
}
|
|
.team-culture .hl { color: var(--brand); }
|
|
|
|
/* PAGE 2 FORCE BREAK */
|
|
.page-break { break-before: page; }
|
|
|
|
/* OPEN SOURCE - NEW ENHANCED LAYOUT */
|
|
.os-intro {
|
|
font-size: 9.2pt; line-height: 1.40; letter-spacing: 0.3pt;
|
|
color: var(--near-black);
|
|
padding: 0; margin: 1.2mm 0 2mm 0;
|
|
background: transparent;
|
|
break-inside: avoid;
|
|
}
|
|
.os-intro .hl { color: var(--brand); }
|
|
.os-intro .strong { color: var(--near-black); }
|
|
|
|
.os-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
column-gap: 8mm; row-gap: 1mm;
|
|
}
|
|
.os-item {
|
|
display: flex; align-items: baseline;
|
|
gap: 2mm; padding: 1mm 0 1mm 0;
|
|
border-bottom: 0.3pt dotted var(--border);
|
|
break-inside: avoid;
|
|
}
|
|
.os-item:last-child,
|
|
.os-item:nth-last-child(2):nth-child(odd) { border-bottom: none; }
|
|
.os-name {
|
|
font-family: var(--serif);
|
|
font-size: 10pt; font-weight: 500;
|
|
flex-shrink: 0; min-width: 14mm;
|
|
}
|
|
.os-name a { color: var(--brand); }
|
|
.os-desc { font-size: 9pt; color: var(--olive); line-height: 1.40; flex: 1; }
|
|
.os-star {
|
|
font-size: 9pt; color: var(--dark-warm);
|
|
font-weight: 500; white-space: nowrap; flex-shrink: 0; min-width: 7.5mm; text-align: right;
|
|
}
|
|
.os-star.big { color: var(--brand); font-size: 9.2pt; }
|
|
|
|
.os-highlight {
|
|
margin-top: 2.5mm;
|
|
padding: 1.8mm 2.8mm;
|
|
background: var(--brand-tint);
|
|
border-radius: 2pt;
|
|
font-size: 9pt; line-height: 1.40;
|
|
color: var(--near-black);
|
|
letter-spacing: 0.3pt;
|
|
break-inside: avoid;
|
|
}
|
|
.os-highlight .hl { color: var(--brand); }
|
|
.os-highlight .tag {
|
|
display: inline-block;
|
|
background: var(--brand); color: var(--ivory);
|
|
font-size: 9pt; font-weight: 500;
|
|
padding: 0.2mm 1.5mm; border-radius: 2pt;
|
|
margin-right: 1.2mm; letter-spacing: 0.2pt;
|
|
transform: translateY(-0.2mm);
|
|
}
|
|
|
|
/* AI CONVICTION - NEW SECTION */
|
|
.convictions {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
gap: 2.5mm;
|
|
margin-top: 1.2mm;
|
|
}
|
|
.conv-card {
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 0;
|
|
padding: 0 2mm 0 0;
|
|
break-inside: avoid;
|
|
}
|
|
.conv-head, .ai-card-head {
|
|
font-family: var(--serif);
|
|
font-size: 9.8pt; font-weight: 500;
|
|
color: var(--near-black); margin-bottom: 0.9mm;
|
|
display: flex; align-items: baseline; gap: 1.5mm;
|
|
}
|
|
.conv-head .year, .ai-card-head .year {
|
|
color: var(--brand); font-weight: 500;
|
|
font-size: 9pt;
|
|
}
|
|
.conv-body, .ai-card-body {
|
|
font-size: 9pt; color: var(--olive);
|
|
line-height: 1.40; letter-spacing: 0.3pt;
|
|
}
|
|
.conv-body .hl, .ai-card-body .hl { color: var(--brand); }
|
|
.conv-body .em-brand, .ai-card-body .em-brand { color: var(--brand); }
|
|
|
|
/* INFLUENCE */
|
|
.handle-strip {
|
|
background: transparent;
|
|
padding: 0; margin: 1.2mm 0 2mm 0;
|
|
display: flex; align-items: baseline; gap: 3mm;
|
|
break-inside: avoid;
|
|
}
|
|
.handle-strip .handle {
|
|
font-family: var(--serif);
|
|
font-size: 9.8pt; font-weight: 500; color: var(--brand);
|
|
flex-shrink: 0;
|
|
}
|
|
.handle-strip .follower { font-size: 9pt; color: var(--stone); flex-shrink: 0; }
|
|
.handle-strip .desc { font-size: 9pt; color: var(--olive); line-height: 1.40; letter-spacing: 0.3pt; flex: 1; }
|
|
|
|
.impact-grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 5.5mm; }
|
|
.inf-block-title {
|
|
margin-top: 2.5mm;
|
|
font-family: var(--serif);
|
|
font-size: 9.8pt; font-weight: 500;
|
|
color: var(--near-black);
|
|
margin-bottom: 1.5mm; padding-bottom: 0.5mm;
|
|
border-bottom: 0.3pt dotted var(--border);
|
|
display: flex; align-items: baseline; gap: 2mm;
|
|
}
|
|
.inf-block-title .small {
|
|
font-family: var(--serif);
|
|
font-size: 9pt; color: var(--stone);
|
|
font-weight: 400; margin-left: 0; letter-spacing: 0.2pt;
|
|
}
|
|
.art-row {
|
|
padding: 1.6mm 0;
|
|
border-bottom: 0.3pt dotted var(--border-soft);
|
|
}
|
|
.talk-row {
|
|
display: flex; justify-content: space-between;
|
|
align-items: flex-start;
|
|
gap: 2mm; padding: 1.6mm 0;
|
|
border-bottom: 0.3pt dotted var(--border-soft);
|
|
}
|
|
.art-row:last-of-type, .talk-row:last-of-type { border-bottom: none; }
|
|
.art-header {
|
|
display: flex; align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: 2mm; padding-right: 3mm;
|
|
}
|
|
.art-title, .talk-title {
|
|
font-size: 9pt; color: var(--near-black);
|
|
font-weight: 500; line-height: 1.40;
|
|
flex: 1 1 auto; min-width: 0;
|
|
}
|
|
.art-stats, .talk-venue {
|
|
font-size: 9pt; color: var(--stone);
|
|
line-height: 1.40; margin-top: 0.5mm; padding-left: 0; letter-spacing: 0.3pt;
|
|
white-space: nowrap;
|
|
}
|
|
.art-stats .em-brand {
|
|
color: var(--brand);
|
|
}
|
|
.art-date {
|
|
font-size: 9pt; color: var(--stone);
|
|
font-variant-numeric: tabular-nums;
|
|
font-weight: 400;
|
|
}
|
|
.art-stats .lang-cn, .art-stats .lang-en {
|
|
display: inline-block;
|
|
font-size: 9pt; font-weight: 500;
|
|
margin-right: 0.5mm;
|
|
letter-spacing: 0.2pt;
|
|
color: var(--stone);
|
|
}
|
|
.talk-date {
|
|
font-size: 9pt; color: var(--stone); font-weight: 500;
|
|
white-space: nowrap; font-variant-numeric: tabular-nums;
|
|
padding-top: 0.3mm;
|
|
}
|
|
|
|
/* SKILLS */
|
|
.skill-row {
|
|
display: flex; gap: 2.5mm; padding: 1.7mm 0;
|
|
border-bottom: 0.3pt dotted var(--border);
|
|
align-items: baseline;
|
|
}
|
|
.skill-row:last-of-type { border-bottom: none; }
|
|
.skill-label {
|
|
font-size: 9pt; font-weight: 500;
|
|
color: var(--brand); letter-spacing: 0.3pt;
|
|
width: 22mm; flex-shrink: 0;
|
|
line-height: 1.36;
|
|
}
|
|
.skill-body { font-size: 9pt; color: var(--near-black); line-height: 1.40; letter-spacing: 0.3pt; flex: 1; }
|
|
.skill-body .em-brand { color: var(--brand); }
|
|
|
|
.no-break { break-inside: avoid; }
|
|
|
|
/* EDUCATION */
|
|
.edu-row {
|
|
display: flex; justify-content: space-between;
|
|
align-items: baseline; font-size: 9.5pt; padding: 1.7mm 0;
|
|
}
|
|
.edu-row .school {
|
|
font-family: var(--serif);
|
|
font-weight: 500; font-size: 10.7pt;
|
|
}
|
|
.edu-row .major { color: var(--olive); font-size: 9.5pt; }
|
|
.edu-row .date { color: var(--stone); font-variant-numeric: tabular-nums; font-size: 9pt; }
|
|
|
|
/* TABLE (kami-table) */
|
|
table, .kami-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 9pt;
|
|
margin: 6pt 0;
|
|
break-inside: avoid;
|
|
}
|
|
table th, .kami-table th {
|
|
text-align: left;
|
|
font-weight: 500;
|
|
color: var(--dark-warm);
|
|
padding: 3pt 6pt;
|
|
border-bottom: 1pt solid var(--border);
|
|
background: transparent;
|
|
}
|
|
table td, .kami-table td {
|
|
padding: 2pt 6pt;
|
|
border-bottom: 0.3pt solid var(--border-soft);
|
|
vertical-align: top;
|
|
}
|
|
table.compact th, .kami-table.compact th { padding: 2pt 4pt; font-size: 8pt; }
|
|
table.compact td, .kami-table.compact td { padding: 1pt 4pt; font-size: 8pt; line-height: 1.4; }
|
|
table.financial td:not(:first-child), .kami-table.financial td:not(:first-child) {
|
|
text-align: right; font-variant-numeric: tabular-nums;
|
|
}
|
|
table.financial th:not(:first-child), .kami-table.financial th:not(:first-child) { text-align: right; }
|
|
table.striped tbody tr:nth-child(even) td, .kami-table.striped tbody tr:nth-child(even) td {
|
|
background: var(--ivory);
|
|
}
|
|
table .total td, .kami-table .total td {
|
|
font-weight: 500; border-top: 1pt solid var(--brand); border-bottom: none; color: var(--near-black);
|
|
}
|
|
|
|
/* DENSE VARIANT: add class="resume--dense" to <body> when 5+ projects overflow */
|
|
body.resume--dense { font-size: 9pt; }
|
|
body.resume--dense .proj-text { line-height: 1.38; }
|
|
body.resume--dense .tl-body { font-size: 8.5pt; }
|
|
body.resume--dense .project { padding: 1.6mm 0; }
|
|
body.resume--dense .section-title { margin-top: 4.2mm; margin-bottom: 1.2mm; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<!-- =====================================================================
|
|
使用说明:
|
|
- 所有 {{变量}} 替换为实际内容
|
|
- 删除不适用的 section,如无开源/AI判断/对外影响力
|
|
- 项目可加减,每个严格遵守 角色/动作/结果 三段式
|
|
- 改完验证:必须 2 页
|
|
python3 -c "from weasyprint import HTML; HTML('resume.html').write_pdf('out.pdf')"
|
|
- 内容策略详见 references/writing.md
|
|
===================================================================== -->
|
|
|
|
|
|
<!-- ═══════════ PAGE 1 ═══════════ -->
|
|
|
|
<div class="header">
|
|
<div>
|
|
<div class="name serif">{{姓名}}<span class="alias">{{别名/英文名}}</span></div>
|
|
</div>
|
|
<div class="contact">
|
|
<span class="role">{{岗位定位,如"AI / Agent 工程"}}</span>
|
|
<br>
|
|
<a href="{{GITHUB_URL}}">GitHub @{{GITHUB_ID}}</a>
|
|
<span class="sep">·</span>
|
|
<a href="{{X_URL}}">X @{{X_ID}}</a>
|
|
<span class="sep">·</span>
|
|
<a href="tel:{{PHONE}}">{{PHONE}}</a>
|
|
<span class="sep">·</span>
|
|
<a href="mailto:{{EMAIL}}">{{EMAIL}}</a>
|
|
<span class="sep">·</span>
|
|
<span class="loc">{{城市}}</span>
|
|
<!-- 如投递渠道需要且用户提供,可在城市后追加: · 年龄 · 性别。不要写期望薪资。 -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 4 个最强的数字标签 -->
|
|
<div class="metrics">
|
|
<div class="metric"><span class="metric-value serif">{{数字}}<span class="unit">{{单位}}</span></span><span class="metric-label">{{标签}}</span></div>
|
|
<div class="metric"><span class="metric-value serif">{{数字}}<span class="unit">{{单位}}</span></span><span class="metric-label">{{标签}}</span></div>
|
|
<div class="metric"><span class="metric-value serif">{{数字}}<span class="unit">{{单位}}</span></span><span class="metric-label">{{标签}}</span></div>
|
|
<div class="metric"><span class="metric-value serif">{{数字}}<span class="unit">{{单位}}</span></span><span class="metric-label">{{标签}}</span></div>
|
|
</div>
|
|
|
|
<section>
|
|
<div class="section-title">个人简介</div>
|
|
<div class="summary">
|
|
{{80 字以内。建议结构:现任职位 + 级别 + 时长。团队构成:人数、梯队、协作方。长期演进方向。核心沉淀领域:4-6 个方向。}}
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<div class="section-title">工作经历<span class="sub">{{起始时间}} - 至今 · {{关键里程碑}}</span></div>
|
|
|
|
<!-- Timeline 3 步:长期演进信号 -->
|
|
<div class="timeline">
|
|
<div class="tl-step">
|
|
<div class="tl-top"><div class="tl-year serif">{{年份}}</div><div class="tl-head">{{阶段标题}}</div></div>
|
|
<div class="tl-body">{{一句解释这一步的意义}}</div>
|
|
</div>
|
|
<div class="tl-step">
|
|
<div class="tl-top"><div class="tl-year serif">{{年份}}</div><div class="tl-head">{{阶段标题}}</div></div>
|
|
<div class="tl-body">{{一句解释这一步的意义}}</div>
|
|
</div>
|
|
<div class="tl-step">
|
|
<div class="tl-top"><div class="tl-year serif">{{年份}}</div><div class="tl-head">{{阶段标题}}</div></div>
|
|
<div class="tl-body">{{一句解释这一步的意义}}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 项目模板 - 重复此块 3-5 次 -->
|
|
<div class="project">
|
|
<div class="proj-head">
|
|
<span class="proj-name serif">{{项目名}}</span>
|
|
<span class="proj-kind">· {{项目类型}}</span>
|
|
<span class="proj-role">{{角色定位,如"方向主导"}}</span>
|
|
</div>
|
|
<div class="proj-lines">
|
|
<div class="proj-row">
|
|
<div class="proj-label">角色</div>
|
|
<div class="proj-text">{{~60 字:项目是什么 + 为什么做 + 你的位置}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">动作</div>
|
|
<div class="proj-text">{{~80 字:技术方案 / 关键决策 / 执行路径}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">结果</div>
|
|
<div class="proj-text">{{~100 字:数据为王。<span class="hl">关键数字</span> 高亮 1-2 处。}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="project">
|
|
<div class="proj-head">
|
|
<span class="proj-name serif">{{项目名}}</span>
|
|
<span class="proj-kind">· {{项目类型}}</span>
|
|
<span class="proj-role">{{角色定位,如"方向主导"}}</span>
|
|
</div>
|
|
<div class="proj-lines">
|
|
<div class="proj-row">
|
|
<div class="proj-label">角色</div>
|
|
<div class="proj-text">{{~60 字:项目是什么 + 为什么做 + 你的位置}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">动作</div>
|
|
<div class="proj-text">{{~80 字:技术方案 / 关键决策 / 执行路径}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">结果</div>
|
|
<div class="proj-text">{{~100 字:数据为王。<span class="hl">关键数字</span> 高亮 1-2 处。}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="project">
|
|
<div class="proj-head">
|
|
<span class="proj-name serif">{{项目名}}</span>
|
|
<span class="proj-kind">· {{项目类型}}</span>
|
|
<span class="proj-role">{{角色定位,如"方向主导"}}</span>
|
|
</div>
|
|
<div class="proj-lines">
|
|
<div class="proj-row">
|
|
<div class="proj-label">角色</div>
|
|
<div class="proj-text">{{~60 字:项目是什么 + 为什么做 + 你的位置}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">动作</div>
|
|
<div class="proj-text">{{~80 字:技术方案 / 关键决策 / 执行路径}}</div>
|
|
</div>
|
|
<div class="proj-row">
|
|
<div class="proj-label">结果</div>
|
|
<div class="proj-text">{{~100 字:数据为王。<span class="hl">关键数字</span> 高亮 1-2 处。}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
|
|
<!-- ═══════════ PAGE 2 ═══════════ -->
|
|
|
|
<section class="page-break">
|
|
<div class="section-title">开源项目 & 独立开发者<span class="sub">{{时间跨度}} · {{一句副标题}}</span></div>
|
|
|
|
<div class="os-intro">
|
|
<span class="hl">{{一句自我定位}}</span>,{{简述开发者身份:设计审美 / 独立完成流程 / 跨语言实战 / 用户反馈}}。GitHub 累计 <span class="strong">{{STARS_TOTAL}} stars · {{FORKS_TOTAL}} forks · {{FOLLOWERS_TOTAL}} followers</span>。
|
|
</div>
|
|
|
|
<div class="os-grid">
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star big">★ {{STARS}}</span>
|
|
</div>
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star big">★ {{STARS}}</span>
|
|
</div>
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star">★ {{STARS}}</span>
|
|
</div>
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star">★ {{STARS}}</span>
|
|
</div>
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star">★ {{STARS}}</span>
|
|
</div>
|
|
<div class="os-item">
|
|
<span class="os-name serif"><a href="{{URL}}">{{项目名}}</a></span>
|
|
<span class="os-desc">{{语言 + 核心定位 + 平台}}</span>
|
|
<span class="os-star">★ {{STARS}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="os-highlight">
|
|
<span class="tag">{{亮点 TAG}}</span>{{这个项目的独特故事:开源时机 / 传播范围 / 知名人物推荐等}}
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<div class="section-title">AI 判断与行动</div>
|
|
<div class="convictions">
|
|
<div class="conv-card">
|
|
<div class="conv-head"><span class="year">{{时间}}</span>{{事件标题}}</div>
|
|
<div class="conv-body">
|
|
{{具体做了什么判断或行动,为什么证明判断力}}
|
|
</div>
|
|
</div>
|
|
<div class="conv-card">
|
|
<div class="conv-head"><span class="year">{{时间}}</span>{{事件标题}}</div>
|
|
<div class="conv-body">
|
|
{{具体做了什么判断或行动,为什么证明判断力}}
|
|
</div>
|
|
</div>
|
|
<div class="conv-card">
|
|
<div class="conv-head"><span class="year">{{时间}}</span>{{事件标题}}</div>
|
|
<div class="conv-body">
|
|
{{具体做了什么判断或行动,为什么证明判断力}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<div class="section-title">对外影响力</div>
|
|
|
|
<div class="handle-strip">
|
|
<span class="handle serif">{{平台}} · <a href="{{URL}}">@{{HANDLE}}</a></span>
|
|
<span class="follower">{{粉丝数}} 粉丝</span>
|
|
<span class="desc">{{博客 / 周刊 / 其他内容产品简介}}</span>
|
|
</div>
|
|
|
|
<div class="impact-grid">
|
|
<div>
|
|
<div class="inf-block-title">代表性技术长文<span class="small">{{副标题}}</span></div>
|
|
<div class="art-row">
|
|
<div class="art-header">
|
|
<a class="art-title" href="{{URL}}">《{{文章标题}}》</a>
|
|
<span class="art-date">{{日期}}</span>
|
|
</div>
|
|
<div class="art-stats">{{浏览量 / 赞数 / 影响力指标}}</div>
|
|
</div>
|
|
<div class="art-row">
|
|
<div class="art-header">
|
|
<a class="art-title" href="{{URL}}">《{{文章标题}}》</a>
|
|
<span class="art-date">{{日期}}</span>
|
|
</div>
|
|
<div class="art-stats">{{浏览量 / 赞数 / 影响力指标}}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="inf-block-title">受邀演讲<span class="small">{{副标题}}</span></div>
|
|
<div class="talk-row">
|
|
<div>
|
|
<div class="talk-title">《{{演讲标题}}》</div>
|
|
<div class="talk-venue">{{主办方 / 地点}}</div>
|
|
</div>
|
|
<div class="talk-date">{{日期}}</div>
|
|
</div>
|
|
<div class="talk-row">
|
|
<div>
|
|
<div class="talk-title">《{{演讲标题}}》</div>
|
|
<div class="talk-venue">{{主办方 / 地点}}</div>
|
|
</div>
|
|
<div class="talk-date">{{日期}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<div class="section-title">核心能力</div>
|
|
<!-- 5 项固定结构,每项至少 1 处品牌色高亮 -->
|
|
<div class="skill-row">
|
|
<div class="skill-label">{{能力 1<br>标签}}</div>
|
|
<div class="skill-body">{{描述。至少 <span class="em-brand">1 处强调</span>}}</div>
|
|
</div>
|
|
<div class="skill-row">
|
|
<div class="skill-label">{{能力 2<br>标签}}</div>
|
|
<div class="skill-body">{{描述。至少 <span class="em-brand">1 处强调</span>}}</div>
|
|
</div>
|
|
<div class="skill-row">
|
|
<div class="skill-label">{{能力 3<br>标签}}</div>
|
|
<div class="skill-body">{{描述。至少 <span class="em-brand">1 处强调</span>}}</div>
|
|
</div>
|
|
<div class="skill-row">
|
|
<div class="skill-label">{{能力 4<br>标签}}</div>
|
|
<div class="skill-body">{{描述。至少 <span class="em-brand">1 处强调</span>}}</div>
|
|
</div>
|
|
<div class="skill-row">
|
|
<div class="skill-label">{{能力 5<br>标签}}</div>
|
|
<div class="skill-body">{{描述。至少 <span class="em-brand">1 处强调</span>}}</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="no-break">
|
|
<div class="section-title">教育背景</div>
|
|
<div class="edu-row">
|
|
<div>
|
|
<span class="school serif">{{学校}}</span>
|
|
<span class="major"> · {{学院}} · {{专业}} · {{一句判断性描述,如"放弃保研直接就业"}}</span>
|
|
</div>
|
|
<div class="date">{{起止时间}}</div>
|
|
</div>
|
|
</section>
|
|
|
|
</body>
|
|
</html>
|