resme 2.0.0 → 2.1.0

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.
@@ -0,0 +1,337 @@
1
+ <html>
2
+ <head>
3
+ <title><%= full_name @data %> Resume</title>
4
+
5
+ <meta name="author" content="<%= full_name @data %>">
6
+ <meta name="created" content="<%= Date.today %>">
7
+ <meta name="generator" content="resme">
8
+
9
+ <link rel="stylesheet" href="./<%= @data[:theme] %>">
10
+ </head>
11
+
12
+ <body>
13
+ <div class="container">
14
+ <div class="contact-information">
15
+ <!-- this is also replicated in the main section, to simplify styling -->
16
+ <!-- you might want to set display:none for one or the other -->
17
+ <div class="fullname-title">
18
+ <%= full_name @data %>, <%= @data[:basics][:title] %>
19
+ </div>
20
+
21
+ <% if @data[:addresses] %>
22
+ <div class="addresses section">
23
+ <h2>Addresses</h2>
24
+
25
+ <% (@data[:addresses] || []).each do |x| %>
26
+ <div class="address item">
27
+ <span class="label"><%= x[:label] %></span>
28
+ <span class="value">
29
+ <span class="street"><%= x[:street] %></span>
30
+ <span class="postal-code"><%= x[:postal_code] %></span>
31
+ <span class="city"><%= x[:city] %></span>
32
+ </span>
33
+ </div>
34
+ <% end %>
35
+ </div>
36
+ <% end %>
37
+
38
+ <% if @data[:contacts] %>
39
+ <div class="contacts section">
40
+ <h2>Contacts</h2>
41
+
42
+ <% (@data[:contacts] || []).each do |x| %>
43
+ <div class="contact item">
44
+ <span class="label"><%= x[:label] %></span>
45
+ <span class="value"><%= x[:value] %></span>
46
+ </div>
47
+ <% end %>
48
+ </div>
49
+ <% end %>
50
+
51
+ <% if @data[:web_presence] %>
52
+ <div class="web-presence section">
53
+ <h2>Web</h2>
54
+
55
+ <% (@data[:web_presence] || []).each do |x| %>
56
+ <div class="web-presence-item item">
57
+ <span class="label"><%= x[:label] %></span>
58
+ <span class="value"><%= x[:value] %></span>
59
+ </div>
60
+ <% end %>
61
+ </div>
62
+ <% end %>
63
+ </div>
64
+
65
+ <div class="main">
66
+ <div class="fullname-title">
67
+ <%= full_name @data %>, <%= @data[:basics][:title] %>
68
+ </div>
69
+
70
+ <% if @data[:summary] %>
71
+ <div class="summary section">
72
+ <h2>Summary</h2>
73
+
74
+ <%= html_summary @data[:summary] %>
75
+ </div>
76
+ <% end %>
77
+
78
+ <% if @data[:skills] %>
79
+ <div class="skills section">
80
+ <h2>Skills</h2>
81
+
82
+ <% (@data[:skills] || []).each do |item| %>
83
+ <div class="skill item">
84
+ <span class="label"><%= item[:name] %></span>
85
+ <span class="value"><%= item[:level] %></span>
86
+ </div>
87
+ <% end %>
88
+ </div>
89
+ <% end %>
90
+
91
+ <% if @data[:work] %>
92
+ <div class="work-experiences section">
93
+ <h2>Work Experience</h2>
94
+
95
+ <% (@data[:work] || []).each do |item| %>
96
+ <div class="work-experience item">
97
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
98
+ <div class="position"><%= item[:position] %></div>
99
+ <div class="name"><%= item[:name] %></div>
100
+ <div class="summary"><%= html_summary item[:summary] %></div>
101
+ </div>
102
+ <% end %>
103
+ </div>
104
+ <% end %>
105
+
106
+ <% if @data[:teaching] %>
107
+ <div class="teachings section">
108
+ <h2>Teaching</h2>
109
+
110
+ <% (@data[:teaching] || []).each do |item| %>
111
+ <div class="teaching item">
112
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
113
+ <div class="subject"><%= item[:subject] %></div>
114
+ <div class="position"><%= item[:position] %></div>
115
+ <div class="school"><%= item[:school] %></div>
116
+ <div class="name"><%= item[:name] %></div>
117
+ </div>
118
+ <% end %>
119
+ </div>
120
+ <% end %>
121
+
122
+ <% if @data[:projects] %>
123
+ <div class="projects section">
124
+ <h2>Projects</h2>
125
+
126
+ <% (@data[:projects] || []).each do |item| %>
127
+ <div class="project item">
128
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
129
+ <div class="position"><%= item[:position] %></div>
130
+ <div class="name"><%= item[:name] %></div>
131
+ <div class="summary"><%= html_summary item[:summary] %></div>
132
+ </div>
133
+ <% end %>
134
+ </div>
135
+ <% end %>
136
+
137
+ <% if @data[:other] -%>
138
+ <div class="other section">
139
+ <h2>Other</h2>
140
+
141
+ <% (@data[:other] || []).each do |item| %>
142
+ <div class="other item">
143
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
144
+ <div class="position"><%= item[:position] %></div>
145
+ <div class="name"><%= item[:name] %></div>
146
+ <div class="summary"><%= html_summary item[:summary] %></div>
147
+ </div>
148
+ <% end %>
149
+ </div>
150
+ <% end %>
151
+
152
+ <% if @data[:committees] %>
153
+ <div class="committees section">
154
+ <h2>Committees</h2>
155
+
156
+ <% (@data[:committees] || []).each do |item| %>
157
+ <div class="committee item">
158
+ <div class="name"><%= item[:name] %></div>
159
+ <div class="position"><%= item[:position] %></div>
160
+ <div class="editions"><%= item[:editions] %></div>
161
+ </div>
162
+ <% end %>
163
+ </div>
164
+ <% end %>
165
+
166
+ <% if @data[:volunteer] -%>
167
+ <div class="volunteer section">
168
+ <h2>Volunteer</h2>
169
+
170
+ <% (@data[:volunteer] || []).each do |item| %>
171
+ <div class="volunteer-item item">
172
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
173
+ <div class="position"><%= item[:position] %></div>
174
+ <div class="name"><%= item[:name] %></div>
175
+ <div class="summary"><%= html_summary item[:summary] %></div>
176
+ </div>
177
+ <% end %>
178
+ </div>
179
+ <% end %>
180
+
181
+ <% if @data[:publications] %>
182
+ <div class="publications section">
183
+ <h2>Publications</h2>
184
+
185
+ <% (@data[:publications] || []).each do |item| %>
186
+ <div class="publication item">
187
+ <div class="authors"><%= item[:authors] %></div>
188
+ <div class="title"><%= item[:title] %></div>
189
+ <div class="publisher"><%= item[:publisher] %></div>
190
+ <div class="date"><%= item[:date] %></div>
191
+ </div>
192
+ <% end %>
193
+ </div>
194
+ <% end -%>
195
+
196
+ <% if @data[:talks] -%>
197
+ <div class="talks section">
198
+ <h2>Talks</h2>
199
+
200
+ <% (@data[:talks] || []).each do |item| -%>
201
+ <div class="talk item">
202
+ <div class="title"><%= item[:title] %></div>
203
+ <div class="venue"><%= item[:venue] %></div>
204
+ <div class="date"><%= item[:date] %></div>
205
+ </div>
206
+ <% end -%>
207
+ </div>
208
+ <% end -%>
209
+
210
+ <% if @data[:visits] -%>
211
+ <div class="visits section">
212
+ <h2>Visits</h2>
213
+
214
+ <% (@data[:visits] || []).each do |item| -%>
215
+ <div class="visit">
216
+ <div class="period"><%= period item, separator: "&mdash;" %></div>
217
+ <div class="position"><%= item[:position] %></div>
218
+ <div class="name"><%= item[:name] %></div>
219
+ <div class="address"><%= item[:address] %></div>
220
+ <div class="summary"><%= html_summary item[:summary] %></div>
221
+ </div>
222
+ <% end -%>
223
+ </div>
224
+ <% end -%>
225
+
226
+ <% if @data[:education] %>
227
+ <div class="education section">
228
+ <h2>Education</h2>
229
+
230
+ <% @data[:education].select { |x| x[:publish] }.each do |item| -%>
231
+ <div class="education-item item">
232
+ <div class="year"><%= year(item[:end_date]) %></div>
233
+ <div class="degree"><%= item[:degree] %></div>
234
+ <div class="school"><%= item[:school] %></div>
235
+ <div class="address"><%= item[:address] %></div>
236
+ </div>
237
+ <% end %>
238
+ </div>
239
+ <% end %>
240
+
241
+ <% [:awards, :achievements].each do |group| %>
242
+ <% if @data[group] -%>
243
+ <div class="<%= group %> section">
244
+ <h2><%= group.capitalize %></h2>
245
+
246
+ <% (@data[group] || []).each do |item| %>
247
+ <div class="<%= group %>-item item">
248
+ <% %w[date title name address summary].each do |element| %>
249
+ <div class="<%= element %>"><%= item[element] %></div>
250
+ <% end %>
251
+ </div>
252
+ <% end %>
253
+ </div>
254
+ <% end %>
255
+ <% end %>
256
+
257
+ <% if @data[:software] %>
258
+ <div class="software section">
259
+ <h2>Software</h2>
260
+
261
+ <% (@data[:software] || []).each do |item| -%>
262
+ <div class="software-item item">
263
+ <div class="title">
264
+ <a href="<%= item[:url] %>"><%= item[:title] %></a>
265
+ </div>
266
+ <div class="position"><%= item[:position] %></div>
267
+ </div>
268
+ <% end -%>
269
+ </div>
270
+ <% end -%>
271
+
272
+ <% if @data[:interests] -%>
273
+ <div class="interests section">
274
+ <h2>Interests</h2>
275
+
276
+ <% (@data[:interests] || []).each do |item| -%>
277
+ <div class="interest item">
278
+ <div class="name"><%= item[:name] %></div>
279
+ <div class="summary"><%= html_summary item[:summary] %></div>
280
+ </div>
281
+ <% end -%>
282
+ </div>
283
+ <% end -%>
284
+
285
+ <% if @data[:languages] %>
286
+ <div class="languages section">
287
+ <h2>Languages</h2>
288
+
289
+ <% if @data[:languages] and @data[:languages][:assessment] %>
290
+ <div class="assessment item">
291
+ <span class="label">Assessment</span>
292
+ <span class="value"><%= @data[:languages][:assessment] %></span>
293
+ </div>
294
+ <% end %>
295
+
296
+ <% if @data[:languages] and @data[:languages][:mother_tongues] %>
297
+ <div class="mother-tongues item">
298
+ <span class="label">Mother Tongues</span>
299
+ <% @data[:languages][:mother_tongues].each do |x| %>
300
+ <div class="mother-tongue">
301
+ <div class="language"><%= x[:language] %></div>
302
+ <div class="level"><%= x[:level] %></div>
303
+ </div>
304
+ <% end %>
305
+ </div>
306
+ <% end -%>
307
+
308
+ <% if @data[:languages] and @data[:languages][:foreign] %>
309
+ <div class="foreign-languages item">
310
+ <span class="label">Foreign Languages</span>
311
+ <% @data[:languages][:foreign].each do |x| %>
312
+ <div class="foreign-language">
313
+ <div class="language"><%= x[:language] %></div>
314
+ <div class="level"><%= x[:level] %></div>
315
+ </div>
316
+ <% end %>
317
+ </div>
318
+ <% end %>
319
+ </div>
320
+ <% end %>
321
+
322
+ <% if @data[:references] %>
323
+ <div class="references">
324
+ <h2>References</h2>
325
+
326
+ <% (@data[:references] || []).each do |item| -%>
327
+ <div class="reference item">
328
+ <div class="name"><%= item[:name] %></div>
329
+ <div class="reference"><%= item[:reference] %></div>
330
+ </div>
331
+ <% end %>
332
+ </div>
333
+ <% end %>
334
+ </div>
335
+ </div>
336
+ </body>
337
+ </html>
data/templates/org.erb CHANGED
@@ -196,6 +196,10 @@
196
196
  <% if @data[:languages] %>
