jekyll-theme-resume 1.3.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.
- checksums.yaml +7 -0
- data/403.html +6 -0
- data/404.html +6 -0
- data/500.html +6 -0
- data/CHANGELOG.md +498 -0
- data/CODE_OF_CONDUCT.md +92 -0
- data/LICENSE.txt +22 -0
- data/README.md +184 -0
- data/SECURITY.md +30 -0
- data/_config.sample.yml +329 -0
- data/_data/locales/ar.yml +85 -0
- data/_data/locales/de.yml +86 -0
- data/_data/locales/en.yml +84 -0
- data/_data/locales/es.yml +86 -0
- data/_data/locales/fr.yml +86 -0
- data/_data/locales/ur.yml +86 -0
- data/_data/social_networks.yml +83 -0
- data/_includes/analytics-body.html +12 -0
- data/_includes/analytics-head.html +36 -0
- data/_includes/avatar.html +84 -0
- data/_includes/dark-mode-toggle.html +202 -0
- data/_includes/data-loader.html +42 -0
- data/_includes/date-formatter.html +63 -0
- data/_includes/grouped-item-list.html +53 -0
- data/_includes/hreflang.html +58 -0
- data/_includes/language-switcher.html +72 -0
- data/_includes/print-social-links.html +23 -0
- data/_includes/resume-section.html +547 -0
- data/_includes/safe-url.html +21 -0
- data/_includes/shared-head.html +51 -0
- data/_includes/social-links.html +54 -0
- data/_includes/vendors/svg-icons/ATTRIBUTION.md +34 -0
- data/_includes/vendors/svg-icons/dev.svg +3 -0
- data/_includes/vendors/svg-icons/dribbble-symbol.svg +3 -0
- data/_includes/vendors/svg-icons/envelope.svg +4 -0
- data/_includes/vendors/svg-icons/facebook.svg +3 -0
- data/_includes/vendors/svg-icons/flickr.svg +4 -0
- data/_includes/vendors/svg-icons/github.svg +3 -0
- data/_includes/vendors/svg-icons/globe-1.svg +3 -0
- data/_includes/vendors/svg-icons/instagram.svg +4 -0
- data/_includes/vendors/svg-icons/linkedin.svg +3 -0
- data/_includes/vendors/svg-icons/medium.svg +3 -0
- data/_includes/vendors/svg-icons/phone.svg +13 -0
- data/_includes/vendors/svg-icons/pinterest.svg +3 -0
- data/_includes/vendors/svg-icons/postcard.svg +14 -0
- data/_includes/vendors/svg-icons/telegram.svg +3 -0
- data/_includes/vendors/svg-icons/whatsapp.svg +3 -0
- data/_includes/vendors/svg-icons/x.svg +3 -0
- data/_includes/vendors/svg-icons/youtube.svg +3 -0
- data/_layouts/default.html +65 -0
- data/_layouts/error.html +138 -0
- data/_layouts/profile.html +123 -0
- data/_layouts/resume.html +238 -0
- data/_plugins/error_pages_generator.rb +71 -0
- data/_plugins/json_resume_generator.rb +79 -0
- data/_plugins/resume_pages_generator.rb +71 -0
- data/_plugins/resume_validator.rb +40 -0
- data/_sass/_all-pages.scss +335 -0
- data/_sass/_base.scss +130 -0
- data/_sass/_dark-mode.scss +387 -0
- data/_sass/_layout.scss +116 -0
- data/_sass/_mixins.scss +136 -0
- data/_sass/_normalize.scss +379 -0
- data/_sass/_profile-page.scss +60 -0
- data/_sass/_resume-ltr.scss +436 -0
- data/_sass/_resume-rtl.scss +91 -0
- data/_sass/_variables.scss +45 -0
- data/assets/css/cv-ltr.scss +31 -0
- data/assets/css/cv-rtl.scss +36 -0
- data/assets/css/main.scss +8 -0
- data/assets/css/profile.scss +9 -0
- data/assets/favicon/resume/about.txt +6 -0
- data/assets/favicon/resume/android-chrome-192x192.png +0 -0
- data/assets/favicon/resume/android-chrome-512x512.png +0 -0
- data/assets/favicon/resume/apple-touch-icon.png +0 -0
- data/assets/favicon/resume/favicon-16x16.png +0 -0
- data/assets/favicon/resume/favicon-32x32.png +0 -0
- data/assets/favicon/resume/favicon.ico +0 -0
- data/assets/favicon/resume/site.webmanifest +1 -0
- data/bin/validate-resume +89 -0
- data/bin/verify +27 -0
- data/docs/README.md +89 -0
- data/docs/explanation/accessibility-decisions.md +27 -0
- data/docs/explanation/architecture.md +44 -0
- data/docs/explanation/dark-mode-approach.md +25 -0
- data/docs/explanation/data-driven-model.md +25 -0
- data/docs/explanation/multilingual-and-rtl-design.md +40 -0
- data/docs/how-to/add-a-language.md +57 -0
- data/docs/how-to/add-a-section.md +35 -0
- data/docs/how-to/add-a-social-platform.md +32 -0
- data/docs/how-to/add-a-test.md +34 -0
- data/docs/how-to/create-a-custom-layout.md +64 -0
- data/docs/how-to/enable-dark-mode.md +43 -0
- data/docs/how-to/link-translations-with-hreflang.md +25 -0
- data/docs/how-to/migrate-v0.9-to-v1.0.md +46 -0
- data/docs/how-to/override-locale-strings.md +51 -0
- data/docs/how-to/override-sass-partials.md +26 -0
- data/docs/how-to/proof-built-html.md +22 -0
- data/docs/how-to/publish-json-resume.md +38 -0
- data/docs/how-to/show-language-proficiency-in-header.md +13 -0
- data/docs/how-to/switch-resume-versions.md +42 -0
- data/docs/how-to/troubleshoot-builds.md +39 -0
- data/docs/how-to/validate-in-ci.md +38 -0
- data/docs/how-to/verify-accessibility.md +28 -0
- data/docs/reference/accessibility-coverage.md +39 -0
- data/docs/reference/config.md +378 -0
- data/docs/reference/data-schemas.md +529 -0
- data/docs/reference/glossary.md +39 -0
- data/docs/reference/includes.md +197 -0
- data/docs/reference/json-resume-fields.md +148 -0
- data/docs/reference/layouts.md +144 -0
- data/docs/reference/locale-keys.md +76 -0
- data/docs/reference/repository-map.md +83 -0
- data/docs/reference/sass-tokens.md +279 -0
- data/docs/reference/testing-suites.md +62 -0
- data/docs/reference/validator-cli.md +203 -0
- data/docs/tutorials/getting-started.md +173 -0
- data/lib/jekyll-theme-resume/json_resume_exporter.rb +334 -0
- data/lib/jekyll-theme-resume/resume_validator.rb +853 -0
- data/lib/jekyll-theme-resume/schemas/LICENSE.md +21 -0
- data/lib/jekyll-theme-resume/schemas/json_resume_v1.0.0.json +500 -0
- data/lib/jekyll-theme-resume.rb +21 -0
- metadata +371 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Component: Social & Professional Links List
|
|
3
|
+
- Purpose: Renders interactive social network and contact links defined in `site.social_links` in `_config.yml`.
|
|
4
|
+
- Supported Platforms: Email, GitHub, LinkedIn, Telegram, Twitter/X, Medium, Dribbble, Facebook, Instagram,
|
|
5
|
+
Website, WhatsApp, Dev.to, Flickr, Pinterest, YouTube.
|
|
6
|
+
|
|
7
|
+
Architecture & Implementation Details:
|
|
8
|
+
1. Bundled Local SVGs: Vector icons are sourced locally from `_includes/vendors/svg-icons/`.
|
|
9
|
+
Inlining SVGs eliminates external network dependencies and enables direct CSS fill/color inheritance.
|
|
10
|
+
2. Security & SEO Best Practices:
|
|
11
|
+
- `target="_blank"`: Opens external profiles in a new tab.
|
|
12
|
+
- `rel="noopener nofollow noreferrer"`:
|
|
13
|
+
- `noopener`: Prevents the target page from accessing `window.opener`, neutralizing reverse tab-nabbing exploits.
|
|
14
|
+
- `noreferrer`: Suppresses sending the HTTP Referer header to external servers.
|
|
15
|
+
- `nofollow`: Informs search engine crawlers not to endorse outbound social links.
|
|
16
|
+
3. Schema.org Microdata Semantics:
|
|
17
|
+
- Social profiles use `itemprop="sameAs"` to verify alternative digital identities of the person.
|
|
18
|
+
- Direct communication channels and websites use `itemprop="url"`.
|
|
19
|
+
4. Hover State & Underline Suppression:
|
|
20
|
+
- The anchor element carries class `icon-link`.
|
|
21
|
+
- In `_sass/_all-pages.scss` and `_sass/_profile-page.scss`, `.icon-link`, `.icon-link:hover`, and `.icon-link:focus`
|
|
22
|
+
explicitly enforce `text-decoration: none !important;` to prevent default browser link underlines from
|
|
23
|
+
appearing underneath SVG icons.
|
|
24
|
+
- `display: inline-flex; line-height: 0; align-items: center;` eliminates unwanted baseline font descent spacing.
|
|
25
|
+
5. WCAG 2.2 Accessibility:
|
|
26
|
+
- Every icon anchor includes `aria-label="<Platform>"`, `title="<Platform>"`, and a visually-hidden `<span class="sr-only"><Platform></span>`.
|
|
27
|
+
- The platform name comes from the page locale's `ui.social_labels.<key>`, falling back to the
|
|
28
|
+
English `label` in `_data/social_networks.yml`. Variables are `social_`-prefixed because
|
|
29
|
+
includes share scope with the calling layout.
|
|
30
|
+
6. URL Safety: values pass through safe-url.html (email: bare address or mailto:; others: http/https only);
|
|
31
|
+
a value with any other scheme renders no link at all.
|
|
32
|
+
7. Network List: platform key, icon filename, itemprop, and label all come from
|
|
33
|
+
`_data/social_networks.yml` (one entry per platform) instead of one conditional
|
|
34
|
+
block per platform here; see that file to add a new platform.
|
|
35
|
+
{%- endcomment -%}
|
|
36
|
+
|
|
37
|
+
{%- assign social_lang = page.lang | default: site.default_lang | default: 'en' -%}
|
|
38
|
+
{%- assign social_locale = site.data.locales[social_lang] | default: site.data.locales[site.default_lang] -%}
|
|
39
|
+
{% for network in site.data.social_networks %}
|
|
40
|
+
{% if network.key == "email" %}{% assign social_schemes = "mailto" %}{% else %}{% assign social_schemes = "http,https" %}{% endif %}
|
|
41
|
+
{% assign social_raw = site.social_links[network.key] %}
|
|
42
|
+
{% include safe-url.html url=social_raw schemes=social_schemes %}
|
|
43
|
+
{% assign value = safe_url %}
|
|
44
|
+
{% if value %}
|
|
45
|
+
{%- assign social_label = social_locale.ui.social_labels[network.key] | default: network.label -%}
|
|
46
|
+
<li class="icon-link-item">
|
|
47
|
+
{% if network.key == "email" %}
|
|
48
|
+
<a href="{% unless value contains ':' %}mailto:{% endunless %}{{ value | escape }}" class="icon-link" itemprop="{{ network.itemprop }}" aria-label="{{ social_label }}" title="{{ social_label }}">{% include vendors/svg-icons/{{ network.icon }}.svg %}<span class="sr-only">{{ social_label }}</span></a>
|
|
49
|
+
{% else %}
|
|
50
|
+
<a href="{{ value | escape }}" class="icon-link" itemprop="{{ network.itemprop }}" target="_blank" rel="noopener nofollow noreferrer" aria-label="{{ social_label }}" title="{{ social_label }}">{% include vendors/svg-icons/{{ network.icon }}.svg %}<span class="sr-only">{{ social_label }}</span></a>
|
|
51
|
+
{% endif %}
|
|
52
|
+
</li>
|
|
53
|
+
{% endif %}
|
|
54
|
+
{% endfor %}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SVG Icon Attribution
|
|
2
|
+
|
|
3
|
+
Every SVG in this folder comes from [Lineicons](https://lineicons.com), licensed under the
|
|
4
|
+
[MIT License](https://lineicons.com/license). Packaged with the gem for offline/attribution
|
|
5
|
+
purposes; not built into any consuming site's `_site/` output (Jekyll never copies `_includes/`
|
|
6
|
+
into a build — files here are only reachable through `{% include %}`).
|
|
7
|
+
|
|
8
|
+
Files were merged into this single flat folder from two previously separate, version-numbered
|
|
9
|
+
folders. Original folder (version) each file shipped in:
|
|
10
|
+
|
|
11
|
+
| File | Original folder (version) |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `phone.svg` | `vendors/lineicons-v4.0/` |
|
|
14
|
+
| `postcard.svg` | `vendors/lineicons-v4.0/` |
|
|
15
|
+
| `envelope.svg` | `vendors/lineicons-v5.1/` |
|
|
16
|
+
| `github.svg` | `vendors/lineicons-v5.1/` |
|
|
17
|
+
| `linkedin.svg` | `vendors/lineicons-v5.1/` |
|
|
18
|
+
| `telegram.svg` | `vendors/lineicons-v5.1/` |
|
|
19
|
+
| `x.svg` | `vendors/lineicons-v5.1/` |
|
|
20
|
+
| `medium.svg` | `vendors/lineicons-v5.1/` |
|
|
21
|
+
| `dribbble-symbol.svg` | `vendors/lineicons-v5.1/` |
|
|
22
|
+
| `facebook.svg` | `vendors/lineicons-v5.1/` |
|
|
23
|
+
| `instagram.svg` | `vendors/lineicons-v5.1/` |
|
|
24
|
+
| `globe-1.svg` | `vendors/lineicons-v5.1/` |
|
|
25
|
+
| `whatsapp.svg` | `vendors/lineicons-v5.1/` |
|
|
26
|
+
| `dev.svg` | `vendors/lineicons-v5.1/` |
|
|
27
|
+
| `flickr.svg` | `vendors/lineicons-v5.1/` |
|
|
28
|
+
| `pinterest.svg` | `vendors/lineicons-v5.1/` |
|
|
29
|
+
| `youtube.svg` | `vendors/lineicons-v5.1/` |
|
|
30
|
+
|
|
31
|
+
To add a new icon (from Lineicons or elsewhere), drop the SVG into this folder and reference it
|
|
32
|
+
by filename — from `_data/social_networks.yml` for a social platform, or directly via
|
|
33
|
+
`{% include vendors/svg-icons/<name>.svg %}` elsewhere. If it comes from a licensed icon set,
|
|
34
|
+
add a row to the table above (or a new one, if the source isn't Lineicons).
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M7.84839 10.0841C7.67419 9.968 7.52903 9.90994 7.35484 9.90994H6.65806V14.0616H7.35484C7.52903 14.0616 7.67419 14.0325 7.84839 13.8874C8.02258 13.7712 8.05161 13.597 8.05161 13.3648V10.5486C8.05161 10.3745 7.99355 10.2003 7.84839 10.0841ZM19.2 3.0293H4.8C3.8129 3.0293 3 3.8422 3 4.8293V19.2583C3 20.1583 3.8129 20.9712 4.8 20.9712H19.2581C20.2452 20.9712 21 20.1874 21 19.2293V4.8293C20.971 3.8422 20.1871 3.0293 19.2 3.0293ZM9.2129 13.3938C9.2129 14.1777 8.71935 15.3099 7.29677 15.3099H5.43871V8.66155H7.35484C8.77742 8.66155 9.27097 9.79381 9.27097 10.5777L9.2129 13.3938ZM13.1903 9.88091H11.071V11.4196H12.3774V12.6099H11.071V14.1486H13.1903V15.339H10.6935C10.2581 15.339 9.88064 15.0196 9.82258 14.5551V9.50349C9.82258 9.068 10.1419 8.69058 10.6065 8.63252H13.1903V9.88091ZM17.371 14.439C16.8484 15.6583 15.8903 15.4261 15.4548 14.439L13.9161 8.63252H15.2516L16.4419 13.1906L17.6323 8.66155H18.9387L17.371 14.439Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M11.9835 2C6.46282 2 2 6.46281 2 11.9835C2 17.5041 6.46282 22 11.9835 22C17.5041 22 22 17.5041 22 11.9835C22 6.46281 17.5041 2 11.9835 2ZM20.4793 12.281C18.5289 12.1488 16.4793 12.3471 14.4628 12.843C14.1653 12.0496 13.8678 11.2893 13.5372 10.5289C15.6198 9.83471 17.5703 8.80992 19.2562 7.58678C20.0496 8.87603 20.4793 10.3967 20.4793 12.0165C20.5124 12.0826 20.4793 12.1818 20.4793 12.281ZM18.3636 6.36364C16.7769 7.55372 14.8926 8.5124 12.876 9.1405C11.8182 7.02479 10.6281 5.23967 9.37191 3.85124C10.1984 3.58678 11.0579 3.45455 11.9835 3.45455C14.5289 3.4876 16.8099 4.61157 18.3636 6.36364ZM7.91736 4.5124C9.17356 5.7686 10.3636 7.4876 11.4215 9.57025C8.80992 10.1983 6.13224 10.2975 3.71901 9.86777C4.34711 7.55372 5.86778 5.63636 7.91736 4.5124ZM3.4876 11.3223C4.57851 11.5537 5.70249 11.6529 6.82645 11.6529C8.54546 11.6529 10.3306 11.4215 12.0827 10.9587C12.4132 11.6859 12.7438 12.4463 13.0083 13.2397C10.0992 14.1653 7.52067 15.6198 5.47108 17.5041C4.24793 15.9835 3.4876 14.0661 3.4876 11.9835C3.4876 11.7521 3.4876 11.5537 3.4876 11.3223ZM6.52893 18.5289C8.41323 16.8099 10.8265 15.4545 13.5041 14.6281C13.6033 14.9587 13.7025 15.2893 13.8017 15.5868C14.2314 17.0744 14.562 18.562 14.7934 19.9835C13.9008 20.281 12.9752 20.4793 11.9835 20.4793C9.90083 20.5124 8.01654 19.7521 6.52893 18.5289ZM16.2149 19.3554C15.9835 18 15.6529 16.5785 15.2562 15.157C15.157 14.8264 15.0579 14.5289 14.9587 14.1983C16.7438 13.7686 18.595 13.6033 20.3141 13.7025C19.8182 16.1488 18.2645 18.1653 16.2149 19.3554Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M3.73586 4.5C2.7772 4.5 2.00008 5.27724 2.00025 6.2359L2.00024 6.26829C2.01058 6.81904 2.28193 7.33272 2.73193 7.65165L2.7428 7.65929L10.713 13.2171C11.3896 13.689 12.2608 13.7479 12.9861 13.3941C13.0897 13.3435 13.1903 13.2845 13.287 13.2171L21.2569 7.65949C21.7224 7.33485 21.9998 6.8031 21.9998 6.23554C21.9996 5.27702 21.2229 4.5 20.2644 4.5H3.73586Z" fill="#323544"/>
|
|
3
|
+
<path opacity="0.4" d="M22.0001 8.96973L14.145 14.4473C12.8562 15.346 11.1438 15.346 9.85507 14.4473L2.00023 8.96991L2 17.2498C2 18.4924 3.00736 19.4998 4.25 19.4998H19.75C20.9926 19.4998 22 18.4924 22 17.2498L22.0001 8.96973Z" fill="#323544"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M12 2.53906C17.5229 2.53906 22 7.01621 22 12.5391C22 17.5304 18.3431 21.6674 13.5625 22.4176V15.4297H15.8926L16.3359 12.5391L13.5625 12.5387V10.6632C13.5625 10.657 13.5625 10.6509 13.5626 10.6447C13.5626 10.6354 13.5628 10.6262 13.5629 10.6169C13.578 9.84259 13.9742 9.10156 15.1921 9.10156H16.4531V6.64062C16.4531 6.64062 15.3087 6.44492 14.2146 6.44492C11.966 6.44492 10.4842 7.78652 10.4386 10.2193C10.4379 10.2578 10.4375 10.2965 10.4375 10.3355V12.5387H7.89844V15.4293L10.4375 15.4297V22.4172C5.65686 21.667 2 17.5304 2 12.5391C2 7.01621 6.47715 2.53906 12 2.53906Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M10.6452 12.0003C10.6452 14.3877 8.70992 16.323 6.32261 16.323C3.9353 16.323 2 14.3877 2 12.0003C2 9.61304 3.9353 7.67773 6.32261 7.67773C8.70992 7.67773 10.6452 9.61304 10.6452 12.0003Z" fill="#323544"/>
|
|
3
|
+
<path d="M22 12.0003C22 14.3877 20.0647 16.323 17.6774 16.323C15.29 16.323 13.3548 14.3877 13.3548 12.0003C13.3548 9.61304 15.29 7.67773 17.6774 7.67773C20.0647 7.67773 22 9.61304 22 12.0003Z" fill="#323544"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M12 2.24902C6.51613 2.24902 2 6.70064 2 12.249C2 16.6361 4.87097 20.3781 8.87097 21.7329C9.3871 21.8297 9.54839 21.5071 9.54839 21.2813C9.54839 21.0555 9.54839 20.4103 9.51613 19.5393C6.74194 20.1845 6.16129 18.1845 6.16129 18.1845C5.70968 17.0555 5.03226 16.7329 5.03226 16.7329C4.12903 16.0877 5.06452 16.0877 5.06452 16.0877C6.06452 16.12 6.6129 17.12 6.6129 17.12C7.48387 18.6684 8.96774 18.2168 9.51613 17.9264C9.6129 17.2813 9.87097 16.8297 10.1613 16.5716C7.96774 16.3458 5.6129 15.4748 5.6129 11.6684C5.6129 10.5716 6.03226 9.70064 6.64516 9.02322C6.54839 8.79741 6.19355 7.76515 6.74194 6.37806C6.74194 6.37806 7.6129 6.11999 9.51613 7.41031C10.3226 7.18451 11.1613 7.05548 12.0323 7.05548C12.9032 7.05548 13.7742 7.15225 14.5484 7.41031C16.4516 6.15225 17.2903 6.37806 17.2903 6.37806C17.8387 7.73289 17.5161 8.79741 17.3871 9.02322C18.0323 9.70064 18.4194 10.6039 18.4194 11.6684C18.4194 15.4748 16.0645 16.3458 13.871 16.5716C14.2258 16.8942 14.5484 17.5393 14.5484 18.4426C14.5484 19.7974 14.5161 20.8619 14.5161 21.1845C14.5161 21.4426 14.7097 21.7329 15.1935 21.6361C19.129 20.3135 22 16.6039 22 12.1845C21.9677 6.70064 17.4839 2.24902 12 2.24902Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M12.0014 2.75C17.1095 2.75 21.2505 6.89178 21.2505 11.9999C21.2505 17.108 17.1095 21.2498 12.0014 21.2498M12.0014 2.75C6.89329 2.75 2.75235 6.89178 2.75235 11.9999C2.75235 17.108 6.89329 21.2498 12.0014 21.2498M12.0014 2.75C14.2101 2.75 16.0005 6.89136 16.0005 11.9993C16.0005 17.1073 14.2102 21.2498 12.0014 21.2498M12.0014 2.75C9.79266 2.75 8.00196 6.89137 8.00196 11.9993C8.00196 17.1073 9.79266 21.2498 12.0014 21.2498M11.9996 15.9986C17.1076 15.9986 21.2492 14.2081 21.2492 11.9993C21.2492 9.79058 17.1076 8.00004 11.9996 8.00004C6.89165 8.00004 2.75 9.79058 2.75 11.9993C2.75 14.2081 6.89166 15.9986 11.9996 15.9986Z" stroke="#323544" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M8.6672 12C8.6672 10.1591 10.1591 8.6664 12 8.6664C13.8409 8.6664 15.3336 10.1591 15.3336 12C15.3336 13.8409 13.8409 15.3336 12 15.3336C10.1591 15.3336 8.6672 13.8409 8.6672 12ZM6.86512 12C6.86512 14.836 9.164 17.1349 12 17.1349C14.836 17.1349 17.1349 14.836 17.1349 12C17.1349 9.164 14.836 6.86512 12 6.86512C9.164 6.86512 6.86512 9.164 6.86512 12ZM16.1382 6.66152C16.1381 6.89886 16.2084 7.13089 16.3401 7.32829C16.4719 7.52568 16.6593 7.67956 16.8785 7.77047C17.0977 7.86138 17.339 7.88525 17.5718 7.83904C17.8046 7.79283 18.0185 7.67862 18.1863 7.51087C18.3542 7.34311 18.4686 7.12934 18.515 6.89658C18.5614 6.66382 18.5377 6.42253 18.447 6.20322C18.3563 5.98392 18.2025 5.79644 18.0052 5.6645C17.808 5.53257 17.576 5.4621 17.3386 5.462H17.3382C17.02 5.46215 16.715 5.58856 16.49 5.81347C16.265 6.03837 16.1384 6.34339 16.1382 6.66152ZM7.96 20.1398C6.98504 20.0954 6.45512 19.933 6.10296 19.7958C5.63608 19.614 5.30296 19.3975 4.95272 19.0478C4.60248 18.698 4.38568 18.3652 4.20472 17.8983C4.06744 17.5463 3.90504 17.0162 3.86072 16.0413C3.81224 14.9872 3.80256 14.6706 3.80256 12.0001C3.80256 9.3296 3.81304 9.01384 3.86072 7.95888C3.90512 6.98392 4.06872 6.45488 4.20472 6.10184C4.38648 5.63496 4.60296 5.30184 4.95272 4.9516C5.30248 4.60136 5.63528 4.38456 6.10296 4.2036C6.45496 4.06632 6.98504 3.90392 7.96 3.8596C9.01408 3.81112 9.33072 3.80144 12 3.80144C14.6693 3.80144 14.9862 3.81192 16.0412 3.8596C17.0162 3.904 17.5452 4.0676 17.8982 4.2036C18.3651 4.38456 18.6982 4.60184 19.0485 4.9516C19.3987 5.30136 19.6147 5.63496 19.7965 6.10184C19.9338 6.45384 20.0962 6.98392 20.1405 7.95888C20.189 9.01384 20.1986 9.3296 20.1986 12.0001C20.1986 14.6706 20.189 14.9863 20.1405 16.0413C20.0961 17.0162 19.9329 17.5462 19.7965 17.8983C19.6147 18.3652 19.3982 18.6983 19.0485 19.0478C18.6987 19.3972 18.3651 19.614 17.8982 19.7958C17.5462 19.933 17.0162 20.0954 16.0412 20.1398C14.9871 20.1882 14.6705 20.1979 12 20.1979C9.32952 20.1979 9.01376 20.1882 7.96 20.1398ZM7.8772 2.06056C6.81264 2.10904 6.0852 2.27784 5.44992 2.52504C4.792 2.78032 4.23504 3.1228 3.67848 3.67848C3.12192 4.23416 2.78032 4.792 2.52504 5.44992C2.27784 6.0856 2.10904 6.81264 2.06056 7.8772C2.01128 8.94344 2 9.28432 2 12C2 14.7157 2.01128 15.0566 2.06056 16.1228C2.10904 17.1874 2.27784 17.9144 2.52504 18.5501C2.78032 19.2076 3.122 19.7661 3.67848 20.3215C4.23496 20.877 4.792 21.219 5.44992 21.475C6.0864 21.7222 6.81264 21.891 7.8772 21.9394C8.944 21.9879 9.28432 22 12 22C14.7157 22 15.0566 21.9887 16.1228 21.9394C17.1874 21.891 17.9144 21.7222 18.5501 21.475C19.2076 21.219 19.765 20.8772 20.3215 20.3215C20.8781 19.7658 21.219 19.2076 21.475 18.5501C21.7222 17.9144 21.8918 17.1874 21.9394 16.1228C21.9879 15.0558 21.9992 14.7157 21.9992 12C21.9992 9.28432 21.9879 8.94344 21.9394 7.8772C21.891 6.81256 21.7222 6.0852 21.475 5.44992C21.219 4.7924 20.8772 4.23504 20.3215 3.67848C19.7658 3.12192 19.2076 2.78032 18.5509 2.52504C17.9144 2.27784 17.1874 2.10824 16.1236 2.06056C15.0574 2.01208 14.7165 2 12.0008 2C9.28512 2 8.944 2.01128 7.8772 2.06056Z" fill="#323544"/>
|
|
3
|
+
<path d="M8.6672 12C8.6672 10.1591 10.1591 8.6664 12 8.6664C13.8409 8.6664 15.3336 10.1591 15.3336 12C15.3336 13.8409 13.8409 15.3336 12 15.3336C10.1591 15.3336 8.6672 13.8409 8.6672 12ZM6.86512 12C6.86512 14.836 9.164 17.1349 12 17.1349C14.836 17.1349 17.1349 14.836 17.1349 12C17.1349 9.164 14.836 6.86512 12 6.86512C9.164 6.86512 6.86512 9.164 6.86512 12ZM16.1382 6.66152C16.1381 6.89886 16.2084 7.13089 16.3401 7.32829C16.4719 7.52568 16.6593 7.67956 16.8785 7.77047C17.0977 7.86138 17.339 7.88525 17.5718 7.83904C17.8046 7.79283 18.0185 7.67862 18.1863 7.51087C18.3542 7.34311 18.4686 7.12934 18.515 6.89658C18.5614 6.66382 18.5377 6.42253 18.447 6.20322C18.3563 5.98392 18.2025 5.79644 18.0052 5.6645C17.808 5.53257 17.576 5.4621 17.3386 5.462H17.3382C17.02 5.46215 16.715 5.58856 16.49 5.81347C16.265 6.03837 16.1384 6.34339 16.1382 6.66152ZM7.96 20.1398C6.98504 20.0954 6.45512 19.933 6.10296 19.7958C5.63608 19.614 5.30296 19.3975 4.95272 19.0478C4.60248 18.698 4.38568 18.3652 4.20472 17.8983C4.06744 17.5463 3.90504 17.0162 3.86072 16.0413C3.81224 14.9872 3.80256 14.6706 3.80256 12.0001C3.80256 9.3296 3.81304 9.01384 3.86072 7.95888C3.90512 6.98392 4.06872 6.45488 4.20472 6.10184C4.38648 5.63496 4.60296 5.30184 4.95272 4.9516C5.30248 4.60136 5.63528 4.38456 6.10296 4.2036C6.45496 4.06632 6.98504 3.90392 7.96 3.8596C9.01408 3.81112 9.33072 3.80144 12 3.80144C14.6693 3.80144 14.9862 3.81192 16.0412 3.8596C17.0162 3.904 17.5452 4.0676 17.8982 4.2036C18.3651 4.38456 18.6982 4.60184 19.0485 4.9516C19.3987 5.30136 19.6147 5.63496 19.7965 6.10184C19.9338 6.45384 20.0962 6.98392 20.1405 7.95888C20.189 9.01384 20.1986 9.3296 20.1986 12.0001C20.1986 14.6706 20.189 14.9863 20.1405 16.0413C20.0961 17.0162 19.9329 17.5462 19.7965 17.8983C19.6147 18.3652 19.3982 18.6983 19.0485 19.0478C18.6987 19.3972 18.3651 19.614 17.8982 19.7958C17.5462 19.933 17.0162 20.0954 16.0412 20.1398C14.9871 20.1882 14.6705 20.1979 12 20.1979C9.32952 20.1979 9.01376 20.1882 7.96 20.1398ZM7.8772 2.06056C6.81264 2.10904 6.0852 2.27784 5.44992 2.52504C4.792 2.78032 4.23504 3.1228 3.67848 3.67848C3.12192 4.23416 2.78032 4.792 2.52504 5.44992C2.27784 6.0856 2.10904 6.81264 2.06056 7.8772C2.01128 8.94344 2 9.28432 2 12C2 14.7157 2.01128 15.0566 2.06056 16.1228C2.10904 17.1874 2.27784 17.9144 2.52504 18.5501C2.78032 19.2076 3.122 19.7661 3.67848 20.3215C4.23496 20.877 4.792 21.219 5.44992 21.475C6.0864 21.7222 6.81264 21.891 7.8772 21.9394C8.944 21.9879 9.28432 22 12 22C14.7157 22 15.0566 21.9887 16.1228 21.9394C17.1874 21.891 17.9144 21.7222 18.5501 21.475C19.2076 21.219 19.765 20.8772 20.3215 20.3215C20.8781 19.7658 21.219 19.2076 21.475 18.5501C21.7222 17.9144 21.8918 17.1874 21.9394 16.1228C21.9879 15.0558 21.9992 14.7157 21.9992 12C21.9992 9.28432 21.9879 8.94344 21.9394 7.8772C21.891 6.81256 21.7222 6.0852 21.475 5.44992C21.219 4.7924 20.8772 4.23504 20.3215 3.67848C19.7658 3.12192 19.2076 2.78032 18.5509 2.52504C17.9144 2.27784 17.1874 2.10824 16.1236 2.06056C15.0574 2.01208 14.7165 2 12.0008 2C9.28512 2 8.944 2.01128 7.8772 2.06056Z" fill="#323544"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M19.7065 3H4.34844C3.62264 3 3.04199 3.58065 3.04199 4.30645V19.6935C3.04199 20.3903 3.62264 21 4.34844 21H19.6485C20.3743 21 20.9549 20.4194 20.9549 19.6935V4.27742C21.013 3.58065 20.4323 3 19.7065 3ZM8.35491 18.3H5.71297V9.73548H8.35491V18.3ZM7.01942 8.54516C6.14846 8.54516 5.4807 7.84839 5.4807 7.00645C5.4807 6.16452 6.17749 5.46774 7.01942 5.46774C7.86136 5.46774 8.55813 6.16452 8.55813 7.00645C8.55813 7.84839 7.91942 8.54516 7.01942 8.54516ZM18.371 18.3H15.7291V14.1484C15.7291 13.1613 15.7001 11.8548 14.3356 11.8548C12.942 11.8548 12.7388 12.9581 12.7388 14.0613V18.3H10.0968V9.73548H12.6807V10.9258H12.7097C13.0872 10.229 13.9291 9.53226 15.2356 9.53226C17.9356 9.53226 18.4291 11.2742 18.4291 13.6548V18.3H18.371Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 11.9998C22 6.48075 17.5193 2 12.0003 2H11.9998C6.48075 2 2 6.48075 2 11.9998C2 17.5188 6.48075 21.9995 11.9998 21.9995H12.0003C17.5193 21.9995 22 17.5188 22 11.9998ZM13.0041 11.9998C13.0041 14.458 11.0249 16.4506 8.58363 16.4506C6.14231 16.4506 4.16301 14.4575 4.16301 11.9998C4.16301 9.54216 6.14216 7.54891 8.58363 7.54891C11.0251 7.54891 13.0041 9.54172 13.0041 11.9998ZM17.8535 11.9998C17.8535 14.3136 16.8639 16.1901 15.6432 16.1901C14.4224 16.1901 13.4329 14.3136 13.4329 11.9998C13.4329 9.68606 14.4223 7.80959 15.643 7.80959C16.8637 7.80959 17.8535 9.68547 17.8535 11.9998ZM19.837 11.9998C19.837 14.0724 19.489 15.7536 19.0596 15.7536C18.6303 15.7536 18.2824 14.0729 18.2824 11.9998C18.2824 9.92681 18.6304 8.24609 19.0596 8.24609C19.4889 8.24609 19.837 9.92666 19.837 11.9998Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="lni_lni-phone" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
|
4
|
+
y="0px" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
|
|
5
|
+
<g>
|
|
6
|
+
<path d="M48.6,60.9c-8.1,0-19.6-5.8-30.2-15.8C4,31.3-2.1,15.9,4.3,9.1c0.3-0.3,0.7-0.6,1.1-0.8l8.1-4.6c2.1-1.2,4.7-0.6,6.1,1.4
|
|
7
|
+
l5.9,8.4c0.7,1,1,2.2,0.7,3.4C26,18,25.3,19,24.3,19.7L20.8,22c2.7,3.9,10,13.6,21.6,20.5c0.1,0.1,0.2,0,0.2,0l2.5-3.4
|
|
8
|
+
c1.4-1.9,4.1-2.4,6.2-1.1l8.8,5.6c2.1,1.3,2.7,4,1.4,6.1l-4.8,7.7c-0.3,0.4-0.6,0.8-0.9,1.1C54,60.1,51.5,60.9,48.6,60.9z
|
|
9
|
+
M15.8,7.6C15.8,7.6,15.7,7.6,15.8,7.6l-8.2,4.6c-3.8,4.1,0.9,17.2,14,29.6c13.3,12.6,27,17.1,31.4,13.3l0,0c0,0,0,0,0,0l4.8-7.7
|
|
10
|
+
l-8.8-5.6c-0.1,0-0.2,0-0.2,0l-2.5,3.4c-1.4,1.9-4.1,2.4-6.1,1.2c-12.5-7.5-20.3-17.9-23.1-22c-0.7-1-0.9-2.2-0.7-3.3
|
|
11
|
+
c0.2-1.2,0.9-2.2,1.9-2.8l3.5-2.3l-5.8-8.3C15.9,7.7,15.8,7.6,15.8,7.6z"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M2.24876 12.0294C2.31334 15.0323 3.70182 18.0353 6.05898 19.8436C6.80165 20.3925 7.6089 20.7154 8.44844 21.0706C8.09325 18.778 8.96508 16.4854 9.44944 14.2251C9.51402 13.9991 9.54631 13.7407 9.54631 13.4824C9.54631 13.1272 9.41715 12.772 9.32028 12.4169C9.22341 11.8356 9.28799 11.2221 9.54631 10.6732C9.9015 9.93052 10.741 9.3493 11.4837 9.63991C12.1618 9.89823 12.4201 10.8024 12.291 11.5127C12.1618 12.2554 11.7743 12.9012 11.5806 13.6116C11.3545 14.322 11.3868 15.1938 11.9035 15.6782C12.3878 16.1302 13.1628 16.1625 13.7763 15.9042C14.6804 15.5167 15.2616 14.6126 15.6168 13.7085C16.2626 12.0294 16.1335 9.89823 14.8096 8.67121C14.2607 8.12228 13.4857 7.76709 12.6462 7.63793C11.2254 7.4119 9.67547 7.83167 8.67447 8.86495C7.67348 9.89823 7.22142 11.4804 7.64119 12.8366C7.77035 13.2887 8.02867 13.7407 8.12554 14.1928C8.22241 14.6449 8.19012 15.2261 7.86722 15.549C7.83493 15.5813 7.80264 15.6136 7.73806 15.6459C7.67348 15.6782 7.57661 15.6136 7.51203 15.5813C6.89852 15.1938 6.41417 14.5803 6.12356 13.9345C5.21944 11.9648 5.6715 9.51075 7.09226 7.89625C8.51302 6.28175 10.8056 5.50678 12.9368 5.79739C14.9387 6.05571 16.9084 7.25045 17.748 9.09098C18.2646 10.1888 18.3615 11.4482 18.1678 12.6429C17.974 13.8699 17.4897 15.0324 16.6824 15.9688C15.8752 16.9052 14.7127 17.551 13.4857 17.6156C12.4847 17.6801 11.4191 17.3249 10.9025 16.4854C10.5796 18.2291 9.96608 19.9404 9.06195 21.4581C9.02966 21.5227 11.1285 21.9747 11.3223 21.9747C13.7117 22.1685 16.2626 21.232 18.1355 19.7467C23.3019 15.6459 22.7529 7.79938 17.6511 3.92458C15.0033 1.8903 11.8712 1.50282 8.77134 2.60069C7.83493 2.92359 6.9631 3.47252 6.15585 4.05374C4.86426 5.02243 3.83098 6.28175 3.15288 7.7348C2.47479 9.05869 2.21647 10.544 2.24876 12.0294Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="lni_lni-postcard" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
|
4
|
+
y="0px" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
|
|
5
|
+
<g>
|
|
6
|
+
<path d="M56,11.9H8c-3.4,0-6.2,2.8-6.2,6.2v27.7c0,3.4,2.8,6.2,6.2,6.2h48c3.4,0,6.2-2.8,6.2-6.2V18.2C62.2,14.7,59.4,11.9,56,11.9
|
|
7
|
+
z M57.8,45.8c0,1-0.8,1.8-1.8,1.8H8c-1,0-1.8-0.8-1.8-1.8V18.2c0-1,0.8-1.8,1.8-1.8h48c1,0,1.8,0.8,1.8,1.8V45.8z"/>
|
|
8
|
+
<path d="M32,20.9c-1.2,0-2.2,1-2.2,2.2v15.3c0,1.2,1,2.2,2.2,2.2c1.2,0,2.2-1,2.2-2.2V23.1C34.2,21.9,33.2,20.9,32,20.9z"/>
|
|
9
|
+
<path d="M11.6,33h8.9c1.2,0,2.2-1,2.2-2.2s-1-2.2-2.2-2.2h-8.9c-1.2,0-2.2,1-2.2,2.2S10.4,33,11.6,33z"/>
|
|
10
|
+
<path d="M52,20.9h-9.4c-1.5,0-2.6,1.2-2.6,2.6v9.4c0,1.4,1.2,2.6,2.6,2.6H52c1.4,0,2.6-1.2,2.6-2.6v-9.4C54.6,22,53.4,20.9,52,20.9
|
|
11
|
+
z M50.1,31h-5.7v-5.7h5.7V31z"/>
|
|
12
|
+
<path d="M23,36.1H11.6c-1.2,0-2.2,1-2.2,2.2s1,2.2,2.2,2.2H23c1.2,0,2.2-1,2.2-2.2S24.3,36.1,23,36.1z"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M21.936 5.17077L18.9059 19.3546C18.6802 20.3539 18.1 20.5795 17.2618 20.1282L12.7166 16.7757L10.4923 18.9033C10.2666 19.1289 10.041 19.3546 9.5252 19.3546L9.8798 14.6804L18.3578 6.97598C18.7124 6.62138 18.2611 6.49244 17.8098 6.78256L7.26869 13.4232L2.72343 12.037C1.72412 11.7147 1.72412 11.0377 2.94908 10.5864L20.6144 3.72015C21.4847 3.46227 22.2262 3.91357 21.936 5.17077Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M19.074 4.89389C17.2091 3.02894 14.6689 2 12.0644 2C6.59814 2 2.12869 6.4373 2.12869 11.9035C2.12869 13.672 2.57885 15.3441 3.44702 16.8875L2.03223 22L7.33769 20.6495C8.78464 21.4212 10.4245 21.8714 12.0965 21.8714C17.5306 21.8392 21.9679 17.4019 21.9679 11.9035C21.9679 9.26688 20.939 6.791 19.074 4.89389ZM12.0322 20.1672C10.5853 20.1672 9.07403 19.7492 7.82001 18.9775L7.49846 18.7846L4.37949 19.5884L5.24766 16.5659L5.05473 16.2444C4.25088 14.926 3.80072 13.3826 3.80072 11.8392C3.80072 7.30547 7.46631 3.63987 12.0322 3.63987C14.2187 3.63987 16.2766 4.50804 17.82 6.05145C19.3634 7.59486 20.2316 9.68489 20.2316 11.9035C20.2959 16.5016 16.566 20.1672 12.0322 20.1672ZM16.566 13.9936C16.3088 13.865 15.119 13.254 14.8297 13.2219C14.6046 13.1254 14.4116 13.0932 14.283 13.3505C14.1544 13.6077 13.6399 14.1222 13.5113 14.3151C13.3827 14.4437 13.2541 14.508 12.9647 14.3473C12.7075 14.2187 11.9358 13.9936 10.9711 13.0932C10.2316 12.4502 9.71711 11.6463 9.62065 11.3569C9.49203 11.0997 9.5885 11.0032 9.74927 10.8424C9.87788 10.7138 10.0065 10.5852 10.103 10.3923C10.2316 10.2637 10.2316 10.135 10.3602 9.97428C10.4888 9.84566 10.3924 9.65274 10.328 9.52412C10.2316 9.3955 9.78142 8.17364 9.55634 7.65917C9.36342 7.1447 9.13834 7.24116 9.00972 7.24116C8.8811 7.24116 8.68817 7.24116 8.55956 7.24116C8.43094 7.24116 8.1094 7.27331 7.91647 7.5627C7.69139 7.81994 7.0483 8.43087 7.0483 9.65273C7.0483 10.8746 7.91647 12 8.07724 12.2251C8.20586 12.3537 9.84573 14.8939 12.2895 15.9871C12.8682 16.2444 13.3184 16.4051 13.7043 16.5338C14.283 16.7267 14.8297 16.6624 15.2477 16.6302C15.73 16.5981 16.6946 16.0514 16.9197 15.4405C17.1126 14.8939 17.1126 14.3473 17.0483 14.2508C16.984 14.1865 16.7911 14.09 16.566 13.9936Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M17.7512 2.96094H20.818L14.1179 10.6187L22 21.0391H15.8284L10.9946 14.7191L5.4636 21.0391H2.39492L9.56132 12.8483L2 2.96094H8.32824L12.6976 8.73762L17.7512 2.96094ZM16.6748 19.2035H18.3742L7.40492 4.70014H5.58132L16.6748 19.2035Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
2
|
+
<path d="M21.5806 7.19355C21.3548 6.32258 20.6774 5.64516 19.8065 5.41935C18.2581 5 12 5 12 5C12 5 5.74194 5 4.19355 5.41935C3.32258 5.64516 2.64516 6.32258 2.41935 7.19355C2 8.77419 2 12 2 12C2 12 2 15.2581 2.41935 16.8065C2.64516 17.6774 3.32258 18.3548 4.19355 18.5806C5.74194 19 12 19 12 19C12 19 18.2581 19 19.8065 18.5806C20.6774 18.3548 21.3548 17.6774 21.5806 16.8065C22 15.2581 22 12 22 12C22 12 22 8.77419 21.5806 7.19355ZM10 15V9L15.1935 12L10 15Z" fill="#323544"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
{%- comment -%}
|
|
3
|
+
Dynamic <html> tag:
|
|
4
|
+
- Language attribute: defaults to page.lang, then site.default_lang, then 'en'.
|
|
5
|
+
- Direction attribute: comes from that language's locale file (_data/locales/<lang>.yml).
|
|
6
|
+
{%- endcomment -%}
|
|
7
|
+
{%- assign lang = page.lang | default: site.default_lang | default: 'en' -%}
|
|
8
|
+
{%- assign locale = site.data.locales[lang] | default: site.data.locales[site.default_lang] | default: site.data.locales['en'] -%}
|
|
9
|
+
<html lang="{{ lang | escape }}" dir="{{ locale.direction }}">
|
|
10
|
+
{%- comment -%}
|
|
11
|
+
<!-- Layout: Default wrapper used by most pages.
|
|
12
|
+
- Purpose: Provide shared head includes, analytics, page content slot, and footer.
|
|
13
|
+
- Notes: Keep Liquid tags (e.g., {% seo %}) intact to avoid breaking Jekyll rendering.
|
|
14
|
+
-->
|
|
15
|
+
{%- endcomment -%}
|
|
16
|
+
<!-- This page was last updated on {{ "now" | date: "%Y-%m-%d %H:%M:%S" }}Z -->
|
|
17
|
+
|
|
18
|
+
<head>
|
|
19
|
+
<!-- Shared meta tags, charset, viewport, and favicons -->
|
|
20
|
+
{% include shared-head.html %}
|
|
21
|
+
|
|
22
|
+
<!-- Stylesheet -->
|
|
23
|
+
<link rel="stylesheet" type="text/css" href="{{ 'assets/css/main.css' | relative_url }}">
|
|
24
|
+
|
|
25
|
+
<!-- SEO plugin output: title, meta, Open Graph, canonical -->
|
|
26
|
+
{% seo %}
|
|
27
|
+
|
|
28
|
+
<!-- Analytics head snippet (GTM or gtag). Configured in _config.yml -->
|
|
29
|
+
{% include analytics-head.html %}
|
|
30
|
+
|
|
31
|
+
{% if site.social_links.mastodon %}
|
|
32
|
+
<!-- rel="me" for Mastodon verification / IndieAuth -->
|
|
33
|
+
{%- comment -%} Enables decentralized identity verification (IndieAuth / Fediverse rel="me" protocol) {%- endcomment -%}
|
|
34
|
+
{% include safe-url.html url=site.social_links.mastodon schemes="http,https" %}{% if safe_url %}<link rel="me" href="{{ safe_url | escape }}">{% endif %}
|
|
35
|
+
{% endif %}
|
|
36
|
+
</head>
|
|
37
|
+
|
|
38
|
+
{%- comment -%}
|
|
39
|
+
Dynamic body class generation: assigns "layout-<name>" for scoped CSS targeting
|
|
40
|
+
plus any page-specific custom classes defined in front matter.
|
|
41
|
+
{%- endcomment -%}
|
|
42
|
+
<body class="layout-{{ page.layout | default: 'default' }}{% if page.class %} {{ page.class }}{% endif %}">
|
|
43
|
+
<!-- Accessible skip-to-content link (WCAG 2.4.1) -->
|
|
44
|
+
<a href="#main-content" class="skip-link no-print">{{ locale.ui.skip_to_content | escape }}</a>
|
|
45
|
+
|
|
46
|
+
<!-- Analytics body snippet (noscript, dataLayer, etc.) -->
|
|
47
|
+
{% include analytics-body.html %}
|
|
48
|
+
|
|
49
|
+
{% include dark-mode-toggle.html %}
|
|
50
|
+
{% include language-switcher.html %}
|
|
51
|
+
|
|
52
|
+
<!-- Main content injected by Jekyll pages/layouts -->
|
|
53
|
+
{%- comment -%} Semantic <main> landmark with #main-content ID supporting skip-links and accessibility {%- endcomment -%}
|
|
54
|
+
<main class="main-content" id="main-content" role="main" tabindex="-1">
|
|
55
|
+
{{ content }}
|
|
56
|
+
</main>
|
|
57
|
+
|
|
58
|
+
<!-- Footer: site title and copyright range -->
|
|
59
|
+
<footer role="contentinfo">
|
|
60
|
+
<p class="copyright">
|
|
61
|
+
{{ site.title }} © 2018 - {{ "now" | date: "%Y" }}
|
|
62
|
+
</p>
|
|
63
|
+
</footer>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
data/_layouts/error.html
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
---
|
|
4
|
+
{%- comment -%}
|
|
5
|
+
Layout: Reusable multilingual HTTP error page layout.
|
|
6
|
+
- Purpose: Render accessible, dark-mode-compatible error copy for every configured language.
|
|
7
|
+
- Consumes: site.languages, site.data.locales[lang].error_pages, page.code.
|
|
8
|
+
{%- endcomment -%}
|
|
9
|
+
|
|
10
|
+
{%- comment -%}
|
|
11
|
+
Converts page.code to string (e.g. 404 -> "404") using `append: ""` so it safely matches
|
|
12
|
+
the string keys in each locale file's error_pages map regardless of whether front matter
|
|
13
|
+
provides an integer or string.
|
|
14
|
+
{%- endcomment -%}
|
|
15
|
+
{% assign code_str = page.code | default: "404" | append: "" %}
|
|
16
|
+
{% assign default_lang = site.default_lang | default: "en" %}
|
|
17
|
+
{% assign default_locale = site.data.locales[default_lang] %}
|
|
18
|
+
|
|
19
|
+
<div class="error-page">
|
|
20
|
+
{%- comment -%} Large visual status code is aria-hidden to avoid screen reader clutter {%- endcomment -%}
|
|
21
|
+
<div class="error-code" aria-hidden="true">{{ code_str | escape }}</div>
|
|
22
|
+
|
|
23
|
+
{%- comment -%}
|
|
24
|
+
Single-language block: server-renders default_lang only (one <h1>, no landmark
|
|
25
|
+
ambiguity). A small script below swaps it based on the ACTUAL URL the visitor
|
|
26
|
+
requested (e.g. /ar/whatever -> ar), not a stored preference — static hosts serve
|
|
27
|
+
this one physical error page for every unmatched path while leaving the real URL
|
|
28
|
+
in the address bar, so window.location.pathname is the only reliable signal for
|
|
29
|
+
which language the visitor was trying to reach. A path with no configured
|
|
30
|
+
language prefix (e.g. /whatever) falls back to default_lang.
|
|
31
|
+
{%- endcomment -%}
|
|
32
|
+
<div class="error-multilingual-group">
|
|
33
|
+
<div class="error-lang-block" id="error-lang-block" lang="{{ default_lang | escape }}" dir="{{ default_locale.direction }}">
|
|
34
|
+
<h1 class="error-title">{{ default_locale.error_pages[code_str].title | default: "Error" | escape }}</h1>
|
|
35
|
+
<p class="error-description">{{ default_locale.error_pages[code_str].message | default: "An error has occurred." | escape }}</p>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
{%- comment -%}
|
|
40
|
+
Per-language title/message/direction/home-url, built only from configured
|
|
41
|
+
languages (site.languages), for the URL-based language-detection script below.
|
|
42
|
+
home_url resolves to that language's profile homepage (layout: profile + lang),
|
|
43
|
+
falling back to its CV (languages.<lang>.url) if no profile page exists for it.
|
|
44
|
+
{%- endcomment -%}
|
|
45
|
+
{%- comment -%}
|
|
46
|
+
Every jsonified value gets `replace: '<', '\u003c'`: Liquid's jsonify leaves "</script>" and
|
|
47
|
+
"<!--" intact, so they could end this block early. JSON.parse decodes \u003c back to "<", and
|
|
48
|
+
the script writes values with .textContent, so nothing is HTML-escaped here (it would double-encode).
|
|
49
|
+
{%- endcomment -%}
|
|
50
|
+
<script type="application/json" id="error-lang-i18n">
|
|
51
|
+
{
|
|
52
|
+
"default_lang": {{ default_lang | jsonify | replace: '<', '\u003c' }},
|
|
53
|
+
"base_path": {{ site.baseurl | default: "" | jsonify | replace: '<', '\u003c' }},
|
|
54
|
+
{%- for lang_entry in site.languages -%}
|
|
55
|
+
{%- assign lang = lang_entry[0] -%}
|
|
56
|
+
{%- assign lang_cfg = lang_entry[1] -%}
|
|
57
|
+
{%- assign locale = site.data.locales[lang] -%}
|
|
58
|
+
{%- assign error_data = locale.error_pages[code_str] -%}
|
|
59
|
+
{%- assign profile_page = site.pages | where: "layout", "profile" | where: "lang", lang | first -%}
|
|
60
|
+
{%- assign home_url = profile_page.url | default: lang_cfg.url | default: "/" -%}
|
|
61
|
+
{{ lang | jsonify | replace: '<', '\u003c' }}: {
|
|
62
|
+
"title": {{ error_data.title | default: "Error" | jsonify | replace: '<', '\u003c' }},
|
|
63
|
+
"message": {{ error_data.message | default: "An error has occurred." | jsonify | replace: '<', '\u003c' }},
|
|
64
|
+
"direction": {{ locale.direction | jsonify | replace: '<', '\u003c' }},
|
|
65
|
+
"home_label": {{ locale.ui.home | default: "Home" | jsonify | replace: '<', '\u003c' }},
|
|
66
|
+
"home_url": {{ home_url | relative_url | jsonify | replace: '<', '\u003c' }}
|
|
67
|
+
}{% unless forloop.last %},{% endunless %}
|
|
68
|
+
{%- endfor -%}
|
|
69
|
+
}
|
|
70
|
+
</script>
|
|
71
|
+
<script>
|
|
72
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
73
|
+
{%- comment -%}
|
|
74
|
+
Deferred to DOMContentLoaded: this script tag sits before <nav>#error-home-btn
|
|
75
|
+
in source order, so getElementById would see a still-unparsed button if run
|
|
76
|
+
immediately — the title/message swap "worked" only because error-lang-block
|
|
77
|
+
happens to precede the script; the button silently never got touched.
|
|
78
|
+
{%- endcomment -%}
|
|
79
|
+
try {
|
|
80
|
+
var i18n = JSON.parse(document.getElementById('error-lang-i18n').textContent);
|
|
81
|
+
var path = window.location.pathname;
|
|
82
|
+
{%- comment -%} Sites hosted under a baseurl (e.g. /cv/ar/x) carry the prefix before the language. {%- endcomment -%}
|
|
83
|
+
var base = (i18n.base_path || '').replace(/\/+$/, '');
|
|
84
|
+
if (base && path.indexOf(base + '/') === 0) { path = path.slice(base.length); }
|
|
85
|
+
var matched = null;
|
|
86
|
+
for (var key in i18n) {
|
|
87
|
+
if (key === 'default_lang' || key === 'base_path' || !i18n.hasOwnProperty(key)) { continue; }
|
|
88
|
+
if (path.indexOf('/' + key + '/') === 0) { matched = key; break; }
|
|
89
|
+
}
|
|
90
|
+
if (!matched) { matched = i18n.default_lang; }
|
|
91
|
+
var data = i18n[matched];
|
|
92
|
+
if (!data) { return; }
|
|
93
|
+
|
|
94
|
+
var block = document.getElementById('error-lang-block');
|
|
95
|
+
block.setAttribute('lang', matched);
|
|
96
|
+
block.setAttribute('dir', data.direction);
|
|
97
|
+
block.querySelector('.error-title').textContent = data.title;
|
|
98
|
+
block.querySelector('.error-description').textContent = data.message;
|
|
99
|
+
|
|
100
|
+
var homeBtn = document.getElementById('error-home-btn');
|
|
101
|
+
if (homeBtn) {
|
|
102
|
+
homeBtn.href = data.home_url;
|
|
103
|
+
homeBtn.textContent = data.home_label;
|
|
104
|
+
}
|
|
105
|
+
} catch (e) { /* JS disabled: default_lang content and its Home button stand. */ }
|
|
106
|
+
});
|
|
107
|
+
</script>
|
|
108
|
+
|
|
109
|
+
{% if content and content != "" %}
|
|
110
|
+
<div class="error-custom-content">
|
|
111
|
+
{{ content }}
|
|
112
|
+
</div>
|
|
113
|
+
{% endif %}
|
|
114
|
+
|
|
115
|
+
<!-- Quick Navigation Links -->
|
|
116
|
+
{%- comment -%}
|
|
117
|
+
SMART ACTION BUTTON UX:
|
|
118
|
+
- Server Errors (500, 503) or page.show_reload: Reload CTA is primary because error may be transient.
|
|
119
|
+
- Client Errors (404, 403): Home navigation CTA is primary since reload will not resolve missing resource.
|
|
120
|
+
{%- endcomment -%}
|
|
121
|
+
<nav class="error-actions" aria-label="Error page navigation">
|
|
122
|
+
{% if code_str == "500" or code_str == "503" or page.show_reload == true %}
|
|
123
|
+
<button type="button" class="error-btn primary" onclick="window.location.reload();">
|
|
124
|
+
{{ default_locale.ui.reload_page | default: "Reload Page" | escape }}
|
|
125
|
+
</button>
|
|
126
|
+
{% endif %}
|
|
127
|
+
{%- comment -%}
|
|
128
|
+
Single Home/return button. Server-rendered fallback points at default_lang's
|
|
129
|
+
own profile homepage (or its CV if no profile page exists); the script above
|
|
130
|
+
repoints it once it detects the visitor's actual language from the URL.
|
|
131
|
+
{%- endcomment -%}
|
|
132
|
+
{%- assign default_profile_page = site.pages | where: "layout", "profile" | where: "lang", default_lang | first -%}
|
|
133
|
+
{%- assign default_home_url = default_profile_page.url | default: site.languages[default_lang].url | default: "/" -%}
|
|
134
|
+
<a id="error-home-btn" href="{{ default_home_url | relative_url }}" class="error-btn{% unless code_str == '500' or code_str == '503' or page.show_reload == true %} primary{% endunless %}">
|
|
135
|
+
{{ default_locale.ui.home | default: "Home" | escape }}
|
|
136
|
+
</a>
|
|
137
|
+
</nav>
|
|
138
|
+
</div>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
{%- comment -%}
|
|
3
|
+
Dynamic <html> tag:
|
|
4
|
+
- Language attribute: defaults to page.lang, then site.default_lang, then 'en'.
|
|
5
|
+
- Direction attribute: comes from that language's locale file (_data/locales/<lang>.yml).
|
|
6
|
+
{%- endcomment -%}
|
|
7
|
+
{%- assign lang = page.lang | default: site.default_lang | default: 'en' -%}
|
|
8
|
+
{%- assign locale = site.data.locales[lang] | default: site.data.locales[site.default_lang] | default: site.data.locales['en'] -%}
|
|
9
|
+
{%- assign lang_cfg = site.languages[lang] -%}
|
|
10
|
+
<html lang="{{ lang | escape }}" dir="{{ locale.direction }}">
|
|
11
|
+
{%- comment -%}
|
|
12
|
+
<!-- Layout: Profile layout used for the landing page / bio-link style homepage.
|
|
13
|
+
- Purpose: Dedicated standalone layout with clean unconstrained centering.
|
|
14
|
+
- Stylesheet: assets/css/profile.css
|
|
15
|
+
- Architecture: Unlike default.html, this layout omits the max-width constrained .main-content container,
|
|
16
|
+
allowing full-viewport vertical and horizontal centering of hero/profile sections.
|
|
17
|
+
- Localization: Pages using this layout set `lang` + `t_id` in front matter (same convention as
|
|
18
|
+
the resume layout's CV pages) so the language switcher and hreflang tags can find each other.
|
|
19
|
+
Name/about/CV link text come from _config.yml's `languages.<lang>` block, so a translator only
|
|
20
|
+
ever has to touch _config.yml, never this layout.
|
|
21
|
+
-->
|
|
22
|
+
{%- endcomment -%}
|
|
23
|
+
<!-- This page was last updated on {{ "now" | date: "%Y-%m-%d %H:%M:%S" }}Z -->
|
|
24
|
+
|
|
25
|
+
<head>
|
|
26
|
+
<!-- Shared meta tags, charset, viewport, and favicons -->
|
|
27
|
+
{% include shared-head.html %}
|
|
28
|
+
|
|
29
|
+
<!-- Profile stylesheet -->
|
|
30
|
+
<link rel="stylesheet" type="text/css" href="{{ 'assets/css/profile.css' | relative_url }}">
|
|
31
|
+
|
|
32
|
+
<!-- hreflang alternates across language variants sharing this page's t_id -->
|
|
33
|
+
{% include hreflang.html %}
|
|
34
|
+
|
|
35
|
+
<!-- SEO plugin output: title, meta, Open Graph, canonical -->
|
|
36
|
+
{% seo %}
|
|
37
|
+
|
|
38
|
+
<!-- Analytics head snippet (GTM or gtag). Configured in _config.yml -->
|
|
39
|
+
{% include analytics-head.html %}
|
|
40
|
+
|
|
41
|
+
{% if site.social_links.mastodon %}
|
|
42
|
+
<!-- rel="me" for Mastodon verification / IndieAuth -->
|
|
43
|
+
{%- comment -%} Enables decentralized identity verification (IndieAuth / Fediverse rel="me" protocol) {%- endcomment -%}
|
|
44
|
+
{% include safe-url.html url=site.social_links.mastodon schemes="http,https" %}{% if safe_url %}<link rel="me" href="{{ safe_url | escape }}">{% endif %}
|
|
45
|
+
{% endif %}
|
|
46
|
+
</head>
|
|
47
|
+
|
|
48
|
+
<body>
|
|
49
|
+
<!-- Accessible skip-to-content link (WCAG 2.4.1) -->
|
|
50
|
+
<a href="#main-content" class="skip-link no-print">{{ locale.ui.skip_to_content }}</a>
|
|
51
|
+
|
|
52
|
+
<!-- Analytics body snippet (noscript, dataLayer, etc.) -->
|
|
53
|
+
{% include analytics-body.html %}
|
|
54
|
+
|
|
55
|
+
{% include dark-mode-toggle.html %}
|
|
56
|
+
{% include language-switcher.html %}
|
|
57
|
+
|
|
58
|
+
<header>
|
|
59
|
+
{% if site.resume_avatar == true %}
|
|
60
|
+
{% include avatar.html lang=lang %}
|
|
61
|
+
{% endif %}
|
|
62
|
+
|
|
63
|
+
<!-- Your name is defined in _config.yml under languages.{{ lang }}.name -->
|
|
64
|
+
{%- comment -%}
|
|
65
|
+
Display name rendering, two tiers:
|
|
66
|
+
1. languages.{{ lang }}.name_html (optional): explicit Markdown/HTML override for names
|
|
67
|
+
where "bold the last word" guesses wrong — compound surnames ("Garcia Lopez"),
|
|
68
|
+
particles ("van der Berg"), hyphenated names, etc. Rendered standalone so it never
|
|
69
|
+
touches the plain `name` field, which stays HTML-free for the avatar's alt text and
|
|
70
|
+
itemprop="name" microdata.
|
|
71
|
+
2. Fallback: bolds the last space-separated word, matching the original hand-written
|
|
72
|
+
markup for the common single-surname case with zero config.
|
|
73
|
+
{%- endcomment -%}
|
|
74
|
+
{% if lang_cfg.name_html %}
|
|
75
|
+
<h1 class="full-name">{{ lang_cfg.name_html | markdownify | strip_newlines | remove: '<p>' | remove: '</p>' }}</h1>
|
|
76
|
+
{% else %}
|
|
77
|
+
{%- assign name_parts = lang_cfg.name | split: " " -%}
|
|
78
|
+
<h1 class="full-name">{% for part in name_parts %}{% if forloop.last %}<b>{{ part }}</b>{% else %}{{ part }} {% endif %}{% endfor %}</h1>
|
|
79
|
+
{% endif %}
|
|
80
|
+
|
|
81
|
+
{%- comment -%}
|
|
82
|
+
Free-form bio block: rendered from _config.yml's `languages.{{ lang }}.about`.
|
|
83
|
+
Accepts Markdown, raw HTML, or plain text — markdownify passes HTML through untouched
|
|
84
|
+
and wraps plain text in a paragraph, so any of the three "just work".
|
|
85
|
+
{%- endcomment -%}
|
|
86
|
+
{% if lang_cfg.about %}
|
|
87
|
+
<div class="about">{{ lang_cfg.about | markdownify }}</div>
|
|
88
|
+
{% endif %}
|
|
89
|
+
</header>
|
|
90
|
+
|
|
91
|
+
<!-- Main content injected by Jekyll pages/layouts -->
|
|
92
|
+
<main id="main-content" role="main" tabindex="-1">
|
|
93
|
+
{% if site.social_links %}
|
|
94
|
+
<!-- and guess where these are defined? Yup, you guessed it: the _config.yml file -->
|
|
95
|
+
<ul class="social-links">
|
|
96
|
+
|
|
97
|
+
{% include social-links.html %}
|
|
98
|
+
{%- comment -%} contact_info.email icon, unless social_links.email already rendered one {%- endcomment -%}
|
|
99
|
+
{% if site.contact_info.email and site.social_links.email == nil %}
|
|
100
|
+
{%- assign email_label = locale.ui.social_labels.email | default: "Email" -%}
|
|
101
|
+
<li class="icon-link-item"><a href="mailto:{{ site.contact_info.email }}" class="icon-link" itemprop="email"
|
|
102
|
+
aria-label="{{ email_label }}" title="{{ email_label }}">{% include vendors/svg-icons/envelope.svg %}<span class="sr-only">{{ email_label }}</span></a>
|
|
103
|
+
</li>
|
|
104
|
+
{% endif %}
|
|
105
|
+
</ul>
|
|
106
|
+
{% endif %}
|
|
107
|
+
|
|
108
|
+
{% if lang_cfg.url %}
|
|
109
|
+
<!-- CV link is this language's resume permalink, defined in _config.yml under languages.{{ lang }}.url -->
|
|
110
|
+
<a href="{{ lang_cfg.url | relative_url }}" class="cv-button">{{ locale.ui.cv_button }}</a>
|
|
111
|
+
{% endif %}
|
|
112
|
+
|
|
113
|
+
{{ content }}
|
|
114
|
+
</main>
|
|
115
|
+
|
|
116
|
+
<!-- Footer: site title and copyright range -->
|
|
117
|
+
<footer role="contentinfo">
|
|
118
|
+
<p class="copyright">
|
|
119
|
+
{{ site.title }} © 2018 - {{ "now" | date: "%Y" }}
|
|
120
|
+
</p>
|
|
121
|
+
</footer>
|
|
122
|
+
</body>
|
|
123
|
+
</html>
|