11---
22import { jobsTexts } from ' ../i18n/jobs'
3+ import { menuTexts } from ' ../i18n/menu'
34
45interface Props {
56 lang: string
@@ -20,6 +21,7 @@ interface JobFrontmatter {
2021
2122const { lang } = Astro .props
2223const t = jobsTexts [(lang || ' es' ) as keyof typeof jobsTexts ]
24+ const menuT = menuTexts [(lang || ' es' ) as keyof typeof menuTexts ]
2325
2426const esJobs = Object .values (import .meta .glob (' ../data/jobs/es/*.md' , { eager: true })) as { frontmatter: JobFrontmatter }[]
2527const enJobs = Object .values (import .meta .glob (' ../data/jobs/en/*.md' , { eager: true })) as { frontmatter: JobFrontmatter }[]
@@ -58,19 +60,18 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
5860 jobs .length === 0 ? (
5961 <p class = " text-pycon-gray-25 text-lg" >{ t .no_jobs } </p >
6062 ) : (
61- <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 >
63+ <ul class = " grid md:grid-cols-2 gap-8 list-none m-0 p-0" >
6364 { 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' } ` } >
65- <header class = " flex items-start justify-between mb-3" >
65+ <li 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' } ` } >
66+ <div class = " flex items-start justify-between mb-3" >
6667 <div >
6768 <h2 class = " text-xl font-bold text-white mb-1" >{ job .title } </h2 >
6869 <p class = " text-pycon-orange text-lg font-medium" >{ job .company } </p >
6970 </div >
7071 { isFeatured (job .tier ) && (
7172 <span class = " px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase" >{ t .featured } </span >
7273 )}
73- </header >
74+ </div >
7475
7576 <div class = " h-20 mb-3" >
7677 <p class = " text-pycon-gray-25 text-base leading-relaxed line-clamp-3" >{ job .description } </p >
@@ -79,15 +80,15 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
7980 { job .skills && job .skills .length > 0 && (
8081 <div class = " mb-3" >
8182 <p class = " text-sm text-pycon-gray-50 mb-2 uppercase tracking-wide" >{ t .skills } </p >
82- <div class = " flex flex-wrap gap-2" >
83+ <ul class = " flex flex-wrap gap-2 list-none m-0 p-0 " aria-label = { t . skills } >
8384 { 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 >
85+ <li >< 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 ></ li >
8586 ))}
86- </div >
87+ </ul >
8788 </div >
8889 )}
8990
90- <footer class = " mt-auto" >
91+ <div class = " mt-auto" >
9192 <div class = " flex flex-wrap items-center gap-x-4 gap-y-2 text-base text-pycon-gray-50 mb-4" >
9293 <div class = " flex items-center gap-2" >
9394 <svg class = " w-4 h-4 shrink-0" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" aria-hidden = " true" >
@@ -100,16 +101,16 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
100101 { job .salary && <span class = " text-pycon-yellow" >{ job .salary } </span >}
101102 </div >
102103
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" >
104+ <a href = { job .apply_url } target = " _blank" rel = " noopener noreferrer" aria-label = { ` ${job .title } en ${job .company } ${t .apply } ${t .location }: ${job .location } ${ menuT . new_tab } ` } 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" >
104105 { t .apply }
105106 <svg class = " w-4 h-4" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" aria-hidden = " true" >
106107 <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" />
107108 </svg >
108109 </a >
109- </footer >
110- </article >
110+ </div >
111+ </li >
111112 ))}
112- </section >
113+ </ul >
113114 )
114115 }
115116</div >
0 commit comments