Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/site-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,14 @@ jobs:
- name: Validate JavaScript syntax
run: |
node --check 2026/js/main.js
node --check 2026/js/registro.js
node --check 2026/js/ponentes.js
node --check 2026/js/convence-a-tu-jefe.js
node --check 2026/js/supabase-config.js
node --check 2026/js/voluntariado.js
node --check tests/consent-coc.cjs
- name: Check consent persistence and Code of Conduct version
run: |
node --test tests/consent-coc.cjs
node --test tests/voluntariado-page.cjs
node --test tests/*.cjs
- name: Check whitespace errors
run: git diff --check HEAD^ HEAD
4 changes: 2 additions & 2 deletions 2026/about.html
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,10 @@ <h3>Conexiones</h3>

<section class="section">
<div class="container">
<div class="card hero-card" style="max-width: 900px; margin: 0 auto;">
<div class="card hero-card hero-card--centered-900">
<h2>¿Te interesa participar?</h2>
<p>Seguimos trabajando en la programación final, pero ya puedes conocer la edición 2026, la modalidad, la sede y la experiencia del evento.</p>
<div class="hero-actions" style="margin-top: 1rem;">
<div class="hero-actions hero-actions--top">
<a class="btn btn-secondary" href="codigo_conducta.html">Código de conducta</a>
</div>
</div>
Expand Down
58 changes: 6 additions & 52 deletions 2026/convence-a-tu-jefe.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,7 @@
<link href="css/base.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<link href="css/responsive.css" rel="stylesheet">
<style>
.plantilla-box {
display: grid;
gap: 1rem;
max-width: 760px;
margin: 0 auto;
}

.plantilla-box textarea {
min-height: 320px;
font-family: inherit;
line-height: var(--lh-body);
white-space: pre-wrap;
}

.plantilla-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 1rem;
}

@media (max-width: 600px) {
.plantilla-actions {
flex-direction: column;
align-items: stretch;
}
}
</style>
<link href="css/convence-a-tu-jefe.css" rel="stylesheet">
</head>

<body>
Expand Down Expand Up @@ -126,7 +98,7 @@ <h2>22 y 23 de octubre de 2026</h2>

<section class="section">
<div class="container">
<div class="prose" style="max-width: 760px; margin: 0 auto;">
<div class="prose prose--narrow-760">
<div class="callout">
<p><strong>El argumento en una frase:</strong> son medio día laboral entre las dos jornadas, sede fija en la ciudad, entrada gratuita, y el equipo vuelve con networking, capacitación en Python e Inteligencia Artificial, y nuevos contactos profesionales.</p>
</div>
Expand Down Expand Up @@ -163,7 +135,7 @@ <h3>Contenido aplicable al trabajo</h3>

<section class="section">
<div class="container">
<div class="card hero-card" style="max-width: 820px; margin: 0 auto;">
<div class="card hero-card hero-card--centered-820">
<h2>¿Y si mandas a más de una persona?</h2>
<p>Enviar a varias personas del equipo puede salir más rentable para la empresa que la salida de una sola persona por el día completo: el networking, el aprendizaje y la visibilidad de marca se reparten entre más personas, en lugar de depender de que una sola los aproveche y luego los comparta con el resto.</p>
<p>Así el equipo completo se beneficia, no solo quien asiste.</p>
Expand Down Expand Up @@ -237,10 +209,10 @@ <h2>Preguntas frecuentes</h2>

<section class="section">
<div class="container">
<div class="card hero-card" style="max-width: 720px; margin: 0 auto; text-align: center;">
<div class="card hero-card hero-card--centered-720">
<h2>¿Te dieron el permiso?</h2>
<p>Regístrate para asegurar tu cupo en PyCon Panamá 2026.</p>
<div class="hero-actions" style="justify-content: center; margin-top: 1rem;">
<div class="hero-actions hero-actions--centered-top">
<a class="btn btn-primary" href="registro.html">Ir al registro</a>
</div>
</div>
Expand All @@ -263,25 +235,7 @@ <h2>¿Te dieron el permiso?</h2>
</footer>

<script src="js/main.js"></script>
<script>
const btnCopiar = document.getElementById('btnCopiarPlantilla');
const plantilla = document.getElementById('plantillaCorreo');
const copiarStatus = document.getElementById('copiarStatus');

btnCopiar.addEventListener('click', async function () {
try {
await navigator.clipboard.writeText(plantilla.value);
copiarStatus.className = 'status-message success';
copiarStatus.textContent = 'Plantilla copiada. Ya puedes pegarla en tu correo.';
} catch (err) {
plantilla.removeAttribute('readonly');
plantilla.focus();
plantilla.select();
copiarStatus.className = 'status-message error';
copiarStatus.textContent = 'No pudimos copiarla automáticamente. Está seleccionada: usa Ctrl+C o Cmd+C.';
}
});
</script>
<script src="js/convence-a-tu-jefe.js"></script>
</body>

</html>
32 changes: 32 additions & 0 deletions 2026/css/convence-a-tu-jefe.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
.plantilla-box {
display: grid;
gap: 1rem;
max-width: 760px;
margin: 0 auto;
}

.plantilla-box textarea {
min-height: 320px;
font-family: inherit;
line-height: var(--lh-body);
white-space: pre-wrap;
}

.plantilla-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 1rem;
}

@media (max-width: 600px) {
.plantilla-actions {
flex-direction: column;
align-items: stretch;
}
}

.prose--narrow-760 { max-width: 760px; margin-inline: auto; }
.hero-card--centered-820 { max-width: 820px; margin-inline: auto; }
.hero-card--centered-720 { max-width: 720px; margin-inline: auto; text-align: center; }
.hero-actions--centered-top { justify-content: center; margin-top: 1rem; }
128 changes: 128 additions & 0 deletions 2026/css/ponentes.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#btnSubmit:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}

.registro-layout {
display: grid;
grid-template-columns: 1fr 1.3fr;
gap: clamp(1.5rem, 2vw, 2.5rem);
align-items: start;
}

.registro-aside,
.registro-panel {
background: var(--surface);
border: 1px solid var(--border-soft);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
padding: clamp(1.5rem, 2vw, 2rem);
}

.registro-aside {
background: linear-gradient(180deg, rgba(47, 140, 255, 0.08), rgba(255, 255, 255, 0.95));
}

.registro-aside ul {
margin: 1rem 0 0;
padding-left: 1.1rem;
color: var(--text-secondary);
}

.registro-aside li + li {
margin-top: 0.6rem;
}

.registro-form {
display: grid;
gap: 1.1rem;
}

.field-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
}

.field {
display: grid;
gap: 0.45rem;
}

.field label {
font-weight: 700;
color: var(--text);
}

.field input,
.field select,
.field textarea {
width: 100%;
padding: 0.8rem 0.9rem;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
background: #fff;
font: inherit;
color: var(--text);
}

.field textarea {
min-height: 110px;
resize: vertical;
}

.checkbox-item input {
width: 1.1rem;
height: 1.1rem;
padding: 0;
margin-top: 0.2rem;
}

.checkbox-note {
margin: 0;
padding-left: 1.7rem;
color: var(--text-secondary);
font-size: var(--fs-xs);
}

.field input:focus,
.field select:focus,
.field textarea:focus {
outline: 3px solid rgba(47, 140, 255, 0.18);
border-color: var(--accent);
}

.checkboxes {
display: grid;
gap: 0.6rem;
}

.checkbox-item {
display: grid;
grid-template-columns: 1.1rem minmax(0, 1fr);
align-items: flex-start;
gap: 0.6rem;
color: var(--text-secondary);
}
.status-message {
min-height: 1.5rem;
margin-top: 0.25rem;
font-weight: 600;
color: var(--accent);
}

.status-message.error {
color: #d9534f;
}

.status-message.success {
color: #28a745;
}

@media (max-width: 768px) {
.registro-layout,
.field-grid {
grid-template-columns: 1fr;
}
}
Loading
Loading