diff --git a/public/collaborators/europython_logo.png b/public/collaborators/europython_logo.png
new file mode 100644
index 0000000..d76c888
Binary files /dev/null and b/public/collaborators/europython_logo.png differ
diff --git a/public/collaborators/pyes_logo.png b/public/collaborators/pyes_logo.png
new file mode 100644
index 0000000..cf7ecd9
Binary files /dev/null and b/public/collaborators/pyes_logo.png differ
diff --git a/public/collaborators/python_logo.png b/public/collaborators/python_logo.png
new file mode 100644
index 0000000..d5dfdc7
Binary files /dev/null and b/public/collaborators/python_logo.png differ
diff --git a/public/collaborators/ub_white.png b/public/collaborators/ub_white.png
new file mode 100644
index 0000000..45a0d43
Binary files /dev/null and b/public/collaborators/ub_white.png differ
diff --git a/src/components/Button.astro b/src/components/Button.astro
index 8163a03..b12697e 100644
--- a/src/components/Button.astro
+++ b/src/components/Button.astro
@@ -13,8 +13,8 @@ const variants = {
primary: 'bg-orange-500 text-white hover:bg-orange-600',
secondary: 'bg-amber-400 text-stone-900 hover:bg-amber-500',
outline: 'outline outline-2 outline-offset-[-2px] outline-orange-500 text-orange-500 hover:bg-orange-50',
- ghost: 'text-stone-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-800',
-}
+ ghost: 'text-stone-900 text-white hover:bg-gray-100 hover:bg-gray-800'
+};
// Map sizes based on exact Figma sizes
const sizes = {
diff --git a/src/components/Nav.astro b/src/components/Nav.astro
deleted file mode 100644
index efeecc1..0000000
--- a/src/components/Nav.astro
+++ /dev/null
@@ -1,27 +0,0 @@
----
-import Navigation from './Navigation.astro'
-
-/**
- * Nav Component
- *
- * @description Main navigation wrapper that uses the accessible Navigation component
- * This component provides professional-level accessibility following WCAG 2.1 guidelines
- *
- * Keyboard behaviors (inherited from Navigation.astro):
- * - ArrowLeft/ArrowRight: Navigate between top-level menu items
- * - ArrowDown: Open dropdown and navigate down through items
- * - ArrowUp: Navigate up through dropdown items
- * - Escape: Close dropdown/mobile menu and return focus to trigger
- * - Tab: Standard tab navigation with proper focus management
- */
-
-interface Props {
- lang?: string
-}
-
-const { lang } = Astro.props
----
-
-
diff --git a/src/components/home/SectionMain.astro b/src/components/home/SectionMain.astro
index d21cce6..2602d3f 100644
--- a/src/components/home/SectionMain.astro
+++ b/src/components/home/SectionMain.astro
@@ -1,5 +1,5 @@
---
-import { texts } from '../../i18n/home'
+import { texts } from '@/i18n/home'
import CenteredPanel from '../CenteredPanel.astro'
interface Props {
diff --git a/src/components/index.astro b/src/components/index.astro
index 9db6170..f3ece26 100644
--- a/src/components/index.astro
+++ b/src/components/index.astro
@@ -1,5 +1,5 @@
---
-import Layout from '../layouts/Layout.astro'
+import Layout from '@/layouts/Layout.astro'
import SectionMain from './home/SectionMain.astro'
import SectionSponsors from './home/SectionSponsors.astro'
diff --git a/src/pages/constants.ts b/src/constants.ts
similarity index 50%
rename from src/pages/constants.ts
rename to src/constants.ts
index 6857489..efb50d5 100644
--- a/src/pages/constants.ts
+++ b/src/constants.ts
@@ -1 +1,2 @@
export const SPONSORS_EMAIL = 'sponsors@2026.es.pycon.org'
+export const CONTACT_EMAIL = 'contacto@2026.es.pycon.org'
diff --git a/src/i18n/components/footer/ca.ts b/src/i18n/components/footer/ca.ts
new file mode 100644
index 0000000..c1e193c
--- /dev/null
+++ b/src/i18n/components/footer/ca.ts
@@ -0,0 +1,10 @@
+export const ca = {
+ copyright: 'Copyright © Python España & PyConES 2026 Org',
+ links: [{ label: 'Codi de conducta', href: '/ca/code-of-conduct' }],
+ social: {
+ title: 'Segueix-nos',
+ },
+ collaborators: {
+ title: 'Col·laboren',
+ },
+} as const
diff --git a/src/i18n/components/footer/en.ts b/src/i18n/components/footer/en.ts
new file mode 100644
index 0000000..dcb250d
--- /dev/null
+++ b/src/i18n/components/footer/en.ts
@@ -0,0 +1,10 @@
+export const en = {
+ copyright: 'Copyright © Python España & PyConES 2026 Org',
+ links: [{ label: 'Code of Conduct', href: '/en/code-of-conduct' }],
+ social: {
+ title: 'Follow us',
+ },
+ collaborators: {
+ title: 'Collaborators',
+ },
+} as const
diff --git a/src/i18n/components/footer/es.ts b/src/i18n/components/footer/es.ts
new file mode 100644
index 0000000..1745a26
--- /dev/null
+++ b/src/i18n/components/footer/es.ts
@@ -0,0 +1,10 @@
+export const es = {
+ copyright: 'Copyright © Python España & PyConES 2026 Org',
+ links: [{ label: 'Código de conducta', href: '/es/code-of-conduct' }],
+ social: {
+ title: 'Síguenos en redes',
+ },
+ collaborators: {
+ title: 'Colaboran',
+ },
+} as const
diff --git a/src/i18n/components/footer/index.ts b/src/i18n/components/footer/index.ts
new file mode 100644
index 0000000..98f8310
--- /dev/null
+++ b/src/i18n/components/footer/index.ts
@@ -0,0 +1,9 @@
+import { es } from './es'
+import { en } from './en'
+import { ca } from './ca'
+
+export const footerTexts = {
+ es,
+ en,
+ ca,
+} as const
diff --git a/src/i18n/sponsors/ca.ts b/src/i18n/sponsors/ca.ts
index a1767c5..ce55902 100644
--- a/src/i18n/sponsors/ca.ts
+++ b/src/i18n/sponsors/ca.ts
@@ -409,16 +409,6 @@ export const ca = {
},
],
},
- socialLinks: {
- title: 'Segueix-nos a les xarxes',
- items: [
- { icon: '🦋', label: 'Bluesky', url: 'https://bsky.app/profile/es.pycon.org' },
- { icon: '🐙', label: 'GitHub', url: 'https://github.com/python-spain' },
- { icon: '𝕏', label: '', url: 'https://x.com/PyConES' },
- { icon: '💼', label: 'LinkedIn', url: 'https://www.linkedin.com/company/pycones' },
- { icon: '📸', label: 'Instagram', url: 'https://www.instagram.com/pycon_es' },
- ],
- },
contact: {
title: 'T’hi apuntes?',
body: 'T’ho posem fàcil. Escriu-nos explicant-nos quin nivell de patrocini t’interessa o quin pressupost teniu al cap. Nosaltres et guiarem en el procés, resoldrem els teus dubtes i veurem com encaixar la teva marca de la millor forma possible.',
diff --git a/src/i18n/sponsors/en.ts b/src/i18n/sponsors/en.ts
index bf9daf0..bd8e5a2 100644
--- a/src/i18n/sponsors/en.ts
+++ b/src/i18n/sponsors/en.ts
@@ -409,16 +409,7 @@ export const en = {
},
],
},
- socialLinks: {
- title: 'Follow us',
- items: [
- { icon: '🦋', label: 'Bluesky', url: 'https://bsky.app/profile/es.pycon.org' },
- { icon: '🐙', label: 'GitHub', url: 'https://github.com/python-spain' },
- { icon: '𝕏', label: '', url: 'https://x.com/PyConES' },
- { icon: '💼', label: 'LinkedIn', url: 'https://www.linkedin.com/company/pycones' },
- { icon: '📸', label: 'Instagram', url: 'https://www.instagram.com/pycon_es' },
- ],
- },
+
contact: {
title: 'Interested?',
body: 'We make it easy. Write to us mentioning which sponsorship level interests you or what budget you have in mind. We will guide you through the process and help your brand fit in the best possible way.',
diff --git a/src/i18n/sponsors/es.ts b/src/i18n/sponsors/es.ts
index d92f0e0..1fa451c 100644
--- a/src/i18n/sponsors/es.ts
+++ b/src/i18n/sponsors/es.ts
@@ -30,6 +30,17 @@ export const es = {
sunday: 'Domingo',
sundayBody: 'Más charlas, "charlas relámpago" y la despedida final.',
},
+ socialLinks: {
+ title: 'Síguenos en redes',
+ items: [
+ { icon: '🦋', label: 'Bluesky', url: 'https://bsky.app/profile/es.pycon.org' },
+ { icon: '🐙', label: 'GitHub', url: 'https://github.com/python-spain' },
+ { icon: '🐘', label: 'Mastodon', url: 'https://fosstodon.org/@pycones' },
+ { icon: '𝕏', label: '', url: 'https://x.com/PyConES' },
+ { icon: '💼', label: 'LinkedIn', url: 'https://www.linkedin.com/company/pycones' },
+ { icon: '📸', label: 'Instagram', url: 'https://www.instagram.com/pycon_es' },
+ ],
+ },
stats: {
title: 'La PyConES en números',
items: [
@@ -409,16 +420,7 @@ export const es = {
},
],
},
- socialLinks: {
- title: 'Síguenos en redes',
- items: [
- { icon: '🦋', label: 'Bluesky', url: 'https://bsky.app/profile/es.pycon.org' },
- { icon: '🐙', label: 'GitHub', url: 'https://github.com/python-spain' },
- { icon: '𝕏', label: '', url: 'https://x.com/PyConES' },
- { icon: '💼', label: 'LinkedIn', url: 'https://www.linkedin.com/company/pycones' },
- { icon: '📸', label: 'Instagram', url: 'https://www.instagram.com/pycon_es' },
- ],
- },
+
contact: {
title: '¿Te apuntas?',
body: 'Te lo ponemos fácil. Escríbenos contándonos qué nivel de patrocinio te interesa o qué presupuesto tenéis en mente. Nosotros te guiaremos en el proceso, resolveremos tus dudas y veremos cómo encajar tu marca de la mejor forma posible.',
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index f8cba77..c8c0613 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,6 +1,7 @@
---
-import Nav from '../components/Nav.astro'
-import '../style/global.css'
+import Header from './components/Header/Header.astro'
+import Footer from './components/Footer.astro'
+import '@/style/global.css'
import '@fontsource-variable/jetbrains-mono'
import '@fontsource-variable/outfit'
import { ClientRouter } from 'astro:transitions'
@@ -114,22 +115,40 @@ const alternates = [
-
+
-
+
+