POLITICA
Uno por uno, cómo votaron los diputados la creación de la comisión investigadora por el escándalo cripto $LIBRA

`
: `
`
}
${nombre}
${apellido}
${bloque}
`;
targetContainer.appendChild(card);
}
function createHemicicleSmall(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-diputados__hemiciclo.small’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 10;
// Array of seats per row (from outer to inner)
const seatsPerRow = [38, 36, 33, 30, 27, 24, 21, 19, 16, 13];
const verticalOffset = 2;
const totalSeats = seatsPerRow.reduce((a, b) => a + b, 0);
const totalVotes = nAfirmativo + nNegativo + nAbstencion + nAusente;
// Instead of percentage-based rounding, we’ll compute a per-row distribution
// using floor() and then distribute any remaining seats based on the remainders.
let rowSeatCounts = seatsPerRow.map((seatsInRow) => {
// Compute the exact (floating point) allocation for each category.
const exactAfirmativo = (nAfirmativo * seatsInRow) / totalSeats;
const exactNegativo = (nNegativo * seatsInRow) / totalSeats;
const exactAbstencion = (nAbstencion * seatsInRow) / totalSeats;
const exactAusente = (nAusente * seatsInRow) / totalSeats;
// Take floor values.
let rowAfirmativo = Math.floor(exactAfirmativo);
let rowNegativo = Math.floor(exactNegativo);
let rowAbstencion = Math.floor(exactAbstencion);
let rowAusente = Math.floor(exactAusente);
let assigned = rowAfirmativo + rowNegativo + rowAbstencion + rowAusente;
let diff = seatsInRow – assigned;
// Create an array of remainders along with category identifiers.
let remainders = [{
cat: «afirmativo»,
remainder: exactAfirmativo – rowAfirmativo
},
{
cat: «negativo»,
remainder: exactNegativo – rowNegativo
},
{
cat: «abstencion»,
remainder: exactAbstencion – rowAbstencion
},
{
cat: «ausente»,
remainder: exactAusente – rowAusente
}
];
// Sort descending by remainder.
remainders.sort((a, b) => b.remainder – a.remainder);
// Distribute the remaining seats one by one to the categories with the highest remainders.
while (diff > 0) {
for (let r of remainders) {
if (diff <= 0) break;
switch (r.cat) {
case «afirmativo»:
rowAfirmativo++;
break;
case «negativo»:
rowNegativo++;
break;
case «abstencion»:
rowAbstencion++;
break;
case «ausente»:
rowAusente++;
break;
}
diff–;
}
}
return {
afirmativo: rowAfirmativo,
negativo: rowNegativo,
abstencion: rowAbstencion,
ausente: rowAusente
};
});
// Now, using your inverted loop order (columns first, then rows)
const maxSeatsInRow = seatsPerRow[0]; // maximum seats in the outer row
// For each seat position (by column, then row), assign the color based on that row’s distribution.
for (let col = 0; col < maxSeatsInRow; col++) {
for (let row = 0; row < numberOfRows; row++) {
if (col < seatsPerRow[row]) { // only if this row has a seat at this column
const seatsInThisRow = seatsPerRow[row];
const radius = 170 – row * (16 – verticalOffset);
const angleRange = Math.PI; // semicircle
const angleStep = (seatsInThisRow > 1) ? angleRange / (seatsInThisRow – 1) : 0;
const angle = (Math.PI – angleRange) / 2 + col * angleStep;
const x = centerX + radius * Math.cos(angle);
const y = baseY – radius * Math.sin(angle);
// For this row, assign colors in order:
// First use available «afirmativo», then «negativo», then «abstencion», then «ausente»
let colorClass=»color-empty»;
if (rowSeatCounts[row].afirmativo > 0) {
colorClass=»color-afirmativo»;
rowSeatCounts[row].afirmativo–;
} else if (rowSeatCounts[row].negativo > 0) {
colorClass=»color-negativo»;
rowSeatCounts[row].negativo–;
} else if (rowSeatCounts[row].abstencion > 0) {
colorClass=»color-abstencion»;
rowSeatCounts[row].abstencion–;
} else if (rowSeatCounts[row].ausente > 0) {
colorClass=»color-ausente»;
rowSeatCounts[row].ausente–;
}
const seat = document.createElement(‘div’);
seat.classList.add(‘seat’, colorClass);
seat.style.left = `${x}px`;
seat.style.top = `${y}px`;
hemicycle.appendChild(seat);
}
}
}
// Set the legend text.
const leyText = nAfirmativo > nNegativo ? ‘Ley Aprobada’ : ‘Ley no aprobada’;
document.querySelector(‘#voto-summary’).innerHTML = `
Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}
Abstención: ${nAbstencion} |
Ausente: ${nAusente}
` + ‘
‘ + leyText + ‘
‘;
}
// Creates the big hemiciclo visualization.
function createHemicicleBig(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-diputados__hemiciclo.big’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 10;
// Array of seats per row (outer to inner; total should be 257)
const seatsPerRow = [38, 36, 33, 30, 27, 24, 21, 19, 16, 13];
const verticalOffset = 2;
const totalSeats = seatsPerRow.reduce((a, b) => a + b, 0);
// Raw vote counts must sum to totalSeats (257)
const totalVotes = nAfirmativo + nNegativo + nAbstencion + nAusente;
if (totalVotes !== totalSeats) {
console.warn(«Total votes (» + totalVotes + «) do not equal total seats (» + totalSeats + «).»);
}
// — Per-Row Distribution Using Absolute Counts —
// For each row, compute the exact allocation for each vote category based on its fraction of the total seats.
let rowSeatCounts = seatsPerRow.map(seatsInRow => {
const exactA = (nAfirmativo / totalSeats) * seatsInRow;
const exactN = (nNegativo / totalSeats) * seatsInRow;
const exactAb = (nAbstencion / totalSeats) * seatsInRow;
const exactAu = (nAusente / totalSeats) * seatsInRow;
let rowA = Math.floor(exactA);
let rowN = Math.floor(exactN);
let rowAb = Math.floor(exactAb);
let rowAu = Math.floor(exactAu);
let assigned = rowA + rowN + rowAb + rowAu;
let diff = seatsInRow – assigned;
// Create an array of remainders for each category.
let remainders = [{
cat: «afirmativo»,
rem: exactA – rowA
},
{
cat: «negativo»,
rem: exactN – rowN
},
{
cat: «abstencion»,
rem: exactAb – rowAb
},
{
cat: «ausente»,
rem: exactAu – rowAu
}
];
// Sort the remainders in descending order.
remainders.sort((a, b) => b.rem – a.rem);
// Distribute any leftover seats one by one.
while (diff > 0) {
for (let r of remainders) {
if (diff <= 0) break;
switch (r.cat) {
case «afirmativo»:
rowA++;
break;
case «negativo»:
rowN++;
break;
case «abstencion»:
rowAb++;
break;
case «ausente»:
rowAu++;
break;
}
diff–;
}
}
return {
afirmativo: rowA,
negativo: rowN,
abstencion: rowAb,
ausente: rowAu
};
});
// — Global Correction —
// Sum the allocated seats for each category across all rows.
let globalA = rowSeatCounts.reduce((sum, row) => sum + row.afirmativo, 0);
let globalN = rowSeatCounts.reduce((sum, row) => sum + row.negativo, 0);
let globalAb = rowSeatCounts.reduce((sum, row) => sum + row.abstencion, 0);
let globalAu = rowSeatCounts.reduce((sum, row) => sum + row.ausente, 0);
// For each category, if the global total is less than the raw count, add the missing seats to the outer row (row 0).
if (globalA < nAfirmativo) {
rowSeatCounts[0].afirmativo += (nAfirmativo – globalA);
}
if (globalN < nNegativo) {
rowSeatCounts[0].negativo += (nNegativo – globalN);
}
if (globalAb < nAbstencion) {
rowSeatCounts[0].abstencion += (nAbstencion – globalAb);
}
if (globalAu < nAusente) {
rowSeatCounts[0].ausente += (nAusente – globalAu);
}
// — Seat Placement Using Inverted Loop Order —
const maxSeatsInRow = seatsPerRow[0];
for (let col = 0; col < maxSeatsInRow; col++) {
for (let row = 0; row < numberOfRows; row++) {
if (col < seatsPerRow[row]) { // Only process if this row has a seat at the current column.
const seatsInThisRow = seatsPerRow[row];
const radius = 300 – row * (30 – verticalOffset);
const angleRange = Math.PI; // semicircle
const angleStep = (seatsInThisRow > 1) ? angleRange / (seatsInThisRow – 1) : 0;
const angle = (Math.PI – angleRange) / 2 + col * angleStep;
const x = centerX + radius * Math.cos(angle);
const y = baseY – radius * Math.sin(angle);
// For the current row, assign the color in order: afirmativo, then negativo, then abstencion, then ausente.
let colorClass=»color-empty»;
if (rowSeatCounts[row].afirmativo > 0) {
colorClass=»color-afirmativo»;
rowSeatCounts[row].afirmativo–;
} else if (rowSeatCounts[row].negativo > 0) {
colorClass=»color-negativo»;
rowSeatCounts[row].negativo–;
} else if (rowSeatCounts[row].abstencion > 0) {
colorClass=»color-abstencion»;
rowSeatCounts[row].abstencion–;
} else if (rowSeatCounts[row].ausente > 0) {
colorClass=»color-ausente»;
rowSeatCounts[row].ausente–;
}
const seat = document.createElement(‘div’);
seat.classList.add(‘seat’, colorClass);
seat.style.left = `${x}px`;
seat.style.top = `${y}px`;
hemicycle.appendChild(seat);
}
}
}
/* // — Update Legend —
const leyText = nAfirmativo > nNegativo ? «Ley Aprobada» : «Ley no aprobada»;
const resultsText=»shshs»;
document.querySelector(«#voto-summary»).innerHTML = leyText + resultsText; */
}
// Go-to-top button functionality.
document.addEventListener(‘DOMContentLoaded’, function() {
const goToTopButton = document.querySelector(‘.votos-diputados__go-to-top’);
const targetElement = document.querySelector(‘.votos-diputados’);
goToTopButton.addEventListener(‘click’, function() {
targetElement.scrollIntoView({
behavior: ‘smooth’
});
});
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
goToTopButton.style.display = entry.isIntersecting ? ‘block’ : ‘none’;
});
}, {
root: null,
rootMargin: ‘0px’,
threshold: 0.1
});
observer.observe(targetElement);
// Attach the toggle listener to each vote button.
const toggleBtns = document.getElementsByClassName(‘votos-diputados__voto-btn’);
for (let i = 0; i < toggleBtns.length; i++) {
toggleBtns[i].addEventListener(‘click’, function() {
this.classList.toggle(‘active’);
const panel = this.nextElementSibling;
panel.style.maxHeight = panel.style.maxHeight ? null : ‘14000px’;
});
}
// Now simulate a click on each button from within DOMContentLoaded.
// This will trigger the listener and expand each panel on load.
for (let i = 0; i < toggleBtns.length; i++) {
toggleBtns[i].click();
}
});
POLITICA
“La paz es el premio”: la foto de Javier Milei y Marco Rubio que publicó el Departamento de Estado de EEUU

En las últimas horas, el Departamento de Estado de EEUU publicó una foto oficial que ratifica la buena sintonía con el gobierno de Argentina. Con el lema “la paz es el premio”, grafica una conversación entre el presidente Javier Milei y el canciller nortemaricano, Marco Rubio, en el marco de la sesión inaugural de la denominada Junta de la Paz, que se realizó ayer en Washington.
Milei fue invitado por el propio Donald Trump a participar del foro multitaleral, que tiene por objetivo garantizar la reconstrucción de Gaza, entre otros conflictos mundiales, y durante su breve intervención ofreció el envío de los Cascos Blancos como misión humanitaria.
“Ponemos a disposición la colaboración de nuestros cascos blancos, la trayectoria en operaciones de paz es un capital probado que ponemos al servicio de la fuerza de estabilización”, subrayó Milei, al tiempo que destacó la necesidad de una “diplomacia que asume riesgos para alcanzar la paz” y resaltó el liderazgo de Trump.
Por su lado, el presiente norteamericano anunció la creación de un fondo de 7.000 millones de dólares, aportado por Kazajistán, Azerbaiyan, Emiratos Árabes Unidos, Marruecos, Bahrein, Qatar, Arabia Saudita, Uzbekistán y Kuwait.

La jornada estuvo marcada por la ausencia de países centrales de la Unión Europea, así como de Rusia, China, Japón, Canadá, México y Brasil, que no participaron activamente en la Junta de la Paz. Italia asistió en calidad de observador especial, hecho que generó malestar dentro de la estructura europea debido a su afinidad política con Trump.
Durante su discurso, Trump se refirió a la relación que mantiene con Milei. “Respaldo cuando me cae bien alguien”, indicó, y recordó que ganó las últimas elecciones “de manera aplastante”.
En medio de su exposición, sorprendió a la audiencia cuando empezó a buscar al líder de La Libertad Avanza entre los invitados. “¿Dónde está el presidente Milei?“, preguntó varias veces con una sonrisa.
“Yo lo apoyé (a Milei), lo respaldé. No se supone que deba respaldar a personas, pero respaldo cuando me cae bien alguien. Tuve un muy buen historial apoyando candidatos dentro de los Estados Unidos. Pero ahora respaldo a líderes extranjeros, incluido Viktor Orbán, que está acá, y a otros», señaló Trump.
Y recordó que en las elecciones legislativas del 2025 Milei “estaba un poco atrás en las encuestas” pero “terminó ganando por goleada”, tras su apoyo.
Por su lado, anunció que Estados Unidos contribuirá con 10.000 millones de dólares para el plan que contempla, además de la asistencia financiera, el despliegue de contingentes internacionales de estabilización y policía, ante la preocupación de que la Junta pueda constituirse en un órgano alternativo o rival para la ONU.
La sesión inaugural permitió que los representantes analizaran no solo el alcance inmediato de la ayuda, sino también la logística para canalizar los recursos a través de organismos multilaterales y la colaboración con entidades humanitarias en el terreno. Trump subrayó que el trabajo de la Junta incluirá la supervisión y coordinación de los fondos, así como la definición de criterios para seleccionar los proyectos prioritarios en Gaza y, eventualmente, en otros puntos de crisis. La atención se centró en la restauración de infraestructura crítica, la provisión de servicios básicos y la protección de la población civil en un escenario de alto riesgo.
Durante su intervención, Trump reiteró sus críticas hacia la ONU en conflictos recientes, afirmando que la Junta de Paz tendrá la función de “supervisar” el desempeño del organismo internacional y velar por su eficacia. No obstante, matizó que Estados Unidos buscará mantener una relación de cooperación con Naciones Unidas en áreas donde sea posible la convergencia de esfuerzos, especialmente en la reconstrucción y estabilización de zonas afectadas por la guerra.
Departamento de Estado,Javier Milei,Marco Rubio,Estados Unidos,Argentina,política,diplomacia,relaciones internacionales,tweet
POLITICA
Todos los detalles del Fondo de Asistencia Laboral

El Fondo de Asistencia Laboral (FAL) es uno de los artículos claves de la reforma laboral que se aprobó en la Cámara de Diputados y que ahora deberá tratar el Senado. El Gobierno lo presenta como un instrumento para financiar las indemnizaciones por despido, pero los opositores advierten que, en realidad, servirá para fondear al Estado a costa del desfinanciamiento del sistema previsional.
De los 26 títulos y más de 200 artículos que componen la reforma, fue uno de los que el ministro de Economía, Luis Caputo, se negó a negociar. La oposición lo intentó voltear en la discusión en particular, pero el oficialismo desplegó un fuerte dispositivo de disuasión para evitarlo. El trabajo dio sus frutos: el capítulo II de la reforma laboral, que contenía el artículo del FAL, se aprobó finalmente con 130 votos positivos, contra 117 rechazos y tres abstenciones. El oficialismo tuvo cinco votos menos que los obtenidos en la aprobación en general. Estos son los principales puntos que establece la norma.
POLITICA
Reforma laboral 2026, EN VIVO: principales puntos, a quiénes afecta y qué falta para que sea ley

Todo sobre el debate de la reforma laboral en el Congreso minuto a minuto:
POLITICA3 días agoReforma laboral bomba: menos indemnización, más horas y despidos más fáciles — el cambio que puede sacudir el empleo en Argentina
ECONOMIA2 días agoAyuda Escolar Anual: a cuánto asciende, donde se tramita y quien puede cobrarla
POLITICA3 días agoEl Gobierno endurece las medidas de seguridad y control en la marcha prevista contra la reforma laboral en el Congreso















