style: humanize reports and translate Streamlit UI to English

Streamlit tabs: translated all Dutch text to English in overton.py,
compass.py (Overton expander + voting discipline), trajectories.py.

Humanization (all 3 report surfaces):
- Removed 60+ em dashes, replaced with periods/commas/colons
- Removed AI vocabulary (crucial, pivotal, underscores, landscape)
- Removed excessive boldface, rule-of-three, -ing padding
- Replaced 'serves as'/'stands as' with 'is'
- Preserved all data, numbers, tables, code blocks exactly
main
Sven Geboers 5 days ago
parent 3192a1a2bf
commit a5624f65bc
  1. 42
      analysis/tabs/compass.py
  2. 66
      analysis/tabs/overton.py
  3. 8
      analysis/tabs/trajectories.py
  4. 42
      reports/overton_window/overton_report.html
  5. 90
      reports/overton_window/overton_window.qmd
  6. 116
      reports/overton_window/overton_window_synthesis.md

@ -185,28 +185,28 @@ def build_compass_tab(db_path: str, window_size: str) -> None:
with st.expander("Overton Window Context"): with st.expander("Overton Window Context"):
st.markdown( st.markdown(
"Het SVD-kompas visualiseert de dynamiek achter de " "The SVD compass visualizes the dynamics behind the "
"**verbreding van het Overton-venster** in de Tweede Kamer.\n\n" "**widening of the Overton window** in the Dutch parliament.\n\n"
"Centristische steun voor rechtse moties steeg van 25% naar 51% na 2024, " "Centrist support for right-wing motions rose from 25% to 51% after 2024, "
"terwijl steun voor linkse moties gelijk bleef. Het venster verschoof — " "while support for left-wing motions stayed flat. The window widened: "
"meer rechtse standpunten werden acceptabel.\n\n" "more right-wing positions became acceptable.\n\n"
"Maar: **centristische partijen** (D66, CDA, CU, NSC) zijn op **beide assen naar" "But **centrist parties** (D66, CDA, CU, NSC) moved **left on both axes** "
" links** verschoven, terwijl rechtse partijen stabiel bleven. Dit patroon" "while right-wing parties stayed put. This pattern of "
' van "acceptatie zonder conversie" betekent dat rechtse partijen mildere' '"acceptance without conversion" means right-wing parties filed milder '
" moties gingen indienen, en centristen daardoor vaker konden meestemmen — " "motions, and centrists could vote along more often, "
"zonder dat ze ideologisch naar rechts opschoven.\n\n" "without shifting ideologically to the right.\n\n"
"[Lees de volledige analyse](../reports/overton_window/overton_window.qmd)\n\n" "[Read the full analysis](../reports/overton_window/overton_window.qmd)\n\n"
"Probeer de **Stemwijzer-quiz** om te zien welke MP bij jouw standpunten past." "Try the **Stemwijzer quiz** to see which MP matches your positions."
) )
st.markdown("---") st.markdown("---")
st.markdown( st.markdown(
"**Stemdiscipline analyse:** De Rice-index meet hoe eensgezind partijen stemmen " "**Voting discipline analysis:** The Rice index measures how united parties vote "
"tijdens hoofdelijke stemmingen. Een score van 100% betekent dat alle MPs van " "during roll-call votes. A score of 100% means all MPs of a party voted the "
"een partij hetzelfde stemden; 50% wijst op een gelijke splitsing binnen de partij. " "same way; 50% indicates an even split within the party. "
"Partijen met hoge discipline (>95%) zoals PVV en SGP stemmen als een blok, wat " "High-discipline parties (>95%) like PVV and SGP vote as a bloc, indicating "
"wijst op sterke partijdiscipline en homogene membership. Lagere discipline (<85%) " "strong party discipline and homogeneous membership. Lower discipline (<85%) "
"bij partijen als PvdA of SP kan duiden op interne factiestrijd, gewetensvragen " "in parties like PvdA or SP may indicate internal factional struggles, conscience "
"bij ethische thema's, of een brede ideologische koers die ruimte laat voor " "votes on ethical issues, or a broad ideological course that leaves room for "
"afwijkende meningen. De discipline varieert ook per onderwerp — ethische kwesties " "dissenting opinions. Discipline also varies by topic: ethical issues "
"tonen vaak meer interne verschillen dan economische thema's." "tend to show more internal division than economic topics."
) )

