|
5 | 5 | <meta name="viewport" content="width=1200, height=630"> |
6 | 6 | <title>OG Card - Jan-Philip Loos</title> |
7 | 7 | <style> |
8 | | - /* Force light mode variables for consistent OG image */ |
| 8 | + /* |
| 9 | + * OG Card Design |
| 10 | + * Direction: Precision & Density |
| 11 | + * Grid: 4px base (all values multiples of 4) |
| 12 | + * Depth: Borders-only |
| 13 | + * Border radius: Sharp system (4, 6, 8) |
| 14 | + * Padding: Symmetrical |
| 15 | + */ |
9 | 16 | :root { |
10 | | - --bg-color: #fafbfc; |
11 | | - --bg-secondary: #f0f2f5; |
12 | | - --text-color: #1a202c; |
13 | | - --text-muted: #64748b; |
14 | | - --text-heading: #0f172a; |
15 | | - --accent-color: #ff8000; |
16 | | - --border-color: #e2e8f0; |
17 | | - --font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; |
18 | | - --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; |
| 17 | + --bg-primary: #fafbfc; |
| 18 | + --bg-secondary: #f4f5f7; |
| 19 | + --text-foreground: #0f172a; |
| 20 | + --text-secondary: rgba(15, 23, 42, 0.72); |
| 21 | + --text-muted: rgba(15, 23, 42, 0.56); |
| 22 | + --accent: #d97706; |
| 23 | + --border: rgba(0, 0, 0, 0.08); |
| 24 | + |
| 25 | + --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; |
| 26 | + --font-mono: "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; |
19 | 27 | } |
20 | 28 |
|
21 | 29 | * { |
|
28 | 36 | width: 1200px; |
29 | 37 | height: 630px; |
30 | 38 | overflow: hidden; |
31 | | - font-family: var(--font-body); |
32 | | - background: var(--bg-color); |
| 39 | + font-family: var(--font-sans); |
| 40 | + background: var(--bg-primary); |
| 41 | + -webkit-font-smoothing: antialiased; |
33 | 42 | } |
34 | 43 |
|
35 | 44 | .og-card { |
|
38 | 47 | display: flex; |
39 | 48 | align-items: center; |
40 | 49 | justify-content: center; |
41 | | - background: linear-gradient(135deg, var(--bg-color) 0%, var(--bg-secondary) 100%); |
42 | | - padding: 80px; |
| 50 | + background: linear-gradient(145deg, var(--bg-primary) 0%, var(--bg-secondary) 100%); |
| 51 | + /* Symmetrical padding */ |
| 52 | + padding: 56px; |
43 | 53 | position: relative; |
44 | 54 | } |
45 | 55 |
|
46 | 56 | .og-content { |
47 | 57 | display: flex; |
48 | 58 | align-items: center; |
49 | | - gap: 64px; |
| 59 | + gap: 56px; |
| 60 | + width: 100%; |
| 61 | + max-width: 1000px; |
50 | 62 | } |
51 | 63 |
|
| 64 | + /* Photo - 224px on 4px grid */ |
52 | 65 | .og-photo { |
53 | | - width: 220px; |
54 | | - height: 220px; |
55 | | - border-radius: 16px; |
| 66 | + width: 224px; |
| 67 | + height: 224px; |
| 68 | + border-radius: 8px; |
56 | 69 | object-fit: cover; |
57 | | - border: 4px solid var(--accent-color); |
58 | | - box-shadow: 0 24px 48px rgba(0, 0, 0, 0.12); |
| 70 | + border: 1px solid var(--border); |
59 | 71 | flex-shrink: 0; |
60 | 72 | } |
61 | 73 |
|
62 | 74 | .og-text { |
63 | 75 | display: flex; |
64 | 76 | flex-direction: column; |
65 | | - gap: 12px; |
| 77 | + flex: 1; |
66 | 78 | } |
67 | 79 |
|
68 | | - .og-text h1 { |
69 | | - font-family: var(--font-heading); |
| 80 | + /* Name - 72px on grid */ |
| 81 | + .og-name { |
| 82 | + font-family: var(--font-sans); |
70 | 83 | font-size: 72px; |
71 | 84 | font-weight: 700; |
72 | | - line-height: 1.1; |
73 | | - letter-spacing: -0.02em; |
74 | | - color: var(--text-heading); |
| 85 | + line-height: 1.0; |
| 86 | + letter-spacing: -0.03em; |
| 87 | + color: var(--text-foreground); |
75 | 88 | } |
76 | 89 |
|
77 | | - .og-text h1::after { |
| 90 | + .og-name::after { |
78 | 91 | content: ''; |
79 | 92 | display: block; |
80 | | - width: 80px; |
| 93 | + width: 56px; |
81 | 94 | height: 4px; |
82 | | - background: var(--accent-color); |
83 | | - margin-top: 20px; |
| 95 | + background: var(--accent); |
| 96 | + margin-top: 16px; |
84 | 97 | border-radius: 2px; |
85 | 98 | } |
86 | 99 |
|
87 | | - .og-text h2 { |
88 | | - font-family: var(--font-body); |
89 | | - font-size: 32px; |
| 100 | + /* Role - 28px on grid */ |
| 101 | + .og-role { |
| 102 | + font-family: var(--font-sans); |
| 103 | + font-size: 28px; |
| 104 | + font-weight: 500; |
| 105 | + letter-spacing: -0.01em; |
| 106 | + color: var(--text-secondary); |
| 107 | + margin-top: 20px; |
| 108 | + } |
| 109 | + |
| 110 | + /* Tagline - 24px on grid */ |
| 111 | + .og-tagline { |
| 112 | + font-family: var(--font-sans); |
| 113 | + font-size: 24px; |
90 | 114 | font-weight: 400; |
91 | 115 | color: var(--text-muted); |
92 | | - margin-top: 8px; |
| 116 | + margin-top: 12px; |
93 | 117 | } |
94 | 118 |
|
| 119 | + /* Skills - 16px on grid */ |
| 120 | + .og-skills { |
| 121 | + display: flex; |
| 122 | + flex-wrap: wrap; |
| 123 | + gap: 12px; |
| 124 | + margin-top: 28px; |
| 125 | + } |
| 126 | + |
| 127 | + .og-skill { |
| 128 | + font-family: var(--font-mono); |
| 129 | + font-size: 14px; |
| 130 | + font-weight: 500; |
| 131 | + color: var(--text-secondary); |
| 132 | + background: var(--bg-primary); |
| 133 | + padding: 8px 16px; |
| 134 | + border-radius: 6px; |
| 135 | + border: 1px solid var(--border); |
| 136 | + } |
| 137 | + |
| 138 | + /* Domain - 24px on grid */ |
95 | 139 | .og-domain { |
96 | 140 | position: absolute; |
97 | | - bottom: 48px; |
98 | | - right: 64px; |
99 | | - font-family: var(--font-body); |
| 141 | + bottom: 40px; |
| 142 | + right: 56px; |
| 143 | + font-family: var(--font-sans); |
100 | 144 | font-size: 24px; |
101 | 145 | font-weight: 600; |
102 | | - color: var(--accent-color); |
103 | | - letter-spacing: 0.01em; |
104 | | - } |
105 | | - |
106 | | - /* Subtle corner accent */ |
107 | | - .og-card::before { |
108 | | - content: ''; |
109 | | - position: absolute; |
110 | | - top: 0; |
111 | | - left: 0; |
112 | | - width: 8px; |
113 | | - height: 100%; |
114 | | - background: var(--accent-color); |
| 146 | + color: var(--accent); |
115 | 147 | } |
116 | 148 | </style> |
117 | 149 | </head> |
|
120 | 152 | <div class="og-content"> |
121 | 153 | <img class="og-photo" src="../img/profile-current.png" alt="Jan-Philip Loos"> |
122 | 154 | <div class="og-text"> |
123 | | - <h1>Jan-Philip Loos</h1> |
124 | | - <h2>MSc: Computer Science</h2> |
| 155 | + <h1 class="og-name">Jan-Philip Loos</h1> |
| 156 | + <p class="og-role">DevOps · Cloud · Functional Architecture</p> |
| 157 | + <p class="og-tagline">functional & automated</p> |
| 158 | + <div class="og-skills"> |
| 159 | + <span class="og-skill">Cloud Native</span> |
| 160 | + <span class="og-skill">Infrastructure as Code</span> |
| 161 | + <span class="og-skill">Automation</span> |
| 162 | + <span class="og-skill">CI/CD</span> |
| 163 | + </div> |
125 | 164 | </div> |
126 | 165 | </div> |
127 | 166 | <div class="og-domain">cv.maxdaten.io</div> |
|
0 commit comments