Engar breytingar urðu á þingstyrk fylkinganna þegar lokið var við að teljast síðustu atkvæðin eftir þingkosningarnar á sunnudag um klukkan 13:15 að staðartíma í dag.
Alls fengu stjórnarandstöðuflokkarnir fjórir 176 þingsæti gegn 173 sætum stjórnarflokkanna. Aðeins munaði 50.539 atkvæðum á fylkingunum.
Niðurstöður þingkosninga
þegar 100% atkvæða hafa verið talin
Fylgi: ${fmt(p.percent)}
Þingsæti: ${p.seats} ${change(p.change)}
`).classed('visible',true);moveTip(e);
}
function tip(sel){sel.on('mouseenter',(e,p)=>showTip(e,p)).on('mousemove',moveTip).on('mouseleave',()=>tooltip.classed('visible',false))}
function renderParties(){
const sorted=[...parties].sort((a,b)=>b.percent-a.percent),max=d3.max(sorted,d=>d.percent)||1;
sorted.forEach((p,i)=>{
const row=chart.append('div').attr('class','swe-row'),info=row.append('div').attr('class','swe-info');
const img=info.append('img').datum(p).attr('class','swe-logo').attr('src',p.logo).attr('alt',p.id+' - '+p.name);tip(img);
const meta=info.append('div').attr('class','swe-meta');
meta.append('div').attr('class','swe-seats').text(p.seats);
const dir=p.change>0?'up':p.change<0?'down':'same',symbol=p.change>0?'▲':p.change<0?'▼':'•';
meta.append('div').attr('class','swe-change '+dir).text(symbol+' '+Math.abs(p.change));
const track=row.append('div').attr('class','swe-track');
const bar=track.append('div').datum(p).attr('class','swe-bar').style('background',p.color);tip(bar);
const label=track.append('div').attr('class','swe-percent').text('0,0%');
const width=p.percent/max*100,delay=i*150;
bar.transition().delay(delay).duration(1200).ease(d3.easeCubicOut).style('width',width+'%');
label.transition().delay(delay).duration(1200).ease(d3.easeCubicOut).style('opacity',1).style('left',`calc(${width}% + 8px)`).tween('text',function(){const n=d3.interpolate(0,p.percent);return t=>this.textContent=fmt(n(t))});
});
}
function renderFactions(){
const wrap=factionChart.append('div').attr('class','swe-faction-wrap');
const bar=wrap.append('div').attr('class','swe-faction-bar');
wrap.append('div').attr('class','swe-majority');
wrap.append('div').attr('class','swe-majority-label').text(majoritySeats);
factions.flatMap(f=>f.partyIds).forEach((id,i)=>{
const p=byId.get(id);if(!p)return;
const segment = bar.append('div')
.datum(p)
.attr('class', 'swe-segment')
.style('background', p.color);
tip(segment);
segment.transition()
.delay(i * 90)
.duration(900)
.ease(d3.easeCubicOut)
.style('width', p.seats / totalSeats * 100 + '%');
});
const sides=factionChart.append('div').attr('class','swe-sides');
factions.forEach(f=>{
const ps=f.partyIds.map(id=>byId.get(id)).filter(Boolean),side=sides.append('div').attr('class','swe-faction');
side.append('div').attr('class','swe-total').text(d3.sum(ps,p=>p.seats));
const list=side.append('div').attr('class','swe-party-list');
ps.forEach(p => {
const dot = list.append('div')
.datum(p)
.attr('class', 'swe-party-dot')
.style('background', p.color)
.text(p.id);
tip(dot);
});
});
}
renderParties();renderFactions();
})();