@ -15,18 +15,18 @@ logger = logging.getLogger(__name__)
def build_overton_tab(db_path: str) -> None: def build_overton_tab(db_path: str) -> None:
"""Build the Overton Window tab.""" """Build the Overton Window tab."""
st.subheader("Overton Window Analyse") st.subheader("Overton Window Analysis")
st.markdown( st.markdown(
"Het Overton-venster **verbreedde** na 2024: centristische steun voor rechtse " "The Overton window **widened** after 2024: centrist support for right-wing "
"moties steeg van 25% naar 51%, terwijl steun voor linkse moties gelijk bleef. " "motions rose from 25% to 51%, while support for left-wing motions stayed flat. "
"Rechtse partijen dienden mildere moties in, waardoor centristen vaker konden " "Right-wing parties filed milder motions, allowing centrists to vote along "
"meestemmen — zonder ideologisch naar rechts op te schuiven." "without shifting ideologically."
) )
try: try:
con = duckdb.connect(db_path, read_only=True) con = duckdb.connect(db_path, read_only=True)
except Exception: except Exception:
st.warning("Kan geen verbinding maken met de database.") st.warning("Cannot connect to the database.")
return return
try: try:
@ -35,12 +35,12 @@ def build_overton_tab(db_path: str) -> None:
).fetchall() ).fetchall()
if not tables: if not tables:
st.info( st.info(
"De right_wing_motions tabel is nog niet beschikbaar. " "The right_wing_motions table is not yet available. "
"Draai de pipeline om deze te genereren." "Run the pipeline to generate it."
) )
return return
except Exception: except Exception:
st.info("De right_wing_motions tabel is niet beschikbaar.") st.info("The right_wing_motions table is not available.")
return return
try: try:
@ -50,7 +50,7 @@ def build_overton_tab(db_path: str) -> None:
_render_motion_browser(con) _render_motion_browser(con)
_render_explore_further() _render_explore_further()
except Exception as e: except Exception as e:
st.error(f"Fout bij laden van Overton data: {e}") st.error(f"Error loading Overton data: {e}")
logger.exception("Overton tab error") logger.exception("Overton tab error")
finally: finally:
con.close() con.close()
@ -65,7 +65,7 @@ def _render_centrist_support_chart(con: duckdb.DuckDBPyConnection) -> None:
""").fetchdf() """).fetchdf()
if df.empty: if df.empty:
st.info("Geen centrist support data beschikbaar.") st.info("No centrist support data available.")
return return
fig = go.Figure() fig = go.Figure()
@ -82,7 +82,7 @@ def _render_centrist_support_chart(con: duckdb.DuckDBPyConnection) -> None:
fig.add_trace(go.Bar( fig.add_trace(go.Bar(
x=df["year"], x=df["year"],
y=df["n_motions"], y=df["n_motions"],
name="Aantal moties", name="Motion count",
yaxis="y2", yaxis="y2",
marker_color="#90CAF9", marker_color="#90CAF9",
opacity=0.5, opacity=0.5,
@ -99,10 +99,10 @@ def _render_centrist_support_chart(con: duckdb.DuckDBPyConnection) -> None:
) )
fig.update_layout( fig.update_layout(
title="Centrist Support voor Rechtse Moties", title="Centrist Support for Right-Wing Motions",
xaxis=dict(title="Jaar", dtick=1), xaxis=dict(title="Year", dtick=1),
yaxis=dict(title="Centrist Support", range=[0, 1]), yaxis=dict(title="Centrist Support", range=[0, 1]),
yaxis2=dict(title="Aantal moties", overlaying="y", side="right"), yaxis2=dict(title="Motion count", overlaying="y", side="right"),
height=400, height=400,
legend=dict(orientation="h", y=1.1), legend=dict(orientation="h", y=1.1),
hovermode="x unified", hovermode="x unified",
@ -112,7 +112,7 @@ def _render_centrist_support_chart(con: duckdb.DuckDBPyConnection) -> None:
def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None: def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Samenvatting") st.subheader("Summary")
result = con.execute(""" result = con.execute("""
SELECT SELECT
@ -139,10 +139,10 @@ def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None:
def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None: def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Migratie: de gateway-domein") st.subheader("Migration: the gateway domain")
st.markdown( st.markdown(
"Migratie is waar de Overton-verschuiving het meest echt is — en waar " "Migration is where the Overton shift is most genuine, and where "
"rechtse partijen de frames leerden die ze later op andere domeinen toepasten." "right-wing parties learned the frames they later applied to other domains."
) )
df = con.execute(""" df = con.execute("""
@ -165,21 +165,21 @@ def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None:
post = df[df["period"] == "Post-2024"].iloc[0] post = df[df["period"] == "Post-2024"].iloc[0]
col1, col2, col3, col4 = st.columns(4) col1, col2, col3, col4 = st.columns(4)
col1.metric("Pre-2024 CS (migratie)", f"{pre['cs_strict']:.3f}") col1.metric("Pre-2024 CS (migration)", f"{pre['cs_strict']:.3f}")
col2.metric("Post-2024 CS (migratie)", f"{post['cs_strict']:.3f}") col2.metric("Post-2024 CS (migration)", f"{post['cs_strict']:.3f}")
col3.metric("Shift", f"{post['cs_strict'] - pre['cs_strict']:+.3f}") col3.metric("Shift", f"{post['cs_strict'] - pre['cs_strict']:+.3f}")
col4.metric("Moties", f"{int(pre['n_motions'] + post['n_motions'])}") col4.metric("Motions", f"{int(pre['n_motions'] + post['n_motions'])}")
st.caption( st.caption(
"Ter vergelijking: niet-migratie moties gingen van 0.276 naar 0.481 (+0.205). " "For comparison: non-migration motions went from 0.276 to 0.481 (+0.205). "
"Migratie steeg meer dan twee keer zo hard (+0.216), terwijl de materiële impact " "Migration rose more than twice as fast (+0.216), while material impact "
"nauwelijks daalde. CDA en ChristenUnie verdubbelden hun migratie-steun " "barely declined. CDA and ChristenUnie doubled their migration support "
"(18%40%, 10%30%)." "(18% to 40%, 10% to 30%)."
) )
def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None: def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Rechtse Moties Browser") st.subheader("Right-Wing Motions Browser")
df = con.execute(""" df = con.execute("""
SELECT r.year, r.title, m.text, r.centrist_support_strict, r.category SELECT r.year, r.title, m.text, r.centrist_support_strict, r.category
@ -191,21 +191,21 @@ def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
""").fetchdf() """).fetchdf()
if df.empty: if df.empty:
st.info("Geen rechtse moties gevonden.") st.info("No right-wing motions found.")
return return
df = df.rename(columns={ df = df.rename(columns={
"year": "Jaar", "year": "Year",
"title": "Titel", "title": "Title",
"text": "Motietekst", "text": "Motion text",
"centrist_support_strict": "Centrist Support", "centrist_support_strict": "Centrist Support",
"category": "Categorie", "category": "Category",
}) })
st.dataframe(df, use_container_width=True, height=600) st.dataframe(df, use_container_width=True, height=600)
def _render_explore_further() -> None: def _render_explore_further() -> None:
st.subheader("Verder verkennen") st.subheader("Explore further")
st.markdown( st.markdown(
"- See party positions → Kompas tab\n" "- See party positions → Kompas tab\n"
"- See party drift over time → Trajectories tab\n" "- See party drift over time → Trajectories tab\n"

@ -667,10 +667,10 @@ def build_trajectories_tab(db_path: str, window_size: str) -> None:
try: try:
st.plotly_chart(fig, use_container_width=True) st.plotly_chart(fig, use_container_width=True)
st.info( st.info(
"**Overton-venster verbreed:** na PVV's verkiezingsoverwinning (nov 2023) " "**Overton window widened:** after PVV's election victory (Nov 2023), "
"steeg centristische steun voor rechtse moties van 25% naar 51%, " "centrist support for right-wing motions rose from 25% to 51%, "
"terwijl steun voor linkse moties gelijk bleef. " "while support for left-wing motions stayed flat. "
"Rechtse partijen matigden hun moties, centristen stemden vaker voor." "Right-wing parties moderated their motions; centrists voted along more often."
) )
except Exception as e: except Exception as e:
st.error(f"Trajectories rendering failed: {e}") st.error(f"Trajectories rendering failed: {e}")

@ -131,8 +131,8 @@
<!-- 2. What Is the Overton Window --> <!-- 2. What Is the Overton Window -->
<h2>What Is the Overton Window</h2> <h2>What Is the Overton Window</h2>
<p>The Overton window describes the range of policy ideas that are politically acceptable at a given time. In the Dutch parliamentary context, we operationalise this by measuring centrist support for motions at varying levels of policy extremity. The core question is not whether extreme motions pass, but whether centrist parties are willing to support them at all &mdash; a signal that a policy position has entered the realm of acceptable debate.</p> <p>The Overton window describes the range of policy ideas that are politically acceptable at a given time. In the Dutch parliamentary context, we operationalise this by measuring centrist support for motions at varying levels of policy extremity. The core question is not whether extreme motions pass, but whether centrist parties are willing to support them at all. This is a signal that a policy position has entered the realm of acceptable debate.</p>
<p>We model acceptability using a gravity framework: each motion is assigned a gravity level (M1 through M5) based on its combined stylistic and material extremity. Higher gravity levels correspond to more extreme motions. The formation of the Schoof cabinet in July 2024 serves as the watershed. By comparing centrist support before and after this date, we can measure whether the Overton window shifted &mdash; and if so, by how much.</p> <p>We model acceptability using a gravity framework: each motion is assigned a gravity level (M1 through M5) based on its combined stylistic and material extremity. Higher gravity levels correspond to more extreme motions. The formation of the Schoof cabinet in July 2024 is the watershed. By comparing centrist support before and after this date, we can measure whether the Overton window shifted, and if so, by how much.</p>
<!-- 3. Methodology --> <!-- 3. Methodology -->
<h2>Methodology</h2> <h2>Methodology</h2>
@ -151,7 +151,7 @@
<div class="bar-group"> <div class="bar-group">
<div class="bar-label"> <div class="bar-label">
<span>M1 &mdash; Lowest extremity</span> <span>M1: Lowest extremity</span>
<span class="n-count">Pre: 4,495 &middot; Post: 2,068</span> <span class="n-count">Pre: 4,495 &middot; Post: 2,068</span>
</div> </div>
<div class="bar-track"><div class="bar-fill pre" style="width: 71.5%"></div></div> <div class="bar-track"><div class="bar-fill pre" style="width: 71.5%"></div></div>
@ -191,7 +191,7 @@
<div class="bar-group"> <div class="bar-group">
<div class="bar-label"> <div class="bar-label">
<span>M5 &mdash; Highest extremity</span> <span>M5: Highest extremity</span>
<span class="n-count">Pre: 161 &middot; Post: 33</span> <span class="n-count">Pre: 161 &middot; Post: 33</span>
</div> </div>
<div class="bar-track"><div class="bar-fill pre" style="width: 13.8%"></div></div> <div class="bar-track"><div class="bar-fill pre" style="width: 13.8%"></div></div>
@ -216,7 +216,7 @@
<div class="bar-group"> <div class="bar-group">
<div class="bar-label"> <div class="bar-label">
<span>M1 &mdash; Lowest extremity</span> <span>M1: Lowest extremity</span>
<span class="n-count">Pre: 4,495 &middot; Post: 2,068</span> <span class="n-count">Pre: 4,495 &middot; Post: 2,068</span>
</div> </div>
<div class="bar-track"><div class="bar-fill pre" style="width: 71.8%"></div></div> <div class="bar-track"><div class="bar-fill pre" style="width: 71.8%"></div></div>
@ -256,7 +256,7 @@
<div class="bar-group"> <div class="bar-group">
<div class="bar-label"> <div class="bar-label">
<span>M5 &mdash; Highest extremity</span> <span>M5: Highest extremity</span>
<span class="n-count">Pre: 161 &middot; Post: 33</span> <span class="n-count">Pre: 161 &middot; Post: 33</span>
</div> </div>
<div class="bar-track"><div class="bar-fill pre" style="width: 4.4%"></div></div> <div class="bar-track"><div class="bar-fill pre" style="width: 4.4%"></div></div>
@ -266,7 +266,7 @@
</div> </div>
<div class="note"> <div class="note">
<strong>Interpretation.</strong> Under the strict 4-party model, cs_strict values are indeed lower than the all-party figures. At M5, the centrist core went from cs_strict = 0.044 pre-2024 to 0.101 post-2024 &mdash; a 2.3x relative increase but still very low in absolute terms. This suggests that while the strict centrist core became more tolerant of extreme motions after the 2024 watershed, the absolute level of acceptance remains modest. The shift is real but not transformative for the most extreme proposals. <strong>Interpretation.</strong> Under the strict 4-party model, cs_strict values are indeed lower than the all-party figures. At M5, the centrist core went from cs_strict = 0.044 pre-2024 to 0.101 post-2024, a 2.3x relative increase but still very low in absolute terms. This suggests that while the strict centrist core became more tolerant of extreme motions after the 2024 watershed, the absolute level of acceptance remains modest. The shift is real but not transformative for the most extreme proposals.
</div> </div>
<!-- 6. Example Motions --> <!-- 6. Example Motions -->
@ -276,7 +276,7 @@
<div class="motion-box"> <div class="motion-box">
<div class="motion-id">Motion 144 &middot; Hidden Impact</div> <div class="motion-id">Motion 144 &middot; Hidden Impact</div>
<div class="motion-title">Motie van het lid Eerdmans over zich inzetten voor juridische en politieke ruimte om asielprocedures buiten de EU te kunnen afhandelen</div> <div class="motion-title">Motie van het lid Eerdmans over zich inzetten voor juridische en politieke ruimte om asielprocedures buiten de EU te kunnen afhandelen</div>
<p>This motion proposes external processing of asylum procedures outside the EU. It scores <strong>stijl = 1</strong> (neutral legal language, no rhetorical escalation) but <strong>materieel = 4</strong> (fundamental policy reform). The modest stylistic framing masks the substantive ambition. The strict centrist support (cs_strict) rose from <strong>0.00</strong> pre-2024 to <strong>1.00</strong> post-2024 &mdash; a motion that no centrist party would touch before the Schoof cabinet became universally acceptable after.</p> <p>This motion proposes external processing of asylum procedures outside the EU. It scores <strong>stijl = 1</strong> (neutral legal language, no rhetorical escalation) but <strong>materieel = 4</strong> (fundamental policy reform). The modest stylistic framing masks the substantive ambition. The strict centrist support (cs_strict) rose from <strong>0.00</strong> pre-2024 to <strong>1.00</strong> post-2024, a motion that no centrist party would touch before the Schoof cabinet became universally acceptable after.</p>
<div class="motion-stats"> <div class="motion-stats">
<div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">1</div></div> <div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">1</div></div>
<div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">4</div></div> <div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">4</div></div>
@ -288,7 +288,7 @@
<div class="motion-box"> <div class="motion-box">
<div class="motion-id">Motion 28109 &middot; The Line</div> <div class="motion-id">Motion 28109 &middot; The Line</div>
<div class="motion-title">Motie van de leden Van Haga en Smolders over het Vluchtelingenverdrag uit 1951 opzeggen</div> <div class="motion-title">Motie van de leden Van Haga en Smolders over het Vluchtelingenverdrag uit 1951 opzeggen</div>
<p>This motion calls for withdrawing from the 1951 Refugee Convention. It scores <strong>stijl = 5</strong> and <strong>materieel = 5</strong> &mdash; maximum extremity on both dimensions. Despite the broader post-2024 shift in the Overton window, strict centrist support remained at <strong>0.00</strong> both before and after the watershed. Some positions remain outside the window of acceptability regardless of the political climate.</p> <p>This motion calls for withdrawing from the 1951 Refugee Convention. It scores <strong>stijl = 5</strong> and <strong>materieel = 5</strong>, maximum extremity on both dimensions. Despite the broader post-2024 shift in the Overton window, strict centrist support remained at <strong>0.00</strong> both before and after the watershed. Some positions remain outside the window of acceptability regardless of the political climate.</p>
<div class="motion-stats"> <div class="motion-stats">
<div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">5</div></div> <div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">5</div></div>
<div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">5</div></div> <div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">5</div></div>
@ -300,7 +300,7 @@
<div class="motion-box"> <div class="motion-box">
<div class="motion-id">Motion 306 &middot; The Shift</div> <div class="motion-id">Motion 306 &middot; The Shift</div>
<div class="motion-title">Motie van de leden Boomsma en Van Zanten over maatregelen voor de vrijwillige terugkeer van Syri&euml;rs</div> <div class="motion-title">Motie van de leden Boomsma en Van Zanten over maatregelen voor de vrijwillige terugkeer van Syri&euml;rs</div>
<p>This motion proposes measures for voluntary return of Syrians. It scores <strong>stijl = 2</strong> and <strong>materieel = 3</strong> &mdash; moderate on both dimensions. Strict centrist support went from <strong>0.00</strong> pre-2024 to <strong>1.00</strong> post-2024. This motion exemplifies the category of proposals that crossed the acceptability threshold after the political watershed, gaining full support from the centrist core where it previously had none.</p> <p>This motion proposes measures for voluntary return of Syrians. It scores <strong>stijl = 2</strong> and <strong>materieel = 3</strong>, moderate on both dimensions. Strict centrist support went from <strong>0.00</strong> pre-2024 to <strong>1.00</strong> post-2024. This motion exemplifies the category of proposals that crossed the acceptability threshold after the political watershed, gaining full support from the centrist core where it previously had none.</p>
<div class="motion-stats"> <div class="motion-stats">
<div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">2</div></div> <div class="motion-stat"><div class="stat-label">Stijl</div><div class="stat-value">2</div></div>
<div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">3</div></div> <div class="motion-stat"><div class="stat-label">Materieel</div><div class="stat-value">3</div></div>
@ -310,7 +310,7 @@
</div> </div>
<!-- 7. Yearly Trend -- M3+ Motions --> <!-- 7. Yearly Trend -- M3+ Motions -->
<h2>Yearly Trend &mdash; M3+ Strict Centrist Support</h2> <h2>Yearly Trend: M3+ Strict Centrist Support</h2>
<p>Annual strict centrist support for motions at gravity level M3 and above. Years 2016&ndash;2018 have very low motion counts and should be interpreted with caution.</p> <p>Annual strict centrist support for motions at gravity level M3 and above. Years 2016&ndash;2018 have very low motion counts and should be interpreted with caution.</p>
<div class="chart-block"> <div class="chart-block">
@ -468,7 +468,7 @@
</div> </div>
</div> </div>
<p>Right-wing motions saw a substantial increase in centrist support after the 2024 watershed, rising from 0.384 to 0.620 &mdash; a gain of 0.236 points. In contrast, centrist support for motions from other parties remained essentially flat (0.587 pre vs 0.581 post). This asymmetric shift is the central finding of the analysis: the Overton window moved primarily on the right flank, with centrist parties becoming more willing to support proposals originating from the right wing, while their behaviour toward other party motions did not change.</p> <p>Right-wing motions saw a substantial increase in centrist support after the 2024 watershed, rising from 0.384 to 0.620, a gain of 0.236 points. In contrast, centrist support for motions from other parties remained essentially flat (0.587 pre vs 0.581 post). This asymmetric shift is the central finding of the analysis: the Overton window moved primarily on the right flank, with centrist parties becoming more willing to support proposals originating from the right wing, while their behaviour toward other party motions did not change.</p>
<!-- 9. 2D Distribution --> <!-- 9. 2D Distribution -->
<h2>2D Distribution: Stijl vs Materieel</h2> <h2>2D Distribution: Stijl vs Materieel</h2>
@ -487,7 +487,7 @@
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>1 &mdash; Lowest</td> <td>1: Lowest</td>
<td class="hm-mid"><div class="cell-val">6,010</div><div class="cell-pct">20.31%</div></td> <td class="hm-mid"><div class="cell-val">6,010</div><div class="cell-pct">20.31%</div></td>
<td class="highlight"><div class="cell-val">11,428</div><div class="cell-pct">38.62%</div></td> <td class="highlight"><div class="cell-val">11,428</div><div class="cell-pct">38.62%</div></td>
<td class="hm-mid"><div class="cell-val">3,194</div><div class="cell-pct">10.79%</div></td> <td class="hm-mid"><div class="cell-val">3,194</div><div class="cell-pct">10.79%</div></td>
@ -519,7 +519,7 @@
<td><div class="cell-val">49</div><div class="cell-pct">0.17%</div></td> <td><div class="cell-val">49</div><div class="cell-pct">0.17%</div></td>
</tr> </tr>
<tr> <tr>
<td>5 &mdash; Highest</td> <td>5: Highest</td>
<td><div class="cell-val">2</div><div class="cell-pct">0.01%</div></td> <td><div class="cell-val">2</div><div class="cell-pct">0.01%</div></td>
<td><div class="cell-val">2</div><div class="cell-pct">0.01%</div></td> <td><div class="cell-val">2</div><div class="cell-pct">0.01%</div></td>
<td><div class="cell-val">7</div><div class="cell-pct">0.02%</div></td> <td><div class="cell-val">7</div><div class="cell-pct">0.02%</div></td>
@ -534,15 +534,15 @@
</div> </div>
<!-- 10. Key Takeaways --> <!-- 10. Key Takeaways -->
<h2>Key Takeaways</h2> <h2>Takeaways</h2>
<div class="verdict"> <div class="verdict">
<ul> <ul>
<li><strong>Exploratory evidence suggests an Overton shift for right-wing motions.</strong> Centrist support for motions proposed by right-wing parties rose from 0.384 to 0.620 after July 2024, while support for other party motions stayed flat. However, inter-annotator agreement on mechanism classification was moderate (κ = 0.41), meaning the mechanism evidence should be treated as suggestive rather than conclusive.</li> <li>Exploratory evidence suggests an Overton shift for right-wing motions. Centrist support for motions proposed by right-wing parties rose from 0.384 to 0.620 after July 2024, while support for other party motions stayed flat. However, inter-annotator agreement on mechanism classification was moderate (κ = 0.41), meaning the mechanism evidence should be treated as suggestive rather than conclusive.</li>
<li><strong>Migration is the gateway domain.</strong> Asylum/migration is where the Overton shift is most genuine &mdash; centrist support more than doubled (0.153 &rarr; 0.369) while material impact barely declined. Centrists went from zero support for the most extreme migration motions to nearly 20%. This domain is where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy.</li> <li>Migration is the gateway domain. Asylum/migration is where the Overton shift is most genuine: centrist support more than doubled (0.153 &rarr; 0.369) while material impact barely declined. Centrists went from zero support for the most extreme migration motions to nearly 20%. This domain is where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy.</li>
<li><strong>Centrist tolerance increased at all gravity levels.</strong> Under both the all-party and strict 4-party centrist models, post-2024 centrist support was higher at gravity levels M3 through M5. The strict centrist core moved as well, not just the broader coalition.</li> <li>Centrist tolerance increased at all gravity levels. Under both the all-party and strict 4-party centrist models, post-2024 centrist support was higher at gravity levels M3 through M5. The strict centrist core moved as well, not just the broader coalition.</li>
<li><strong>Shift is not across the board &mdash; M5 motions remain largely rejected.</strong> Even after the window shift, motions at the highest gravity level (M5) received only 10.1% strict centrist support. Some positions remain firmly outside the Overton window regardless of the political climate.</li> <li>Shift is not across the board: M5 motions remain largely rejected. Even after the window shift, motions at the highest gravity level (M5) received only 10.1% strict centrist support. Some positions remain firmly outside the Overton window regardless of the political climate.</li>
<li><strong>Style and substance are only moderately correlated.</strong> With r = 0.43, the rhetorical framing of a motion and its substantive policy impact move partly independently. This means motions can be substantively radical but rhetorically cautious (like motion 144), potentially slipping through the window under the radar.</li> <li>Style and substance are only moderately correlated. With r = 0.43, the rhetorical framing of a motion and its substantive policy impact move partly independently. This means motions can be substantively radical but rhetorically cautious (like motion 144), potentially slipping through the window under the radar.</li>
<li><strong>The shift is domain-specific: temporary for non-migration, durable for migration.</strong> Non-migration centrist support peaked in 2024 and declined through 2025-2026, suggesting an electoral shock response. However, 2026-Q2 shows CS bouncing back to 0.523, driven by the intensifying migration debate. For the first time, migration centrist support (0.395) exceeds non-migration (0.368) in 2026. Multiple 2026-Q2 migration motions received unanimous centrist support (CS = 1.00), including high-impact items. The Overton widening on migration appears self-sustaining.</li> <li>The shift is domain-specific: temporary for non-migration, durable for migration. Non-migration centrist support peaked in 2024 and declined through 2025-2026, suggesting an electoral shock response. However, 2026-Q2 shows CS bouncing back to 0.523, driven by the intensifying migration debate. For the first time, migration centrist support (0.395) exceeds non-migration (0.368) in 2026. Multiple 2026-Q2 migration motions received unanimous centrist support (CS = 1.00), including high-impact items. The Overton widening on migration appears self-sustaining.</li>
</ul> </ul>
</div> </div>

@ -33,7 +33,7 @@ PARTY_COLOURS = {
} }
``` ```
> **Verdict:** The Overton window widened — more right-wing positions became > **Verdict:** The Overton window widened. More right-wing positions became
> politically acceptable. But the mechanism was right-wing moderation, not > politically acceptable. But the mechanism was right-wing moderation, not
> centrist conversion. The effect may be temporary. > centrist conversion. The effect may be temporary.
@ -54,28 +54,28 @@ right-wing motions surged from 25% to 51%, while centrist support for non-right-
motions rose modestly (58%→62%, +3.5 pp). What changed was the behavior of right-wing parties: motions rose modestly (58%→62%, +3.5 pp). What changed was the behavior of right-wing parties:
they filed more motions, with milder content, framed in centrist-friendly they filed more motions, with milder content, framed in centrist-friendly
language. Centrist voting support surged from 0.251 to 0.507 (Cohen's d = +0.65), language. Centrist voting support surged from 0.251 to 0.507 (Cohen's d = +0.65),
but centrists did not become more right-wing — they stayed ideologically left but centrists did not become more right-wing. They stayed ideologically left
while voting more permissively on proposals that had become less materially while voting more permissively on proposals that had become less materially
consequential. consequential.
This article presents the evidence across three indicators centrist voting This article presents the evidence across three indicators: centrist voting
support, SVD spatial divergence, and 2D extremity decomposition and examines support, SVD spatial divergence, and 2D extremity decomposition, and examines
the mechanisms through which right-wing motions gained centrist support. the mechanisms through which right-wing motions gained centrist support.
## About Stemwijzer ## About Stemwijzer
Stemwijzer is a data-driven political compass built from real parliamentary voting Stemwijzer is a data-driven political compass built from real parliamentary voting
records. It analyzes 29,591 motions from the Tweede Kamer (20162026), each with records. It analyzes 29,591 motions from the Tweede Kamer (2016 to 2026), each with
per-MP vote records, to compute latent political dimensions using Singular Value per-MP vote records, to compute latent political dimensions using Singular Value
Decomposition (SVD). Users vote on real motions and find which MPs match their Decomposition (SVD). Users vote on real motions and find which MPs match their
positions not based on party manifestos or campaign promises, but on how positions, not based on party manifestos or campaign promises, but on how
representatives actually voted. representatives actually voted.
The platform tracks party positions across 11 annual windows using The platform tracks party positions across 11 annual windows using
Procrustes-aligned SVD, allowing year-over-year comparison of spatial drift. Procrustes-aligned SVD, allowing year-over-year comparison of spatial drift.
Every motion has been scored on two independent dimensions of extremity: Every motion has been scored on two independent dimensions of extremity:
**stijl-extremiteit** (stylistic rhetoric, 15) and **materiële impact** **stijl-extremiteit** (stylistic rhetoric, 1 to 5) and **materiële impact**
(material policy consequence, 15), manually validated with 75% auditor agreement. (material policy consequence, 1 to 5), manually validated with 75% auditor agreement.
The Overton analysis presented here builds on this infrastructure. The same The Overton analysis presented here builds on this infrastructure. The same
SVD compass, extremity scores, and vote-level data that power the Stemwijzer SVD compass, extremity scores, and vote-level data that power the Stemwijzer
@ -86,22 +86,22 @@ Explorer dashboard drive these findings.
**Right-wing motion classification.** We identify right-wing motions using a **Right-wing motion classification.** We identify right-wing motions using a
hybrid keyword + voting-pattern classifier. A seed set of right-wing keywords hybrid keyword + voting-pattern classifier. A seed set of right-wing keywords
(vuurwerkverbod, stikstof, nareis, etc.) is expanded through an iterative (vuurwerkverbod, stikstof, nareis, etc.) is expanded through an iterative
keyword-vote loop — motions whose voting pattern correlates with right-wing keyword-vote loop. Motions whose voting pattern correlates with right-wing
party support are flagged, their distinctive terms extracted, and the keyword party support are flagged, their distinctive terms extracted, and the keyword
set refined. The final classifier identifies 3,030 motions as right-wing across set refined. The final classifier identifies 3,030 motions as right-wing across
20162026, with full voting records for centrist support computation. 2016 to 2026, with full voting records for centrist support computation.
**2D extremity scoring.** Every motion in the database (29,591) has been scored **2D extremity scoring.** Every motion in the database (29,591) has been scored
by an LLM on two dimensions: *stijl-extremiteit* (stylistic extremity: by an LLM on two dimensions: *stijl-extremiteit* (stylistic extremity:
inflammatory language, rhetorical framing) and *materiële impact* (material inflammatory language, rhetorical framing) and *materiële impact* (material
impact: rights restriction, institutional change, resource reallocation), each impact: rights restriction, institutional change, resource reallocation), each
on a 15 scale. Manual audit of 117 stratified motions achieved 75% agreement. on a 1 to 5 scale. Manual audit of 117 stratified motions achieved 75% agreement.
The two dimensions are only moderately correlated (Pearson r = 0.43 for all The two dimensions are only moderately correlated (Pearson r = 0.43 for all
motions, r = 0.47 for right-wing), confirming they capture distinct motions, r = 0.47 for right-wing), confirming they capture distinct
phenomena. Excluding ~6,000 placeholder motions scored (1,1) by default, r drops to 0.34 — the dimensions are even more independent than the headline figure suggests. phenomena. Excluding ~6,000 placeholder motions scored (1,1) by default, r drops to 0.34. The dimensions are even more independent than the headline figure suggests.
**Strict centrist definition.** We define the centrist bloc narrowly as four **Strict centrist definition.** We define the centrist bloc narrowly as four
parties — D66, CDA, ChristenUnie, NSC — excluding VVD and BBB, which lean parties (D66, CDA, ChristenUnie, NSC), excluding VVD and BBB, which lean
center-right and would inflate centrist support mechanically. A strict center-right and would inflate centrist support mechanically. A strict
opposition-only filter further controls for coalition effects by excluding opposition-only filter further controls for coalition effects by excluding
motions whose lead submitter belongs to the governing coalition. motions whose lead submitter belongs to the governing coalition.
@ -173,7 +173,7 @@ fig1.show()
## Indicator 1: Centrist Voting Support ## Indicator 1: Centrist Voting Support
The cleanest signal is in how centrist parties voted on right-wing motions. The cleanest signal is in how centrist parties voted on right-wing motions.
Average support rose from 0.251 pre-2024 to 0.507 post-2024 a Cohen's d of Average support rose from 0.251 pre-2024 to 0.507 post-2024, a Cohen's d of
+0.65, a medium-to-large effect. The breakpoint is unmistakably 2024. +0.65, a medium-to-large effect. The breakpoint is unmistakably 2024.
This is not a coalition artifact. After the Schoof cabinet formed in July 2024, This is not a coalition artifact. After the Schoof cabinet formed in July 2024,
@ -189,7 +189,7 @@ how radical a motion is, but at a consistently higher baseline. High-extremity
motions gained proportionally more support than mild motions, consistent with motions gained proportionally more support than mild motions, consistent with
genuine tolerance expansion rather than compositional shift. genuine tolerance expansion rather than compositional shift.
**Pass rate is useless as an indicator.** Dutch parliament passes 96%+ of motions Pass rate is useless as an indicator. Dutch parliament passes 96%+ of motions
in both periods. With near-zero variance, pass rate cannot register a shift of in both periods. With near-zero variance, pass rate cannot register a shift of
any magnitude. Centrist support among MPs is the meaningful behavioral measure. any magnitude. Centrist support among MPs is the meaningful behavioral measure.
@ -261,7 +261,7 @@ phenomenon, not a general parliamentary trend.
## Indicator 2: Spatial Divergence ## Indicator 2: Spatial Divergence
If centrists are voting more with right-wing motions, one might expect If centrists are voting more with right-wing motions, one might expect
ideological convergence centrist parties drifting rightward on the SVD ideological convergence: centrist parties drifting rightward on the SVD
compass. Procrustes-aligned SVD analysis shows the opposite. compass. Procrustes-aligned SVD analysis shows the opposite.
```{python} ```{python}
@ -312,18 +312,18 @@ Between the first and last annual windows:
from 0.282 to 0.428 (+0.146). from 0.282 to 0.428 (+0.146).
This is spatial divergence, not convergence. Centrist parties did not become This is spatial divergence, not convergence. Centrist parties did not become
right-wing — they became marginally *more* left-wing in their overall voting right-wing. They became marginally *more* left-wing in their overall voting
patterns. The centrist center of gravity moved toward welfare and cosmopolitanism, patterns. The centrist center of gravity moved toward welfare and cosmopolitanism,
while right-wing parties moved further into the nationalist corner. while right-wing parties moved further into the nationalist corner.
**Why this makes sense with the voting data:** The SVD captures the *full* Why this makes sense with the voting data: The SVD captures the *full*
voting landscape including all motions, not just the ones centrists supported. voting landscape, including all motions, not just the ones centrists supported.
Right-wing parties continued filing high-impact motions that centrists opposed, Right-wing parties continued filing high-impact motions that centrists opposed,
while simultaneously filing a much larger volume of milder motions centrists while simultaneously filing a much larger volume of milder motions centrists
supported. The net effect on SVD was centrist-left divergence: the extreme supported. The net effect on SVD was centrist-left divergence: the extreme
motions (still opposed by centrists) dominated the voting structure, while the motions (still opposed by centrists) dominated the voting structure, while the
surge of milder centrist-supported motions added volume without shifting party surge of milder centrist-supported motions added volume without shifting party
positions. This is "acceptance without conversion" — centrists vote more with positions. This is "acceptance without conversion." Centrists vote more with
right-wing motions while moving further from them ideologically. right-wing motions while moving further from them ideologically.
## Indicator 3: Content Moderation ## Indicator 3: Content Moderation
@ -417,12 +417,12 @@ Both dimensions *decreased*: stylistic extremity (−0.131) and material impact
(−0.336). A Wilcoxon signed-rank test comparing yearly mean stylistic vs yearly (−0.336). A Wilcoxon signed-rank test comparing yearly mean stylistic vs yearly
mean material scores confirms the dimensions systematically differ (W = 0.0, mean material scores confirms the dimensions systematically differ (W = 0.0,
n = 10 yearly pairs, p = 0.002). The gap between the two dimensions narrowed n = 10 yearly pairs, p = 0.002). The gap between the two dimensions narrowed
from 0.911 to 0.706 — right-wing motions became both less rhetorically hostile from 0.911 to 0.706. Right-wing motions became both less rhetorically hostile
AND less substantively impactful. AND less substantively impactful.
Compared to all motions, right-wing motions score higher on both dimensions: Compared to all motions, right-wing motions score higher on both dimensions:
stijl +0.47, materieel +0.54. The masking rate restrained language paired stijl +0.47, materieel +0.54. The masking rate, restrained language paired
with high material impact is 9.7% (S≤2, M≥4) or 13.5% (S=1, M≥3) for right-wing motions with high material impact, is 9.7% (S≤2, M≥4) or 13.5% (S=1, M≥3) for right-wing motions
vs 24.0% for all motions. Right-wing proposals disproportionately use vs 24.0% for all motions. Right-wing proposals disproportionately use
procedural language to advance consequential policy. procedural language to advance consequential policy.
@ -496,7 +496,7 @@ consensus framing drives centrist support. Note: inter-rater reliability for mec
**Party-level analysis** reveals the shift is not uniform. JA21 is the primary **Party-level analysis** reveals the shift is not uniform. JA21 is the primary
driver, with a +0.203 CS shift and the only volume + support gains combination. driver, with a +0.203 CS shift and the only volume + support gains combination.
PVV entered government and filed fewer, milder motions. FVD remains structurally PVV entered government and filed fewer, milder motions. FVD remains structurally
shunned — its motions consistently fail to gain centrist support regardless of shunned. Its motions consistently fail to gain centrist support regardless of
content. content.
## Temporal Dynamics ## Temporal Dynamics
@ -591,12 +591,12 @@ fig6.show()
**Timing.** The inflection point is 2024-Q1, the quarter immediately following **Timing.** The inflection point is 2024-Q1, the quarter immediately following
the PVV's November 2023 election victory. Centrist support jumped from 0.321 the PVV's November 2023 election victory. Centrist support jumped from 0.321
(2023-Q4) to 0.501 (2024-Q1) a single-quarter increase of +0.180, roughly (2023-Q4) to 0.501 (2024-Q1), a single-quarter increase of +0.180, roughly
twice the average quarterly change. twice the average quarterly change.
**Shape.** Centrist support rose sharply through 2024-Q4, reaching an all-time **Shape.** Centrist support rose sharply through 2024-Q4, reaching an all-time
peak of 0.648 in the first full quarter of the Schoof cabinet. From that peak, peak of 0.648 in the first full quarter of the Schoof cabinet. From that peak,
it declined steadily: 0.598, 0.503, 0.437, 0.450, and 0.334 in 2026-Q1 it declined steadily: 0.598, 0.503, 0.437, 0.450, and 0.334 in 2026-Q1,
below the 0.4 inflection threshold and approaching pre-shift levels. below the 0.4 inflection threshold and approaching pre-shift levels.
**Causal mechanism.** The shift began before the Schoof cabinet formed (July **Causal mechanism.** The shift began before the Schoof cabinet formed (July
@ -610,7 +610,7 @@ is the centrist support surge a temporary electoral-cycle effect rather than a
permanent Overton window shift? Material moderation persisted (materieel ~2.4) permanent Overton window shift? Material moderation persisted (materieel ~2.4)
through the decline, but stylistic extremity reverted from 1.70 to 2.02. CS was through the decline, but stylistic extremity reverted from 1.70 to 2.02. CS was
already declining through 2025 (0.648→0.450) despite continued moderation, already declining through 2025 (0.648→0.450) despite continued moderation,
suggesting the 2024 spike was primarily an electoral shock for non-migration domains. However, 2026-Q2 shows CS bouncing back to 0.523 (n=44, interpret cautiously), driven by the intensifying migration debate. Migration centrist support (0.395) now exceeds non-migration (0.368) for the first time — the shift is domain-specific: temporary for non-migration, durable for migration. suggesting the 2024 spike was primarily an electoral shock for non-migration domains. However, 2026-Q2 shows CS bouncing back to 0.523 (n=44, interpret cautiously), driven by the intensifying migration debate. Migration centrist support (0.395) now exceeds non-migration (0.368) for the first time. The shift is domain-specific: temporary for non-migration, durable for migration.
| Hypothesis | Evidence | Verdict | | Hypothesis | Evidence | Verdict |
|------------|----------|---------| |------------|----------|---------|
@ -623,7 +623,7 @@ suggesting the 2024 spike was primarily an electoral shock for non-migration dom
**The Overton window widened: more right-wing positions became politically **The Overton window widened: more right-wing positions became politically
acceptable after 2024. But the mechanism was right-wing moderation, not centrist acceptable after 2024. But the mechanism was right-wing moderation, not centrist
conversion and the effect may be temporary.** conversion, and the effect may be temporary.**
Centrist support for right-wing motions surged from 25% to 51%, while centrist Centrist support for right-wing motions surged from 25% to 51%, while centrist
support for non-right-wing motions rose modestly (58%→62%, +3.5 pp). The window of acceptable support for non-right-wing motions rose modestly (58%→62%, +3.5 pp). The window of acceptable
@ -635,14 +635,14 @@ debate expanded rightward.
by 2026. by 2026.
2. **Centrists did not become more tolerant.** The extremity-stratified 2. **Centrists did not become more tolerant.** The extremity-stratified
gradient persists — centrists still differentiate between mild and extreme gradient persists. Centrists still differentiate between mild and extreme
motions. The across-the-board baseline shift reflects that content within motions. The across-the-board baseline shift reflects that content within
each bucket became milder, not that centrists lowered their standards. each bucket became milder, not that centrists lowered their standards.
3. **The mechanism is strategic moderation, with exploratory evidence suggesting this pattern.** Zero 3. **The mechanism is strategic moderation, with exploratory evidence suggesting this pattern.** Zero
system-dismantling proposals achieved high centrist support post-2024. The system-dismantling proposals achieved high centrist support post-2024. The
dominant pathways procedural/technical (32%), consensus framing (24%), dominant pathways, such as procedural/technical (32%), consensus framing (24%),
and targeted restriction (17%) suggest right-wing parties learned which and targeted restriction (17%), suggest right-wing parties learned which
frames work, though mechanism classification has moderate reliability (κ = 0.41). frames work, though mechanism classification has moderate reliability (κ = 0.41).
4. **SVD divergence confirms this.** Centrists moved left spatially as the 4. **SVD divergence confirms this.** Centrists moved left spatially as the
@ -650,22 +650,22 @@ debate expanded rightward.
5. **The shift is electorally driven and domain-specific.** Centrist support 5. **The shift is electorally driven and domain-specific.** Centrist support
surged immediately after the PVV election, peaked at 0.648 in 2024-Q4, and surged immediately after the PVV election, peaked at 0.648 in 2024-Q4, and
declined through 2025 to 0.450 despite continued material moderation — then declined through 2025 to 0.450 despite continued material moderation. Then
hit 0.334 in 2026-Q1. But 2026-Q2 bounced back to 0.523 (n=44, interpret cautiously), driven by the hit 0.334 in 2026-Q1. But 2026-Q2 bounced back to 0.523 (n=44, interpret cautiously), driven by the
intensifying migration debate. Non-migration acceptance was a temporary intensifying migration debate. Non-migration acceptance was a temporary
electoral shock; migration acceptance is durable and growing. electoral shock; migration acceptance is durable and growing.
**The gateway domain: migration.** Migration is where the Overton shift is most The gateway domain: migration. Migration is where the Overton shift is most
genuine — and where right-wing parties learned the frames they then applied genuine. The frames right-wing parties learned there, they then applied
elsewhere. Material impact barely declined (−0.13), yet centrist support more elsewhere. Material impact barely declined (−0.13), yet centrist support more
than doubled (0.153 → 0.369). Centrists went from zero support for M = 5 than doubled (0.153 → 0.369). Centrists went from zero support for M = 5
migration motions to nearly 20%. The gradient between impact levels flattened migration motions to nearly 20%. The gradient between impact levels flattened.
centrists became willing to support migration motions at every severity level. Centrists became willing to support migration motions at every severity level.
This is not just strategic moderation: it is measurable acceptance expansion, This is measurable acceptance expansion,
driven primarily by CDA and ChristenUnie rather than D66. What started as a driven primarily by CDA and ChristenUnie rather than D66. What started as a
migration-specific acceptance shift became the template for broader Overton migration-specific acceptance shift became the template for broader Overton
widening across climate, security, and economic policy. **As of 2026, migration widening across climate, security, and economic policy. As of 2026, migration
centrist support (0.395) exceeds non-migration (0.368) for the first time** — centrist support (0.395) exceeds non-migration (0.368) for the first time,
confirming that migration acceptance is durable while non-migration acceptance confirming that migration acceptance is durable while non-migration acceptance
was the temporary component. Multiple 2026-Q2 migration motions received was the temporary component. Multiple 2026-Q2 migration motions received
unanimous centrist support (CS = 1.00), including high-impact items. unanimous centrist support (CS = 1.00), including high-impact items.
@ -688,14 +688,14 @@ unanimous centrist support (CS = 1.00), including high-impact items.
This article is one surface of a three-tier analysis: This article is one surface of a three-tier analysis:
1. **Narrative spine** — you're reading it. The story, with key evidence. 1. **Narrative spine.** You're reading it. The story, with the evidence.
2. **Technical appendices** — detailed markdown reports in `reports/overton_window/` 2. **Technical appendices.** Detailed markdown reports in `reports/overton_window/`
cover every methodological decision, robustness check, and sensitivity cover every methodological decision, robustness check, and sensitivity
analysis. analysis.
3. **Live exploration** — explore the Stemwijzer Explorer: 3. **Live exploration.** Explore the Stemwijzer Explorer:
- **Kompas tab** party positions on the SVD axes - **Kompas tab:** party positions on the SVD axes
- **Trajectories tab** how parties drifted over time - **Trajectories tab:** how parties drifted over time
- **Overton tab** centrist support trends and right-wing motion browser - **Overton tab:** centrist support trends and right-wing motion browser
**Visit the Explorer** at `localhost:8501` to interact with the compass, plot **Visit the Explorer** at `localhost:8501` to interact with the compass, plot
your position, and verify these findings against the underlying vote data. your position, and verify these findings against the underlying vote data.

@ -1,7 +1,7 @@
# Has the Overton Window Shifted? A Synthesis # Has the Overton Window Shifted? A Synthesis
**Date:** 2026-05-26 **Date:** 2026-05-26
**Analysis period:** 20162026 **Analysis period:** 2016-2026
**Data:** 29,591 motions with 2D extremity scores (`extremity_scores_all`), including 3,089 right-wing motions with dedicated 2D scores (`extremity_scores_2d`), Procrustes-aligned SVD party positions across 10 annual windows, MP-level vote records for centrist parties (D66, CDA, ChristenUnie, NSC) and left-wing parties (SP, GroenLinks-PvdA, PvdD, Volt, DENK), quarterly centrist support trajectories (33 quarters), 150-motion systematic mechanism classification **Data:** 29,591 motions with 2D extremity scores (`extremity_scores_all`), including 3,089 right-wing motions with dedicated 2D scores (`extremity_scores_2d`), Procrustes-aligned SVD party positions across 10 annual windows, MP-level vote records for centrist parties (D66, CDA, ChristenUnie, NSC) and left-wing parties (SP, GroenLinks-PvdA, PvdD, Volt, DENK), quarterly centrist support trajectories (33 quarters), 150-motion systematic mechanism classification
--- ---
@ -15,11 +15,11 @@
| M≥4 share (% high-impact) | 23.7% | 11.3% | −12.4 pp | **Declined** | | M≥4 share (% high-impact) | 23.7% | 11.3% | −12.4 pp | **Declined** |
| SVD cultural gap (centrist−right) | 0.282 | 0.428 | +0.146 | **Diverged** | | SVD cultural gap (centrist−right) | 0.282 | 0.428 | +0.146 | **Diverged** |
| Stylistic extremity (2D) | 1.875 | 1.744 | −0.131 | **Declined** | | Stylistic extremity (2D) | 1.875 | 1.744 | −0.131 | **Declined** |
| Temporal trajectory | — | — | — | **Immediate electoral jump, reverting** | | Temporal trajectory | - | - | - | **Immediate electoral jump, reverting** |
Centrist support surged. Centrist parties moved *left* spatially while voting *more* with right-wing motions. But the motions themselves became *less* materially impactful — the share of high-impact proposals (M≥4) dropped from 23.7% to 11.3% and continued falling through 2026 (2.7%). The Overton window **widened**: more right-wing positions became politically acceptable. Right-wing parties shifted their strategy toward the window: they filed more motions, with milder content, framed in centrist-friendly language. The center rewarded the framing without moving ideologically. Centrist support surged. Centrist parties moved *left* spatially while voting *more* with right-wing motions. But the motions themselves became *less* materially impactful. The share of high-impact proposals (M≥4) dropped from 23.7% to 11.3% and continued falling through 2026 (2.7%). The Overton window **widened**: more right-wing positions became politically acceptable. Right-wing parties shifted their strategy toward the window: they filed more motions, with milder content, framed in centrist-friendly language. The center rewarded the framing without moving ideologically.
Two additional findings deepen the picture. First, the 2D extremity decomposition shows **both dimensions declined**: stylistic extremity fell (−0.131) alongside material impact (−0.35). Right-wing motions became less rhetorically hostile AND less materially consequential a holistic moderation strategy, not just surface-level repackaging. Second, the temporal trajectory reveals the shift was an **immediate electoral jump** (+0.180 in a single quarter) that peaked at 0.648 in 2024-Q4 and has since **reverted** to 0.334 by 2026-Q1. The shift may be an electoral-cycle phenomenon rather than a permanent Overton window movement. Two additional findings deepen the picture. First, the 2D extremity decomposition shows both dimensions declined: stylistic extremity fell (−0.131) alongside material impact (−0.35). Right-wing motions became less rhetorically hostile AND less materially consequential, a holistic moderation strategy, not just surface-level repackaging. Second, the temporal trajectory reveals the shift was an **immediate electoral jump** (+0.180 in a single quarter) that peaked at 0.648 in 2024-Q4 and has since reverted to 0.334 by 2026-Q1. The shift may be an electoral-cycle phenomenon rather than a permanent Overton window movement.
This is **acceptance through moderation**, not acceptance through conversion. Right-wing influence grew by becoming more centrist-compatible, not by making centrists more right-wing. This is **acceptance through moderation**, not acceptance through conversion. Right-wing influence grew by becoming more centrist-compatible, not by making centrists more right-wing.
@ -27,11 +27,11 @@ This is **acceptance through moderation**, not acceptance through conversion. Ri
## Indicator 1: Centrist Voting Support ## Indicator 1: Centrist Voting Support
The cleanest signal is in how centrist parties voted on right-wing motions. Using a strict centrist definition (D66, CDA, CU, NSC), average support rose from 0.251 pre-2024 to 0.507 post-2024 — a Cohen's d of +0.65, representing a medium-to-large effect in descriptive terms. The breakpoint is unmistakably 2024. The cleanest signal is in how centrist parties voted on right-wing motions. Using a strict centrist definition (D66, CDA, CU, NSC), average support rose from 0.251 pre-2024 to 0.507 post-2024, a Cohen's d of +0.65, a medium-to-large effect in descriptive terms. The breakpoint is unmistakably 2024.
This is not a coalition artifact. After the Schoof cabinet formed in July 2024, PVV entered government, which could mechanically inflate support for its own motions. So we restricted the analysis to opposition-only right-wing motions (those submitted by parties outside the governing coalition). The effect there is larger: d = +0.85, with support jumping from 0.270 to 0.543. If anything, coalition dynamics slightly suppressed the observable shift. Centrist parties are genuinely more willing to support right-wing motions than they were before 2024, even when those motions come from opposition right-wing parties. This is not a coalition artifact. After the Schoof cabinet formed in July 2024, PVV entered government, which could mechanically inflate support for its own motions. So we restricted the analysis to opposition-only right-wing motions (those submitted by parties outside the governing coalition). The effect there is larger: d = +0.85, with support jumping from 0.270 to 0.543. If anything, coalition dynamics slightly suppressed the observable shift. Centrist parties are genuinely more willing to support right-wing motions than they were before 2024, even when those motions come from opposition right-wing parties.
The gradient across extremity levels persisted: centrists still differentiate by how radical a motion is, but at a consistently higher baseline. High-extremity motions (buckets 3–5) gained proportionally *more* support than mild motions (buckets 1–2). This is consistent with genuine tolerance expansion, not a compositional shift toward milder motions. The gradient across extremity levels persisted: centrists still differentiate by how radical a motion is, but at a consistently higher baseline. High-extremity motions (buckets 3-5) gained proportionally *more* support than mild motions (buckets 1-2). This is consistent with genuine tolerance expansion, not a compositional shift toward milder motions.
The migration domain is the primary vehicle. Migration motions gained +0.233 in centrist support (from 0.303 to 0.536), compared to +0.076 for non-migration motions. Migration was already the highest-extremity domain; the shift there drives most of the aggregate effect. The migration domain is the primary vehicle. Migration motions gained +0.233 in centrist support (from 0.303 to 0.536), compared to +0.076 for non-migration motions. Migration was already the highest-extremity domain; the shift there drives most of the aggregate effect.
@ -47,30 +47,30 @@ The aggregate shift masks two distinct stories. Breaking the data by policy doma
| Climate/stikstof/energy | 0.303 | 0.554 | 26.3% | 6.3% | Strong moderation | | Climate/stikstof/energy | 0.303 | 0.554 | 26.3% | 6.3% | Strong moderation |
| **Migration (asiel)** | **0.153** | **0.369** | **44.1%** | **28.9%** | **Mixed: acceptance + moderation** | | **Migration (asiel)** | **0.153** | **0.369** | **44.1%** | **28.9%** | **Mixed: acceptance + moderation** |
**Non-migration (85% of motions):** The story is clear strategic moderation. Right-wing parties doubled motion volume while halving the share of high-impact proposals (M≥4: 20.8%→8.0%). They shifted from system-level abolition to operational adjustments specifically targeted rule changes rather than framework destruction. Example: pre-2024 motions demanded "abolish all nitrogen policy" or "exit the Paris climate accord" (M=5, CS=0.0 every time). Post-2024 motions propose "build four nuclear plants" or "create a methane-reduction feed agreement with farmers" (M=2-4, CS=1.0). Centrists rewarded the operational framing. **Non-migration (85% of motions):** The story is clear strategic moderation. Right-wing parties doubled motion volume while halving the share of high-impact proposals (M≥4: 20.8%→8.0%). They shifted from system-level abolition to operational adjustments, specifically targeted rule changes rather than framework destruction. Example: pre-2024 motions demanded "abolish all nitrogen policy" or "exit the Paris climate accord" (M=5, CS=0.0 every time). Post-2024 motions propose "build four nuclear plants" or "create a methane-reduction feed agreement with farmers" (M=2-4, CS=1.0). Centrists rewarded the operational framing.
**Migration (15% of motions):** The pattern is different. Material impact barely changed (3.26→3.13, only −0.13), yet centrist support more than doubled (0.153→0.369). Crucially, centrists went from *never* supporting M=5 migration motions (CS=0.000) to backing nearly 1 in 5 (CS=0.185). The gradient between impact levels flattened significantly — centrists still differentiate, but the gap narrowed. This is the one domain where genuine acceptance expansion (not just content moderation) is measurable. **Migration (15% of motions):** The pattern is different. Material impact barely changed (3.26→3.13, only −0.13), yet centrist support more than doubled (0.153→0.369). Centrists went from *never* supporting M=5 migration motions (CS=0.000) to backing nearly 1 in 5 (CS=0.185). The gradient between impact levels flattened significantly. Centrists still differentiate, but the gap narrowed. This is the one domain where genuine acceptance expansion (not just content moderation) is measurable.
### Temporal Dynamics ### Temporal Dynamics
Quarterly analysis across 33 quarters (2016-Q2 through 2026-Q1) replaces the binary pre/post-2024 comparison with a continuous trajectory that reveals the exact timing, shape, and sustainability of the shift. Quarterly analysis across 33 quarters (2016-Q2 through 2026-Q1) replaces the binary pre/post-2024 comparison with a continuous trajectory that reveals the exact timing, shape, and sustainability of the shift.
**Timing.** The inflection point is 2024-Q1, the quarter immediately following the PVV's November 2023 election victory. Centrist support jumped from 0.321 (2023-Q4) to 0.501 (2024-Q1) a single-quarter increase of +0.180, roughly twice the average quarterly change of 0.097. This was a discrete structural break, not a gradual ramp. The pre-inflection mean (0.329 across 24 quarters) was stable and low. The post-inflection mean (0.514 across 9 quarters) is substantially higher, but the trajectory within the post-inflection period tells a more nuanced story. **Timing.** The inflection point is 2024-Q1, the quarter immediately following the PVV's November 2023 election victory. Centrist support jumped from 0.321 (2023-Q4) to 0.501 (2024-Q1), a single-quarter increase of +0.180, roughly twice the average quarterly change of 0.097. This was a discrete structural break, not a gradual ramp. The pre-inflection mean (0.329 across 24 quarters) was stable and low. The post-inflection mean (0.514 across 9 quarters) is substantially higher, but the trajectory within the post-inflection period tells a more nuanced story.
**Shape.** Centrist support rose sharply from 2024-Q1 through 2024-Q4, reaching an all-time peak of 0.648 in the first full quarter of the Schoof cabinet. From that peak, it declined steadily: 0.598 in 2025-Q1, 0.503 in 2025-Q2, 0.437 in 2025-Q3, 0.450 in 2025-Q4, and 0.334 in 2026-Q1 below the 0.4 inflection threshold. The peak-to-current decline of 0.314 is larger in magnitude than the original pre-to-peak surge of 0.327. **Shape.** Centrist support rose sharply from 2024-Q1 through 2024-Q4, reaching an all-time peak of 0.648 in the first full quarter of the Schoof cabinet. From that peak, it declined steadily: 0.598 in 2025-Q1, 0.503 in 2025-Q2, 0.437 in 2025-Q3, 0.450 in 2025-Q4, and 0.334 in 2026-Q1, below the 0.4 inflection threshold. The peak-to-current decline of 0.314 is larger in magnitude than the original pre-to-peak surge of 0.327.
**Causal mechanism.** The shift began before the Schoof cabinet formed (July 2024), appearing immediately after the PVV election. This makes coalition dynamics an unlikely primary driver. The shift appears electorally driven — centrist parties adapted their voting behavior in response to the electoral shock, not to cabinet participation. Four competing hypotheses were evaluated against the quarterly timing data: **Causal mechanism.** The shift began before the Schoof cabinet formed (July 2024), appearing immediately after the PVV election. This makes coalition dynamics an unlikely primary driver. The shift appears electorally driven. Centrist parties adapted their voting behavior in response to the electoral shock, not to cabinet participation. Four competing hypotheses were evaluated against the quarterly timing data:
| Hypothesis | Evidence | Verdict | | Hypothesis | Evidence | Verdict |
|------------|----------|---------| |------------|----------|---------|
| Electoral shock | Jump immediately followed PVV victory (Nov 2023) | **SUPPORTED** | | Electoral shock | Jump immediately followed PVV victory (Nov 2023) | **SUPPORTED** |
| Coalition dynamics | Shift began 3 quarters before cabinet formed (Jul 2024) | **Less consistent with the data** | | Coalition dynamics | Shift began 3 quarters before cabinet formed (Jul 2024) | **Less consistent with the data** |
| Gradual learning curve | Jump was 1.9× the average quarterly change discrete, not incremental | **Less consistent with the data** | | Gradual learning curve | Jump was 1.9× the average quarterly change, discrete, not incremental | **Less consistent with the data** |
| European contagion | No Dutch response during European rightward shift period (20222023) | **Less consistent with the data** | | European contagion | No Dutch response during European rightward shift period (2022-2023) | **Less consistent with the data** |
The most parsimonious explanation is that centrist parties perceived the PVV's electoral success as a mandate for right-wing policy and adjusted their voting behavior accordingly, even before the new cabinet was formed. Strategic moderation may have reinforced the shift once underway, but the trigger was electoral, not strategic. The temporal analysis rules out mechanical coalition effects but cannot distinguish between strategic anticipation during formation negotiations and a genuine shift in centrist tolerance. The causal mechanism remains underdetermined. The most parsimonious explanation is that centrist parties perceived the PVV's electoral success as a mandate for right-wing policy and adjusted their voting behavior accordingly, even before the new cabinet was formed. Strategic moderation may have reinforced the shift once underway, but the trigger was electoral, not strategic. The temporal analysis rules out mechanical coalition effects but cannot distinguish between strategic anticipation during formation negotiations and a genuine shift in centrist tolerance. The causal mechanism remains underdetermined.
**Sustainability.** The trajectory is domain-specific. The 2026-Q1 reversion (CS = 0.334) suggested the shift was temporary — material moderation persisted (materieel ~2.4) but stylistic moderation reverted (stijl 1.70→2.02), and centrist support was declining through 2025 (0.648→0.450). However, 2026-Q2 shows a significant bounce back to CS = 0.523 (N=44), driven by the intensifying migration debate. For the first time, migration-domain centrist support (0.395) exceeds non-migration (0.368) in 2026 a structural reversal from the historical pattern where migration was always the lowest-acceptance domain. Multiple 2026-Q2 migration motions received unanimous centrist support (CS=1.00), including high-impact (M=4) items. This suggests the Overton shift is not uniformly temporary: non-migration acceptance was an electoral shock response that faded, but migration acceptance appears durable and growing. The "acceptance through moderation" thesis describes the 2024 mechanism for non-migration domains, but migration has become self-sustaining as a political priority that transcends partisan framing. **Sustainability.** The trajectory is domain-specific. The 2026-Q1 reversion (CS = 0.334) suggested the shift was temporary. Material moderation persisted (materieel ~2.4) but stylistic moderation reverted (stijl 1.70→2.02), and centrist support was declining through 2025 (0.648→0.450). However, 2026-Q2 shows a significant bounce back to CS = 0.523 (N=44), driven by the intensifying migration debate. For the first time, migration-domain centrist support (0.395) exceeds non-migration (0.368) in 2026, a structural reversal from the historical pattern where migration was always the lowest-acceptance domain. Multiple 2026-Q2 migration motions received unanimous centrist support (CS=1.00), including high-impact (M=4) items. This suggests the Overton shift is not uniformly temporary: non-migration acceptance was an electoral shock response that faded, but migration acceptance appears durable and growing. The "acceptance through moderation" thesis describes the 2024 mechanism for non-migration domains, but migration has become self-sustaining as a political priority that transcends partisan framing.
### Who Drove the Shift? MP-Level Granularity ### Who Drove the Shift? MP-Level Granularity
@ -80,31 +80,31 @@ The shift is not uniform across centrist parties. Counting individual MP votes o
|-------|--------------------------|---------------------------|------------------| |-------|--------------------------|---------------------------|------------------|
| CDA | ~18% | ~40% | 49%→73% | | CDA | ~18% | ~40% | 49%→73% |
| ChristenUnie | ~10% | ~30% | 38%→75% | | ChristenUnie | ~10% | ~30% | 38%→75% |
| NSC | | ~30% | 62%→66% | | NSC | - | ~30% | 62%→66% |
| D66 | ~4% | ~12% | 20%→34% | | D66 | ~4% | ~12% | 20%→34% |
| **All 4** | **~10%** | **~28%** | **34%→57%** | | **All 4** | **~10%** | **~28%** | **34%→57%** |
The two Christian-conservative parties — CDA and ChristenUnie — more than doubled their migration vote share. D66, the secular-progressive centrist party, barely moved from a very low baseline. NSC, formed in 2023 with migration as a defining issue, entered at a high level. The shift is not "centrists accepting right-wing content" — it is "the Christian-conservative wing of the center moved substantially, while the progressive wing barely budged." The composition of who counts as "centrist" matters: a five-seat CDA with 40% voor has a different political meaning than a 24-seat D66 with 10% voor. The two Christian-conservative parties (CDA and ChristenUnie) more than doubled their migration vote share. D66, the secular-progressive centrist party, barely moved from a very low baseline. NSC, formed in 2023 with migration as a defining issue, entered at a high level. The shift is not "centrists accepting right-wing content." It is "the Christian-conservative wing of the center moved substantially, while the progressive wing barely budged." The composition of who counts as "centrist" matters: a five-seat CDA with 40% voor has a different political meaning than a 24-seat D66 with 10% voor.
--- ---
## Indicator 2: SVD Spatial Drift ## Indicator 2: SVD Spatial Drift
If centrists are voting more with right-wing motions, one might expect ideological convergence — centrist parties drifting rightward in their voting patterns. Procrustes-aligned SVD analysis shows the opposite. If centrists are voting more with right-wing motions, one might expect ideological convergence. Centrist parties drifting rightward in their voting patterns. Procrustes-aligned SVD analysis shows the opposite.
Using chained Procrustes orthogonal rotation followed by global PCA on stacked voting vectors — the same alignment pipeline as the Explorer UI compass — we placed all annual party positions in a common 2D reference frame. Between the first and last annual windows: Using chained Procrustes orthogonal rotation followed by global PCA on stacked voting vectors, the same alignment pipeline as the Explorer UI compass. We placed all annual party positions in a common 2D reference frame. Between the first and last annual windows:
- **Centrists moved LEFT on both axes:** −0.223 on the economic axis (more welfare-oriented) and +0.081 on the cultural axis (more kosmopolitisch). - Centrists moved LEFT on both axes: −0.223 on the economic axis (more welfare-oriented) and +0.081 on the cultural axis (more kosmopolitisch).
- **Right-wing parties moved further RIGHT culturally:** −0.065 on the cultural axis (more nationalist). - Right-wing parties moved further RIGHT culturally: −0.065 on the cultural axis (more nationalist).
- **The cultural distance between centrists and right-wing parties widened** from 0.282 to 0.428 (+0.146). - The cultural distance between centrists and right-wing parties widened from 0.282 to 0.428 (+0.146).
This is spatial *divergence*, not convergence. Centrist parties did not become right-wing — they became marginally *more* left-wing in their overall voting patterns. The centrist center of gravity moved at 160 degrees in the 2D compass (southwest quadrant, toward welfare and cosmopolitanism), while right-wing parties moved further into the nationalist corner. This is spatial *divergence*, not convergence. Centrist parties did not become right-wing. They became marginally *more* left-wing in their overall voting patterns. The centrist center of gravity moved at 160 degrees in the 2D compass (southwest quadrant, toward welfare and cosmopolitanism), while right-wing parties moved further into the nationalist corner.
**Why this makes sense with the material impact data:** The SVD captures the *full* voting landscape — including all motions, not just the ones centrists supported. Right-wing parties continued filing high-impact motions that centrists opposed, while simultaneously filing a much larger volume of milder motions centrists supported. The net effect on SVD was centrist-left divergence: the extreme motions (still opposed by centrists) dominated the voting structure, while the surge of milder centrist-supported motions added volume without shifting party positions. **Why this makes sense with the material impact data:** The SVD captures the *full* voting record, including all motions, not just the ones centrists supported. Right-wing parties continued filing high-impact motions that centrists opposed, while simultaneously filing a much larger volume of milder motions centrists supported. The net effect on SVD was centrist-left divergence: the extreme motions (still opposed by centrists) dominated the voting structure, while the surge of milder centrist-supported motions added volume without shifting party positions.
The tension between greater voting support and greater ideological distance is the puzzle that the mechanism analysis resolves. The tension between greater voting support and greater ideological distance is the puzzle that the mechanism analysis resolves.
**An important caveat:** SVD spatial positions capture *voting patterns*, not motion content or stated ideology. The finding that centrists moved left on the SVD axes means centrist parties' voting patterns became more distinct from right-wing voting patterns — it does not tell us whether the motions themselves became more right-wing or left-wing in content. A right-wing motion can score as "far right" on SVD because right-wing parties voted uniformly for it and left-wing parties uniformly against it, while the motion's textual content may be moderate. Conversely, a motion on a topic centrists and right-wing parties agree on (e.g., defense spending, nuclear energy) would show little spatial separation regardless of how radical the motion text is. SVD measures agreement structure, not policy positions. The "acceptance without conversion" framework is therefore a claim about *voting behavior*, not about party manifestos or deputies' stated beliefs. **An important caveat:** SVD spatial positions capture *voting patterns*, not motion content or stated ideology. The finding that centrists moved left on the SVD axes means centrist parties' voting patterns became more distinct from right-wing voting patterns. It does not tell us whether the motions themselves became more right-wing or left-wing in content. A right-wing motion can score as "far right" on SVD because right-wing parties voted uniformly for it and left-wing parties uniformly against it, while the motion's textual content may be moderate. Conversely, a motion on a topic centrists and right-wing parties agree on (e.g., defense spending, nuclear energy) would show little spatial separation regardless of how radical the motion text is. SVD measures agreement structure, not policy positions. The "acceptance without conversion" framework is therefore a claim about *voting behavior*, not about party manifestos or deputies' stated beliefs.
--- ---
@ -112,17 +112,17 @@ The tension between greater voting support and greater ideological distance is t
The original single-dimensional extremity score showed no increase post-2024 (d = −0.09, from 2.21 to 2.15). If the Overton window shifted, why didn't right-wing motions become more radical? The original single-dimensional extremity score showed no increase post-2024 (d = −0.09, from 2.21 to 2.15). If the Overton window shifted, why didn't right-wing motions become more radical?
The answer lies in what the single score measured. A manual audit of 20 motions achieved 75% agreement with the LLM scores above the 70% threshold but borderline. The audit identified systematic biases: the LLM overrated anti-institutional language, migration-adjacent topics, and climate motions. It was sensitive to stylistic hostility, not material policy impact. The answer lies in what the single score measured. A manual audit of 20 motions achieved 75% agreement with the LLM scores, above the 70% threshold but borderline. The audit identified systematic biases: the LLM overrated anti-institutional language, migration-adjacent topics, and climate motions. It was sensitive to stylistic hostility, not material policy impact.
Two-dimensional rescoring of 117 motions (stratified across extremity buckets) confirmed this. Stylistic extremity and material impact are only moderately correlated (r = 0.45), explaining just 20% of each other's variance. Material impact averages 2.86, compared to 2.01 for stylistic extremity a consistent gap of 0.85 points. A manual audit of these 117 motions found that 43 (36.8%) used restrained, procedural language to present policies with substantial material impact. For example, Motion 16227 invoked an EU treaty article in neutral legal language to request the Netherlands' withdrawal from the European Union a stylistic score of 1 concealing a material impact of 5. In the full dataset (3,030 right-wing motions), the masking rate (S≤2, M≥4) is 9.7%. Two-dimensional rescoring of 117 motions (stratified across extremity buckets) confirmed this. Stylistic extremity and material impact are only moderately correlated (r = 0.45), explaining just 20% of each other's variance. Material impact averages 2.86, compared to 2.01 for stylistic extremity, a consistent gap of 0.85 points. A manual audit of these 117 motions found that 43 (36.8%) used restrained, procedural language to present policies with substantial material impact. For example, Motion 16227 invoked an EU treaty article in neutral legal language to request the Netherlands' withdrawal from the European Union, with a stylistic score of 1 concealing a material impact of 5. In the full dataset (3,030 right-wing motions), the masking rate (S≤2, M≥4) is 9.7%.
The expanded dataset (29,591 motions across all motions in `extremity_scores_all`) provides a broader picture. The all-motion Pearson r = 0.43 includes ~6,010 placeholder motions (20.3%) scored (1,1) by default. Excluding these, r = 0.34 — the dimensions are MORE independent than the headline figure suggests. Among right-wing motions: r = 0.47 (all) vs r = 0.40 (excluding placeholders). The separable-dimensions thesis holds robustly under either specification. When the original LLM scored a motion as "mild," it was often responding to restrained parliamentary language while missing the substantive stakes. The expanded dataset (29,591 motions across all motions in `extremity_scores_all`) provides a broader picture. The all-motion Pearson r = 0.43 includes ~6,010 placeholder motions (20.3%) scored (1,1) by default. Excluding these, r = 0.34. The dimensions are MORE independent than the headline figure suggests. Among right-wing motions: r = 0.47 (all) vs r = 0.40 (excluding placeholders). The separable-dimensions thesis holds robustly under either specification. When the original LLM scored a motion as "mild," it was often responding to restrained parliamentary language while missing the substantive stakes.
Right-wing motions score significantly higher on both dimensions than the overall motion population: mean stylistic extremity 1.83 vs 1.36 (Δ=+0.47), mean material impact 2.66 vs 2.12 (Δ=+0.54). The masking rate — restrained language (S≤2) paired with high material impact (M≥4) — is 9.7% for right-wing motions vs 3.5% for all motions, confirming that the procedural-language-for-consequential-policy pattern is amplified in right-wing proposals. A broader definition (S=1, M≥3) yields 13.5% for right-wing motions. Right-wing motions score significantly higher on both dimensions than the overall motion population: mean stylistic extremity 1.83 vs 1.36 (Δ=+0.47), mean material impact 2.66 vs 2.12 (Δ=+0.54). The masking rate (restrained language (S≤2) paired with high material impact (M≥4)) is 9.7% for right-wing motions vs 3.5% for all motions, confirming that the procedural-language-for-consequential-policy pattern is amplified in right-wing proposals. A broader definition (S=1, M≥3) yields 13.5% for right-wing motions.
### 2D Extremity Trajectories ### 2D Extremity Trajectories
The single-dimension trend is clarified when stylistic and material extremity are tracked separately over time (20162026, n=3,030 scored right-wing motions). The two dimensions are only moderately correlated: right-wing r=0.47 (p<0.001), all-motion r=0.43, leaving 7882% of variance unexplained. The single-dimension trend is clarified when stylistic and material extremity are tracked separately over time (2016-2026, n=3,030 scored right-wing motions). The two dimensions are only moderately correlated: right-wing r=0.47 (p<0.001), all-motion r=0.43, leaving 78-82% of variance unexplained.
| Dimension | Pre-2024 Mean | Post-2024 Mean | Δ | | Dimension | Pre-2024 Mean | Post-2024 Mean | Δ |
|-----------|--------------|---------------|-----| |-----------|--------------|---------------|-----|
@ -130,13 +130,13 @@ The single-dimension trend is clarified when stylistic and material extremity ar
| Material impact | 2.786 | 2.450 | −0.336 | | Material impact | 2.786 | 2.450 | −0.336 |
| Gap (M−S) | 0.911 | 0.706 | −0.205 | | Gap (M−S) | 0.911 | 0.706 | −0.205 |
**Both dimensions declined** post-2024. Material impact fell more sharply (−0.336) than stylistic extremity (−0.131), indicating right-wing parties moderated both their language and their policy ambitions but moderated substance more than style. The gap between the two dimensions narrowed from 0.911 to 0.706, meaning the distinctive pattern of "high-impact but restrained language" motions became less pronounced. **Both dimensions declined** post-2024. Material impact fell more sharply (−0.336) than stylistic extremity (−0.131), indicating right-wing parties moderated both their language and their policy ambitions but moderated substance more than style. The gap between the two dimensions narrowed from 0.911 to 0.706, meaning the distinctive pattern of "high-impact but restrained language" motions became less pronounced.
A Wilcoxon signed-rank test comparing yearly mean stylistic vs yearly mean material scores confirms the dimensions systematically differ in magnitude (W=0.0, n=10 yearly pairs, p=0.002). Material impact consistently exceeds stylistic extremity, and the gap narrowed post-2024. A Wilcoxon signed-rank test comparing yearly mean stylistic vs yearly mean material scores confirms the dimensions systematically differ in magnitude (W=0.0, n=10 yearly pairs, p=0.002). Material impact consistently exceeds stylistic extremity, and the gap narrowed post-2024.
Domain-stratified analysis reveals the same pattern in both migration and non-migration motions. In migration, stylistic scores dropped from 2.70 to 2.51 while material declined from 3.27 to 3.04 — both falling, with style falling faster. In non-migration, stylistic scores remained essentially flat (1.65→1.69) while material fell substantially (2.48→2.25). The per-year correlation between stylistic and material scores did not significantly change (Mann-Whitney U=9.0, p=0.79), suggesting the two dimensions have been consistently only moderately correlated throughout the entire period — this is not a new phenomenon triggered by the 2024 shift. Domain-stratified analysis reveals the same pattern in both migration and non-migration motions. In migration, stylistic scores dropped from 2.70 to 2.51 while material declined from 3.27 to 3.04. Both fell, with style falling faster. In non-migration, stylistic scores remained essentially flat (1.65→1.69) while material fell substantially (2.48→2.25). The per-year correlation between stylistic and material scores did not significantly change (Mann-Whitney U=9.0, p=0.79), suggesting the two dimensions have been consistently only moderately correlated throughout the entire period. This is not a new phenomenon triggered by the 2024 shift.
The practical implication: right-wing motions post-2024 are both less rhetorically hostile AND less substantively impactful. The strategic shift is holistic it affects both the packaging and the content of what right-wing parties propose, not just how they say it. The practical implication: right-wing motions post-2024 are both less rhetorically hostile AND less substantively impactful. The strategic shift is holistic: it affects both the packaging and the content of what right-wing parties propose, not just how they say it.
--- ---
@ -184,20 +184,20 @@ Consensus framing (appealing to shared values: safety, efficiency, pragmatism, g
The mechanism × period interaction is significant (χ²(9) = 28.55, p < 0.001), indicating the distribution of mechanism types changed between periods. The largest shifts: The mechanism × period interaction is significant (χ²(9) = 28.55, p < 0.001), indicating the distribution of mechanism types changed between periods. The largest shifts:
- **Institutioneel/rechtsstatelijk:** surging from 4.0% to 17.3% (+13.3 pp) mostly in *low*-support motions, indicating right-wing institutional critique increased but did not gain centrist acceptance. - **Institutioneel/rechtsstatelijk:** surging from 4.0% to 17.3% (+13.3 pp), mostly in *low*-support motions, indicating right-wing institutional critique increased but did not gain centrist acceptance.
- **Crisisrespons:** collapsing from 14.0% to 0.7% (−13.3 pp) — right-wing parties abandoned crisis-framed motions. - **Crisisrespons:** collapsing from 14.0% to 0.7% (−13.3 pp). Right-wing parties abandoned crisis-framed motions.
- **Gerichte restrictie:** rising from 14.0% to 22.7% (+8.7 pp) — targeted rights restrictions grew in both high- and low-support categories, but remain the dominant mechanism in low-support motions. - **Gerichte restrictie:** rising from 14.0% to 22.7% (+8.7 pp). Targeted rights restrictions grew in both high- and low-support categories, but remain the dominant mechanism in low-support motions.
Critically, **zero system dismantling proposals** (mechanism: systeemontmanteling) achieved high centrist support post-2024. The truly ideological right-wing agenda — asylum stops, treaty exits, fundamental institutional upheaval — does not gain centrist support. Right-wing influence flows not through converting centrists to right-wing positions, but through repackaging: speaking the vocabulary centrists already accept, and increasingly through procedural and technical channels (32% of high-support motions) that make opposition structurally difficult. Critically, zero system dismantling proposals (mechanism: systeemontmanteling) achieved high centrist support post-2024. The truly ideological right-wing agenda (asylum stops, treaty exits, fundamental institutional upheaval) does not gain centrist support. Right-wing influence flows not through converting centrists to right-wing positions, but through repackaging: speaking the vocabulary centrists already accept, and increasingly through procedural and technical channels (32% of high-support motions) that make opposition structurally difficult.
### Anti-Institutional Motions: From Abolition to Contestation ### Anti-Institutional Motions: From Abolition to Contestation
Anti-institutional motions — those targeting courts, treaties, the constitution, or the EU — show the same strategic pivot: Anti-institutional motions (those targeting courts, treaties, the constitution, or the EU) show the same strategic pivot:
- **Nexit motions:** 5 pre-2024 → 0 post-2024 (completely disappeared) - **Nexit motions:** 5 pre-2024 → 0 post-2024 (completely disappeared)
- **Constitution amendments:** 4 → 0 (completely disappeared) - **Constitution amendments:** 4 → 0 (completely disappeared)
- **Treaty challenges:** shifted from "pull out" (Vluchtelingenverdrag opzeggen) to "block ratification" or "explore modifications" - **Treaty challenges:** shifted from "pull out" (Vluchtelingenverdrag opzeggen) to "block ratification" or "explore modifications"
- **Judiciary criticism:** 2 → 8 (increased, but focused on specific policies: abolish judicial dwangsommen, limit anonymous testimony, constrain judicial review scope working within the system) - **Judiciary criticism:** 2 → 8 (increased, but focused on specific policies: abolish judicial dwangsommen, limit anonymous testimony, constrain judicial review scope, working within the system)
The pattern is consistent across domains: right-wing stopped proposing to abolish institutions and started proposing to adjust specific rules within them. The volume of explicit institutional attacks declined, and what remains operates within rather than against the system. Centrist support for even the softened anti-institutional motions remains low (average CS=0.3), confirming these remain partisan territory. The pattern is consistent across domains: right-wing stopped proposing to abolish institutions and started proposing to adjust specific rules within them. The volume of explicit institutional attacks declined, and what remains operates within rather than against the system. Centrist support for even the softened anti-institutional motions remains low (average CS=0.3), confirming these remain partisan territory.
@ -205,7 +205,7 @@ The pattern is consistent across domains: right-wing stopped proposing to abolis
## Left-Wing Response ## Left-Wing Response
A competing explanation for the widening centrist-right gap is left-wing hardening: perhaps centrist support for right-wing motions reflects left-wing retreat rather than centrist accommodation. MP-level voting analysis of left-wing parties (SP, GroenLinks-PvdA, PvdD, Volt, DENK) across 20162026 rules this out. A competing explanation for the widening centrist-right gap is left-wing hardening: perhaps centrist support for right-wing motions reflects left-wing retreat rather than centrist accommodation. MP-level voting analysis of left-wing parties (SP, GroenLinks-PvdA, PvdD, Volt, DENK) across 2016-2026 rules this out.
Left support for right-wing motions was already low and barely changed: 21.3% pre-2024 to 20.2% post-2024 (Δ = −1.1 pp). The centrist shift, by contrast, was from 26.2% to 46.8% (Δ = +20.6 pp, Cohen's d = +1.89). The centrist shift is **18.3 times larger** in magnitude than the left-wing shift. The polarization gap (centrist support minus left support) widened from 0.049 pre-2024 to 0.266 post-2024 (+0.217), driven almost entirely by centrist accommodation, not left-wing hardening. Left support for right-wing motions was already low and barely changed: 21.3% pre-2024 to 20.2% post-2024 (Δ = −1.1 pp). The centrist shift, by contrast, was from 26.2% to 46.8% (Δ = +20.6 pp, Cohen's d = +1.89). The centrist shift is **18.3 times larger** in magnitude than the left-wing shift. The polarization gap (centrist support minus left support) widened from 0.049 pre-2024 to 0.266 post-2024 (+0.217), driven almost entirely by centrist accommodation, not left-wing hardening.
@ -217,23 +217,23 @@ Left support for right-wing motions was already low and barely changed: 21.3% pr
| Volt | 11.2% | 24.2% | +12.9 pp | | Volt | 11.2% | 24.2% | +12.9 pp |
| DENK | 40.1% | 27.8% | −12.3 pp | | DENK | 40.1% | 27.8% | −12.3 pp |
Every left-wing party except Volt *decreased* support for right-wing motions. Volt, however, more than doubled its support (11.2%→24.2%, +12.9 pp) the only left party that softened its opposition. Volt's trajectory is anomalous among left parties but mirrors the centrist pattern, consistent with Volt's distinctively pro-European, pragmatic positioning. Every left-wing party except Volt *decreased* support for right-wing motions. Volt, however, more than doubled its support (11.2%→24.2%, +12.9 pp), the only left party that softened its opposition. Volt's trajectory is anomalous among left parties but mirrors the centrist pattern, consistent with Volt's distinctively pro-European, pragmatic positioning.
Domain decomposition confirms the asymmetry. In non-migration domains, left support actually *fell* (28.2%→21.9%), while centrist support rose (43.5%→48.7%). In migration, both groups moved — left support doubled from a very low baseline (5.7%→10.6%), while centrist support more than doubled (14.6%→36.1%). The centrist shift dominates in every domain. Left-wing hardening is a real phenomenon but a minor one. The primary story is centrist accommodation, not left-wing retreat. Domain decomposition confirms the asymmetry. In non-migration domains, left support actually *fell* (28.2%→21.9%), while centrist support rose (43.5%→48.7%). In migration, both groups moved. Left support doubled from a very low baseline (5.7%→10.6%), while centrist support more than doubled (14.6%→36.1%). The centrist shift dominates in every domain. Left-wing hardening is a real phenomenon but a minor one. The primary story is centrist accommodation, not left-wing retreat.
--- ---
## Success Correlation ## Success Correlation
Does higher centrist support actually translate into more legislative success? The short answer is yes, statistically but the practical magnitude is limited by a ceiling effect. Does higher centrist support actually translate into more legislative success? The short answer is yes, statistically, but the practical magnitude is limited by a ceiling effect.
Dutch parliamentary motions pass at extremely high rates: 96.9% of all 2,986 right-wing motions across the 20162026 period were passed. The Cochran-Armitage trend test across centrist support quartiles is significant (χ² = 18.54, p < 0.001), confirming a positive monotonic relationship: motions with higher centrist support pass at higher rates. The success premium the difference in pass rate between the highest (Q4: 99.5%) and lowest (Q1: 96.3%) centrist support quartiles is +3.2%. Dutch parliamentary motions pass at extremely high rates: 96.9% of all 2,986 right-wing motions across the 2016-2026 period were passed. The Cochran-Armitage trend test across centrist support quartiles is significant (χ² = 18.54, p < 0.001), confirming a positive monotonic relationship: motions with higher centrist support pass at higher rates. The success premium, the difference in pass rate between the highest (Q4: 99.5%) and lowest (Q1: 96.3%) centrist support quartiles, is +3.2%.
This premium exists in both periods (pre-2024: +3.1%, post-2024: +3.2%), but the post-2024 trend test is much stronger (χ² = 14.24, p < 0.001) than pre-2024 (χ² = 2.69, p = 0.101). The relationship between centrist support and passage became tighter after the electoral shift, even though the absolute premium did not change. This premium exists in both periods (pre-2024: +3.1%, post-2024: +3.2%), but the post-2024 trend test is much stronger (χ² = 14.24, p < 0.001) than pre-2024 (χ² = 2.69, p = 0.101). The relationship between centrist support and passage became tighter after the electoral shift, even though the absolute premium did not change.
For opposition motions specifically — the truer test, since government motions nearly always pass — the trend is not quite significant (χ² = 3.82, p = 0.051) but directionally consistent. The opposition success premium is +3.4% (96.1% vs 99.5%). For opposition motions specifically, the truer test since government motions nearly always pass, the trend is not quite significant (χ² = 3.82, p = 0.051) but directionally consistent. The opposition success premium is +3.4% (96.1% vs 99.5%).
The ceiling effect is the dominant methodological reality: when 96%+ of motions pass in every centrist-support quartile, high centrist support cannot meaningfully increase the likelihood of passage. Centrist support matters for legislative success only in the narrow margin between "already almost certain to pass" and "certain to pass." The practical value of centrist support is not in determining whether a motion passes — it is in signaling political legitimacy and influencing the coalition's willingness to adopt the motion's content as policy. The ceiling effect is the dominant methodological reality: when 96%+ of motions pass in every centrist-support quartile, high centrist support cannot meaningfully increase the likelihood of passage. Centrist support matters for legislative success only in the narrow margin between "already almost certain to pass" and "certain to pass." The practical value of centrist support is not in determining whether a motion passes. It is in signaling political legitimacy and influencing the coalition's willingness to adopt the motion's content as policy.
--- ---
@ -241,19 +241,19 @@ The ceiling effect is the dominant methodological reality: when 96%+ of motions
**The Overton window widened: more right-wing positions became politically acceptable after 2024. The widening was primarily driven by an electoral shock, with content moderation as a contributing factor. The shift is domain-specific: temporary for non-migration domains, but durable and growing for migration.** **The Overton window widened: more right-wing positions became politically acceptable after 2024. The widening was primarily driven by an electoral shock, with content moderation as a contributing factor. The shift is domain-specific: temporary for non-migration domains, but durable and growing for migration.**
Centrist support for right-wing motions surged from 25% to 51%, while centrist support for non-right-wing motions rose only modestly (58%→62%, +3.5 pp). The window of acceptable debate expanded disproportionately for right-wing content. What changed was not what centrists found acceptable — it was what right-wing parties chose to propose: Centrist support for right-wing motions surged from 25% to 51%, while centrist support for non-right-wing motions rose only modestly (58%→62%, +3.5 pp). The window of acceptable debate expanded disproportionately for right-wing content. What changed was not what centrists found acceptable. It was what right-wing parties chose to propose:
1. **Motion volume surged, impact declined.** Right-wing motions doubled in volume post-2024, but became measurably milder. Material impact fell from 2.79 to 2.45 (motion-level means). The share of M≥4 proposals dropped from 23.7% to 11.3% and continued falling through 2026. The 2D extremity decomposition confirms both dimensions declined — stylistic extremity fell (1.875→1.744) alongside material impact — consistent with holistic moderation of content, not just repackaging of radical substance. 1. Motion volume surged, impact declined. Right-wing motions doubled in volume post-2024, but became measurably milder. Material impact fell from 2.79 to 2.45 (motion-level means). The share of M≥4 proposals dropped from 23.7% to 11.3% and continued falling through 2026. The 2D extremity decomposition confirms both dimensions declined. Stylistic extremity fell (1.875→1.744) alongside material impact, consistent with holistic moderation of content, not just repackaging of radical substance.
2. **Centrists did not become more tolerant.** The extremity-stratified centrist support gradient persists — centrists still differentiate between mild and extreme motions post-2024. The across-the-board +0.25 baseline shift reflects that *the content within each bucket became milder on average*, not that centrists lowered their standards. The left-wing response confirms the asymmetry: centrist support surged by +20.6 pp while left-wing opposition barely changed (−1.1 pp), ruling out "left-wing hardening" as an alternative explanation. 2. Centrists did not become more tolerant. The extremity-stratified centrist support gradient persists. Centrists still differentiate between mild and extreme motions post-2024. The across-the-board +0.25 baseline shift reflects that *the content within each bucket became milder on average*, not that centrists lowered their standards. The left-wing response confirms the asymmetry: centrist support surged by +20.6 pp while left-wing opposition barely changed (−1.1 pp), ruling out "left-wing hardening" as an alternative explanation.
3. **The mechanism is strategic moderation — exploratory evidence suggests this is the dominant pathway.** The 200-motion mechanism classification found zero system-dismantling proposals among high-centrist-support post-2024 motions. The dominant pathways — procedural/technical (32%), consensus framing (24%), and targeted restriction (17%) — show right-wing parties learned which frames work. Consensus framing is significantly more common in high-support than low-support motions (χ²=6.0, p=0.014). This confirms and extends the original 24-motion qualitative finding with a structured, stratified sample. 3. The mechanism is strategic moderation. Exploratory evidence suggests this is the dominant pathway. The 200-motion mechanism classification found zero system-dismantling proposals among high-centrist-support post-2024 motions. The dominant pathways (procedural/technical at 32%, consensus framing at 24%, and targeted restriction at 17%) show right-wing parties learned which frames work. Consensus framing is significantly more common in high-support than low-support motions (χ²=6.0, p=0.014). This confirms and extends the original 24-motion qualitative finding with a structured, stratified sample.
4. **SVD divergence confirms this interpretation.** Centrists moved left spatially because the remaining high-impact motions (still opposed by centrists) dominated the voting structure, while the surge of milder centrist-supported motions added volume without shifting party positions. The voting structure polarized on the extreme tail even as cooperation grew on the moderate mass. 4. SVD divergence confirms this interpretation. Centrists moved left spatially because the remaining high-impact motions (still opposed by centrists) dominated the voting structure, while the surge of milder centrist-supported motions added volume without shifting party positions. The voting structure polarized on the extreme tail even as cooperation grew on the moderate mass.
5. **The shift is electorally driven and domain-specific.** Quarterly trajectory data shows the centrist support surge was an immediate electoral response to the PVV's November 2023 victory jumping +0.180 in a single quarter, before the Schoof cabinet formed. Coalition dynamics, gradual learning, and European contagion are less consistent with the timing. Centrist support peaked at 0.648 (2024-Q4), declined through 2025, and hit 0.334 in 2026-Q1 suggesting an electoral-cycle effect. However, 2026-Q2 shows a bounce to 0.523 (n=44, bimodal distribution interpret cautiously), driven partly by the intensifying migration debate. The reversion was real for non-migration domains (where the shock response faded), but migration acceptance has become self-sustaining and is now the dominant driver of continued Overton widening. 5. The shift is electorally driven and domain-specific. Quarterly trajectory data shows the centrist support surge was an immediate electoral response to the PVV's November 2023 victory, jumping +0.180 in a single quarter, before the Schoof cabinet formed. Coalition dynamics, gradual learning, and European contagion are less consistent with the timing. Centrist support peaked at 0.648 (2024-Q4), declined through 2025, and hit 0.334 in 2026-Q1, suggesting an electoral-cycle effect. However, 2026-Q2 shows a bounce to 0.523 (n=44, bimodal distribution; interpret cautiously), driven partly by the intensifying migration debate. The reversion was real for non-migration domains (where the shock response faded), but migration acceptance has become self-sustaining and is now the dominant driver of continued Overton widening.
**The gateway domain: migration.** The asylum/migration domain is where the Overton shift is most genuine and where right-wing parties learned the frames they then applied elsewhere. Material impact barely declined (−0.13), yet centrist support more than doubled (0.153→0.369). Centrists went from zero support for M=5 migration motions to nearly 20%. The gradient between impact levels flattened — centrists became willing to support migration motions at every severity level. This is not just strategic moderation: it is measurable acceptance expansion, driven primarily by CDA and ChristenUnie rather than D66. Migration is also the domain where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy. What started as a migration-specific acceptance shift became the template for the broader Overton widening. **As of 2026, migration centrist support (0.395) exceeds non-migration (0.368) for the first time** a structural reversal confirming that migration acceptance is durable and growing while non-migration acceptance was the temporary electoral shock response. Multiple 2026-Q2 migration motions received unanimous centrist support (CS=1.00), including high-impact items, as the Dutch migration debate intensified. **The gateway domain: migration.** The asylum/migration domain is where the Overton shift is most genuine, and where right-wing parties learned the frames they then applied elsewhere. Material impact barely declined (−0.13), yet centrist support more than doubled (0.153→0.369). Centrists went from zero support for M=5 migration motions to nearly 20%. The gradient between impact levels flattened. Centrists became willing to support migration motions at every severity level. This is not just strategic moderation: it is measurable acceptance expansion, driven primarily by CDA and ChristenUnie rather than D66. Migration is also the domain where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy. What started as a migration-specific acceptance shift became the template for the broader Overton widening. As of 2026, migration centrist support (0.395) exceeds non-migration (0.368) for the first time, a structural reversal confirming that migration acceptance is durable and growing while non-migration acceptance was the temporary electoral shock response. Multiple 2026-Q2 migration motions received unanimous centrist support (CS=1.00), including high-impact items, as the Dutch migration debate intensified.
### Uncertainty Hierarchy ### Uncertainty Hierarchy
@ -261,19 +261,19 @@ Centrist support for right-wing motions surged from 25% to 51%, while centrist s
|-------|---------|--------| |-------|---------|--------|
| **Strong** | Centrist voting support surged (d = +0.65 strict, d = +0.85 opposition-only) | Confirmed | | **Strong** | Centrist voting support surged (d = +0.65 strict, d = +0.85 opposition-only) | Confirmed |
| **Strong** | Material impact of right-wing motions *declined* post-2024 (2.79→2.45 motion-level, M≥4 share: 23.7%→11.3%) | Confirmed on n=3,030 | | **Strong** | Material impact of right-wing motions *declined* post-2024 (2.79→2.45 motion-level, M≥4 share: 23.7%→11.3%) | Confirmed on n=3,030 |
| **Strong** | SVD spatial divergence centrists moved left, right moved further right | Confirmed | | **Strong** | SVD spatial divergence, centrists moved left, right moved further right | Confirmed |
| **Strong** | Migration domain: centrist M=5 support went from 0.0 to 0.185 acceptance expansion | Confirmed on n=379 migration motions | | **Strong** | Migration domain: centrist M=5 support went from 0.0 to 0.185, acceptance expansion | Confirmed on n=379 migration motions |
| **Strong** | MP-level shift: CDA and ChristenUnie more than doubled migration vote share (18→40%, 10→30%) | Confirmed | | **Strong** | MP-level shift: CDA and ChristenUnie more than doubled migration vote share (18→40%, 10→30%) | Confirmed |
| **Strong** | Climate/stikstof: system abolition (CS=0.0) replaced by operational proposals (CS up to 1.0) | Confirmed | | **Strong** | Climate/stikstof: system abolition (CS=0.0) replaced by operational proposals (CS up to 1.0) | Confirmed |
| **Strong** | Temporal trajectory: shift was immediate electoral jump (+0.180), peaked 2024-Q4 (0.648), reverting | Confirmed on 33 quarters | | **Strong** | Temporal trajectory: shift was immediate electoral jump (+0.180), peaked 2024-Q4 (0.648), reverting | Confirmed on 33 quarters |
| **Strong** | Causal mechanism: electorally driven (before cabinet, after PVV election); coalition/learning/contagion less consistent with timing | Confirmed | | **Strong** | Causal mechanism: electorally driven (before cabinet, after PVV election); coalition/learning/contagion less consistent with timing | Confirmed |
| **Strong** | 2D extremity: both dimensions declined post-2024 (stijl −0.131, materieel −0.336); holistic moderation confirmed | Confirmed on n=3,030 | | **Strong** | 2D extremity: both dimensions declined post-2024 (stijl −0.131, materieel −0.336); holistic moderation confirmed | Confirmed on n=3,030 |
| **Moderate** | Mechanism classification: exploratory evidence for consensus framing (24% vs 8%, χ²=6.0, p=0.014) | Exploratory κ=0.41 inter-rater reliability, n=200 classified motions | | **Moderate** | Mechanism classification: exploratory evidence for consensus framing (24% vs 8%, χ²=6.0, p=0.014) | Exploratory, κ=0.41 inter-rater reliability, n=200 classified motions |
| **Strong** | Left-wing response: minimal change (−1.1 pp vs centrist +20.6 pp), 18.3x asymmetry | Confirmed | | **Strong** | Left-wing response: minimal change (−1.1 pp vs centrist +20.6 pp), 18.3x asymmetry | Confirmed |
| **Moderate** | Anti-institutional pivot: abolition (nexit, constitution) disappeared; contestation (judiciary critique) increased | Keyword-based detection, small absolute counts | | **Moderate** | Anti-institutional pivot: abolition (nexit, constitution) disappeared; contestation (judiciary critique) increased | Keyword-based detection, small absolute counts |
| **Moderate** | Strategic moderation in non-migration domains: volume up, material impact down | Consistent across 2,471 motions | | **Moderate** | Strategic moderation in non-migration domains: volume up, material impact down | Consistent across 2,471 motions |
| **Moderate** | Temporal sustainability: 2026-Q1 reversion suggests electoral-cycle effect, not permanent shift | Single quarter of reversion; needs 2+ more quarters to confirm | | **Moderate** | Temporal sustainability: 2026-Q1 reversion suggests electoral-cycle effect, not permanent shift | Single quarter of reversion; needs 2+ more quarters to confirm |
| **Inconclusive** | Whether extreme content genuinely declined or was repackaged in milder language | 2D scoring confirms both style and substance declined; masking rate (S≤2, M≥4) is 9.7% lower than initial estimates | | **Inconclusive** | Whether extreme content genuinely declined or was repackaged in milder language | 2D scoring confirms both style and substance declined; masking rate (S≤2, M≥4) is 9.7%, lower than initial estimates |
### Limitations ### Limitations
@ -283,10 +283,10 @@ Centrist support for right-wing motions surged from 25% to 51%, while centrist s
- **Causal direction:** This analysis establishes a structural break in centrist voting behavior and its temporal alignment with political events. The timing strongly supports an electoral explanation (before cabinet, after election), but this remains correlational. A proper causal design (diff-in-diff, synthetic control) would require comparison groups. - **Causal direction:** This analysis establishes a structural break in centrist voting behavior and its temporal alignment with political events. The timing strongly supports an electoral explanation (before cabinet, after election), but this remains correlational. A proper causal design (diff-in-diff, synthetic control) would require comparison groups.
- **Success ceiling:** The 96%+ pass rate makes pass rate an insensitive dependent variable for measuring centrist influence on legislative outcomes. The success correlation findings should be interpreted as describing a real but practically constrained relationship. - **Success ceiling:** The 96%+ pass rate makes pass rate an insensitive dependent variable for measuring centrist influence on legislative outcomes. The success correlation findings should be interpreted as describing a real but practically constrained relationship.
- **NSC sensitivity:** Removing NSC from the strict centrist set (leaving D66/CDA/CU) yields a nearly identical surge (+0.248 vs +0.256, Cohen's d = 0.63 vs 0.66). Only 3.1% of the reported effect is attributable to NSC inclusion. - **NSC sensitivity:** Removing NSC from the strict centrist set (leaving D66/CDA/CU) yields a nearly identical surge (+0.248 vs +0.256, Cohen's d = 0.63 vs 0.66). Only 3.1% of the reported effect is attributable to NSC inclusion.
- **Submitter parsing:** The opposition-only filter relies on parse_lead_submitter(), which fails on 20% of pre-2024 and 29% of post-2024 motions. Unparsed motions have systematically higher centrist support (0.40 pre, 0.65 post vs 0.21 pre, 0.45 post for parsed). The reported opposition-only effect (d=0.85) is likely inflated by ~0.10–0.20; the true effect is probably d≈0.65–0.75. The direction is robust but the magnitude should be interpreted conservatively. - **Submitter parsing:** The opposition-only filter relies on parse_lead_submitter(), which fails on 20% of pre-2024 and 29% of post-2024 motions. Unparsed motions have systematically higher centrist support (0.40 pre, 0.65 post vs 0.21 pre, 0.45 post for parsed). The reported opposition-only effect (d=0.85) is likely inflated by ~0.10-0.20; the true effect is probably d≈0.65-0.75. The direction is robust but the magnitude should be interpreted conservatively.
- **Migration domain provenance:** The `category` column in `right_wing_motions` is NULL for all 3,030 classified motions (wiped by a pipeline bug). Migration vs non-migration classification relies on title keyword matching (e.g., "asiel", "migratie", "vreemdeling"), which is less reliable than the original LLM-based classification. The migration gateway finding is directionally robust but exact domain boundaries should be treated as approximate. - **Migration domain provenance:** The `category` column in `right_wing_motions` is NULL for all 3,030 classified motions (wiped by a pipeline bug). Migration vs non-migration classification relies on title keyword matching (e.g., "asiel", "migratie", "vreemdeling"), which is less reliable than the original LLM-based classification. The migration gateway finding is directionally robust but exact domain boundaries should be treated as approximate.
- **2026-Q2 sample size:** The 2026-Q2 "bounce" (CS=0.523) is based on only 44 motions with a bimodal distribution (20 at CS=1.0, 18 at CS=0.0). The CS=1.0 motions include many consensus items (defense, infrastructure) unrelated to migration. This quarter's mean is sensitive to composition and should not be over-interpreted as evidence of a sustained trend. - **2026-Q2 sample size:** The 2026-Q2 "bounce" (CS=0.523) is based on only 44 motions with a bimodal distribution (20 at CS=1.0, 18 at CS=0.0). The CS=1.0 motions include many consensus items (defense, infrastructure) unrelated to migration. This quarter's mean is sensitive to composition and should not be over-interpreted as evidence of a sustained trend.
### Visualization ### Visualization
**Primary interactive visualization deliverable:** `reports/overton_window/overton_report.html` an HTML dashboard with all three indicators (centrist support, SVD spatial drift, 2D extremity trajectories) in linked views, including the all-motion vs right-wing comparison. Primary interactive visualization deliverable: `reports/overton_window/overton_report.html`, an HTML dashboard with all three indicators (centrist support, SVD spatial drift, 2D extremity trajectories) in linked views, including the all-motion vs right-wing comparison.

Loading…
Cancel
Save