simple-resume 0.1.9__py3-none-any.whl

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 (116) hide show
  1. simple_resume/__init__.py +132 -0
  2. simple_resume/core/__init__.py +47 -0
  3. simple_resume/core/colors.py +215 -0
  4. simple_resume/core/config.py +672 -0
  5. simple_resume/core/constants/__init__.py +207 -0
  6. simple_resume/core/constants/colors.py +98 -0
  7. simple_resume/core/constants/files.py +28 -0
  8. simple_resume/core/constants/layout.py +58 -0
  9. simple_resume/core/dependencies.py +258 -0
  10. simple_resume/core/effects.py +154 -0
  11. simple_resume/core/exceptions.py +261 -0
  12. simple_resume/core/file_operations.py +68 -0
  13. simple_resume/core/generate/__init__.py +21 -0
  14. simple_resume/core/generate/exceptions.py +69 -0
  15. simple_resume/core/generate/html.py +233 -0
  16. simple_resume/core/generate/pdf.py +659 -0
  17. simple_resume/core/generate/plan.py +131 -0
  18. simple_resume/core/hydration.py +55 -0
  19. simple_resume/core/importers/__init__.py +3 -0
  20. simple_resume/core/importers/json_resume.py +284 -0
  21. simple_resume/core/latex/__init__.py +60 -0
  22. simple_resume/core/latex/context.py +56 -0
  23. simple_resume/core/latex/conversion.py +227 -0
  24. simple_resume/core/latex/escaping.py +68 -0
  25. simple_resume/core/latex/fonts.py +93 -0
  26. simple_resume/core/latex/formatting.py +81 -0
  27. simple_resume/core/latex/sections.py +218 -0
  28. simple_resume/core/latex/types.py +84 -0
  29. simple_resume/core/markdown.py +127 -0
  30. simple_resume/core/models.py +102 -0
  31. simple_resume/core/palettes/__init__.py +38 -0
  32. simple_resume/core/palettes/common.py +73 -0
  33. simple_resume/core/palettes/data/default_palettes.json +58 -0
  34. simple_resume/core/palettes/exceptions.py +33 -0
  35. simple_resume/core/palettes/fetch_types.py +52 -0
  36. simple_resume/core/palettes/generators.py +137 -0
  37. simple_resume/core/palettes/registry.py +76 -0
  38. simple_resume/core/palettes/resolution.py +123 -0
  39. simple_resume/core/palettes/sources.py +162 -0
  40. simple_resume/core/paths.py +21 -0
  41. simple_resume/core/protocols.py +134 -0
  42. simple_resume/core/py.typed +0 -0
  43. simple_resume/core/render/__init__.py +37 -0
  44. simple_resume/core/render/manage.py +199 -0
  45. simple_resume/core/render/plan.py +405 -0
  46. simple_resume/core/result.py +226 -0
  47. simple_resume/core/resume.py +609 -0
  48. simple_resume/core/skills.py +60 -0
  49. simple_resume/core/validation.py +321 -0
  50. simple_resume/py.typed +0 -0
  51. simple_resume/shell/__init__.py +3 -0
  52. simple_resume/shell/assets/static/css/README.md +213 -0
  53. simple_resume/shell/assets/static/css/common.css +641 -0
  54. simple_resume/shell/assets/static/css/fonts.css +42 -0
  55. simple_resume/shell/assets/static/css/preview.css +82 -0
  56. simple_resume/shell/assets/static/css/print.css +99 -0
  57. simple_resume/shell/assets/static/fonts/AvenirLTStd-Book.otf +0 -0
  58. simple_resume/shell/assets/static/fonts/AvenirLTStd-Light.otf +0 -0
  59. simple_resume/shell/assets/static/fonts/AvenirLTStd-Medium.otf +0 -0
  60. simple_resume/shell/assets/static/fonts/AvenirLTStd-Oblique.otf +0 -0
  61. simple_resume/shell/assets/static/fonts/AvenirLTStd-Roman.otf +0 -0
  62. simple_resume/shell/assets/static/fonts/fontawesome/Font Awesome 6 Brands-Regular-400.otf +0 -0
  63. simple_resume/shell/assets/static/fonts/fontawesome/Font Awesome 6 Free-Solid-900.otf +0 -0
  64. simple_resume/shell/assets/static/images/default_profile_1.jpg +0 -0
  65. simple_resume/shell/assets/static/images/default_profile_2.png +0 -0
  66. simple_resume/shell/assets/static/schema.json +236 -0
  67. simple_resume/shell/assets/static/themes/README.md +208 -0
  68. simple_resume/shell/assets/static/themes/bold.yaml +64 -0
  69. simple_resume/shell/assets/static/themes/classic.yaml +64 -0
  70. simple_resume/shell/assets/static/themes/executive.yaml +64 -0
  71. simple_resume/shell/assets/static/themes/minimal.yaml +64 -0
  72. simple_resume/shell/assets/static/themes/modern.yaml +64 -0
  73. simple_resume/shell/assets/templates/html/cover.html +129 -0
  74. simple_resume/shell/assets/templates/html/demo.html +13 -0
  75. simple_resume/shell/assets/templates/html/resume_base.html +453 -0
  76. simple_resume/shell/assets/templates/html/resume_no_bars.html +316 -0
  77. simple_resume/shell/assets/templates/html/resume_with_bars.html +362 -0
  78. simple_resume/shell/cli/__init__.py +35 -0
  79. simple_resume/shell/cli/main.py +975 -0
  80. simple_resume/shell/cli/palette.py +75 -0
  81. simple_resume/shell/cli/random_palette_demo.py +407 -0
  82. simple_resume/shell/config.py +96 -0
  83. simple_resume/shell/effect_executor.py +211 -0
  84. simple_resume/shell/file_opener.py +308 -0
  85. simple_resume/shell/generate/__init__.py +37 -0
  86. simple_resume/shell/generate/core.py +650 -0
  87. simple_resume/shell/generate/lazy.py +284 -0
  88. simple_resume/shell/io_utils.py +199 -0
  89. simple_resume/shell/palettes/__init__.py +1 -0
  90. simple_resume/shell/palettes/fetch.py +63 -0
  91. simple_resume/shell/palettes/loader.py +321 -0
  92. simple_resume/shell/palettes/remote.py +179 -0
  93. simple_resume/shell/pdf_executor.py +52 -0
  94. simple_resume/shell/py.typed +0 -0
  95. simple_resume/shell/render/__init__.py +1 -0
  96. simple_resume/shell/render/latex.py +308 -0
  97. simple_resume/shell/render/operations.py +240 -0
  98. simple_resume/shell/resume_extensions.py +737 -0
  99. simple_resume/shell/runtime/__init__.py +7 -0
  100. simple_resume/shell/runtime/content.py +190 -0
  101. simple_resume/shell/runtime/generate.py +497 -0
  102. simple_resume/shell/runtime/lazy.py +138 -0
  103. simple_resume/shell/runtime/lazy_import.py +173 -0
  104. simple_resume/shell/service_locator.py +80 -0
  105. simple_resume/shell/services.py +256 -0
  106. simple_resume/shell/session/__init__.py +6 -0
  107. simple_resume/shell/session/config.py +35 -0
  108. simple_resume/shell/session/manage.py +386 -0
  109. simple_resume/shell/strategies.py +181 -0
  110. simple_resume/shell/themes/__init__.py +35 -0
  111. simple_resume/shell/themes/loader.py +230 -0
  112. simple_resume-0.1.9.dist-info/METADATA +201 -0
  113. simple_resume-0.1.9.dist-info/RECORD +116 -0
  114. simple_resume-0.1.9.dist-info/WHEEL +4 -0
  115. simple_resume-0.1.9.dist-info/entry_points.txt +5 -0
  116. simple_resume-0.1.9.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,641 @@
