jsonresume-theme-cjean 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +162 -0
- package/dist/index.cjs +13 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +1886 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christophe Jean
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# jsonresume-theme-cjean
|
|
2
|
+
|
|
3
|
+
A clean, professional [JSON Resume](https://jsonresume.org/) theme built with Tailwind CSS and TypeScript.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Responsive Design**: Looks great on mobile and desktop.
|
|
8
|
+
- **Print Optimized**: Automatically adjusted for high-quality PDF exports.
|
|
9
|
+
- **SEO Ready**: Full support for Meta tags, OpenGraph, Twitter Cards, and JSON-LD.
|
|
10
|
+
- **Customizable Aesthetics**: Easy branding via granular `ui` configuration and geometric patterns.
|
|
11
|
+
- **Multi-locale Support**: Comes with `fr` and `en`. Locales are managed in a single file (`i18n.ts`) — feel free to contribute yours!
|
|
12
|
+
- **Modern Tech Stack**: Built with Bun, TypeScript, and functional components.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
### Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
bun install
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Build
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
bun run build
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Resume Commands
|
|
29
|
+
|
|
30
|
+
To export your resume to an HTML file:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
bun run resume:export
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
To live preview your resume (auto-reloads on changes):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
bun run resume:serve
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Configuration
|
|
43
|
+
|
|
44
|
+
You can customize the theme by adding a `meta` object to your `resume.json`.
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"meta": {
|
|
49
|
+
"theme": "cjean",
|
|
50
|
+
"lang": "fr",
|
|
51
|
+
"lastModified": "2026-02-06",
|
|
52
|
+
"themeConfig": {
|
|
53
|
+
"ui": {
|
|
54
|
+
"primary": "#c80044",
|
|
55
|
+
"headerFrom": "#0271bf",
|
|
56
|
+
"headerTo": "#c80044",
|
|
57
|
+
"footerFrom": "#0271bf",
|
|
58
|
+
"footerTo": "#003d68",
|
|
59
|
+
"backgroundTilesSeed": 188
|
|
60
|
+
},
|
|
61
|
+
"seo": {
|
|
62
|
+
"title": "CV de Jean Dupont",
|
|
63
|
+
"description": "Développeur Fullstack expérimenté",
|
|
64
|
+
"robots": "index, follow"
|
|
65
|
+
},
|
|
66
|
+
"modest": false
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"basics": { ... }
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### themeConfig Options
|
|
74
|
+
|
|
75
|
+
#### UI Options (`ui`)
|
|
76
|
+
|
|
77
|
+
| Option | Description | Default |
|
|
78
|
+
| :-------------------- | :--------------------------------------------------------------------------- | :------------------------------------------- |
|
|
79
|
+
| `primary` | Primary theme color | `#255b8f` |
|
|
80
|
+
| `headerFrom` | Gradient start color for header | `#ccc074` |
|
|
81
|
+
| `headerTo` | Gradient end color for header | `#4971af` |
|
|
82
|
+
| `footerFrom` | Gradient start color for footer | `#463932` |
|
|
83
|
+
| `footerTo` | Gradient end color for footer | `#7fbdbc` |
|
|
84
|
+
| `backgroundTilesSeed` | Seed for the geometric background patterns | `1` |
|
|
85
|
+
| `links` | Order and choice of contact links (phone, email, ...) | `["phone", "email", "location", "profiles"]` |
|
|
86
|
+
| `showLogos` | Show work experiences logos taken from `work.logo or from `work.url` favicon | true |
|
|
87
|
+
| `cta` | Add a Floating Action Button on the bottom right | - |
|
|
88
|
+
| `cta.text` | The button text | - |
|
|
89
|
+
| `cta.url` | The button target url | - |
|
|
90
|
+
| `cta.icon` | The button icon | - |
|
|
91
|
+
|
|
92
|
+
**Note on `contactLinks`**:
|
|
93
|
+
|
|
94
|
+
- The order in the array determines the order of appearance.
|
|
95
|
+
- **Special keywords**: `phone`, `email`, `location`, `profiles`
|
|
96
|
+
- **`profiles` keyword**: A "catch-all" that renders all social networks not explicitly mentioned.
|
|
97
|
+
- **Specific networks**: You can use the name of a network (e.g., `"LinkedIn"`, `"GitHub"`) to place it exactly where you want.
|
|
98
|
+
- _Example_: `["LinkedIn", "email", "location"]` will show only these three, in that order.
|
|
99
|
+
- _Example_: `["phone", "profiles", "email"]` will show the phone, then ALL social profiles, then the email.
|
|
100
|
+
|
|
101
|
+
**Icons & Social Networks**:
|
|
102
|
+
The theme uses [Iconify](https://icon-sets.iconify.design/) to dynamically fetch icons.
|
|
103
|
+
|
|
104
|
+
- **Social Networks**: Icons for profiles are automatically prefixed with `tabler:brand-`. For example, a network named `LinkedIn` will search for `tabler:brand-linkedin`.
|
|
105
|
+
- **Custom Icons**: For the `cta.icon`, you must provide the full Iconify identifier (e.g., `mdi:email`, `tabler:message-circle`).
|
|
106
|
+
- **Search Icons**: You can browse thousands of available icons on the [Iconify Explorer](https://icon-sets.iconify.design/).
|
|
107
|
+
|
|
108
|
+
#### SEO Options (`seo`)
|
|
109
|
+
|
|
110
|
+
| Option | Description | Default |
|
|
111
|
+
| :------------- | :------------------------------------------ | :----------------- |
|
|
112
|
+
| `title` | Meta title (overrides default name - label) | - |
|
|
113
|
+
| `description` | Meta description (overrides basics.summary) | - |
|
|
114
|
+
| `canonical` | Canonical URL | `basics.url` |
|
|
115
|
+
| `ogImage` | Open Graph image URL | `basics.image` |
|
|
116
|
+
| `twitterImage` | Twitter card image URL | `basics.image` |
|
|
117
|
+
| `robots` | Robots meta tag content | `index, follow` |
|
|
118
|
+
| `firstName` | SEO explicit first name | (parsed from name) |
|
|
119
|
+
| `lastName` | SEO explicit last name | (parsed from name) |
|
|
120
|
+
|
|
121
|
+
#### Other Options
|
|
122
|
+
|
|
123
|
+
| Option | Description | Default |
|
|
124
|
+
| :------- | :---------------------------------------------------- | :------ |
|
|
125
|
+
| `modest` | Minimal branding (removes theme credit and generator) | `false` |
|
|
126
|
+
|
|
127
|
+
### Meta Options (root)
|
|
128
|
+
|
|
129
|
+
| Option | Description | Default |
|
|
130
|
+
| :------------- | :---------------------------------- | :------ |
|
|
131
|
+
| `lang` | Locale of the resume (`en` or `fr`) | `en` |
|
|
132
|
+
| `lastModified` | Last modification date (ISO format) | (now) |
|
|
133
|
+
|
|
134
|
+
## Adding New Locales
|
|
135
|
+
|
|
136
|
+
To add a new locale (e.g., Spanish `es`):
|
|
137
|
+
|
|
138
|
+
1. Open `src/lib/i18n.ts`.
|
|
139
|
+
2. Add the new translations to the `fr` or `en` model to stay in sync with the `ThemeSpec`.
|
|
140
|
+
3. Define the new locale resource:
|
|
141
|
+
```typescript
|
|
142
|
+
const es = defineTranslations<ThemeSpec>()({
|
|
143
|
+
work_experience: "Experiencia laboral",
|
|
144
|
+
// ... copy and translate all keys
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
4. Add it to the `resources` object:
|
|
148
|
+
```typescript
|
|
149
|
+
const resources = {
|
|
150
|
+
en,
|
|
151
|
+
fr,
|
|
152
|
+
es,
|
|
153
|
+
};
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MIT © Christophe Jean
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
<p align="center">Made with ❤️ in Paris</p>
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Ne=new Map([["&","&"],["<","<"],[">",">"],['"',"""],["'","'"]]),Oe=new Set(["href","src","action","formaction","cite","poster","icon","data"]),Te=/[&<>]/g,Ce=/[&<>"]/g,Ee=new RegExp("\\p{C}","gu"),Le=/^[^\s"'>/=]+$/u,Ae=/^(?:java|vb)script:/i,Ie=/^data:(?!image\/)/i,me=e=>e.replace(Ee,""),O=(e,t="content")=>{let r=t==="attr"?Ce:Te;return e.replaceAll(r,n=>Ne.get(n)??n)},Re=e=>{let t=me(e).trim();return t?!(Ae.test(t)||Ie.test(t)):!0},De=e=>Le.test(e),Ue=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Fe=/[A-Z]/g,Be=new Set(["children","dangerouslySetInnerHTML","key","ref"]),we=e=>{if(e instanceof Promise)return!0;if(Array.isArray(e)){for(let t=0;t<e.length;t++)if(we(e[t]))return!0}return!1};class ${value;constructor(t){this.value=t}toString(){return this.value}}function Ve(e){if(!e)return"";let t=Object.keys(e);for(let r=0;r<t.length;r++){let n=t[r];if(n&&we(e[n]))return Promise.all(t.map(async a=>[a,await e[a]])).then(a=>ae(Object.fromEntries(a)))}return ae(e)}function ae(e){let t="",r=new Set,n=Object.keys(e);for(let a=0;a<n.length;a++){let o=n[a];if(!o)continue;let i=e[o];if(Be.has(o)||i===!1||i==null)continue;if(o==="class"||o==="className"){if(typeof i=="string")for(let d of i.split(/\s+/))d&&r.add(d);continue}let c=o.length>20||!/^[a-z]+$/.test(o)?me(o.toLowerCase()):o;if(De(c))if(c==="style"){let d=typeof i=="object"?We(i):String(i);t+=` style="${O(d,"attr")}"`}else if(i===!0)t+=` ${c}`;else{let d=String(i);Oe.has(c)&&!Re(d)&&(d="#blocked"),t+=` ${c}="${O(d,"attr")}"`}}return r.size>0&&(t=` class="${O([...r].join(" "),"attr")}"`+t),t}function We(e){let t=[];for(let[r,n]of Object.entries(e)){if(n==null)continue;let a=r.startsWith("--")?r:r.replace(Fe,"-$&").toLowerCase();t.push(`${a}:${n}`)}return t.join(";")}function X(e){if(e==null||e===!0||e===!1)return"";if(e instanceof $)return e;if(e instanceof Promise)return e.then(X).then(t=>t instanceof $?t:new $(O(String(t))));if(Array.isArray(e)){let t=e.length,r=Array(t),n=!1;for(let a=0;a<t;a++){let o=X(e[a]);r[a]=o,o instanceof Promise&&(n=!0)}if(!n){let a="";for(let o=0;o<t;o++){let i=r[o];a+=i instanceof $?i.value:O(String(i))}return new $(a)}return Promise.all(r).then(a=>{let o="";for(let i=0;i<a.length;i++){let c=a[i];o+=c instanceof $?c.value:O(String(c))}return new $(o)})}return String(e)}function Je(e,t,r){let n=Ve(t),a=t.dangerouslySetInnerHTML?new $(t.dangerouslySetInnerHTML.__html):X(r);return n instanceof Promise||a instanceof Promise?Promise.all([n,a]).then(([o,i])=>oe(e,o,i)):oe(e,n,a)}function oe(e,t,r){if(Ue.has(e))return new $(`<${e}${t}>`);let n=r instanceof $?r.value:O(String(r));return new $(`<${e}${t}>${n}</${e}>`)}function s(e,t,r){let n=t||{},a=n.children,o=Array.isArray(a)?a:a!==void 0?[a]:[];return typeof e=="function"?e(n):Je(e,n,o)}var m=s;function U({children:e}){return e}function qe(e,t={}){return e.replace(/\{([\w-]+?)\}/g,(r,n)=>{let a=t[n];return a!==void 0?String(a):r})}function be(e,t){return(r,...n)=>{let a=e[r]??r,o=n[0]||{};return n.length===0?a:qe(a,o)}}function He(){return e=>e}const Ye={work_experience:"Work Experience",education:"Education",skills:"Skills",present:"Present",contact_info:"Contact Information",phone_call:"Call mobile phone",email_send:"Send email",show_address:"Show address",portrait_alt:"Portrait of {name}",last_modified:"Last updated on {date}",profile_page_name:"{name}'s resume - {label}",theme_credit:"Theme made with love by {link}"},Ke=He()({work_experience:"Expériences professionnelles",education:"Formations",skills:"Compétences",present:"Présent",contact_info:"Informations de contact",phone_call:"Appeler sur le téléphone mobile",email_send:"Envoyer un email",show_address:"Afficher l'adresse",portrait_alt:"Portrait de {name}",last_modified:"Dernière mise à jour le {date}",profile_page_name:"CV de {name} - {label}",theme_credit:"Thème proposé avec amour par {link}"}),ve={en:Ye,fr:Ke};let W,J="en";const P=(e,...t)=>(W||(W=be(ve[J])),W(e,...t)),ie=(e,...t)=>new $(P(e,...t));function Ge(e){J=e,W=be(ve[e])}const T={normalize(e){const t=typeof e=="string"?new Date(e):e;return isNaN(t.getTime())?null:t},format(e,t){const r=this.normalize(e);if(!r)return"";const n=typeof J<"u"?J:"fr-FR";switch(t){case"month":return new Intl.DateTimeFormat(n,{month:"long",year:"numeric"}).format(r);case"year":return r.getFullYear().toString();case"date":return new Intl.DateTimeFormat(n,{day:"numeric",month:"numeric",year:"numeric"}).format(r);case"iso":return r.toISOString();default:throw new Error(`Unhandled date format: ${t}`)}},toISO(e){return this.normalize(e)?.toISOString()??""}};class Qe{seed;constructor(t){this.seed=t}next(){return this.seed=this.seed*16807%2147483647,(this.seed-1)/2147483646}}function Xe(e={}){const{width:t=900,height:r=300,cellSize:n=50,variance:a=.75,seed:o=1}=e,i=new Qe(o),c=[],d=Math.ceil(t/n)+2,l=Math.ceil(r/n)+2;for(let w=0;w<l;w++){const b=[];for(let y=0;y<d;y++){const S=(y-.5)*n+(i.next()-.5)*n*a,M=(w-.5)*n+(i.next()-.5)*n*a;b.push({x:Math.round(S*10)/10,y:Math.round(M*10)/10})}c.push(b)}let h="";for(let w=0;w<l-1;w++)for(let b=0;b<d-1;b++){const y=c[w][b],S=c[w][b+1],M=c[w+1][b],Q=c[w+1][b+1];h+=se(y,S,M,i.next()),h+=se(S,Q,M,i.next())}const g=`<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${r}" viewBox="0 0 ${t} ${r}" preserveAspectRatio="xMidYMid slice">
|
|
2
|
+
<g fill-rule="evenodd">${h}</g>
|
|
3
|
+
</svg>`;return`data:image/svg+xml;base64,${btoa(g)}`}function se(e,t,r,n){const a=n>.5,o=(Math.round(n*100)/1e3).toFixed(3),i=a?"0,0,0":"255,255,255";return`<path d="M${e.x},${e.y}L${t.x},${t.y}L${r.x},${r.y}Z" fill="rgba(${i},${o})"/>`}function et({name:e,label:t,children:r,...n}){return m("header",{className:"flex-1 grow pr-14 md:pr-0",...n,children:[s("h1",{className:"text-primary kerning-none inline-block text-4xl font-bold tracking-widest uppercase",children:e}),t&&s("p",{className:"text-3xl",children:t}),r]})}function f(e,t,r){function n(c,d){if(c._zod||Object.defineProperty(c,"_zod",{value:{def:d,constr:i,traits:new Set},enumerable:!1}),c._zod.traits.has(e))return;c._zod.traits.add(e),t(c,d);const l=i.prototype,h=Object.keys(l);for(let g=0;g<h.length;g++){const w=h[g];w in c||(c[w]=l[w].bind(c))}}const a=r?.Parent??Object;class o extends a{}Object.defineProperty(o,"name",{value:e});function i(c){var d;const l=r?.Parent?new o:this;n(l,c),(d=l._zod).deferred??(d.deferred=[]);for(const h of l._zod.deferred)h();return l}return Object.defineProperty(i,"init",{value:n}),Object.defineProperty(i,Symbol.hasInstance,{value:c=>r?.Parent&&c instanceof r.Parent?!0:c?._zod?.traits?.has(e)}),Object.defineProperty(i,"name",{value:e}),i}class C extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class tt extends Error{constructor(t){super(`Encountered unidirectional transform during encode: ${t}`),this.name="ZodEncodeError"}}const rt={};function L(e){return rt}function nt(e){const t=Object.values(e).filter(n=>typeof n=="number");return Object.entries(e).filter(([n,a])=>t.indexOf(+n)===-1).map(([n,a])=>a)}function at(e,t){return typeof t=="bigint"?t.toString():t}function ot(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function it(e){return e==null}function st(e){const t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}const ce=Symbol("evaluating");function k(e,t,r){let n;Object.defineProperty(e,t,{get(){if(n!==ce)return n===void 0&&(n=ce,n=r()),n},set(a){Object.defineProperty(e,t,{value:a})},configurable:!0})}const ye="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function ee(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ct(e){if(ee(e)===!1)return!1;const t=e.constructor;if(t===void 0||typeof t!="function")return!0;const r=t.prototype;return!(ee(r)===!1||Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)}function xe(e){return ct(e)?{...e}:Array.isArray(e)?[...e]:e}const lt=new Set(["string","number","symbol"]);function dt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ut(e,t,r){const n=new e._zod.constr(t??e._zod.def);return(!t||r?.parent)&&(n._zod.parent=e),n}function Z(e){const t=e;if(!t)return{};if(typeof t=="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error=="string"?{...t,error:()=>t.error}:t}function pt(e){return Object.keys(e).filter(t=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}function F(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue!==!0)return!0;return!1}function ke(e,t){return t.map(r=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(e),r})}function B(e){return typeof e=="string"?e:e?.message}function A(e,t,r){const n={...e,path:e.path??[]};if(!e.message){const a=B(e.inst?._zod.def?.error?.(e))??B(t?.error?.(e))??B(r.customError?.(e))??B(r.localeError?.(e))??"Invalid input";n.message=a}return delete n.inst,delete n.continue,t?.reportInput||delete n.input,n}function ht(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function ft(...e){const[t,r,n]=e;return typeof t=="string"?{message:t,code:"custom",input:r,inst:n}:{...t}}const _e=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,at,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},gt=f("$ZodError",_e),Y=f("$ZodError",_e,{Parent:Error}),mt=e=>(t,r,n,a)=>{const o=n?Object.assign(n,{async:!1}):{async:!1},i=t._zod.run({value:r,issues:[]},o);if(i instanceof Promise)throw new C;if(i.issues.length){const c=new(a?.Err??e)(i.issues.map(d=>A(d,o,L())));throw ye(c,a?.callee),c}return i.value},wt=mt(Y),bt=e=>async(t,r,n,a)=>{const o=n?Object.assign(n,{async:!0}):{async:!0};let i=t._zod.run({value:r,issues:[]},o);if(i instanceof Promise&&(i=await i),i.issues.length){const c=new(a?.Err??e)(i.issues.map(d=>A(d,o,L())));throw ye(c,a?.callee),c}return i.value},vt=bt(Y),yt=e=>(t,r,n)=>{const a=n?{...n,async:!1}:{async:!1},o=t._zod.run({value:r,issues:[]},a);if(o instanceof Promise)throw new C;return o.issues.length?{success:!1,error:new(e??gt)(o.issues.map(i=>A(i,a,L())))}:{success:!0,data:o.value}},ze=yt(Y),xt=e=>async(t,r,n)=>{const a=n?Object.assign(n,{async:!0}):{async:!0};let o=t._zod.run({value:r,issues:[]},a);return o instanceof Promise&&(o=await o),o.issues.length?{success:!1,error:new e(o.issues.map(i=>A(i,a,L())))}:{success:!0,data:o.value}},$e=xt(Y),kt=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,_t=e=>{const t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},zt=/^-?\d+(?:\.\d+)?$/,$t=/^(?:true|false)$/i,te=f("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])}),St=f("$ZodCheckLengthEquals",(e,t)=>{var r;te.init(e,t),(r=e._zod.def).when??(r.when=n=>{const a=n.value;return!it(a)&&a.length!==void 0}),e._zod.onattach.push(n=>{const a=n._zod.bag;a.minimum=t.length,a.maximum=t.length,a.length=t.length}),e._zod.check=n=>{const a=n.value,o=a.length;if(o===t.length)return;const i=ht(a),c=o>t.length;n.issues.push({origin:i,...c?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Se=f("$ZodCheckStringFormat",(e,t)=>{var r,n;te.init(e,t),e._zod.onattach.push(a=>{const o=a._zod.bag;o.format=t.format,t.pattern&&(o.patterns??(o.patterns=new Set),o.patterns.add(t.pattern))}),t.pattern?(r=e._zod).check??(r.check=a=>{t.pattern.lastIndex=0,!t.pattern.test(a.value)&&a.issues.push({origin:"string",code:"invalid_format",format:t.format,input:a.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(n=e._zod).check??(n.check=()=>{})}),Zt=f("$ZodCheckRegex",(e,t)=>{Se.init(e,t),e._zod.check=r=>{t.pattern.lastIndex=0,!t.pattern.test(r.value)&&r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Pt={major:4,minor:3,patch:6},x=f("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Pt;const n=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&n.unshift(e);for(const a of n)for(const o of a._zod.onattach)o(e);if(n.length===0)(r=e._zod).deferred??(r.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const a=(i,c,d)=>{let l=F(i),h;for(const g of c){if(g._zod.def.when){if(!g._zod.def.when(i))continue}else if(l)continue;const w=i.issues.length,b=g._zod.check(i);if(b instanceof Promise&&d?.async===!1)throw new C;if(h||b instanceof Promise)h=(h??Promise.resolve()).then(async()=>{await b,i.issues.length!==w&&(l||(l=F(i,w)))});else{if(i.issues.length===w)continue;l||(l=F(i,w))}}return h?h.then(()=>i):i},o=(i,c,d)=>{if(F(i))return i.aborted=!0,i;const l=a(c,n,d);if(l instanceof Promise){if(d.async===!1)throw new C;return l.then(h=>e._zod.parse(h,d))}return e._zod.parse(l,d)};e._zod.run=(i,c)=>{if(c.skipChecks)return e._zod.parse(i,c);if(c.direction==="backward"){const l=e._zod.parse({value:i.value,issues:[]},{...c,skipChecks:!0});return l instanceof Promise?l.then(h=>o(h,i,c)):o(l,i,c)}const d=e._zod.parse(i,c);if(d instanceof Promise){if(c.async===!1)throw new C;return d.then(l=>a(l,n,c))}return a(d,n,c)}}k(e,"~standard",()=>({validate:a=>{try{const o=ze(e,a);return o.success?{value:o.data}:{issues:o.error?.issues}}catch{return $e(e,a).then(i=>i.success?{value:i.data}:{issues:i.error?.issues})}},vendor:"zod",version:1}))}),Ze=f("$ZodString",(e,t)=>{x.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??_t(e._zod.bag),e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=String(r.value)}catch{}return typeof r.value=="string"||r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:e}),r}}),re=f("$ZodStringFormat",(e,t)=>{Se.init(e,t),Ze.init(e,t)}),jt=f("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=kt),re.init(e,t)}),Mt=f("$ZodURL",(e,t)=>{re.init(e,t),e._zod.check=r=>{try{const n=r.value.trim(),a=new URL(n);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(a.hostname)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:t.hostname.source,input:r.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(a.protocol.endsWith(":")?a.protocol.slice(0,-1):a.protocol)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:r.value,inst:e,continue:!t.abort})),t.normalize?r.value=a.href:r.value=n;return}catch{r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:e,continue:!t.abort})}}}),Nt=f("$ZodNumber",(e,t)=>{x.init(e,t),e._zod.pattern=e._zod.bag.pattern??zt,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Number(r.value)}catch{}const a=r.value;if(typeof a=="number"&&!Number.isNaN(a)&&Number.isFinite(a))return r;const o=typeof a=="number"?Number.isNaN(a)?"NaN":Number.isFinite(a)?void 0:"Infinity":void 0;return r.issues.push({expected:"number",code:"invalid_type",input:a,inst:e,...o?{received:o}:{}}),r}}),Ot=f("$ZodBoolean",(e,t)=>{x.init(e,t),e._zod.pattern=$t,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=!!r.value}catch{}const a=r.value;return typeof a=="boolean"||r.issues.push({expected:"boolean",code:"invalid_type",input:a,inst:e}),r}}),Tt=f("$ZodUnknown",(e,t)=>{x.init(e,t),e._zod.parse=r=>r});function le(e,t,r){e.issues.length&&t.issues.push(...ke(r,e.issues)),t.value[r]=e.value}const Ct=f("$ZodArray",(e,t)=>{x.init(e,t),e._zod.parse=(r,n)=>{const a=r.value;if(!Array.isArray(a))return r.issues.push({expected:"array",code:"invalid_type",input:a,inst:e}),r;r.value=Array(a.length);const o=[];for(let i=0;i<a.length;i++){const c=a[i],d=t.element._zod.run({value:c,issues:[]},n);d instanceof Promise?o.push(d.then(l=>le(l,r,i))):le(d,r,i)}return o.length?Promise.all(o).then(()=>r):r}});function q(e,t,r,n,a){if(e.issues.length){if(a&&!(r in n))return;t.issues.push(...ke(r,e.issues))}e.value===void 0?r in n&&(t.value[r]=void 0):t.value[r]=e.value}function Et(e){const t=Object.keys(e.shape);for(const n of t)if(!e.shape?.[n]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${n}": expected a Zod schema`);const r=pt(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(r)}}function Lt(e,t,r,n,a,o){const i=[],c=a.keySet,d=a.catchall._zod,l=d.def.type,h=d.optout==="optional";for(const g in t){if(c.has(g))continue;if(l==="never"){i.push(g);continue}const w=d.run({value:t[g],issues:[]},n);w instanceof Promise?e.push(w.then(b=>q(b,r,g,t,h))):q(w,r,g,t,h)}return i.length&&r.issues.push({code:"unrecognized_keys",keys:i,input:t,inst:o}),e.length?Promise.all(e).then(()=>r):r}const At=f("$ZodObject",(e,t)=>{if(x.init(e,t),!Object.getOwnPropertyDescriptor(t,"shape")?.get){const c=t.shape;Object.defineProperty(t,"shape",{get:()=>{const d={...c};return Object.defineProperty(t,"shape",{value:d}),d}})}const n=ot(()=>Et(t));k(e._zod,"propValues",()=>{const c=t.shape,d={};for(const l in c){const h=c[l]._zod;if(h.values){d[l]??(d[l]=new Set);for(const g of h.values)d[l].add(g)}}return d});const a=ee,o=t.catchall;let i;e._zod.parse=(c,d)=>{i??(i=n.value);const l=c.value;if(!a(l))return c.issues.push({expected:"object",code:"invalid_type",input:l,inst:e}),c;c.value={};const h=[],g=i.shape;for(const w of i.keys){const b=g[w],y=b._zod.optout==="optional",S=b._zod.run({value:l[w],issues:[]},d);S instanceof Promise?h.push(S.then(M=>q(M,c,w,l,y))):q(S,c,w,l,y)}return o?Lt(h,l,c,d,n.value,e):h.length?Promise.all(h).then(()=>c):c}}),It=f("$ZodEnum",(e,t)=>{x.init(e,t);const r=nt(t.entries),n=new Set(r);e._zod.values=n,e._zod.pattern=new RegExp(`^(${r.filter(a=>lt.has(typeof a)).map(a=>typeof a=="string"?dt(a):a.toString()).join("|")})$`),e._zod.parse=(a,o)=>{const i=a.value;return n.has(i)||a.issues.push({code:"invalid_value",values:r,input:i,inst:e}),a}}),Rt=f("$ZodTransform",(e,t)=>{x.init(e,t),e._zod.parse=(r,n)=>{if(n.direction==="backward")throw new tt(e.constructor.name);const a=t.transform(r.value,r);if(n.async)return(a instanceof Promise?a:Promise.resolve(a)).then(i=>(r.value=i,r));if(a instanceof Promise)throw new C;return r.value=a,r}});function de(e,t){return e.issues.length&&t===void 0?{issues:[],value:void 0}:e}const Dt=f("$ZodOptional",(e,t)=>{x.init(e,t),e._zod.optin="optional",e._zod.optout="optional",k(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),k(e._zod,"pattern",()=>{const r=t.innerType._zod.pattern;return r?new RegExp(`^(${st(r.source)})?$`):void 0}),e._zod.parse=(r,n)=>{if(t.innerType._zod.optin==="optional"){const a=t.innerType._zod.run(r,n);return a instanceof Promise?a.then(o=>de(o,r.value)):de(a,r.value)}return r.value===void 0?r:t.innerType._zod.run(r,n)}}),Ut=f("$ZodDefault",(e,t)=>{x.init(e,t),e._zod.optin="optional",k(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);if(r.value===void 0)return r.value=t.defaultValue,r;const a=t.innerType._zod.run(r,n);return a instanceof Promise?a.then(o=>ue(o,t)):ue(a,t)}});function ue(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}const Ft=f("$ZodPrefault",(e,t)=>{x.init(e,t),e._zod.optin="optional",k(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,n)=>(n.direction==="backward"||r.value===void 0&&(r.value=t.defaultValue),t.innerType._zod.run(r,n))}),Bt=f("$ZodCatch",(e,t)=>{x.init(e,t),k(e._zod,"optin",()=>t.innerType._zod.optin),k(e._zod,"optout",()=>t.innerType._zod.optout),k(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,n)=>{if(n.direction==="backward")return t.innerType._zod.run(r,n);const a=t.innerType._zod.run(r,n);return a instanceof Promise?a.then(o=>(r.value=o.value,o.issues.length&&(r.value=t.catchValue({...r,error:{issues:o.issues.map(i=>A(i,n,L()))},input:r.value}),r.issues=[]),r)):(r.value=a.value,a.issues.length&&(r.value=t.catchValue({...r,error:{issues:a.issues.map(o=>A(o,n,L()))},input:r.value}),r.issues=[]),r)}}),Vt=f("$ZodPipe",(e,t)=>{x.init(e,t),k(e._zod,"values",()=>t.in._zod.values),k(e._zod,"optin",()=>t.in._zod.optin),k(e._zod,"optout",()=>t.out._zod.optout),k(e._zod,"propValues",()=>t.in._zod.propValues),e._zod.parse=(r,n)=>{if(n.direction==="backward"){const o=t.out._zod.run(r,n);return o instanceof Promise?o.then(i=>V(i,t.in,n)):V(o,t.in,n)}const a=t.in._zod.run(r,n);return a instanceof Promise?a.then(o=>V(o,t.out,n)):V(a,t.out,n)}});function V(e,t,r){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},r)}const Wt=f("$ZodCustom",(e,t)=>{te.init(e,t),x.init(e,t),e._zod.parse=(r,n)=>r,e._zod.check=r=>{const n=r.value,a=t.fn(n);if(a instanceof Promise)return a.then(o=>pe(o,r,n,e));pe(a,r,n,e)}});function pe(e,t,r,n){if(!e){const a={code:"custom",input:r,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};n._zod.def.params&&(a.params=n._zod.def.params),t.issues.push(ft(a))}}var he;class Jt{constructor(){this._map=new WeakMap,this._idmap=new Map}add(t,...r){const n=r[0];return this._map.set(t,n),n&&typeof n=="object"&&"id"in n&&this._idmap.set(n.id,t),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(t){const r=this._map.get(t);return r&&typeof r=="object"&&"id"in r&&this._idmap.delete(r.id),this._map.delete(t),this}get(t){const r=t._zod.parent;if(r){const n={...this.get(r)??{}};delete n.id;const a={...n,...this._map.get(t)};return Object.keys(a).length?a:void 0}return this._map.get(t)}has(t){return this._map.has(t)}}function qt(){return new Jt}(he=globalThis).__zod_globalRegistry??(he.__zod_globalRegistry=qt());function Ht(e,t){return new e({type:"string",...Z(t)})}function Yt(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...Z(t)})}function Kt(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...Z(t)})}function Gt(e,t){return new e({type:"number",checks:[],...Z(t)})}function Qt(e,t){return new e({type:"boolean",...Z(t)})}function Xt(e){return new e({type:"unknown"})}function er(e,t){return new St({check:"length_equals",...Z(t),length:e})}function tr(e,t){return new Zt({check:"string_format",format:"regex",...Z(t),pattern:e})}function rr(e,t,r){return new e({type:"custom",check:"custom",fn:t,...Z(r)})}const z=f("ZodMiniType",(e,t)=>{if(!e._zod)throw new Error("Uninitialized schema in ZodMiniType.");x.init(e,t),e.def=t,e.type=t.type,e.parse=(r,n)=>wt(e,r,n,{callee:e.parse}),e.safeParse=(r,n)=>ze(e,r,n),e.parseAsync=async(r,n)=>vt(e,r,n,{callee:e.parseAsync}),e.safeParseAsync=async(r,n)=>$e(e,r,n),e.check=(...r)=>e.clone({...t,checks:[...t.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]},{parent:!0}),e.with=e.check,e.clone=(r,n)=>ut(e,r,n),e.brand=()=>e,e.register=((r,n)=>(r.add(e,n),e)),e.apply=r=>r(e)}),Pe=f("ZodMiniString",(e,t)=>{Ze.init(e,t),z.init(e,t)});function p(e){return Ht(Pe,e)}const je=f("ZodMiniStringFormat",(e,t)=>{re.init(e,t),Pe.init(e,t)}),nr=f("ZodMiniEmail",(e,t)=>{jt.init(e,t),je.init(e,t)});function ar(e){return Yt(nr,e)}const or=f("ZodMiniURL",(e,t)=>{Mt.init(e,t),je.init(e,t)});function _(e){return Kt(or,e)}const ir=f("ZodMiniNumber",(e,t)=>{Nt.init(e,t),z.init(e,t)});function sr(e){return Gt(ir,e)}const cr=f("ZodMiniBoolean",(e,t)=>{Ot.init(e,t),z.init(e,t)});function fe(e){return Qt(cr,e)}const lr=f("ZodMiniUnknown",(e,t)=>{Tt.init(e,t),z.init(e,t)});function dr(){return Xt(lr)}const ur=f("ZodMiniArray",(e,t)=>{Ct.init(e,t),z.init(e,t)});function j(e,t){return new ur({type:"array",element:e,...Z(t)})}const Me=f("ZodMiniObject",(e,t)=>{At.init(e,t),z.init(e,t),k(e,"shape",()=>t.shape)});function N(e,t){const r={type:"object",shape:e??{},...Z(t)};return new Me(r)}function I(e,t){return new Me({type:"object",shape:e,catchall:dr(),...Z(t)})}const pr=f("ZodMiniEnum",(e,t)=>{It.init(e,t),z.init(e,t),e.options=Object.values(t.entries)});function hr(e,t){const r=Array.isArray(e)?Object.fromEntries(e.map(n=>[n,n])):e;return new pr({type:"enum",entries:r,...Z(t)})}const fr=f("ZodMiniTransform",(e,t)=>{Rt.init(e,t),z.init(e,t)});function K(e){return new fr({type:"transform",transform:e})}const gr=f("ZodMiniOptional",(e,t)=>{Dt.init(e,t),z.init(e,t)});function u(e){return new gr({type:"optional",innerType:e})}const mr=f("ZodMiniDefault",(e,t)=>{Ut.init(e,t),z.init(e,t)});function v(e,t){return new mr({type:"default",innerType:e,get defaultValue(){return typeof t=="function"?t():xe(t)}})}const wr=f("ZodMiniPrefault",(e,t)=>{Ft.init(e,t),z.init(e,t)});function H(e,t){return new wr({type:"prefault",innerType:e,get defaultValue(){return typeof t=="function"?t():xe(t)}})}const br=f("ZodMiniCatch",(e,t)=>{Bt.init(e,t),z.init(e,t)});function vr(e,t){return new br({type:"catch",innerType:e,catchValue:(()=>t)})}const yr=f("ZodMiniPipe",(e,t)=>{Vt.init(e,t),z.init(e,t)});function G(e,t){return new yr({type:"pipe",in:e,out:t})}const xr=f("ZodMiniCustom",(e,t)=>{Wt.init(e,t),z.init(e,t)});function kr(e,t={}){return rr(xr,e,t)}const _r=N({ui:H(N({primary:v(p(),"#255b8f"),headerFrom:v(p(),"#ccc074"),headerTo:v(p(),"#4971af"),footerFrom:v(p(),"#463932"),footerTo:v(p(),"#7fbdbc"),backgroundTilesSeed:v(sr(),1),showLogos:v(fe(),!0),cta:u(N({text:p(),url:p(),icon:v(u(p().check(tr(/^[a-z]+:[a-z-]+$/))),"tabler:message-circle")})),links:v(j(p()),["phone","email","location","profiles"])}),{}),seo:H(N({title:u(p()),description:u(p()),canonical:u(_()),ogImage:u(_()),twitterImage:u(_()),firstName:u(p()),lastName:u(p()),robots:v(u(p()),"index, follow")}),{}),modest:v(fe(),!1)}),zr=G(I({name:u(p()),company:u(p()),location:u(p()),description:u(p()),position:u(p()),url:u(_()),website:u(_()),startDate:p(),endDate:u(p()),summary:u(p()),highlights:u(j(p())),logo:u(_())}).check(kr(({name:e,company:t})=>!!(e||t),{path:["name"],message:"Either 'name' or 'company' must be provided."})),K(({company:e,name:t,url:r,website:n,...a})=>({...a,name:t??e,...r||n?{url:r??n}:{}}))),$r=I({network:p(),username:u(p()),url:u(_())}),Sr=I({address:u(p()),postalCode:u(p()),city:u(p()),countryCode:u(p().check(er(2))),region:u(p())}),Zr=G(I({name:p(),label:u(p()),image:u(_()),email:u(ar()),phone:u(p()),birthDate:u(p()),url:u(_()),website:u(_()),summary:u(p()),location:u(Sr),profiles:u(j($r))}),K(({url:e,website:t,...r})=>{const n=e??t;return{...r,...n?{url:n}:{}}})),Pr=G(N({institution:p(),url:u(_()),website:u(_()),area:u(p()),studyType:u(p()),startDate:p(),endDate:u(p()),score:u(p()),courses:u(j(p()))}),K(({url:e,website:t,...r})=>{const n=e??t;return{...r,...n?{url:n}:{}}})),jr=G(N({name:p(),date:u(p()),url:u(_()),website:u(_()),issuer:u(p())}),K(({url:e,website:t,...r})=>{const n=e??t;return{...r,...n?{url:n}:{}}})),Mr=N({name:p(),level:u(p()),keywords:u(j(p()))}),Nr=I({language:p(),fluency:u(p())}),Or=N({meta:H(I({lang:v(vr(hr(["en","fr"]),"en"),"en"),lastModified:v(p(),()=>new Date().toISOString()),themeConfig:H(_r,{})}),{}),work:v(u(j(zr)),[]),basics:Zr,education:v(u(j(Pr)),[]),certificates:v(u(j(jr)),[]),skills:v(u(j(Mr)),[]),languages:v(u(j(Nr)),[])});function D({date:e,children:t,...r}){const n=T.normalize(e);return n?s("time",{dateTime:T.toISO(n),...r,children:t}):s("span",{...r,children:t})}function ne({name:e,children:t,...r}){return m("section",{...r,children:[e&&s("h2",{className:"before:bg-primary relative mt-4 mb-4 text-2xl before:absolute before:-bottom-1 before:left-0 before:h-1 before:w-[3ch] before:rounded-[0_0.25rem_0.25rem_0] before:print:[print-color-adjust:exact]",children:e}),t]})}function Tr({education:e,certificates:t}){const r=e&&e.length>0,n=t&&t.length>0;return!r&&!n?null:m(ne,{name:P("education"),className:"break-inside-avoid",children:[e?.map((a,o)=>m("article",{className:"mb-4 break-inside-avoid",children:[m("h3",{className:"text-lg font-bold",children:[a.studyType," : ",a.area]}),m("p",{children:[a.institution," (",a.startDate&&s(D,{date:a.startDate,children:T.format(a.startDate,"year")}),")"]})]},`edu-${o}`)),r&&n&&s("br",{}),t?.map((a,o)=>m("article",{className:"mb-4 break-inside-avoid",children:[s("h3",{className:"text-lg font-bold",children:a.name}),m("p",{children:[a.issuer," (",a.date&&s(D,{date:a.date,children:T.format(a.date,"year")}),")"]})]},`cert-${o}`))]})}const Cr=async(e,t={})=>{const r=new URL(`https://api.iconify.design/${e}.svg`);for(const[a,o]of Object.entries(t))o&&r.searchParams.set(a,o.toString());const n=await fetch(r);if(!n.ok)throw new Error(`Failed to fetch icon ${e}`);return n.text()},E=async(e,t=24)=>{const r=await Cr(e,{height:t});return new $(r)},Er=({text:e,url:t,icon:r="tabler:message-circle",...n})=>m(U,{children:[m("a",{href:t,target:"_blank",rel:"noopener noreferrer",id:"cta-fab",className:"fab--extended group fixed right-8 bottom-8 z-20 inline-flex items-center space-x-2 rounded-full bg-black/80 p-4 text-lg whitespace-nowrap text-white shadow-md backdrop-blur-sm transition-colors hover:bg-black dark:bg-gray-700 dark:text-white print:hidden",...n,children:[s("span",{className:"shrink-0",children:E(r)}),s("span",{className:"-mr-2 max-w-0 overflow-hidden text-transparent transition-all duration-300 ease-in-out group-hover:mr-0 group-hover:max-w-96 group-hover:text-inherit group-focus:mr-0 group-focus:max-w-96 group-focus:text-inherit group-[.fab--extended]:mr-0 group-[.fab--extended]:max-w-96 group-[.fab--extended]:text-inherit",children:e})]}),s("script",{dangerouslySetInnerHTML:{__html:`(${Lr.toString()})();`}})]}),Lr=()=>{const e=document.getElementById("cta-fab");if(!e||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let r=window.pageYOffset||document.documentElement.scrollTop;const n=15,a=()=>{const o=window.pageYOffset||document.documentElement.scrollTop,i=o-r;Math.abs(i)>n&&(i>0?e.classList.remove("fab--extended"):e.classList.add("fab--extended"),r=Math.max(o,0))};window.addEventListener("scroll",a,{passive:!0})};function Ar({meta:e,...t}){const r=e.lastModified;return m("footer",{className:"bg-svg-tiles from-footer-from to-footer-to -z-10 -mt-10 h-32 content-center bg-cover bg-center pt-12 pb-2 text-center text-sm text-white dark:opacity-90 dark:contrast-125 dark:saturate-50 print:hidden",...t,children:[s("div",{children:ie("last_modified",{date:s(D,{date:r,children:T.format(r,"date")})})}),s("div",{className:"mt-1 text-xs opacity-75",children:!e.themeConfig.modest&&ie("theme_credit",{link:s("a",{href:"https://www.cjean.fr",target:"_blank",className:"underline decoration-white/30 underline-offset-2 transition-colors hover:decoration-white/80",children:"Christophe Jean"})})})]})}const Ir=()=>s("header",{className:"bg-primary bg-svg-tiles from-header-from to-header-to h-2.5 bg-cover bg-center shadow-inner md:-mb-60 md:h-80 dark:opacity-90 dark:contrast-125 dark:saturate-50 print:hidden","aria-hidden":"true"});function Rr(e){return`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(e)}`}function ge(e){try{return E(`tabler:brand-${e.toLowerCase()}`)}catch{return E("tabler:link")}}const R=({children:e,...t})=>s("li",{className:"inline-flex items-center gap-x-1",...t,children:e});function Dr({basics:e,list:t=["phone","email","location","profiles"]}){const{phone:r,email:n,location:a,profiles:o=[]}=e,i=new Set,c=d=>{const l=d.toLowerCase();if(l==="phone"&&r)return m(R,{children:[E("tabler:phone"),s("a",{href:`tel:${encodeURIComponent(r)}`,title:P("phone_call"),children:r})]});if(l==="email"&&n)return m(R,{children:[E("tabler:mail"),s("a",{href:`mailto:${n}`,title:P("email_send"),children:n})]});if(l==="location"&&a)return m(R,{children:[E("tabler:map-pin"),m("a",{href:Rr(`${a.city}, ${a.region}, ${a.postalCode||""}, ${a.countryCode}`),title:P("show_address"),target:"_blank",rel:"noopener noreferrer",referrerPolicy:"no-referrer",children:[a.city,", ",a.countryCode]})]});if(l==="profiles")return o.filter(g=>!i.has(g.network.toLowerCase())).map(g=>(i.add(g.network.toLowerCase()),m(R,{children:[ge(g.network),s("a",{href:g.url,rel:"me noopener noreferrer",title:g.username,target:"_blank",referrerPolicy:"no-referrer",children:g.network})]},g.network)));const h=o.find(g=>g.network.toLowerCase()===l);return h&&!i.has(l)?(i.add(l),m(R,{children:[ge(h.network),s("a",{href:h.url,rel:"me noopener noreferrer",title:h.username,target:"_blank",referrerPolicy:"no-referrer",children:h.network})]},h.network)):null};return s("ul",{className:"my-3 inline-flex flex-wrap gap-x-[2ch] gap-y-2","aria-label":P("contact_info"),children:t.map(c)})}function Ur(e){return{"@context":"https://schema.org","@type":"ProfilePage",name:e.basics.label?P("profile_page_name",{name:e.basics.name,label:e.basics.label}):e.basics.name,description:e.basics.summary,dateModified:e.meta.lastModified,mainEntity:{"@type":"Person",name:e.basics.name,birthDate:e.basics.birthDate,jobTitle:e.basics.label,url:e.basics.url,description:e.basics.summary,image:e.basics.image,email:e.basics.email,telephone:e.basics.phone,address:{"@type":"PostalAddress",addressLocality:e.basics.location?.city,addressRegion:e.basics.location?.region,postalCode:e.basics.location?.postalCode,addressCountry:e.basics.location?.countryCode},alumniOf:e.education.map(t=>({"@type":"EducationalOrganization",name:t.institution,url:t.url})),worksFor:e.work.map(t=>({"@type":"Organization",name:t.name,location:t.location,member:{"@type":"OrganizationRole",roleName:t.position},url:t.url})),sameAs:e.basics.profiles?.map(t=>t.url),knowsAbout:e.skills.flatMap(t=>t.keywords)}}}function Fr({resume:e}){return s("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(Ur(e))}})}function Br(e){const[t,...r]=e.split(" ");return{firstNameSlice:t,lastNameSlice:r.join(" ")}}function Vr({title:e,description:t,canonical:r,robots:n}){return m(U,{children:[s("title",{children:e}),t&&s("meta",{name:"description",content:t}),s("meta",{name:"robots",content:n||"index, follow"}),r&&s("link",{rel:"canonical",href:r})]})}function Wr({title:e,description:t,url:r,image:n,firstName:a,lastName:o}){return m(U,{children:[s("meta",{property:"og:type",content:"profile"}),s("meta",{property:"og:title",content:e}),t&&s("meta",{property:"og:description",content:t}),a&&s("meta",{property:"profile:first_name",content:a}),o&&s("meta",{property:"profile:last_name",content:o}),n&&s("meta",{property:"og:image",content:n}),r&&s("meta",{property:"og:url",content:r})]})}function Jr({title:e,description:t,url:r,image:n}){return m(U,{children:[s("meta",{property:"twitter:card",content:"summary_large_image"}),s("meta",{property:"twitter:title",content:e}),t&&s("meta",{property:"twitter:description",content:t}),n&&s("meta",{property:"twitter:image",content:n}),r&&s("meta",{property:"twitter:url",content:r})]})}function qr({skills:e,...t}){return!e||e.length===0?null:s(ne,{name:P("skills"),...t,children:e.map(r=>m("div",{className:"mb-4 break-inside-avoid",children:[s("h3",{className:"text-lg font-bold",children:r.name}),s("ul",{className:"my-3 flex flex-wrap gap-2 leading-8",children:r.keywords?.map(n=>s("li",{className:"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-sm font-medium text-gray-600 inset-ring inset-ring-gray-500/10 dark:bg-slate-800 dark:text-slate-300 dark:inset-ring-white/10",children:n},n))})]},r.name))})}function Hr({works:e,showLogos:t}){return!e||e.length===0?null:s(ne,{name:P("work_experience"),children:s("ol",{className:"relative list-none border-gray-200 md:ml-4 md:border-l-[5px] md:pl-6 dark:border-slate-700/50",reversed:!0,children:e.map(r=>m("li",{className:"break-inside-avoid",children:[m("div",{className:"before:border-primary relative text-gray-500 before:absolute before:top-0 before:-left-[calc(1.5rem+2.5px)] before:hidden before:h-[19px] before:w-[19px] before:-translate-x-1/2 before:rounded-full before:border-4 before:bg-white md:before:block dark:text-slate-400 dark:before:bg-slate-900",children:[s(D,{date:r.startDate,children:T.format(r.startDate,"month")})," — ",r.endDate?s(D,{date:r.endDate,children:T.format(r.endDate,"month")}):P("present")]}),m("article",{children:[m("header",{className:`grid grid-cols-[auto_1fr] ${t&&r.logo?"gap-x-3":""}`,children:[t&&r.logo?s("img",{src:r.logo,alt:r.name,width:"64",height:"64",className:"row-span-2 h-12 w-12 object-contain",loading:"lazy"}):null,s("h3",{className:"col-start-2 text-xl font-semibold",children:r.position}),m("div",{className:"col-start-2",children:[r.url?s("a",{href:r.url,target:"_blank",rel:"noopener noreferrer",translate:"no",children:r.name}):s("span",{translate:"no",children:r.name}),r.description&&m(U,{children:[" - ",s("small",{children:r.description})]})]})]}),r.summary&&s("p",{children:r.summary}),s("ul",{className:"m-2 mb-6 list-inside list-disc",children:r.highlights?.map(n=>s("li",{children:n},n))})]})]},r.name))})})}const Yr=({resume:e,css:t,...r})=>{const{basics:n,work:a,education:o,certificates:i,skills:c,meta:d}=e,{ui:l,seo:h,modest:g}=d.themeConfig,w=Xe({seed:l.backgroundTilesSeed,cellSize:60,variance:.8}),b=h.title||(n.label?`${n.name} - ${n.label}`:n.name),y=h.description||n.summary,S=h.canonical||n.url,{firstNameSlice:M,lastNameSlice:Q}=Br(n.name);return m("html",{lang:d.lang,children:[m("head",{children:[s("meta",{charSet:"UTF-8"}),s("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),s("meta",{name:"theme-color",content:l.primary}),!g&&s("meta",{name:"generator",content:"JSON Resume Theme CJEAN"}),s(Vr,{title:b,description:y,canonical:S,robots:h.robots}),s(Wr,{title:b,description:y,url:S,image:h.ogImage||n.image,firstName:h.firstName||M,lastName:h.lastName||Q}),s(Jr,{title:b,description:y,url:S,image:h.twitterImage||n.image}),s("script",{dangerouslySetInnerHTML:{__html:"if (window.matchMedia('(prefers-color-scheme: dark)').matches) document.documentElement.classList.add('dark');"}}),s("style",{dangerouslySetInnerHTML:{__html:`
|
|
4
|
+
:root {
|
|
5
|
+
--theme-primary: ${l.primary};
|
|
6
|
+
--theme-header-from: ${l.headerFrom};
|
|
7
|
+
--theme-header-to: ${l.headerTo};
|
|
8
|
+
--theme-footer-from: ${l.footerFrom};
|
|
9
|
+
--theme-footer-to: ${l.footerTo};
|
|
10
|
+
--theme-bg-tiles: url("${w}");
|
|
11
|
+
}
|
|
12
|
+
${t}
|
|
13
|
+
`}})]}),m("body",{className:"bg-gray-200 text-gray-800 dark:bg-slate-950 dark:text-slate-300 print:bg-transparent print:text-sm",...r,children:[s(Ir,{}),s("main",{className:"relative z-10 container mx-auto max-w-5xl rounded bg-white p-4 shadow-md backdrop-blur-3xl md:p-6 dark:bg-slate-900/95 dark:text-slate-200 dark:shadow-2xl dark:ring-1 dark:ring-white/10 print:rounded-none print:shadow-none [&_a]:underline",role:"main",children:m("article",{children:[s(et,{name:n.name,label:n.label}),s(Dr,{basics:n,list:d.themeConfig.ui.links}),m("div",{className:"flex break-inside-avoid flex-wrap justify-center gap-4 sm:flex-nowrap",children:[s("div",{className:"relative inline-block",children:s("img",{src:n.image,alt:P("portrait_alt",{name:n.name}),width:"200",height:"200",className:"relative aspect-square min-w-30 rounded-full object-cover"})}),s("p",{className:"text-lg print:text-base",children:n.summary})]}),s(Hr,{works:a,showLogos:l.showLogos}),s(Tr,{education:o,certificates:i}),s(qr,{skills:c})]})}),s(Ar,{meta:d}),l.cta&&s(Er,{text:l.cta.text,url:l.cta.url,icon:l.cta.icon}),s(Fr,{resume:e})]})]})};function Kr(e,t=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(e)}&sz=${t}`}function Gr(e,t={}){const r=new URL("https://wsrv.nl/");return r.searchParams.set("url",e),t.w&&r.searchParams.set("w",t.w.toString()),t.h&&r.searchParams.set("h",t.h.toString()),t.output&&r.searchParams.set("output",t.output),t.encoding&&r.searchParams.set("encoding",t.encoding),t.fit&&r.searchParams.set("fit",t.fit),t.a&&r.searchParams.set("a",t.a),r.toString()}async function Qr(e,t=64){if(e)try{const r=Kr(e,t),n=Gr(r,{w:t,h:t,output:"webp",encoding:"base64"}),a=await fetch(n);if(!a.ok){console.warn(n,a);return}return await a.text()}catch{return}}const Xr='@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-x-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-widest:.1em;--radius-md:.375rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-sm:8px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:var(--theme-primary);--color-header-from:var(--theme-header-from);--color-header-to:var(--theme-header-to);--color-footer-from:var(--theme-footer-from);--color-footer-to:var(--theme-footer-to);--min-width-30:7.5rem}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.portrait-card{width:calc(var(--spacing) * 48);height:calc(var(--spacing) * 48);cursor:pointer;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;-webkit-user-select:none;user-select:none;transform-style:preserve-3d;flex-shrink:0;transition-duration:.2s;position:relative}@media(min-width:48rem){.portrait-card{width:calc(var(--spacing) * 32);height:calc(var(--spacing) * 32)}}@media(hover:hover){.portrait-card:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.portrait-card:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.portrait-card.rotate-y-180{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.portrait-card__side{inset:calc(var(--spacing) * 0);border-style:var(--tw-border-style);border-width:4px;border-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.7s;backface-visibility:hidden;transition-duration:.7s;position:absolute}.portrait-card__side:where(.dark,.dark *){border-color:var(--color-slate-800)}.portrait-card__front{object-fit:cover;border-radius:3.40282e38px}.portrait-card__back{--tw-rotate-y:rotateY(180deg);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing) * .5);justify-content:center;align-items:center;display:flex}@media print{.portrait-card__back{display:none}}.portrait-card__back img{object-fit:contain;width:100%;height:100%}}@layer utilities{.fixed{position:fixed}.relative{position:relative}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.right-8{right:calc(var(--spacing) * 8)}.bottom-8{bottom:calc(var(--spacing) * 8)}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-2{margin:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-4{margin-top:calc(var(--spacing) * 4)}.-mr-2{margin-right:calc(var(--spacing) * -2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-2\\.5{height:calc(var(--spacing) * 2.5)}.h-12{height:calc(var(--spacing) * 12)}.h-32{height:calc(var(--spacing) * 32)}.w-12{width:calc(var(--spacing) * 12)}.max-w-0{max-width:calc(var(--spacing) * 0)}.max-w-5xl{max-width:var(--container-5xl)}.min-w-30{min-width:var(--min-width-30)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.break-inside-avoid{break-inside:avoid}.grid-cols-\\[auto_1fr\\]{grid-template-columns:auto 1fr}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-1{column-gap:calc(var(--spacing) * 1)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-\\[2ch\\]{column-gap:2ch}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.border-gray-200{border-color:var(--color-gray-200)}.bg-black\\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-primary{background-color:var(--color-primary)}.bg-white{background-color:var(--color-white)}.bg-svg-tiles{--gradient-angle:16deg;background-image:var(--theme-bg-tiles),linear-gradient(var(--gradient-angle),var(--tw-gradient-from,transparent),var(--tw-gradient-to,transparent))}.from-footer-from{--tw-gradient-from:var(--color-footer-from);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-header-from{--tw-gradient-from:var(--color-header-from);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-footer-to{--tw-gradient-to:var(--color-footer-to);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-header-to{--tw-gradient-to:var(--color-header-to);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-1{padding-block:calc(var(--spacing) * 1)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-800{color:var(--color-gray-800)}.text-primary{color:var(--color-primary)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.decoration-white\\/30{text-decoration-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.decoration-white\\/30{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white) 30%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.underline-offset-2{text-underline-offset:2px}.opacity-75{opacity:.75}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring-gray-500\\/10{--tw-inset-ring-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.inset-ring-gray-500\\/10{--tw-inset-ring-color:color-mix(in oklab, var(--color-gray-500) 10%, transparent)}}.backdrop-blur-3xl{--tw-backdrop-blur:blur(var(--blur-3xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.kerning-none{font-kerning:none}@media(hover:hover){.group-hover\\:mr-0:is(:where(.group):hover *){margin-right:calc(var(--spacing) * 0)}.group-hover\\:max-w-96:is(:where(.group):hover *){max-width:calc(var(--spacing) * 96)}.group-hover\\:text-inherit:is(:where(.group):hover *){color:inherit}}.group-focus\\:mr-0:is(:where(.group):focus *){margin-right:calc(var(--spacing) * 0)}.group-focus\\:max-w-96:is(:where(.group):focus *){max-width:calc(var(--spacing) * 96)}.group-focus\\:text-inherit:is(:where(.group):focus *){color:inherit}.group-\\[\\.fab--extended\\]\\:mr-0:is(:where(.group).fab--extended *){margin-right:calc(var(--spacing) * 0)}.group-\\[\\.fab--extended\\]\\:max-w-96:is(:where(.group).fab--extended *){max-width:calc(var(--spacing) * 96)}.group-\\[\\.fab--extended\\]\\:text-inherit:is(:where(.group).fab--extended *){color:inherit}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0:before{content:var(--tw-content);top:calc(var(--spacing) * 0)}.before\\:-bottom-1:before{content:var(--tw-content);bottom:calc(var(--spacing) * -1)}.before\\:-left-\\[calc\\(1\\.5rem\\+2\\.5px\\)\\]:before{content:var(--tw-content);left:calc(-1.5rem - 2.5px)}.before\\:left-0:before{content:var(--tw-content);left:calc(var(--spacing) * 0)}.before\\:hidden:before{content:var(--tw-content);display:none}.before\\:h-1:before{content:var(--tw-content);height:calc(var(--spacing) * 1)}.before\\:h-\\[19px\\]:before{content:var(--tw-content);height:19px}.before\\:w-\\[3ch\\]:before{content:var(--tw-content);width:3ch}.before\\:w-\\[19px\\]:before{content:var(--tw-content);width:19px}.before\\:-translate-x-1\\/2:before{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.before\\:rounded-\\[0_0\\.25rem_0\\.25rem_0\\]:before{content:var(--tw-content);border-radius:0 .25rem .25rem 0}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:border-4:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}.before\\:border-primary:before{content:var(--tw-content);border-color:var(--color-primary)}.before\\:bg-primary:before{content:var(--tw-content);background-color:var(--color-primary)}.before\\:bg-white:before{content:var(--tw-content);background-color:var(--color-white)}@media(hover:hover){.hover\\:bg-black:hover{background-color:var(--color-black)}.hover\\:decoration-white\\/80:hover{text-decoration-color:#fffc}@supports (color:color-mix(in lab,red,red)){.hover\\:decoration-white\\/80:hover{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white) 80%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}}@media(min-width:40rem){.sm\\:flex-nowrap{flex-wrap:nowrap}}@media(min-width:48rem){.md\\:-mb-60{margin-bottom:calc(var(--spacing) * -60)}.md\\:ml-4{margin-left:calc(var(--spacing) * 4)}.md\\:h-80{height:calc(var(--spacing) * 80)}.md\\:border-l-\\[5px\\]{border-left-style:var(--tw-border-style);border-left-width:5px}.md\\:p-6{padding:calc(var(--spacing) * 6)}.md\\:pr-0{padding-right:calc(var(--spacing) * 0)}.md\\:pl-6{padding-left:calc(var(--spacing) * 6)}.md\\:before\\:block:before{content:var(--tw-content);display:block}}.dark\\:border-slate-700\\/50:where(.dark,.dark *){border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\\:border-slate-700\\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.dark\\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\\:bg-slate-900\\/95:where(.dark,.dark *){background-color:#0f172bf2}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-slate-900\\/95:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900) 95%,transparent)}}.dark\\:bg-slate-950:where(.dark,.dark *){background-color:var(--color-slate-950)}.dark\\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\\:opacity-90:where(.dark,.dark *){opacity:.9}.dark\\:shadow-2xl:where(.dark,.dark *){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:ring-1:where(.dark,.dark *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:ring-white\\/10:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\\:ring-white\\/10:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.dark\\:inset-ring-white\\/10:where(.dark,.dark *){--tw-inset-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\\:inset-ring-white\\/10:where(.dark,.dark *){--tw-inset-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.dark\\:contrast-125:where(.dark,.dark *){--tw-contrast:contrast(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.dark\\:saturate-50:where(.dark,.dark *){--tw-saturate:saturate(50%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.dark\\:before\\:bg-slate-900:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--color-slate-900)}@media print{.print\\:hidden{display:none}.print\\:rounded-none{border-radius:0}.print\\:bg-transparent{background-color:#0000}.print\\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.print\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.print\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.before\\:print\\:\\[print-color-adjust\\:exact\\]:before{content:var(--tw-content)}@media print{.before\\:print\\:\\[print-color-adjust\\:exact\\]:before{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.\\[\\&_a\\]\\:underline a{text-decoration-line:underline}}:where(.dark){--color-primary:oklch(from var(--theme-primary) calc(l*.9) calc(c*.7) h)}@media print{.portrait-card{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);transform:none}.portrait-card__side{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:none}}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}';async function en(e){const t=Or.parse(e);return Ge(t.meta.lang),t.meta.themeConfig.ui.showLogos&&await Promise.all(t.work.filter(r=>!r.logo).map(async r=>{r.logo=await Qr(r.url)})),`<!doctype html>${await Yr({resume:t,css:Xr})}`}exports.render=en;
|