knowme-careerforge-skill 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/SKILL.md +11 -1
  2. package/agents/claude/knowme-careerforge.md +10 -9
  3. package/agents/codex/knowme-careerforge.yaml +3 -3
  4. package/agents/cursor/knowme-careerforge.mdc +12 -8
  5. package/agents/opencode/skill.yaml +1 -1
  6. package/agents/windsurf/knowme-careerforge.rules +9 -9
  7. package/dist/cli/src/commands/init.js +9 -0
  8. package/dist/cli/src/index.js +17 -0
  9. package/package.json +2 -1
  10. package/scripts/build/sync-version.py +11 -2
  11. package/scripts/template/instantiate-resume.py +8 -2
  12. package/scripts/template/search-template.py +290 -89
  13. package/skill.json +1 -1
  14. package/src/knowledge/index.json +2 -10
  15. package/src/knowledge/templates.json +1 -9
  16. package/src/references/01-evidence-mining.md +41 -0
  17. package/src/references/02-career-goal.md +38 -0
  18. package/src/references/03-jd-analysis.md +44 -0
  19. package/src/references/04-template-selection.md +43 -0
  20. package/src/references/05-html-canvas-tokens.md +51 -0
  21. package/src/references/06-qa-and-rendering.md +54 -0
  22. package/src/templates/classic/style.css +22 -51
  23. package/src/templates/common/base.css +150 -0
  24. package/src/templates/executive/style.css +30 -73
  25. package/src/templates/minimal/style.css +30 -72
  26. package/src/templates/modern/style.css +32 -72
  27. package/src/references/ats.md +0 -17
  28. package/src/references/evidence-first.md +0 -22
  29. package/src/references/pdf.md +0 -40
  30. package/src/references/resume-writing.md +0 -25
  31. package/src/references/template-design.md +0 -57
  32. package/src/workflows/analyze-job.md +0 -16
  33. package/src/workflows/define-goal.md +0 -16
  34. package/src/workflows/forge-resume.md +0 -25
  35. package/src/workflows/know-me.md +0 -21
  36. package/src/workflows/position.md +0 -19
  37. package/src/workflows/review.md +0 -31
