POLITICA
Larreta puso en duda la construcción inmediata de la línea F de subte y apuntó a Mauricio Macri

Luego de su participación en el debate previo a las elecciones legislativas en la ciudad de Buenos Aires -en el que anunció que quiere volver a ser candidato a jefe de Gobierno porteño-, Horacio Rodríguez Larreta apuntó contra la administración de Jorge Macri que lo sucedió en la Ciudad, cuestionó el anuncio de la creación de la línea F de subte y trató de ponerle freno a las críticas de Mauricio Macri.
“Los resultados están a la vista: no trabajan. Tenemos una ciudad sucia, lo dice todo el mundo. Dije que había olor a pis y se enojaron conmigo, pero es así. La gente ve más basura afuera del contenedor que dentro; llevan 500 días de gobierno y cero obras», planteó este miércoles por la mañana.
Así, en diálogo con Urbana Play, también se refirió al anuncio de la licitación de la nueva traza de subterráneo -la línea F- que unirá Barracas y Palermo: “¿Sabés cuándo va a llegar el subte? Cuando la Ciudad pueda desendeudarse a 30 años y a una tasa del 2%. Hacer un subte requiere financiamiento a largo plazo de más de 1000 millones de dólares que todavía no tienen. Yo también puedo anunciar un viaje a la luna…“. ”Yo nunca anuncié obras, yo las hice; todo lo que se dijo que se iba a hacer se hizo, no me vengan con anuncios”, diferenció
En otro tramo de la entrevista se refirió a las declaraciones del expresidente Macri sobre su distanciamiento de Pro, partido político con el que llevó adelante sus dos gestiones como jefe de Gobierno y con el cual se presentó a las PASO para las elecciones presidenciales en 2023.
“El ingeniero se pone en psicólogo, que vuelva a ser ingeniero”, dijo, en alusión a la profesión del fundador de Pro, y añadió: “Que recorra la ciudad Mauricio y va a entender muy bien por qué hago lo que hago. Durante muchísimos años ganamos las elecciones trabajando, si hay algo que todo el mundo me reconoce es eso. Eso es algo que hoy no sucede, no se labura. Quiero ser candidato y quiero volver a ser jefe de Gobierno para recuperar la Ciudad que teníamos y seguir con el plan de transformación».
De esta forma reiteró su voluntad de volver a competir por el gobierno porteño tras “tomarse un descanso” después de ocho años al mando de la administración de la Ciudad. “‘Volver a empezar’, como dice la canción. Tengo voluntad, vocación pública y quiero trabajar por mi ciudad. Dejé la vida durante todos esos años y hoy no la veo bien», lamentó.
Finalmente retomó el discurso que tuvo en el debate y apuntó nuevamente contra la administración macrista en la Ciudad. “Acá lo que importa es cómo está la gente: la gente tiene miedo porque no hay policía y nos parecemos cada vez más al conurbano. Nosotros nos relacionábamos con las mejores ciudades del mundo, queríamos jugar en las mejores ligas y ahora nos parecemos al conurbano“, expresó.
Y cerró: “El problema es que la Ciudad no está bien, te lo dice cualquier vecino en cualquier barrio. No hay vueltas políticas, mi candidatura responde a eso. No hicieron nada: Macri ganó diciendo que le iba a dar continuidad a lo que hicimos pero llegó y puso en crisis todo lo que se estaba haciendo. No hubo continuidad y así está la Ciudad, por eso quiero ser candidato».
En un debate disperso y sin profundidad sobre temas locales, los 17 candidatos se explayaron durante tres horas y cruzaron algunas chicanas entre sí. Detrás del atril, Larreta le dedicó duras críticas a la gestión de Macri y dijo que el jefe porteño no tiene “una sola obra” nueva para mostrar. Además, volvió a apelar al recuerdo de su curriculum como gestor municipal: “Por eso quiero volver a ser jefe de gobierno, porque aprendí”.
En tanto, al momento de las preguntas de tres de sus opositores, fue sorprendido por una crítica de Lula Levy, candidata de Evolución y afín a Martín Lousteau, que le reprochó: “La salud mental es importante pero yo te voté y me decepcionaste“.
Y marcó: “Me resulta raro verte como legislador, vos que siempre decís que sos una persona de gestión. ¿Tu candidatura es parte del enfrentamiento con los Macri? Porque estuviste un año y medio callado y vos trajiste a Jorge del conurbano. Nosotros defendemos a la ciudad gobierne quien gobierne”.
POLITICA
Ritondo habló sobre la situación de Espert: “La explicación no alcanzó”