1
+ /**
2
+ * Common Styles for Simple Resume
3
+ *
4
+ * Shared styles for PDF and web preview.
5
+ * Uses CSS custom properties for theme customization.
6
+ *
7
+ * Required CSS custom properties (injected via <style> in template):
8
+ * --sidebar-color, --sidebar-width, --theme-color, --sidebar-text-color,
9
+ * --page-width, --page-height, --padding, --date2-color, --frame-color,
10
+ * --bar-background-color, --heading-icon-color, --section-icon-color,
11
+ * and various padding/sizing properties.
12
+ */
13
+
14
+ /* ========================================================================
15
+ RESET & BASE STYLES
16
+ ======================================================================== */
17
+
18
+ html, body {
19
+ margin: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ p, ul, li {
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+
28
+ body {
29
+ margin: 0 !important;
30
+ padding: 0 !important;
31
+ background: linear-gradient(
32
+ to right,
33
+ var(--sidebar-color) 0,
34
+ var(--sidebar-color) var(--sidebar-width),
35
+ white var(--sidebar-width),
36
+ white 100%
37
+ );
38
+ background-repeat: no-repeat;
39
+ background-size: 100% 100%;
40
+ }
41
+
42
+ html {
43
+ margin: 0 !important;
44
+ padding: 0 !important;
45
+ }
46
+
47
+ /* ========================================================================
48
+ TYPOGRAPHY
49
+ ======================================================================== */
50
+
51
+ h1, h2, h3, h4, h5, h6 {
52
+ font-weight: 700;
53
+ margin: 0px;
54
+ }
55
+
56
+ h1, h2, h3, h5 {
57
+ color: var(--theme-color);
58
+ }
59
+
60
+ h1 {
61
+ font-size: 30pt;
62
+ font-family: 'Avenir 65', 'Avenir 55', 'Helvetica Neue', Arial, sans-serif;
63
+ padding-top: 0;
64
+ padding-bottom: 0;
65
+ padding-right: var(--padding);
66
+ text-align: center;
67
+ border-bottom: none;
68
+ }
69
+
70
+ h2 {
71
+ font-size: 16pt;
72
+ font-family: 'Avenir 65', 'Avenir 55', 'Helvetica Neue', Arial, sans-serif;
73
+ width: var(--h2-width);
74
+ padding-top: 1.5mm;
75
+ padding-bottom: 0.5mm;
76
+ padding-left: var(--h2-padding-left-full);
77
+ page-break-after: avoid;
78
+ }
79
+
80
+ h2:first-of-type {
81
+ padding-top: var(--pitch-padding-top);
82
+ }
83
+
84
+ h3 {
85
+ font-size: 14pt;
86
+ font-family: 'Avenir 65', 'Avenir 55', 'Helvetica Neue', Arial, sans-serif;
87
+ padding-top: var(--h3-padding-top);
88
+ }
89
+
90
+ h4 {
91
+ font-size: 10pt;
92
+ font-family: 'Avenir 65', 'Avenir 55', 'Helvetica Neue', Arial, sans-serif;
93
+ }
94
+
95
+ h5 {
96
+ font-size: 10pt;
97
+ font-family: 'Avenir 65', 'Avenir 55', 'Helvetica Neue', Arial, sans-serif;
98
+ padding-right: var(--padding);
99
+ position: absolute;
100
+ right: 0px;
101
+ top: 0px;
102
+ text-align: right;
103
+ }
104
+
105
+ /* Sidebar typography */
106
+ .sidebar h5 {
107
+ color: var(--sidebar-text-color);
108
+ }
109
+
110
+ .sidebar h1,
111
+ .sidebar h2,
112
+ .sidebar h3,
113
+ .sidebar h4 {
114
+ color: var(--sidebar-text-color);
115
+ }
116
+
117
+ .sidebar p,
118
+ .sidebar ul,
119
+ .sidebar li,
120
+ .sidebar a {
121
+ color: var(--sidebar-text-color);
122
+ }
123
+
124
+ /* Sidebar entry items (bulleted lists) */
125
+ .sidebar-entry-item {
126
+ margin-left: 0.5mm;
127
+ position: relative;
128
+ padding-left: 2mm;
129
+ }
130
+
131
+ .sidebar-entry-bullet {
132
+ position: absolute;
133
+ left: 0;
134
+ top: 0;
135
+ color: var(--section-icon-color);
136
+ opacity: 0.6;
137
+ }
138
+
139
+ /* Links */
140
+ a {
141
+ color: inherit;
142
+ text-decoration: inherit;
143
+ }
144
+
145
+ /* Strong text / bold */
146
+ .markdown-strong {
147
+ font-family: 'Avenir 65', 'Avenir 55', 'Avenir 45', 'Helvetica Neue', Arial, sans-serif !important;
148
+ font-weight: 700 !important;
149
+ }
150
+
151
+ /* ========================================================================
152
+ LIST STYLES
153
+ ======================================================================== */
154
+
155
+ ul {
156
+ list-style-type: none;
157
+ }
158
+
159
+ li:before {
160
+ content: "- ";
161
+ }
162
+
163
+ /* ========================================================================
164
+ LAYOUT - PAGE STRUCTURE
165
+ ======================================================================== */
166
+
167
+ .frame {
168
+ padding-top: var(--frame-padding);
169
+ padding-bottom: var(--frame-padding);
170
+ padding-left: var(--frame-padding);
171
+ padding-right: var(--frame-padding);
172
+ background-color: var(--frame-color);
173
+ }
174
+
175
+ .page {
176
+ width: var(--page-width);
177
+ min-height: var(--page-height);
178
+ font-size: var(--description-font-size, 8.5pt);
179
+ line-height: 1;
180
+ font-family: 'Avenir 35', 'Helvetica Neue', Arial, sans-serif;
181
+ background: linear-gradient(
182
+ to right,
183
+ var(--sidebar-color) 0,
184
+ var(--sidebar-color) var(--sidebar-width),
185
+ white var(--sidebar-width),
186
+ white 100%
187
+ );
188
+ background-repeat: no-repeat;
189
+ background-size: 100% 100%;
190
+ margin: 0;
191
+ padding: 0;
192
+ position: relative;
193
+ border: none;
194
+ overflow: hidden;
195
+ height: var(--page-height);
196
+ max-height: var(--page-height);
197
+ }
198
+
199
+ .sidebar-container {
200
+ position: absolute;
201
+ left: 0;
202
+ top: 0;
203
+ width: var(--sidebar-width);
204
+ margin: 0;
205
+ padding: 0;
206
+ background-color: transparent;
207
+ page-break-inside: auto;
208
+ break-inside: auto;
209
+ overflow: visible;
210
+ }
211
+
212
+ .sidebar {
213
+ padding-top: var(--sidebar-padding-top);
214
+ padding-bottom: var(--sidebar-padding-bottom);
215
+ padding-left: var(--sidebar-padding-left);
216
+ padding-right: var(--sidebar-padding-right);
217
+ color: var(--sidebar-text-color);
218
+ background-color: var(--sidebar-color);
219
+ font-size: var(--sidebar-font-size, 8.5pt);
220
+ overflow: visible;
221
+ position: relative;
222
+ z-index: 10;
223
+ }
224
+
225
+ .body {
226
+ margin-left: var(--sidebar-width);
227
+ width: var(--body-width);
228
+ min-height: var(--page-height);
229
+ position: relative;
230
+ }
231
+
232
+ /* ========================================================================
233
+ CONTENT SECTIONS
234
+ ======================================================================== */
235
+
236
+ .pitch {
237
+ padding-top: var(--pitch-padding-top);
238
+ padding-bottom: var(--pitch-padding-bottom);
239
+ padding-left: var(--pitch-padding-left);
240
+ padding-right: var(--padding);
241
+ border-bottom: 2px solid var(--sidebar-color);
242
+ }
243
+
244
+ .pitch p {
245
+ font-size: 9pt;
246
+ line-height: 1.4;
247
+ }
248
+
249
+ /* ========================================================================
250
+ SKILLS & CONTACT COMPONENTS
251
+ ======================================================================== */
252
+
253
+ .skill-container {
254
+ padding-top: var(--skill-container-padding-top);
255
+ }
256
+
257
+ .skill-spacer {
258
+ padding-top: var(--sidebar-skill-spacer-padding, 0.5mm);
259
+ clear: both;
260
+ }
261
+
262
+ /* Key skills item styling */
263
+ .keyskills-item {
264
+ margin-bottom: var(--keyskills-item-margin-bottom, 0.5mm);
265
+ margin-left: 0.5mm;
266
+ position: relative;
267
+ padding-left: 2mm;
268
+ }
269
+
270
+ .keyskills-bullet {
271
+ position: absolute;
272
+ left: 0;
273
+ top: 0;
274
+ opacity: 0.6;
275
+ }
276
+
277
+ .contact-block {
278
+ display: flex;
279
+ align-items: flex-start;
280
+ width: 100%;
281
+ overflow: hidden; /* WeasyPrint: ensure proper containment */
282
+ }
283
+
284
+ .contact-block .icon {
285
+ flex-shrink: 0;
286
+ width: var(--contact-icon-size, 5mm);
287
+ height: var(--contact-icon-size, 5mm);
288
+ margin-right: 2mm;
289
+ }
290
+
291
+ .contact-block .icon svg {
292
+ width: var(--contact-icon-size, 5mm);
293
+ height: var(--contact-icon-size, 5mm);
294
+ display: block;
295
+ }
296
+
297
+ .contact-block .icon svg * {
298
+ fill: currentColor;
299
+ }
300
+
301
+ .contact-container {
302
+ flex: 1;
303
+ min-width: 0;
304
+ overflow-wrap: break-word;
305
+ overflow: hidden; /* WeasyPrint: prevent text overflow issues */
306
+ padding-left: var(--contact-text-padding-left, 0);
307
+ }
308
+
309
+ .contact-text {
310
+ font-size: var(--sidebar-font-size, 8.5pt);
311
+ word-break: break-word;
312
+ overflow-wrap: break-word;
313
+ hyphens: auto;
314
+ }
315
+
316
+ /* ========================================================================
317
+ GRID CONTENT LAYOUT
318
+ ======================================================================== */
319
+
320
+ .content {
321
+ display: grid;
322
+ grid-template-columns: var(--date-container-width) auto;
323
+ column-gap: 3mm;
324
+ padding-top: 0.5mm;
325
+ align-items: flex-start;
326
+ page-break-inside: auto;
327
+ }
328
+
329
+ .spacer {
330
+ clear: both;
331
+ }
332
+
333
+ .body .spacer {
334
+ clear: left;
335
+ }
336
+
337
+ .date-container {
338
+ padding-left: 3mm;
339
+ }
340
+
341
+ .content .date-container {
342
+ grid-column: 1;
343
+ display: flex;
344
+ flex-direction: column;
345
+ align-items: center;
346
+ }
347
+
348
+ .content .description-container {
349
+ grid-column: 2;
350
+ }
351
+
352
+ .description-container {
353
+ margin-bottom: var(--entry-margin-bottom, 4mm);
354
+ position: relative;
355
+ padding-left: var(--description-container-padding-left);
356
+ padding-right: var(--padding);
357
+ border-left: 2px solid var(--sidebar-color);
358
+ }
359
+
360
+ .entry-spacer {
361
+ clear: both;
362
+ height: 1.5mm;
363
+ }
364
+
365
+ /* ========================================================================
366
+ DATE STYLING
367
+ ======================================================================== */
368
+
369
+ .date2, .description {
370
+ padding-top: 0.5mm;
371
+ }
372
+
373
+ .date1 {
374
+ font-size: var(--date-font-size, 9pt);
375
+ }
376
+
377
+ .date2 {
378
+ font-size: calc(var(--date-font-size, 9pt) - 1pt);
379
+ color: var(--date2-color);
380
+ }
381
+
382
+ .date1, .date2 {
383
+ text-align: center;
384
+ }
385
+
386
+ /* ========================================================================
387
+ DESCRIPTION & CONTENT
388
+ ======================================================================== */
389
+
390
+ .description {
391
+ line-height: 1.35;
392
+ }
393
+
394
+ .description p,
395
+ .description li {
396
+ line-height: 1.2;
397
+ }
398
+
399
+ /* ========================================================================
400
+ TECH STACK
401
+ ======================================================================== */
402
+
403
+ .tech-stack-label {
404
+ font-size: 8pt;
405
+ font-family: 'Avenir 45', 'Helvetica Neue', Arial, sans-serif;
406
+ color: var(--date2-color);
407
+ margin: 0;
408
+ }
409
+
410
+ .tech-stack-value {
411
+ font-size: 8pt;
412
+ font-family: 'Avenir 45', 'Helvetica Neue', Arial, sans-serif;
413
+ line-height: 1.4;
414
+ margin: 0;
415
+ }
416
+
417
+ .tech-stack-label-container {
418
+ align-self: center;
419
+ padding-top: 2mm;
420
+ }
421
+
422
+ .tech-stack-value-container {
423
+ border-left: none;
424
+ padding-left: var(--description-container-padding-left);
425
+ padding-top: 2mm;
426
+ padding-bottom: var(--tech-stack-margin-bottom, 2mm);
427
+ }
428
+
429
+ /* ========================================================================
430
+ HEADING ROW (TITLE + COMPANY)
431
+ ======================================================================== */
432
+
433
+ .heading-row {
434
+ display: grid;
435
+ grid-template-columns: minmax(0, 1fr) auto;
436
+ column-gap: 3mm;
437
+ row-gap: 0.5mm;
438
+ align-items: flex-start;
439
+ width: 100%;
440
+ }
441
+
442
+ .heading-title {
443
+ min-width: 0;
444
+ }
445
+
446
+ .heading-title h4,
447
+ .heading-title p {
448
+ margin-top: 0;
449
+ }
450
+
451
+ .heading-company {
452
+ justify-self: end;
453
+ text-align: right;
454
+ min-width: 0;
455
+ }
456
+
457
+ .heading-company h5 {
458
+ margin: 0 !important;
459
+ word-wrap: break-word;
460
+ overflow-wrap: anywhere;
461
+ position: static;
462
+ right: auto;
463
+ top: auto;
464
+ padding-right: 0;
465
+ text-align: right;
466
+ }
467
+
468
+ /* ========================================================================
469
+ SKILL BARS
470
+ ======================================================================== */
471
+
472
+ .bar-container {
473
+ padding-top: 1mm;
474
+ }
475
+
476
+ .bar-grey, .bar-blue {
477
+ height: 1mm;
478
+ float: left;
479
+ }
480
+
481
+ .bar-grey {
482
+ background-color: var(--bar-background-color);
483
+ }
484
+
485
+ .bar-blue {
486
+ background-color: var(--theme-color);
487
+ }
488
+
489
+ /* ========================================================================
490
+ ICONS
491
+ ======================================================================== */
492
+
493
+ .icon {
494
+ width: var(--contact-icon-size, 5mm);
495
+ height: var(--contact-icon-size, 5mm);
496
+ display: flex;
497
+ align-items: center;
498
+ justify-content: center;
499
+ color: var(--sidebar-text-color);
500
+ flex-shrink: 0;
501
+ line-height: 0;
502
+ margin-top: var(--contact-icon-margin-top, 0.5mm);
503
+ /* margin-right removed - spacing handled by gap in .contact-block */
504
+ }
505
+
506
+ .icon svg {
507
+ width: 100%;
508
+ height: 100%;
509
+ display: block;
510
+ }
511
+
512
+ .icon svg * {
513
+ fill: currentColor;
514
+ }
515
+
516
+ /* Inline icons for section headings */
517
+ .section-heading-icon .icon-inline {
518
+ width: var(--section-icon-design-size);
519
+ height: var(--section-icon-design-size);
520
+ display: flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ line-height: 0;
524
+ flex-shrink: 0;
525
+ position: relative;
526
+ transform: translate(var(--section-icon-design-x-offset), var(--section-icon-design-y-offset)) scale(var(--section-icon-design-scale, 1));
527
+ color: var(--section-icon-color);
528
+ }
529
+
530
+ /* Contact icons in sidebar */
531
+ .contact-icon {
532
+ color: var(--section-icon-color);
533
+ opacity: 0.8;
534
+ }
535
+
536
+ .icon-inline svg {
537
+ width: 100%;
538
+ height: 100%;
539
+ display: block;
540
+ }
541
+
542
+ .icon-inline svg * {
543
+ fill: currentColor;
544
+ }
545
+
546
+ /* ========================================================================
547
+ PROFILE IMAGE
548
+ ======================================================================== */
549
+
550
+ .profile {
551
+ width: var(--profile-width);
552
+ height: var(--profile-width);
553
+ padding-bottom: var(--profile-image-padding-bottom);
554
+ }
555
+
556
+ /* ========================================================================
557
+ TIMELINE & SECTION HEADINGS
558
+ ======================================================================== */
559
+
560
+ .timeline-icon {
561
+ position: absolute;
562
+ left: -6mm;
563
+ top: -16mm;
564
+ width: 10mm;
565
+ height: 10mm;
566
+ border-radius: 50%;
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: center;
570
+ z-index: 10;
571
+ background-color: var(--sidebar-color);
572
+ border: 2px solid var(--sidebar-color);
573
+ }
574
+
575
+ .timeline-icon .icon {
576
+ width: 5mm;
577
+ height: 5mm;
578
+ color: var(--section-icon-color);
579
+ }
580
+
581
+ .timeline-icon .icon svg {
582
+ width: 100%;
583
+ height: 100%;
584
+ }
585
+
586
+ .section-heading {
587
+ display: flex;
588
+ align-items: center;
589
+ margin: var(--section-heading-margin-top, 5mm) 0 var(--section-heading-margin-bottom, 1mm);
590
+ }
591
+
592
+ .section-heading-marker {
593
+ position: relative;
594
+ width: var(--section-icon-circle-size);
595
+ height: var(--section-icon-circle-size);
596
+ display: block;
597
+ margin-left: var(--section-heading-marker-margin-left);
598
+ flex: 0 0 var(--section-icon-circle-size);
599
+ overflow: visible;
600
+ z-index: 10;
601
+ }
602
+
603
+ .section-heading-marker::after {
604
+ content: "";
605
+ position: absolute;
606
+ top: 100%;
607
+ left: 50%;
608
+ transform: translateX(-50%);
609
+ height: var(--section-heading-marker-line-height);
610
+ border-left: 2px solid var(--sidebar-color);
611
+ }
612
+
613
+ .section-heading-icon {
614
+ width: var(--section-icon-circle-size);
615
+ height: var(--section-icon-circle-size);
616
+ border-radius: 50%;
617
+ background-color: var(--sidebar-color);
618
+ border: 2px solid var(--sidebar-color);
619
+ color: var(--heading-icon-color);
620
+ display: flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ box-sizing: border-box;
624
+ position: relative;
625
+ transform: translateX(var(--section-icon-circle-x-offset));
626
+ z-index: 10;
627
+ line-height: 0;
628
+ overflow: visible;
629
+ }
630
+
631
+ .section-heading-text {
632
+ display: inline-flex;
633
+ align-items: center;
634
+ line-height: 1;
635
+ margin-left: var(--section-heading-text-margin);
636
+ color: var(--section-header-color) !important;
637
+ }
638
+
639
+ .section-heading + .content {
640
+ padding-top: 0;
641
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Font Face Declarations for Simple Resume
3
+ *
4
+ * These fonts are loaded from static/fonts/ directory.
5
+ * Path resolution: From templates, use ../static/fonts/
6
+ * From CSS in static/css/, use ../fonts/
7
+ */
8
+
9
+ @font-face {
10
+ font-family: "Avenir 35";
11
+ src: url("../fonts/AvenirLTStd-Light.otf");
12
+ font-weight: 300;
13
+ font-style: normal;
14
+ }
15
+
16
+ @font-face {
17
+ font-family: "Avenir 45";
18
+ src: url("../fonts/AvenirLTStd-Book.otf");
19
+ font-weight: 400;
20
+ font-style: normal;
21
+ }
22
+
23
+ @font-face {
24
+ font-family: "Avenir 55";
25
+ src: url("../fonts/AvenirLTStd-Roman.otf");
26
+ font-weight: 500;
27
+ font-style: normal;
28
+ }
29
+
30
+ @font-face {
31
+ font-family: "Avenir 65";
32
+ src: url("../fonts/AvenirLTStd-Medium.otf");
33
+ font-weight: 700;
34
+ font-style: normal;
35
+ }
36
+
37
+ @font-face {
38
+ font-family: "Avenir 46 Oblique";
39
+ src: url("../fonts/AvenirLTStd-Oblique.otf");
40
+ font-weight: 400;
41
+ font-style: oblique;
42
+ }