@@ -0,0 +1,43 @@
1
+ # Reference Manual 04: Template Selection & Layout Geometries
2
+
3
+ > **"Layout geometry determines information hierarchy. Select the composition that earns the candidate's strongest evidence."**
4
+
5
+ ---
6
+
7
+ ## 1. Core Template Matrix (Baseline 4)
8
+
9
+ | Template ID | Layout Geometry | Tone & Accent | Target Roles | Density | ATS Tier |
10
+ |:---|:---|:---|:---|:---|:---|
11
+ | `minimal` (`minimal-tech`) | Single-Column Linear Flow | Geek Minimal (Tech Blue `#2563eb`) | Backend, AI/LLM, Systems, DevOps, Fullstack | High | Tier 1 (Optimal) |
12
+ | `modern` (`modern-split-sidebar`) | Two-Column Split (32:68 Dark Sidebar) | Deep Navy (`#254665`) + Sky Blue (`#38bdf8`) | AI Agent, Frontend, Fullstack, Mobile | Balanced | Tier 1 (Optimal) |
13
+ | `executive` (`executive-split`) | Hero Banner + Two-Column (33:67 Split) | Executive Slate (`#1e293b`) + Teal (`#0f766e`) | Tech Director, Architect, PM, CTO | Balanced | Tier 1 (Optimal) |
14
+ | `classic` (`table-structured`) | 6-Column Structured Grid Table | Corporate Blue (`#1d4ed8`) + Slate | Enterprise, Fintech, Hardware, State-Owned | High | Tier 1 (Optimal) |
15
+
16
+ ---
17
+
18
+ ## 2. Template Search Engine (`scripts/template/search-template.py`)
19
+
20
+ Search for the optimal template via CLI:
21
+ ```bash
22
+ # Hybrid Search (Default Recommended)
23
+ python3 scripts/template/search-template.py "AI Agent Engineer" --style "two-column-split" --target-pages 1
24
+
25
+ # BM25 Keyword Search
26
+ python3 scripts/template/search-template.py "Distributed Architect" --engine bm25 --json
27
+
28
+ # Weighted Multi-Criteria Rule Search
29
+ python3 scripts/template/search-template.py "Frontend Engineer" --engine weighted
30
+ ```
31
+
32
+ ### Search Scoring Formulation (Weighted Scorer):
33
+ $$\text{Score} = (\text{RoleMatch} \times 0.35) + (\text{StyleMatch} \times 0.25) + (\text{ATSTier} \times 0.20) + (\text{PageFit} \times 0.10) + (\text{Density} \times 0.10)$$
34
+
35
+ ---
36
+
37
+ ## 3. Instantiating the Intermediate HTML Canvas
38
+
39
+ ```bash
40
+ python3 scripts/template/instantiate-resume.py --template modern --profile workspace/evidence-master.json --keywords "Python,LLM,RAG,FastAPI" --output workspace/resume.html
41
+ ```
42
+
43
+ *The instantiator automatically inlines `src/templates/common/base.css` + `src/templates/{template}/style.css` into a single self-contained HTML file.*
@@ -0,0 +1,51 @@
1
+ # Reference Manual 05: HTML Canvas Engineering & Design Tokens
2
+
3
+ > **"workspace/resume.html is the SOLE Intermediate Working Canvas. All modifications, tailoring, and token tuning happen here."**
4
+
5
+ ---
6
+
7
+ ## 1. Two-Tier Design Tokens Architecture
8
+
9
+ ```
10
+ ┌────────────────────────────────────────────────────────┐
11
+ │ 1. Primitive Tokens (Declared in common/base.css) │
12
+ │ Raw colors, 2pt spacing ladder, font-family, A4 size│
13
+ ├────────────────────────────────────────────────────────┤
14
+ │ ▼ │
15
+ │ 2. Component Tokens (Declared in template style.css) │
16
+ │ --resume-space-section, --resume-font-size-body... │
17
+ └────────────────────────────────────────────────────────┘
18
+ ```
19
+
20
+ ### 1.1 Primitive Spacing Scale (2pt Base Grid):
21
+ - `--primitive-space-1`: `2pt` (Bullet margins, micro tags)
22
+ - `--primitive-space-2`: `4pt` (Tag padding, avatar margins)
23
+ - `--primitive-space-3`: `6pt` (Title-to-line gaps)
24
+ - `--primitive-space-4`: `8pt` (Item margins)
25
+ - `--primitive-space-5`: `10pt` (Section header bottom margins)
26
+ - `--primitive-space-6`: `12pt` (Section margins)
27
+ - `--primitive-space-8`: `16pt` (Outer page padding gaps)
28
+
29
+ ### 1.2 Calibratable Component Tokens:
30
+ Agent is strictly authorized to calibrate these CSS variables in `<style>` of `workspace/resume.html`:
31
+
32
+ | CSS Variable | Default Value | Overflow Remedy (-1.0 Page Fit) |
33
+ |:---|:---|:---|
34
+ | `--resume-space-section` | `11pt` ~ `12pt` | Reduce to `9.0pt` ~ `10pt` |
35
+ | `--resume-space-item` | `7.5pt` ~ `8.0pt` | Reduce to `6.0pt` ~ `6.5pt` |
36
+ | `--resume-space-bullet` | `2.5pt` ~ `3.0pt` | Reduce to `1.5pt` ~ `2.0pt` |
37
+ | `--resume-font-size-body` | `9.2pt` | Reduce to `8.8pt` ~ `9.0pt` |
38
+ | `--resume-line-height-body` | `1.45` | Reduce to `1.38` ~ `1.40` |
39
+
40
+ ---
41
+
42
+ ## 2. Canvas Editing Rules & Invariants
43
+
44
+ 1. **Single-File Self-Contained Invariant**: `workspace/resume.html` contains inlined CSS and no external network font/script dependencies;
45
+ 2. **Semantic HTML Tags Contract**:
46
+ - Page Root: `<div class="resume-page" id="page-1">`
47
+ - Candidate Header: `h1.candidate-name`, `p.job-target`
48
+ - Sections: `section.resume-section` with `h2.section-title`
49
+ - Experience/Projects: `div.experience-item`, `div.project-item`
50
+ - Bullets: `ul.bullet-list > li` with bold key phrases `<strong>`
51
+ 3. **Fact Invariant**: Never edit historical dates, company names, or verified achievements to fit a layout; adjust spacing tokens and condense wording instead.
@@ -0,0 +1,54 @@
1
+ # Reference Manual 06: Automated Dual QA & Deterministic PDF Export
2
+
3
+ > **"Validate before delivery. Output pixel-perfect PDF only after 100% Dual QA compliance."**
4
+
5
+ ---
6
+
7
+ ## 1. Automated Dual QA Protocol
8
+
9
+ Before rendering the final PDF, run the validation toolchain against `workspace/resume.html`:
10
+
11
+ ```bash
12
+ # 1. Layout & Physical A4 Height QA
13
+ python3 scripts/validation/validate-resume.py --html workspace/resume.html --expected-pages 1
14
+
15
+ # Or with Playwright DOM inspection (when node/ts available):
16
+ npx ts-node scripts/validation/validate-layout.ts --html workspace/resume.html --expected-pages 1
17
+ ```
18
+
19
+ ### Physical Dimension Benchmarks:
20
+ - Standard A4 Height at 96 DPI: $297\text{mm} \times 96 / 25.4 = 1122.5\text{px}$
21
+ - Allowed Threshold for 1-Page Resume: $\le 1123\text{px}$
22
+ - If reported height > 1123px (e.g. 1145px, +22px overflow):
23
+ 1. Trigger Self-Healing: reduce `--resume-space-section` by 1.5pt and `--resume-font-size-body` by 0.2pt;
24
+ 2. Condense verbose descriptions while keeping evidence intact;
25
+ 3. Re-run `validate-resume.py` until 100% PASS.
26
+
27
+ ---
28
+
29
+ ## 2. ATS Compatibility Verification
30
+
31
+ ```bash
32
+ npx ts-node scripts/validation/validate-ats.ts --html workspace/resume.html
33
+ ```
34
+
35
+ ### ATS Check Rules:
36
+ - [ ] Text extractability: 100% of resume content must be plain HTML text (no text embedded inside raster images);
37
+ - [ ] Contact completeness: Phone, email, location, and name must be discoverable via standard regex;
38
+ - [ ] Heading hierarchy: Exactly one `h1.candidate-name`, standard `h2.section-title` for major sections;
39
+ - [ ] Table/Grid compliance: All tabular data must have clean linear textual fallback for screen readers.
40
+
41
+ ---
42
+
43
+ ## 3. Deterministic PDF Rendering
44
+
45
+ ```bash
46
+ # Auto-discovery multi-strategy PDF export (Playwright -> Chrome -> Edge -> Brave)
47
+ python3 scripts/rendering/render-pdf.py workspace/resume.html workspace/resume.pdf --quiet
48
+ ```
49
+
50
+ ### Rendering Invariants:
51
+ - Uses `@page { size: A4 portrait; margin: 0; }`
52
+ - Forces `printBackground: true` and `preferCSSPageSize: true`
53
+ - Waits for `document.fonts.ready` before snapshotting
54
+ - Output artifact: `workspace/resume.pdf` (Lossless vector PDF)
@@ -1,48 +1,35 @@
1
+ /**
2
+ * KnowMe CareerForge — Classic Structured Table Template Style
3
+ * Style Tone: Structured Corporate (Table Grid Matrix)
4
+ * Inherits: src/templates/common/base.css
5
+ */
6
+
1
7
  :root {
2
- /* A4 绝对几何尺寸 */
3
- --resume-page-width: 210mm;
4
- --resume-page-min-height: 297mm;
8
+ /* === COMPONENT TOKENS (Overrides & Aliases) === */
5
9
  --resume-page-padding: 12mm 14mm;
6
10
 
7
- /* 配色系统 */
8
- --resume-color-primary: #0f172a; /* Slate 900 */
9
- --resume-color-secondary: #334155; /* Slate 700 */
10
- --resume-color-muted: #64748b; /* Slate 500 */
11
- --resume-color-accent: #1d4ed8; /* Blue 700 */
12
- --resume-color-border: #cbd5e1; /* Slate 300 稳重边框 */
13
- --resume-color-header-bg: #f8fafc; /* Slate 50 */
14
- --resume-color-label-bg: #f1f5f9; /* Slate 100 */
15
-
16
- /* 字阶系统 */
17
- --resume-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
18
- --resume-font-size-title: 18pt;
11
+ /* Color Bindings */
12
+ --resume-color-primary: var(--primitive-color-slate-900);
13
+ --resume-color-secondary: var(--primitive-color-slate-700);
14
+ --resume-color-muted: var(--primitive-color-slate-500);
15
+ --resume-color-accent: var(--primitive-color-blue-700);
16
+ --resume-color-border: var(--primitive-color-slate-300);
17
+ --resume-color-header-bg: var(--primitive-color-slate-50);
18
+ --resume-color-label-bg: var(--primitive-color-slate-100);
19
+
20
+ /* Typography Bindings */
21
+ --resume-font-body: var(--primitive-font-sans);
22
+ --resume-font-size-title: var(--primitive-font-size-title);
19
23
  --resume-font-size-body: 9pt;
20
- --resume-font-size-meta: 8.5pt;
24
+ --resume-font-size-meta: var(--primitive-font-size-meta);
21
25
  --resume-line-height-body: 1.4;
22
26
 
23
- /* 单元格内边距 */
27
+ /* Cell & Spacing Tokens */
24
28
  --resume-cell-padding: 4.5pt 7pt;
25
29
  }