El diputado nacional Cristian Ritondo de Propuesta Republicana (Pro), y aliado de La Libertad Avanza (LLA), dijo que la explicación de José Luis Espert sobre si recibió o no dinero de un narcotraficante “no alcanzó”. Una investigación de confirmó que el candidato del oficialismo recibió depósitos de empresas relacionadas a Fred Machado por 200.000 dólares y eso consta en un documento del Bank of America.
En este sentido, en diálogo con TN, Ritondo sostuvo que sin esas explicaciones “no se puede hacer campaña”. Sin embargo, apuntó contra el kirchnerismo de estar detrás de “una operación”. “Han logrado romper con un esquema donde no estamos discutiendo la economía y el narcotráfico”, apuntó.
“La explicación de Espert no alcanzó. Deja en la nebulosa una pregunta que repiten los periodistas y que tiene que contestar. Hoy Guillermo Francos y Patricia Bullrich le pidieron que aclare un poco más. Es cierto que en un proceso electoral hay muchas operaciones, pero también es cierto que hay momentos en los que hay que dar explicaciones y seguir con la campaña”, afirmó Ritondo.
En tanto, continuó: “En otros momentos podés esperar y dar explicaciones cuando quieras, pero cuando estás en campaña y sos candidato, el reflejo tiene que estar en contestar rápido y salir del problema. Lógicamente, la respuesta más profunda se la das a la Justicia”.
Además declaró que no tiene por qué creer o no en la honestidad de Espert y sostuvo que “la Justicia lo va a determinar”. “Él tiene que demostrarlo. En lo que yo conozco creo que sí lo es”, dijo pero dejó el asunto en manos judiciales.
Por otra parte, Ritondo explicó que la situación de Espert afecta a la alianza entre LLA y Pro en la recta final de cara a las elecciones nacionales de octubre: “No podés hacer campaña. Si no estuviese este tema, estaríamos discutiendo otras cosas, como el nuevo Código Penal. No podemos discutir el compromiso de Pro de acompañar a La Libertad Avanza”.
Este miércoles, Espert dio una entrevista pero se negó en reiteradas ocasiones a contestar si cobró o no US$200.000 de Fred Machado durante la campaña de 2019, en el marco de una denuncia que salió a la luz por una presentación que hizo el dirigente de Patria Grande, Juan Grabois. “No voy a responder, no le voy a dar el gusto a Grabois, le voy a responder en la Justicia”, señaló en A24, durante una tensa entrevista, en la que le preguntaron varias veces lo mismo y evadió la respuesta con la misma frase.
A su vez, el presidente Javier Milei ratificó la candidatura de Espert como diputado nacional por la provincia de Buenos Aires y acusó una “operación berreta” de parte de la oposición. Aseguró que nunca pensó en aparatarlo y consideró: “Es un refrito de algo que pasó hace seis años”.
Noticia en desarrollo.
José Luis Espert,Una investigación de LA NACION confirmó que el candidato del oficialismo recibió depósitos de empresas relacionadas a Fred Machado por 200.000 dólares y eso consta en un documento del Bank of America,, una presentación que hizo el dirigente de Patria Grande, Juan Grabois,Cristian Ritondo,José Luis Espert,Conforme a,Cristian Ritondo,,Tensión. Qué pasó entre Cristian Ritondo y Silvia Lospennato en el Congreso,,»No te voy a permitir». Así fue el cruce entre Cristian Ritondo y Silvia Lospennato en el Congreso,,Alimentos para las cárceles. Sobreseen al exsecretario de Seguridad echado por Bullrich
POLITICA
La Justicia confirmó que José Luis Espert viajó 35 veces en aviones vinculados al narco “Fred” Machado

La entrada La Justicia confirmó que José Luis Espert viajó 35 veces en aviones vinculados al narco “Fred” Machado se publicó primero en Nexofin.
Aviones,Fred Machado,José Luis Espert,Narcotráfico
POLITICA
Uno por uno, cómo votaron los senadores el veto de Milei a la ley Garrahan

`
: `
`
}
${bloque}
`;
targetContainer.appendChild(card);
}
function createHemicicleSmall(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-senadores__hemiciclo.small’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 5;
// Array of seats per row (from outer to inner)
const seatsPerRow = [21, 18, 16, 12, 7];
const verticalOffset = 0;
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 * (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 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 (sin mostrar Ley Aprobada o no aprobada)
document.querySelector(‘#voto-summary’).innerHTML = `
Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}
Abstención: ${nAbstencion} |
Ausente: ${nAusente}
`; */
/* // — Update Legend —
const leyText = nAfirmativo > nNegativo ? «Ley Aprobada» : «Ley no aprobada»;
const resultsText=»shshs»;
document.querySelector(«#voto-summary»).innerHTML = leyText + resultsText; */
/*
// Set the legend text. Mayoría simple
const leyText = nAfirmativo > nNegativo ? ‘Ley Aprobada’ : ‘Ley no aprobada’;
document.querySelector(‘#voto-summary’).innerHTML = `
Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}
Abstención: ${nAbstencion} |
Ausente: ${nAusente}
` + ‘
‘ + leyText + ‘
‘; */
// Set the legend text. Dos tercios de los presentes (******EDITAR LEYENDA*****)
function votosNecesarios(presentes) {
return Math.ceil((2 / 3) * presentes);
}
const leyText = nAfirmativo >= (votosNecesarios(72 – nAusente)) ? ‘Aprobada’ : ‘Rechazada’;
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-senadores__hemiciclo.big’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 5;
// Array of seats per row (outer to inner; total should be 257)
const seatsPerRow = [21, 18, 16, 11, 6];
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 + «).»);
}
console.log(nAfirmativo, nNegativo, nAbstencion, nAusente, totalSeats, totalVotes);
// — 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 * (55 – 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);
}
}
}
}
// Go-to-top button functionality.
document.addEventListener(‘DOMContentLoaded’, function() {
const goToTopButton = document.querySelector(‘.votos-senadores__go-to-top’);
const targetElement = document.querySelector(‘.votos-senadores’);
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-senadores__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();
}
});
- POLITICA1 día ago
Cristina Kirchner chicaneó a Javier Milei: “La Recesión Avanza y los dólares se te siguen yendo”
- CHIMENTOS3 días ago
Mario Massaccesi casó a Manu Jove y su colega de TN: los desconocidos detalles de la boda
- POLITICA17 horas ago
Axel Kicillof pide deuda por US$1045 millones y pone a prueba la cohesión del PJ en la Legislatura