197
197
  * Languages
198
198
 
199
+ <% if @data[:languages] and @data[:languages][:assessment] %>
200
+ Assessment <%= @data[:languages][:assessment] %>
201
+ <% end %>
202
+
199
203
  <% if @data[:languages] and @data[:languages][:mother_tongues] -%>
200
204
  - Mother Tongue(s): <%= @data[:languages][:mother_tongues].map { |x| x[:language] }.join(",") %>
201
205
  <% end -%>
@@ -0,0 +1,354 @@
1
+ /* Europass Template - Bauhaus Modernist Art Movement Style */
2
+
3
+ @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap');
4
+
5
+ :root {
6
+ /* Bauhaus Primary Color Accents */
7
+ --bau-blue: #1d3557; /* Primary Structural Blue */
8
+ --bau-red: #e63946; /* Dynamic Focal Red */
9
+ --bau-yellow: #f4a261; /* Warm Secondary Ochre */
10
+ --bau-dark: #1d1e22; /* Off-Black Ink */
11
+ --bau-bg-light: #f8f9fa; /* Clean Minimal Canvas */
12
+ --bau-surface: #edf2f4; /* Geometric Header Block */
13
+ --bau-border: #d8e2dc; /* Subtle Alignment Line */
14
+
15
+ --text-main: #2b2d42;
16
+ --text-muted: #6c757d;
17
+ --white: #ffffff;
18
+ --radius-sharp: 2px;
19
+ }
20
+
21
+ * {
22
+ box-sizing: border-box;
23
+ margin: 0;
24
+ padding: 0;
25
+ }
26
+
27
+ body {
28
+ font-family: 'Plus Jakarta Sans', system-ui, -apple-system, sans-serif;
29
+ font-size: 13.5px;
30
+ line-height: 1.6;
31
+ color: var(--text-main);
32
+ background-color: #d8e2dc;
33
+ }
34
+
35
+ /* Main Single-Column Container */
36
+ .container {
37
+ display: flex;
38
+ flex-direction: column-reverse; /* Keeps Title top, Contact below, Main sections following */
39
+ max-width: 860px;
40
+ margin: 40px auto;
41
+ background-color: var(--white);
42
+ box-shadow: 0 12px 32px rgba(29, 30, 34, 0.08);
43
+ border-radius: var(--radius-sharp);
44
+ position: relative;
45
+ overflow: hidden;
46
+ border-top: 6px solid var(--bau-blue);
47
+ }
48
+
49
+ /* Europass Top Right Logo Alignment */
50
+ .container::after {
51
+ content: "";
52
+ position: absolute;
53
+ top: 35px;
54
+ right: 40px;
55
+ width: 155px;
56
+ height: 36px;
57
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 60'%3E%3Crect width='60' height='40' y='10' fill='%231d3557' rx='2'/%3E%3Cg fill='%23f4a261'%3E%3Cpolygon points='30,14 30.8,16.5 33.4,16.5 31.3,18 32.1,20.5 30,19 27.9,20.5 28.7,18 26.6,16.5 29.2,16.5'/%3E%3Cpolygon points='30,40 30.8,42.5 33.4,42.5 31.3,44 32.1,46.5 30,45 27.9,46.5 28.7,44 26.6,42.5 29.2,42.5'/%3E%3Cpolygon points='17,27 17.8,29.5 20.4,29.5 18.3,31 19.1,33.5 17,32 14.9,33.5 15.7,31 13.6,29.5 16.2,29.5'/%3E%3Cpolygon points='43,27 43.8,29.5 46.4,29.5 44.3,31 45.1,33.5 43,32 40.9,33.5 41.7,31 39.6,29.5 42.2,29.5'/%3E%3Cpolygon points='20.5,17.5 21.3,20 23.9,20 21.8,21.5 22.6,24 20.5,22.5 18.4,24 19.2,21.5 17.1,20 19.7,20'/%3E%3Cpolygon points='39.5,17.5 40.3,20 42.9,20 40.8,21.5 41.6,24 39.5,22.5 37.4,24 38.2,21.5 36.1,20 38.7,20'/%3E%3Cpolygon points='20.5,36.5 21.3,39 23.9,39 21.8,40.5 22.6,43 20.5,41.5 18.4,43 19.2,40.5 17.1,39 19.7,39'/%3E%3Cpolygon points='39.5,36.5 40.3,39 42.9,39 40.8,40.5 41.6,43 39.5,41.5 37.4,43 38.2,40.5 36.1,39 38.7,39'/%3E%3Cpolygon points='13.5,21 14.3,23.5 16.9,23.5 14.8,25 15.6,27.5 13.5,26 11.4,27.5 12.2,25 10.1,23.5 12.7,23.5'/%3E%3Cpolygon points='46.5,21 47.3,23.5 49.9,23.5 47.8,25 48.6,27.5 46.5,26 44.4,27.5 45.2,25 43.1,23.5 45.7,23.5'/%3E%3Cpolygon points='13.5,33 14.3,35.5 16.9,35.5 14.8,37 15.6,39.5 13.5,38 11.4,39.5 12.2,37 10.1,35.5 12.7,35.5'/%3E%3Cpolygon points='46.5,33 47.3,35.5 49.9,35.5 47.8,37 48.6,39.5 46.5,38 44.4,39.5 45.2,37 43.1,35.5 45.7,35.5'/%3E%3C/g%3E%3Cg transform='translate(75, 2)'%3E%3Cpath fill='%23e63946' d='M23.1 11.2C13.2 11.2 5 18.3 3.2 28h13.2c1.5-3.3 5-5.6 9-5.6 5.5 0 10 4.5 10 10s-4.5 10-10 10c-4 0-7.5-2.3-9-5.6H3.2c1.8 9.7 10 16.8 19.9 16.8 11.2 0 20.3-9.1 20.3-20.3S34.3 11.2 23.1 11.2z'/%3E%3Cpath fill='%231d3557' d='M62.4 12.1h-8.8v31.1h8.8V12.1zm21.3 0h-8.8v18.7c0 4.1-2.9 6.2-6.2 6.2s-6.2-2.1-6.2-6.2V12.1h-8.8v19.4c0 8.3 5.9 12.4 15 12.4s15-4.1 15-12.4V12.1zm17.9 11.7c-5.3 0-8.8 3.8-8.8 9.5s3.5 9.5 8.8 9.5 8.8-3.8 8.8-9.5zm0-6.6c10.1 0 17.6 7 17.6 16.1s-7.5 16.1-17.6 16.1S84 32.4 84 23.3s7.5-16.1 17.6-16.1zm29.8 6.6c-4.8 0-8 3.5-8 8.8s3.2 8.8 8 8.8 8-3.5 8-8.8-3.2-8.8-8-8.8zm-16.8-11.7h8.8v4.5c2.3-3.4 6.2-5.1 10.7-5.1 8.5 0 14.8 6.2 14.8 15.6s-6.3 15.6-14.8 15.6c-4.5 0-8.4-1.7-10.7-5.1v12h-8.8V12.1zm59.2 11.7c-4.8 0-8 3.5-8 8.8s3.2 8.8 8 8.8 8-3.5 8-8.8-3.2-8.8-8-8.8zm-16.8-11.7h8.8v4.5c2.3-3.4 6.2-5.1 10.7-5.1 8.5 0 14.8 6.2 14.8 15.6s-6.3 15.6-14.8 15.6c-4.5 0-8.4-1.7-10.7-5.1v4.5h-8.8V12.1z'/%3E%3C/g%3E%3C/svg%3E");
58
+ background-repeat: no-repeat;
59
+ background-size: contain;
60
+ z-index: 10;
61
+ }
62
+
63
+ .main {
64
+ width: 100%;
65
+ padding: 40px 45px 0 45px;
66
+ }
67
+
68
+ /* Bold Architectural Title Header */
69
+ .main .fullname-title {
70
+ font-size: 32px;
71
+ font-weight: 800;
72
+ color: var(--bau-dark);
73
+ letter-spacing: -0.5px;
74
+ padding-right: 180px;
75
+ margin-bottom: 24px;
76
+ text-transform: uppercase;
77
+ position: relative;
78
+ display: inline-block;
79
+ }
80
+
81
+ .main .fullname-title::after {
82
+ content: "";
83
+ display: block;
84
+ width: 60px;
85
+ height: 5px;
86
+ background-color: var(--bau-red);
87
+ margin-top: 10px;
88
+ }
89
+
90
+ /* Clean Structured Contact Block */
91
+ .contact-information {
92
+ width: 100%;
93
+ background-color: var(--bau-surface);
94
+ border-left: 5px solid var(--bau-blue);
95
+ border-radius: var(--radius-sharp);
96
+ padding: 22px 26px;
97
+ margin-bottom: 32px;
98
+ }
99
+
100
+ .contact-information .fullname-title {
101
+ display: none;
102
+ }
103
+
104
+ .contact-information h2 {
105
+ font-size: 11px;
106
+ font-weight: 800;
107
+ text-transform: uppercase;
108
+ letter-spacing: 1px;
109
+ color: var(--bau-blue);
110
+ margin-bottom: 14px;
111
+ }
112
+
113
+ .contact-information .section {
114
+ display: flex;
115
+ flex-wrap: wrap;
116
+ gap: 16px 32px;
117
+ margin-bottom: 0;
118
+ }
119
+
120
+ .contact-information .item {
121
+ margin-bottom: 0;
122
+ min-width: 180px;
123
+ flex: 1 1 180px;
124
+ }
125
+
126
+ .contact-information .label {
127
+ display: block;
128
+ font-size: 10px;
129
+ font-weight: 800;
130
+ text-transform: uppercase;
131
+ color: var(--bau-red);
132
+ letter-spacing: 0.5px;
133
+ }
134
+
135
+ .contact-information .value {
136
+ font-size: 13px;
137
+ color: var(--text-main);
138
+ font-weight: 600;
139
+ }
140
+
141
+ .contact-information .value .street,
142
+ .contact-information .value .postal-code,
143
+ .contact-information .value .city {
144
+ display: inline;
145
+ margin-right: 4px;
146
+ }
147
+
148
+ /* Section Structure */
149
+ .main .section {
150
+ margin-bottom: 32px;
151
+ }
152
+
153
+ /* Geometric Bauhaus Section Headings */
154
+ .main h2 {
155
+ font-size: 13px;
156
+ font-weight: 800;
157
+ text-transform: uppercase;
158
+ letter-spacing: 1px;
159
+ color: var(--white);
160
+ background-color: var(--bau-blue);
161
+ padding: 7px 14px;
162
+ display: inline-block;
163
+ border-radius: var(--radius-sharp);
164
+ margin-bottom: 20px;
165
+ border-left: 4px solid var(--bau-yellow);
166
+ }
167
+
168
+ /* Clean Separators for Main Content Items */
169
+ .main .item,
170
+ .main .visit {
171
+ margin-bottom: 20px;
172
+ padding-bottom: 16px;
173
+ border-bottom: 1px solid var(--bau-border);
174
+ }
175
+
176
+ .main .item:last-child,
177
+ .main .visit:last-child {
178
+ border-bottom: none;
179
+ padding-bottom: 0;
180
+ }
181
+
182
+ /* Modern Date Badges */
183
+ .period,
184
+ .year,
185
+ .date {
186
+ display: inline-block;
187
+ font-weight: 700;
188
+ font-size: 11px;
189
+ color: var(--bau-dark);
190
+ background-color: var(--bau-surface);
191
+ border-left: 3px solid var(--bau-red);
192
+ padding: 3px 10px;
193
+ margin-bottom: 8px;
194
+ letter-spacing: 0.3px;
195
+ }
196
+
197
+ .position,
198
+ .degree,
199
+ .subject {
200
+ font-size: 15px;
201
+ font-weight: 700;
202
+ color: var(--bau-dark);
203
+ }
204
+
205
+ .name,
206
+ .school,
207
+ .venue,
208
+ .publisher {
209
+ font-size: 13.5px;
210
+ font-weight: 600;
211
+ color: var(--bau-blue);
212
+ }
213
+
214
+ .authors {
215
+ font-style: italic;
216
+ color: var(--text-muted);
217
+ }
218
+
219
+ .address {
220
+ font-size: 12px;
221
+ color: var(--text-muted);
222
+ }
223
+
224
+ .summary {
225
+ margin-top: 8px;
226
+ font-size: 13px;
227
+ color: var(--text-main);
228
+ }
229
+
230
+ .summary p {
231
+ margin-bottom: 6px;
232
+ }
233
+
234
+ .summary p:last-child {
235
+ margin-bottom: 0;
236
+ }
237
+
238
+ /* Structured Language Grid Row */
239
+ .languages .item {
240
+ border-bottom: none;
241
+ padding-bottom: 0;
242
+ margin-bottom: 8px;
243
+ }
244
+
245
+ .mother-tongue,
246
+ .foreign-language {
247
+ display: flex;
248
+ align-items: center;
249
+ justify-content: space-between;
250
+ background-color: var(--bau-bg-light);
251
+ border: 1px solid var(--bau-border);
252
+ border-left: 4px solid var(--bau-blue);
253
+ padding: 8px 14px;
254
+ margin-bottom: 6px;
255
+ }
256
+
257
+ .language {
258
+ font-weight: 700;
259
+ color: var(--bau-dark);
260
+ text-transform: capitalize;
261
+ }
262
+
263
+ .level {
264
+ font-size: 10.5px;
265
+ font-weight: 800;
266
+ text-transform: uppercase;
267
+ color: var(--white);
268
+ background-color: var(--bau-red);
269
+ padding: 2px 8px;
270
+ border-radius: var(--radius-sharp);
271
+ }
272
+
273
+ .level:empty {
274
+ display: none;
275
+ }
276
+
277
+ /* Committee Section */
278
+ .committee.item {
279
+ display: flex;
280
+ justify-content: space-between;
281
+ align-items: center;
282
+ border-bottom: 1px solid var(--bau-border);
283
+ padding-bottom: 8px;
284
+ }
285
+
286
+ .committee .editions {
287
+ font-size: 12px;
288
+ font-weight: 700;
289
+ color: var(--bau-blue);
290
+ }
291
+
292
+ /* Print Optimization */
293
+ @media print {
294
+ @page {
295
+ size: A4;
296
+ margin: 12mm 15mm;
297
+ }
298
+
299
+ body {
300
+ background-color: var(--white);
301
+ font-size: 11px;
302
+ -webkit-print-color-adjust: exact;
303
+ print-color-adjust: exact;
304
+ }
305
+
306
+ .container {
307
+ max-width: 100%;
308
+ margin: 0;
309
+ box-shadow: none;
310
+ border: none;
311
+ border-top: 4px solid var(--bau-blue);
312
+ }
313
+
314
+ .main {
315
+ padding: 0;
316
+ }
317
+
318
+ .contact-information {
319
+ background-color: var(--bau-surface) !important;
320
+ padding: 12px 16px;
321
+ margin-bottom: 20px;
322
+ }
323
+
324
+ .main .fullname-title {
325
+ font-size: 22px;
326
+ padding-right: 140px;
327
+ margin-bottom: 18px;
328
+ }
329
+
330
+ .main h2 {
331
+ background-color: var(--bau-blue) !important;
332
+ }
333
+
334
+ .main .section {
335
+ margin-bottom: 16px;
336
+ page-break-inside: avoid;
337
+ }
338
+
339
+ .main .item,
340
+ .main .visit {
341
+ page-break-inside: avoid;
342
+ margin-bottom: 12px;
343
+ }
344
+
345
+ .period,
346
+ .year,
347
+ .date {
348
+ background-color: var(--bau-surface) !important;
349
+ }
350
+
351
+ .level {
352
+ background-color: var(--bau-red) !important;
353
+ }
354
+ }