@@ -21,9 +21,15 @@ interface JobFrontmatter {
2121const { lang } = Astro .props
2222const t = jobsTexts [(lang || ' es' ) as keyof typeof jobsTexts ]
2323
24- const esJobs = Object .values (import .meta .glob (' ../data/jobs/es/*.md' , { eager: true })) as { frontmatter: JobFrontmatter }[]
25- const enJobs = Object .values (import .meta .glob (' ../data/jobs/en/*.md' , { eager: true })) as { frontmatter: JobFrontmatter }[]
26- const caJobs = Object .values (import .meta .glob (' ../data/jobs/ca/*.md' , { eager: true })) as { frontmatter: JobFrontmatter }[]
24+ const esJobs = Object .values (import .meta .glob (' ../data/jobs/es/*.md' , { eager: true })) as {
25+ frontmatter: JobFrontmatter
26+ }[]
27+ const enJobs = Object .values (import .meta .glob (' ../data/jobs/en/*.md' , { eager: true })) as {
28+ frontmatter: JobFrontmatter
29+ }[]
30+ const caJobs = Object .values (import .meta .glob (' ../data/jobs/ca/*.md' , { eager: true })) as {
31+ frontmatter: JobFrontmatter
32+ }[]
2733
2834const allJobsMap: Record <string , { frontmatter: JobFrontmatter }[]> = {
2935 es: esJobs ,
@@ -59,16 +65,22 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
5965 <p class = " text-pycon-gray-25 text-lg" >{ t .no_jobs } </p >
6066 ) : (
6167 <section aria-labelledby = " jobs-list-heading" class = " grid md:grid-cols-2 gap-8" >
62- <h2 id = " jobs-list-heading" class = " sr-only" >{ t .hero } </h2 >
68+ <h2 id = " jobs-list-heading" class = " sr-only" >
69+ { t .hero }
70+ </h2 >
6371 { jobs .map (({ frontmatter : job }) => (
64- <article class = { ` flex flex-col bg-pycon-black/40 p-6 rounded-2xl border transition-all motion-safe:hover:-translate-y-2 ${isFeatured (job .tier ) ? ' border-pycon-orange/50 hover:border-pycon-orange' : ' border-white/5 hover:border-white/20' } ` } >
72+ <article
73+ class = { ` flex flex-col bg-pycon-black/40 p-6 rounded-2xl border transition-all motion-safe:hover:-translate-y-2 ${isFeatured (job .tier ) ? ' border-pycon-orange/50 hover:border-pycon-orange' : ' border-white/5 hover:border-white/20' } ` }
74+ >
6575 <header class = " flex items-start justify-between mb-3" >
6676 <div >
6777 <h2 class = " text-xl font-bold text-white mb-1" >{ job .title } </h2 >
6878 <p class = " text-pycon-orange text-lg font-medium" >{ job .company } </p >
6979 </div >
7080 { isFeatured (job .tier ) && (
71- <span class = " px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase" >{ t .featured } </span >
81+ <span class = " px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase" >
82+ { t .featured }
83+ </span >
7284 )}
7385 </header >
7486
@@ -81,7 +93,9 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
8193 <p class = " text-sm text-pycon-gray-50 mb-2 uppercase tracking-wide" >{ t .skills } </p >
8294 <div class = " flex flex-wrap gap-2" >
8395 { job .skills .map ((skill ) => (
84- <span class = " px-3 py-1.5 bg-gradient-to-r from-pycon-orange/30 to-pycon-yellow/20 text-white text-sm rounded-full border border-pycon-orange/30" >{ skill } </span >
96+ <span class = " px-3 py-1.5 bg-gradient-to-r from-pycon-orange/30 to-pycon-yellow/20 text-white text-sm rounded-full border border-pycon-orange/30" >
97+ { skill }
98+ </span >
8599 ))}
86100 </div >
87101 </div >
@@ -90,20 +104,47 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
90104 <footer class = " mt-auto" >
91105 <div class = " flex flex-wrap items-center gap-x-4 gap-y-2 text-base text-pycon-gray-50 mb-4" >
92106 <div class = " flex items-center gap-2" >
93- <svg class = " w-4 h-4 shrink-0" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" aria-hidden = " true" >
94- <path stroke-linecap = " round" stroke-linejoin = " round" stroke-width = " 2" d = " M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
95- <path stroke-linecap = " round" stroke-linejoin = " round" stroke-width = " 2" d = " M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
107+ <svg
108+ class = " w-4 h-4 shrink-0"
109+ fill = " none"
110+ stroke = " currentColor"
111+ viewBox = " 0 0 24 24"
112+ aria-hidden = " true"
113+ >
114+ <path
115+ stroke-linecap = " round"
116+ stroke-linejoin = " round"
117+ stroke-width = " 2"
118+ d = " M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
119+ />
120+ <path
121+ stroke-linecap = " round"
122+ stroke-linejoin = " round"
123+ stroke-width = " 2"
124+ d = " M15 11a3 3 0 11-6 0 3 3 0 016 0z"
125+ />
96126 </svg >
97127 <span >{ job .location } </span >
98128 </div >
99129 <span class = " px-2 py-0.5 bg-white/5 rounded text-xs" >{ job .type } </span >
100130 { job .salary && <span class = " text-pycon-yellow" >{ job .salary } </span >}
101131 </div >
102132
103- <a href = { job .apply_url } target = " _blank" rel = " noopener noreferrer" aria-label = { ` ${job .title } en ${job .company } ${t .apply } ${t .location }: ${job .location } ` } class = " inline-flex items-center gap-2 px-4 py-2 bg-pycon-orange text-white font-bold rounded-lg hover:bg-white hover:text-pycon-orange transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-pycon-orange" >
133+ <a
134+ href = { job .apply_url }
135+ target = " _blank"
136+ rel = " noopener noreferrer"
137+ aria-label = { ` ${job .title } en ${job .company } ${t .apply } ${t .location }: ${job .location } ` }
138+ class = " inline-flex items-center gap-2 px-4 py-2 bg-pycon-orange text-white font-bold rounded-lg hover:bg-white hover:text-pycon-orange transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-pycon-orange"
139+ >
104140 { t .apply }
105141 <svg class = " w-4 h-4" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" aria-hidden = " true" >
106- <path stroke-linecap = " round" stroke-linejoin = " round" stroke-width = " 2" d = " M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
142+ <path
143+ stroke-linecap = " round"
144+ stroke-linejoin = " round"
145+ stroke-width = " 2"
146+ d = " M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
147+ />
107148 </svg >
108149 </a >
109150 </footer >
@@ -142,4 +183,4 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
142183 animation: none;
143184 }
144185 }
145- </style >
186+ </style >
0 commit comments