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.
- package/SKILL.md +11 -1
- package/agents/claude/knowme-careerforge.md +10 -9
- package/agents/codex/knowme-careerforge.yaml +3 -3
- package/agents/cursor/knowme-careerforge.mdc +12 -8
- package/agents/opencode/skill.yaml +1 -1
- package/agents/windsurf/knowme-careerforge.rules +9 -9
- package/dist/cli/src/commands/init.js +9 -0
- package/dist/cli/src/index.js +17 -0
- package/package.json +2 -1
- package/scripts/build/sync-version.py +11 -2
- package/scripts/template/instantiate-resume.py +8 -2
- package/scripts/template/search-template.py +290 -89
- package/skill.json +1 -1
- package/src/knowledge/index.json +2 -10
- package/src/knowledge/templates.json +1 -9
- package/src/references/01-evidence-mining.md +41 -0
- package/src/references/02-career-goal.md +38 -0
- package/src/references/03-jd-analysis.md +44 -0
- package/src/references/04-template-selection.md +43 -0
- package/src/references/05-html-canvas-tokens.md +51 -0
- package/src/references/06-qa-and-rendering.md +54 -0
- package/src/templates/classic/style.css +22 -51
- package/src/templates/common/base.css +150 -0
- package/src/templates/executive/style.css +30 -73
- package/src/templates/minimal/style.css +30 -72
- package/src/templates/modern/style.css +32 -72
- package/src/references/ats.md +0 -17
- package/src/references/evidence-first.md +0 -22
- package/src/references/pdf.md +0 -40
- package/src/references/resume-writing.md +0 -25
- package/src/references/template-design.md +0 -57
- package/src/workflows/analyze-job.md +0 -16
- package/src/workflows/define-goal.md +0 -16
- package/src/workflows/forge-resume.md +0 -25
- package/src/workflows/know-me.md +0 -21
- package/src/workflows/position.md +0 -19
- 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
|
-
/*
|
|
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:
|
|
9
|
-
--resume-color-secondary:
|
|
10
|
-
--resume-color-muted:
|
|
11
|
-
--resume-color-accent:
|
|
12
|
-
--resume-color-border:
|
|
13
|
-
--resume-color-header-bg:
|
|
14
|
-
--resume-color-label-bg:
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
--resume-font-body: -
|
|
18
|
-
--resume-font-size-title:
|
|
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:
|
|
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:
|
|
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
|
-
/*
|
|
3
|
-
--resume-
|
|
4
|
-
--resume-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
--resume-color-
|
|
8
|
-
--resume-color-
|
|
9
|
-
--resume-color-
|
|
10
|
-
--resume-color-
|
|
11
|
-
--resume-color-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
--resume-
|
|
15
|
-
--resume-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
--resume-font-
|
|
19
|
-
--resume-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
--resume-
|
|
23
|
-
--resume-
|
|
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:
|
|
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
|
-
/*
|
|
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:
|
|
9
|
-
--resume-color-secondary:
|
|
10
|
-
--resume-color-muted:
|
|
11
|
-
--resume-color-accent:
|
|
12
|
-
--resume-color-accent-bg:
|
|
13
|
-
--resume-color-border:
|
|
14
|
-
--resume-color-tag-bg:
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
--resume-font-body: -
|
|
18
|
-
--resume-font-size-name:
|
|
19
|
-
--resume-font-size-target:
|
|
20
|
-
--resume-font-size-h2:
|
|
21
|
-
--resume-font-size-body:
|
|
22
|
-
--resume-font-size-meta:
|
|
23
|
-
--resume-line-height-body:
|
|
24
|
-
|
|
25
|
-
/*
|
|
26
|
-
--resume-space-header-bottom:
|
|
27
|
-
--resume-space-section:
|
|
28
|
-
--resume-space-item:
|
|
29
|
-
--resume-space-bullet:
|
|
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
|
-
}
|