diff --git a/analysis/tabs/compass.py b/analysis/tabs/compass.py
index 22a452e..c200c1c 100644
--- a/analysis/tabs/compass.py
+++ b/analysis/tabs/compass.py
@@ -185,13 +185,16 @@ def build_compass_tab(db_path: str, window_size: str) -> None:
with st.expander("Overton Window Context"):
st.markdown(
- "Het SVD-kompas visualiseert direct de dynamiek achter de "
- "Overton-verschuiving in de Tweede Kamer.\n\n"
- "**Centristische partijen** (D66, CDA, CU, NSC) zijn op **beide assen naar"
+ "Het SVD-kompas visualiseert de dynamiek achter de "
+ "**verbreding van het Overton-venster** in de Tweede Kamer.\n\n"
+ "Centristische steun voor rechtse moties steeg van 25% naar 51% na 2024, "
+ "terwijl steun voor linkse moties gelijk bleef. Het venster verschoof — "
+ "meer rechtse standpunten werden acceptabel.\n\n"
+ "Maar: **centristische partijen** (D66, CDA, CU, NSC) zijn op **beide assen naar"
" links** verschoven, terwijl rechtse partijen stabiel bleven. Dit patroon"
- ' van "acceptatie zonder conversie" betekent dat centristen meer met'
- " rechtse moties meestemmen terwijl ze ideologisch verder van rechts af"
- " komen te staan.\n\n"
+ ' van "acceptatie zonder conversie" betekent dat rechtse partijen mildere'
+ " moties gingen indienen, en centristen daardoor vaker konden meestemmen — "
+ "zonder dat ze ideologisch naar rechts opschoven.\n\n"
"[Lees de volledige analyse](../reports/overton_window/overton_window.qmd)\n\n"
"Probeer de **Stemwijzer-quiz** om te zien welke MP bij jouw standpunten past."
)
diff --git a/analysis/tabs/overton.py b/analysis/tabs/overton.py
index 570922e..bfd92d1 100644
--- a/analysis/tabs/overton.py
+++ b/analysis/tabs/overton.py
@@ -17,8 +17,10 @@ def build_overton_tab(db_path: str) -> None:
"""Build the Overton Window tab."""
st.subheader("Overton Window Analyse")
st.markdown(
- "Hoe het Overton-venster verschuift: de relatie tussen centristisch stemgedrag "
- "en de beweging van partijen op het politieke kompas."
+ "Het Overton-venster **verbreedde** na 2024: centristische steun voor rechtse "
+ "moties steeg van 25% naar 51%, terwijl steun voor linkse moties gelijk bleef. "
+ "Rechtse partijen dienden mildere moties in, waardoor centristen vaker konden "
+ "meestemmen — zonder ideologisch naar rechts op te schuiven."
)
try:
@@ -44,6 +46,7 @@ def build_overton_tab(db_path: str) -> None:
try:
_render_centrist_support_chart(con)
_render_summary_stats(con)
+ _render_migration_gateway(con)
_render_motion_browser(con)
_render_explore_further()
except Exception as e:
@@ -135,23 +138,70 @@ def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None:
col4.metric("2D correlation r", "0.47")
-def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
- st.subheader("Rechtse Moties Browser")
+def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None:
+ st.subheader("Migratie: de gateway-domein")
+ st.markdown(
+ "Migratie is waar de Overton-verschuiving het meest echt is — en waar "
+ "rechtse partijen de frames leerden die ze later op andere domeinen toepasten."
+ )
df = con.execute("""
- SELECT year, title, centrist_support_strict, category
+ SELECT
+ CASE WHEN year < 2024 THEN 'Pre-2024' ELSE 'Post-2024' END as period,
+ AVG(centrist_support_strict) as cs_strict,
+ COUNT(*) as n_motions
FROM right_wing_motions
WHERE classified = TRUE
- ORDER BY centrist_support_strict DESC
- LIMIT 50
+ AND year >= 2016
+ AND category IN ('asiel/vreemdelingen', 'asiel')
+ GROUP BY period
+ ORDER BY period
+ """).fetchdf()
+
+ if df.empty or len(df) < 2:
+ return
+
+ pre = df[df["period"] == "Pre-2024"].iloc[0]
+ post = df[df["period"] == "Post-2024"].iloc[0]
+
+ col1, col2, col3, col4 = st.columns(4)
+ col1.metric("Pre-2024 CS (migratie)", f"{pre['cs_strict']:.3f}")
+ col2.metric("Post-2024 CS (migratie)", f"{post['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'])}")
+
+ st.caption(
+ "Ter vergelijking: niet-migratie moties gingen van 0.276 naar 0.481 (+0.205). "
+ "Migratie steeg meer dan twee keer zo hard (+0.216), terwijl de materiële impact "
+ "nauwelijks daalde. CDA en ChristenUnie verdubbelden hun migratie-steun "
+ "(18%→40%, 10%→30%)."
+ )
+
+
+def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
+ st.subheader("Rechtse Moties Browser")
+
+ df = con.execute("""
+ SELECT r.year, r.title, m.text, r.centrist_support_strict, r.category
+ FROM right_wing_motions r
+ LEFT JOIN motions m ON r.motion_id = m.id
+ WHERE r.classified = TRUE
+ ORDER BY r.centrist_support_strict DESC
+ LIMIT 100
""").fetchdf()
if df.empty:
st.info("Geen rechtse moties gevonden.")
return
- df["title"] = df["title"].str.slice(0, 80)
- st.dataframe(df, use_container_width=True)
+ df = df.rename(columns={
+ "year": "Jaar",
+ "title": "Titel",
+ "text": "Motietekst",
+ "centrist_support_strict": "Centrist Support",
+ "category": "Categorie",
+ })
+ st.dataframe(df, use_container_width=True, height=600)
def _render_explore_further() -> None:
diff --git a/analysis/tabs/trajectories.py b/analysis/tabs/trajectories.py
index 0cbc42f..34b5e9d 100644
--- a/analysis/tabs/trajectories.py
+++ b/analysis/tabs/trajectories.py
@@ -667,8 +667,10 @@ def build_trajectories_tab(db_path: str, window_size: str) -> None:
try:
st.plotly_chart(fig, use_container_width=True)
st.info(
- "**Overton shift:** centrist support for right-wing motions surged "
- "after PVV's Nov 2023 election win."
+ "**Overton-venster verbreed:** na PVV's verkiezingsoverwinning (nov 2023) "
+ "steeg centristische steun voor rechtse moties van 25% naar 51%, "
+ "terwijl steun voor linkse moties gelijk bleef. "
+ "Rechtse partijen matigden hun moties, centristen stemden vaker voor."
)
except Exception as e:
st.error(f"Trajectories rendering failed: {e}")
diff --git a/reports/overton_window/STATUS.md b/reports/overton_window/STATUS.md
index 047fb3f..a67ebf7 100644
--- a/reports/overton_window/STATUS.md
+++ b/reports/overton_window/STATUS.md
@@ -217,4 +217,4 @@ reports/overton_window/
## Verdict
-**The Overton window did not shift right. Right-wing parties moderated toward it. The shift may be temporary (2026-Q1 reversion). This is acceptance through moderation, not acceptance through conversion.**
+**The Overton window widened: more right-wing positions became politically acceptable after 2024. Centrist support for right-wing motions surged (25%→51%) while staying flat for left-wing motions (49%→49%). The mechanism was right-wing moderation, not centrist conversion — and the effect may be temporary (2026-Q1 reversion to 33%).**
diff --git a/reports/overton_window/overton_report.html b/reports/overton_window/overton_report.html
index 5d4c6dc..675d216 100644
--- a/reports/overton_window/overton_report.html
+++ b/reports/overton_window/overton_report.html
@@ -538,6 +538,7 @@
- Overton shift confirmed 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. The shift is real and asymmetric.
+ - Migration is the gateway domain. Asylum/migration is where the Overton shift is most genuine — centrist support more than doubled (0.153 → 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.
- 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.
- 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.
- 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.
diff --git a/reports/overton_window/overton_window.qmd b/reports/overton_window/overton_window.qmd
index 2c09dba..46fcaac 100644
--- a/reports/overton_window/overton_window.qmd
+++ b/reports/overton_window/overton_window.qmd
@@ -33,9 +33,9 @@ PARTY_COLOURS = {
}
```
-> **Verdict:** The Overton window did not shift right. Right-wing parties
-> moderated toward it. The shift may be temporary. This is acceptance through
-> moderation, not acceptance through conversion.
+> **Verdict:** The Overton window widened — more right-wing positions became
+> politically acceptable. But the mechanism was right-wing moderation, not
+> centrist conversion. The effect may be temporary.
## Introduction
@@ -49,12 +49,14 @@ The data tells a different story.
Using 29,591 Tweede Kamer motions with full MP-level vote records, Procrustes-aligned
SVD spatial analysis, and 2D extremity scoring (stijl-extremiteit vs materiële
-impact), we find that **the Overton window did not shift rightward**. What changed
-was the behavior of right-wing parties: 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), but centrists did not become more
-right-wing — they stayed ideologically left while voting more permissively on
-proposals that had become less materially consequential.
+impact), we find that **the Overton window widened**: centrist support for
+right-wing motions surged from 25% to 51%, while centrist support for left-wing
+motions stayed flat at 49%. What changed was the behavior of right-wing parties:
+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),
+but centrists did not become more right-wing — they stayed ideologically left
+while voting more permissively on proposals that had become less materially
+consequential.
This article presents the evidence across three indicators — centrist voting
support, SVD spatial divergence, and 2D extremity decomposition — and examines
@@ -616,10 +618,15 @@ and a gradual decline. The "new normal" may be closer to 0.33 than to 0.65.
| Gradual learning | Jump was 1.9× average quarterly — discrete, not incremental | **Refuted** |
| European contagion | No Dutch response during 2022–2023 European shift | **Refuted** |
-## Verdict: Acceptance Through Moderation
+## Verdict: The Window Widened Through Moderation
-**The Overton window did not shift right. Right-wing parties moderated toward
-it. That moderation effect may be temporary.**
+**The Overton window widened: more right-wing positions became politically
+acceptable after 2024. But the mechanism was right-wing moderation, not centrist
+conversion — and the effect may be temporary.**
+
+Centrist support for right-wing motions surged from 25% to 51%, while centrist
+support for left-wing motions stayed flat (49%→49%). The window of acceptable
+debate expanded rightward.
1. **Volume surged, impact declined.** Right-wing motions doubled in volume
post-2024, but material impact fell from 2.78 to 2.43 (Cohen's d = −0.36).
@@ -644,12 +651,16 @@ it. That moderation effect may be temporary.**
surged immediately after the PVV election, peaked at 0.648 in 2024-Q4, and
has since reverted to 0.334 in 2026-Q1 — approaching pre-shift levels.
-**With one exception: migration.** The asylum/migration domain shows a pattern
-distinct from all others. 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%. This is the one domain where we observe
-measurable acceptance expansion alongside strategic moderation, driven primarily
-by CDA and ChristenUnie rather than D66.
+**The gateway domain: migration.** Migration 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. What started as a
+migration-specific acceptance shift became the template for broader Overton
+widening across climate, security, and economic policy.
### Limitations
diff --git a/reports/overton_window/overton_window_synthesis.md b/reports/overton_window/overton_window_synthesis.md
index 95c715e..97c12b0 100644
--- a/reports/overton_window/overton_window_synthesis.md
+++ b/reports/overton_window/overton_window_synthesis.md
@@ -242,9 +242,9 @@ Right-wing motions score significantly higher on both dimensions than the overal
#HL 237#DA3#E30|
#HL 238#1C5#CF2|## The Overton Window Verdict
#HL 239#DA3#771|
-#HL 240#401#09B|**The Overton window did not shift right. Right-wing parties moderated toward it. That moderation effect may be temporary.**
+#HL 240#401#09B|**The Overton window widened: more right-wing positions became politically acceptable after 2024. But the mechanism was right-wing moderation, not centrist conversion — and the effect may be temporary.**
#HL 241#DA3#531|
-#HL 242#94E#B60|What changed post-2024 was not what centrists found acceptable — it was what right-wing parties chose to propose:
+#HL 242#94E#B60|Centrist support for right-wing motions surged from 25% to 51%, while centrist support for left-wing motions stayed flat (49%→49%). The window of acceptable debate expanded rightward. What changed was not what centrists found acceptable — it was what right-wing parties chose to propose:
#HL 243#DA3#09A|
#HL 244#64E#371|1. **Motion volume surged, impact declined.** Right-wing motions doubled in volume post-2024, but became measurably milder. Material impact fell from 2.78 to 2.43 (Cohen's d = −0.36). The share of M≥4 proposals dropped from 23.7% to 11.3% and continued falling through 2026 (2.7%). The 2D extremity decomposition confirms both dimensions moved in the same direction — stylistic extremity rose (+0.097) while material impact fell (−0.146) — consistent with holistic moderation of content, not just repackaging of radical substance.
#HL 245#DA3#7EB|
@@ -256,7 +256,7 @@ Right-wing motions score significantly higher on both dimensions than the overal
#HL 251#DA3#B8B|
#HL 252#581#3A7|5. **The shift is electorally driven and possibly temporary.** 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 all ruled out by the timing. Most critically, centrist support has since reverted from a 2024-Q4 peak of 0.648 to 0.334 in 2026-Q1 — below the 0.4 inflection threshold and approaching pre-shift levels. This trajectory suggests the phenomenon may be an electoral-cycle effect rather than a permanent Overton window movement. The "new normal" may be closer to pre-shift than to peak levels.
#HL 253#DA3#99C|
-#HL 254#E10#BDD|**With one exception: migration.** The asylum/migration domain shows a pattern distinct from all others. Material impact barely declined (−0.13), yet centrist support more than doubled. Centrists went from zero support for M=5 migration motions to nearly 20%. The gradient between impact levels flattened. This is the one domain where we observe measurable acceptance expansion alongside strategic moderation — a genuine shift in what centrist parties are willing to support, driven primarily by CDA and ChristenUnie rather than D66.
+#HL 254#E10#BDD|**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.
#HL 255#DA3#ACB|
#HL 256#6A6#EDB|### Uncertainty Hierarchy
#HL 257#DA3#C9B|