26
30
 
27
- * { box-sizing: border-box; margin: 0; padding: 0; }
28
-
29
- body {
30
- background-color: #e2e8f0;
31
- font-family: var(--resume-font-body);
32
- display: flex;
33
- justify-content: center;
34
- padding: 24px 0;
35
- color: var(--resume-color-primary);
36
- -webkit-font-smoothing: antialiased;
37
- }
38
-
39
31
  .resume-page {
40
- width: var(--resume-page-width);
41
- min-height: var(--resume-page-min-height);
42
- background: #ffffff;
43
32
  padding: var(--resume-page-padding);
44
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
45
- box-sizing: border-box;
46
33
  }
47
34
 
48
35
  .resume-header {
@@ -92,7 +79,7 @@ body {
92
79
  }
93
80
 
94
81
  .cell-highlight-bg {
95
- background-color: #eff6ff; /* Blue 50 */
82
+ background-color: var(--primitive-color-blue-50);
96
83
  color: var(--resume-color-accent);
97
84
  }
98
85
 
@@ -146,19 +133,3 @@ body {
146
133
  color: var(--resume-color-secondary);
147
134
  line-height: 1.38;
148
135
  }
149
-
150
- @media print {
151
- body { background: transparent; padding: 0; }
152
- .resume-page {
153
- box-shadow: none;
154
- margin: 0;
155
- width: var(--resume-page-width);
156
- min-height: var(--resume-page-min-height);
157
- page-break-after: always;
158
- page-break-inside: avoid;
159
- }
160
- @page {
161
- size: A4 portrait;
162
- margin: 0;
163
- }
164
- }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * KnowMe CareerForge — Common Base Design System & CSS Foundation
3
+ *
4
+ * Architecture:
5
+ * 1. Primitive Tokens (Raw Colors, Font Stacks, Spacing Ladder, Physical Page Dimensions)
6
+ * 2. Universal Reset & Base Canvas Box Model
7
+ * 3. Deterministic A4 Print Media Contract (@page & print-color-adjust)
8
+ * 4. Shared Micro-Typography & Layout Utilities
9
+ */
10
+
11
+ :root {
12
+ /* === 1. PRIMITIVE TOKENS === */
13
+
14
+ /* 1.1 Physical A4 Page Constants */
15
+ --primitive-page-width: 210mm;
16
+ --primitive-page-min-height: 297mm;
17
+ --primitive-page-height-px: 1122.5px; /* 297mm * 96DPI / 25.4 */
18
+
19
+ /* 1.2 Neutral Color Palette (Slate Foundation) */
20
+ --primitive-color-slate-900: #0f172a; /* Body & Headings Primary */
21
+ --primitive-color-slate-800: #1e293b; /* Dark Banners & Deep Cards */
22
+ --primitive-color-slate-700: #334155; /* Secondary Text & Subheadings */
23
+ --primitive-color-slate-600: #475569;
24
+ --primitive-color-slate-500: #64748b; /* Muted Meta & Dates */
25
+ --primitive-color-slate-400: #94a3b8; /* Subtle Inverted Meta */
26
+ --primitive-color-slate-300: #cbd5e1; /* Strong Border */
27
+ --primitive-color-slate-200: #e2e8f0; /* Default Border & Dividers */
28
+ --primitive-color-slate-100: #f1f5f9; /* Tag & Label Background */
29
+ --primitive-color-slate-50: #f8fafc; /* Card Background & Inverted Text */
30
+ --primitive-color-white: #ffffff;
31
+
32
+ /* 1.3 Brand & Industry Accent Palettes */
33
+ --primitive-color-blue-700: #1d4ed8; /* Corporate Blue */
34
+ --primitive-color-blue-600: #2563eb; /* Tech Blue */
35
+ --primitive-color-blue-500: #3b82f6;
36
+ --primitive-color-blue-50: #eff6ff; /* Light Accent Tint */
37
+ --primitive-color-navy-900: #172a3a;
38
+ --primitive-color-navy-800: #254665; /* Modern Deep Navy */
39
+ --primitive-color-sky-400: #38bdf8; /* Highlight Blue */
40
+ --primitive-color-teal-700: #0f766e; /* Executive Teal */
41
+ --primitive-color-teal-50: #f0fdfa; /* Light Teal Tint */
42
+
43
+ /* 1.4 Typography Families */
44
+ --primitive-font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
45
+ --primitive-font-mono: "Geist Mono", "SF Mono", Monaco, Menlo, Consolas, "Liberation Mono", monospace;
46
+
47
+ /* 1.5 Spacing Scale (2pt / 4px Base Grid) */
48
+ --primitive-space-1: 2pt;
49
+ --primitive-space-2: 4pt;
50
+ --primitive-space-3: 6pt;
51
+ --primitive-space-4: 8pt;
52
+ --primitive-space-5: 10pt;
53
+ --primitive-space-6: 12pt;
54
+ --primitive-space-7: 14pt;
55
+ --primitive-space-8: 16pt;
56
+ --primitive-space-10: 20pt;
57
+ --primitive-space-12: 24pt;
58
+
59
+ /* 1.6 Type Scale */
60
+ --primitive-font-size-display: 22pt;
61
+ --primitive-font-size-title: 18pt;
62
+ --primitive-font-size-h2: 12pt;
63
+ --primitive-font-size-h3: 10.5pt;
64
+ --primitive-font-size-body: 9.2pt;
65
+ --primitive-font-size-meta: 8.5pt;
66
+ --primitive-font-size-badge: 8.0pt;
67
+
68
+ /* 1.7 Line Heights */
69
+ --primitive-line-height-tight: 1.2;
70
+ --primitive-line-height-normal: 1.45;
71
+ --primitive-line-height-loose: 1.6;
72
+ }
73
+
74
+ /* === 2. UNIVERSAL RESET & BASE CANVAS === */
75
+ *, *::before, *::after {
76
+ box-sizing: border-box;
77
+ margin: 0;
78
+ padding: 0;
79
+ }
80
+
81
+ body {
82
+ background-color: #e2e8f0;
83
+ font-family: var(--primitive-font-sans);
84
+ display: flex;
85
+ justify-content: center;
86
+ padding: 24px 0;
87
+ color: var(--primitive-color-slate-900);
88
+ -webkit-font-smoothing: antialiased;
89
+ -moz-osx-font-smoothing: grayscale;
90
+ text-rendering: optimizeLegibility;
91
+ }
92
+
93
+ /* Base Resume Page Container */
94
+ .resume-page {
95
+ width: var(--primitive-page-width);
96
+ min-height: var(--primitive-page-min-height);
97
+ background: var(--primitive-color-white);
98
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
99
+ box-sizing: border-box;
100
+ position: relative;
101
+ }
102
+
103
+ /* === 3. DETERMINISTIC PRINT MEDIA CONTRACT === */
104
+ @media print {
105
+ @page {
106
+ size: A4 portrait;
107
+ margin: 0; /* System print margins completely removed; template padding takes full control */
108
+ }
109
+
110
+ body {
111
+ background: transparent !important;
112
+ padding: 0 !important;
113
+ -webkit-print-color-adjust: exact !important;
114
+ print-color-adjust: exact !important;
115
+ }
116
+
117
+ .resume-page {
118
+ box-shadow: none !important;
119
+ margin: 0 !important;
120
+ width: var(--primitive-page-width) !important;
121
+ min-height: var(--primitive-page-min-height) !important;
122
+ page-break-after: always;
123
+ page-break-inside: avoid;
124
+ break-inside: avoid;
125
+ }
126
+
127
+ .avoid-break {
128
+ break-inside: avoid !important;
129
+ page-break-inside: avoid !important;
130
+ }
131
+ }
132
+
133
+ /* === 4. SHARED BASE COMPONENTS & UTILITIES === */
134
+ .bullet-list {
135
+ list-style-type: disc;
136
+ margin-left: 14pt;
137
+ color: var(--resume-color-secondary, var(--primitive-color-slate-700));
138
+ }
139
+
140
+ .bullet-list strong {
141
+ color: var(--resume-color-primary, var(--primitive-color-slate-900));
142
+ font-weight: 600;
143
+ }
144
+
145
+ .date-range {
146
+ font-size: var(--resume-font-size-meta, var(--primitive-font-size-meta));
147
+ color: var(--resume-color-muted, var(--primitive-color-slate-500));
148
+ font-variant-numeric: tabular-nums;
149
+ white-space: nowrap;
150
+ }
@@ -1,51 +1,37 @@
1
+ /**
2
+ * KnowMe CareerForge — Executive Modern Split Template Style
3
+ * Style Tone: Executive Formal (Hero Banner + Two-Column 33:67)
4
+ * Inherits: src/templates/common/base.css
5
+ */
6
+
1
7
  :root {
2
- /* A4 绝对几何尺寸 */
3
- --resume-page-width: 210mm;
4
- --resume-page-min-height: 297mm;
5
-
6
- /* 配色体系 */
7
- --resume-color-banner-bg: #1e293b; /* Slate 800 */
8
- --resume-color-banner-text: #f8fafc;
9
- --resume-color-banner-muted: #94a3b8;
10
- --resume-color-primary: #0f172a; /* Slate 900 */
11
- --resume-color-secondary: #334155; /* Slate 700 */
12
- --resume-color-muted: #64748b; /* Slate 500 */
13
- --resume-color-accent: #0f766e; /* Teal 700 沉稳高管色 */
14
- --resume-color-tag-bg: #f0fdfa; /* Teal 50 */
15
- --resume-color-border: #e2e8f0;
16
-
17
- /* 字阶系统 */
18
- --resume-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
19
- --resume-font-size-name: 22pt;
20
- --resume-font-size-title: 11pt;
21
- --resume-font-size-body: 9.2pt;
22
- --resume-font-size-meta: 8.5pt;
23
- --resume-line-height-body: 1.45;
24
-
25
- /* 间距 Tokens (Agent 自愈参数) */
26
- --resume-space-section: 12pt;
27
- --resume-space-item: 9pt;
28
- --resume-space-bullet: 3pt;
8
+ /* === COMPONENT TOKENS (Overrides & Aliases) === */
9
+ --resume-color-banner-bg: var(--primitive-color-slate-800);
10
+ --resume-color-banner-text: var(--primitive-color-slate-50);
11
+ --resume-color-banner-muted: var(--primitive-color-slate-400);
12
+ --resume-color-primary: var(--primitive-color-slate-900);
13
+ --resume-color-secondary: var(--primitive-color-slate-700);
14
+ --resume-color-muted: var(--primitive-color-slate-500);
15
+ --resume-color-accent: var(--primitive-color-teal-700);
16
+ --resume-color-tag-bg: var(--primitive-color-teal-50);
17
+ --resume-color-border: var(--primitive-color-slate-200);
18
+
19
+ /* Typography Bindings */
20
+ --resume-font-body: var(--primitive-font-sans);
21
+ --resume-font-size-name: var(--primitive-font-size-display);
22
+ --resume-font-size-title: var(--primitive-font-size-h3);
23
+ --resume-font-size-body: var(--primitive-font-size-body);
24
+ --resume-font-size-meta: var(--primitive-font-size-meta);
25
+ --resume-line-height-body: var(--primitive-line-height-normal);
26
+
27
+ /* Spacing Tokens (Calibratable for Self-Healing) */
28
+ --resume-space-section: var(--primitive-space-6);
29
+ --resume-space-item: var(--primitive-space-4);
30
+ --resume-space-bullet: var(--primitive-space-1);
29
31
  --resume-left-col-width: 33%;
30
32
  }
31
33
 
32
- * { box-sizing: border-box; margin: 0; padding: 0; }
33
-
34
- body {
35
- background-color: #e2e8f0;
36
- font-family: var(--resume-font-body);
37
- display: flex;
38
- justify-content: center;
39
- padding: 24px 0;
40
- color: var(--resume-color-primary);
41
- -webkit-font-smoothing: antialiased;
42
- }
43
-
44
34
  .resume-page {
45
- width: var(--resume-page-width);
46
- min-height: var(--resume-page-min-height);
47
- background: #ffffff;
48
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
49
35
  overflow: hidden;
50
36
  display: flex;
51
37
  flex-direction: column;
@@ -74,7 +60,7 @@ body {
74
60
 
75
61
  .candidate-title {
76
62
  font-size: var(--resume-font-size-title);
77
- color: #38bdf8; /* Sky 400 */
63
+ color: var(--primitive-color-sky-400);
78
64
  font-weight: 600;
79
65
  margin-top: 2pt;
80
66
  }
@@ -196,40 +182,11 @@ body {
196
182
  color: var(--resume-color-accent);
197
183
  }
198
184
 
199
- .date-range {
200
- font-size: var(--resume-font-size-meta);
201
- color: var(--resume-color-muted);
202
- font-variant-numeric: tabular-nums;
203
- }
204
-
205
185
  .bullet-list {
206
- margin-left: 14pt;
207
186
  font-size: var(--resume-font-size-body);
208
- color: var(--resume-color-secondary);
209
187
  line-height: var(--resume-line-height-body);
210
188
  }
211
189
 
212
190
  .bullet-list li {
213
191
  margin-bottom: var(--resume-space-bullet);
214
192
  }
215
-
216
- .bullet-list strong {
217
- color: var(--resume-color-primary);
218
- font-weight: 600;
219
- }
220
-
221
- @media print {
222
- body { background: transparent; padding: 0; }
223
- .resume-page {
224
- box-shadow: none;
225
- margin: 0;
226
- width: var(--resume-page-width);
227
- min-height: var(--resume-page-min-height);
228
- page-break-after: always;
229
- page-break-inside: avoid;
230
- }
231
- @page {
232
- size: A4 portrait;
233
- margin: 0;
234
- }
235
- }
@@ -1,53 +1,40 @@
1
+ /**
2
+ * KnowMe CareerForge — Minimal Tech Template Style
3
+ * Style Tone: Geek Minimal (Single-Column Flow)
4
+ * Inherits: src/templates/common/base.css
5
+ */
6
+
1
7
  :root {
2
- /* 页面绝对 A4 尺寸 */
3
- --resume-page-width: 210mm;
4
- --resume-page-min-height: 297mm;
8
+ /* === COMPONENT TOKENS (Overrides & Aliases) === */
5
9
  --resume-page-padding: 14mm 16mm;
6
10
 
7
- /* 现代科技色系 */
8
- --resume-color-primary: #0f172a; /* Slate 900 */
9
- --resume-color-secondary: #334155; /* Slate 700 */
10
- --resume-color-muted: #64748b; /* Slate 500 */
11
- --resume-color-accent: #2563eb; /* Tech Blue 600 */
12
- --resume-color-accent-bg: #eff6ff; /* Blue 50 */
13
- --resume-color-border: #e2e8f0; /* Slate 200 */
14
- --resume-color-tag-bg: #f1f5f9; /* Slate 100 */
15
-
16
- /* 字阶系统 */
17
- --resume-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
18
- --resume-font-size-name: 20pt;
19
- --resume-font-size-target: 10.5pt;
20
- --resume-font-size-h2: 12pt;
21
- --resume-font-size-body: 9.2pt;
22
- --resume-font-size-meta: 8.5pt;
23
- --resume-line-height-body: 1.45;
24
-
25
- /* 间距 Tokens (Agent 自愈关键参数) */
26
- --resume-space-header-bottom: 11pt;
27
- --resume-space-section: 11pt;
28
- --resume-space-item: 7.5pt;
29
- --resume-space-bullet: 2.5pt;
30
- }
31
-
32
- * { box-sizing: border-box; margin: 0; padding: 0; }
33
-
34
- body {
35
- background-color: #f1f5f9;
36
- font-family: var(--resume-font-body);
37
- color: var(--resume-color-primary);
38
- display: flex;
39
- justify-content: center;
40
- padding: 24px 0;
41
- -webkit-font-smoothing: antialiased;
11
+ /* Color Bindings */
12
+ --resume-color-primary: var(--primitive-color-slate-900);
13
+ --resume-color-secondary: var(--primitive-color-slate-700);
14
+ --resume-color-muted: var(--primitive-color-slate-500);
15
+ --resume-color-accent: var(--primitive-color-blue-600);
16
+ --resume-color-accent-bg: var(--primitive-color-blue-50);
17
+ --resume-color-border: var(--primitive-color-slate-200);
18
+ --resume-color-tag-bg: var(--primitive-color-slate-100);
19
+
20
+ /* Typography Bindings */
21
+ --resume-font-body: var(--primitive-font-sans);
22
+ --resume-font-size-name: var(--primitive-font-size-display);
23
+ --resume-font-size-target: var(--primitive-font-size-h3);
24
+ --resume-font-size-h2: var(--primitive-font-size-h2);
25
+ --resume-font-size-body: var(--primitive-font-size-body);
26
+ --resume-font-size-meta: var(--primitive-font-size-meta);
27
+ --resume-line-height-body: var(--primitive-line-height-normal);
28
+
29
+ /* Spacing Tokens (Calibratable for Self-Healing) */
30
+ --resume-space-header-bottom: var(--primitive-space-5);
31
+ --resume-space-section: var(--primitive-space-5);
32
+ --resume-space-item: var(--primitive-space-4);
33
+ --resume-space-bullet: var(--primitive-space-1);
42
34
  }
43
35
 
44
36
  .resume-page {
45
- width: var(--resume-page-width);
46
- min-height: var(--resume-page-min-height);
47
- background: #ffffff;
48
37
  padding: var(--resume-page-padding);
49
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
50
- box-sizing: border-box;
51
38
  }
52
39
 
53
40
  /* Header 模块 */
@@ -173,17 +160,9 @@ body {
173
160
  border-radius: 3pt;
174
161
  }
175
162
 
176
- .date-range {
177
- font-size: var(--resume-font-size-meta);
178
- color: var(--resume-color-muted);
179
- font-variant-numeric: tabular-nums;
180
- }
181
-
182
163
  /* Bullet 清单 */
183
164
  .bullet-list {
184
- margin-left: 14pt;
185
165
  font-size: var(--resume-font-size-body);
186
- color: var(--resume-color-secondary);
187
166
  line-height: var(--resume-line-height-body);
188
167
  }
189
168
 
@@ -191,29 +170,8 @@ body {
191
170
  margin-bottom: var(--resume-space-bullet);
192
171
  }
193
172
 
194
- .bullet-list strong {
195
- color: var(--resume-color-primary);
196
- font-weight: 600;
197
- }
198
-
199
173
  .edu-detail {
200
174
  font-size: var(--resume-font-size-body);
201
175
  color: var(--resume-color-secondary);
202
176
  line-height: var(--resume-line-height-body);
203
177
  }
204
-
205
- @media print {
206
- body { background: transparent; padding: 0; }
207
- .resume-page {
208
- box-shadow: none;
209
- margin: 0;
210
- width: var(--resume-page-width);
211
- min-height: var(--resume-page-min-height);
212
- page-break-after: always;
213
- page-break-inside: avoid;
214
- }
215
- @page {
216
- size: A4 portrait;
217
- margin: 0;
218
- }
219
- }