diff --git a/CLAUDE.md b/CLAUDE.md
index de4e0a9..846102a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -27,6 +27,7 @@ Each calculator directory contains two files following the same pattern:
- **`public/bolig/`** — Housing leverage: same price growth, different starting prices. 85% LTV amplifies equity gap ~6.67×. Model: `Equity = Price × (1+g)^n - Loan`
- **`public/arv/`** — Inheritance gap: lump sum + equal savings, gap never closes. Model: `Gap = Arv × (1+r)^n`. Has percentage y-axis chart.
- **`public/lonnsutvikling/`** — Data-driven visualization (not a calculator): real SSB wage data showing how equal percentage growth translates to vastly different kroner amounts across occupations. No sliders — hard-coded SSB table 11418 data (2016–2025).
+- **`public/boligeierskap/`** — Data-driven visualization: who really owns Norwegian housing? Three charts: doughnut (own outright / own with bank / rent), stacked bar (loan size distribution over time), horizontal stacked bar (ownership by household type). SSB tables 14068, 14059, 14065 data (2015–2024).
**External dependencies** (loaded via CDN, no install needed): Chart.js 4.4.1, Google Fonts (Fraunces + DM Sans).
diff --git a/public/boligeierskap/app.js b/public/boligeierskap/app.js
new file mode 100644
index 0000000..0efcb2a
--- /dev/null
+++ b/public/boligeierskap/app.js
@@ -0,0 +1,248 @@
+// SSB data: Boligeierskap og boligøkonomi
+// Tabell 14068: Boligeierskap etter husholdningstype (prosent)
+// Tabell 14059: Boligøkonomi etter eierstatus (gjeldsstørrelse)
+// Tabell 14065: Boliglån og boligutgifter (gjeld vs verdi)
+// Hentet 2026-03-16 via SSB PxWeb API v2
+
+// --- Data ---
+
+// Eierskap alle husholdninger 2024 (tabell 14068):
+// Selveier 57.5%, Andelseier 14.8%, Leier 27.7%
+// Total eiere = 72.3%
+// Av eiere uten boliglån: 47.6% (tabell 14059, 2024)
+// Eier fritt = 72.3 × 0.476 = 34.4%
+// Eier med lån = 72.3 × 0.524 = 37.9%
+
+// Gjeldsstørrelse blant eiere med lån (tabell 14059, "I alt")
+const YEARS = ['2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024'];
+
+const LOAN_DIST = {
+ under1M: [17.2, 15.3, 13.9, 13.5, 13.2, 12.7, 13.6, 12.4, 11.7, 12.1],
+ from1to2M:[17.0, 16.8, 16.2, 15.1, 14.9, 14.9, 14.2, 14.8, 14.4, 14.8],
+ from2to3M:[ 8.2, 9.7, 10.0, 9.7, 10.3, 10.5, 12.1, 12.1, 11.9, 11.8],
+ over3M: [ 4.5, 5.1, 6.2, 6.8, 8.1, 8.9, 10.9, 12.0, 12.2, 13.8]
+};
+
+// Eierskap etter husholdningstype 2024 (tabell 14068)
+const HOUSEHOLD_TYPES = [
+ { name: 'Aleneboende 16–44', selveier: 20.7, andel: 13.8, leier: 65.5 },
+ { name: 'Par uten barn 16–44', selveier: 41.6, andel: 21.8, leier: 36.6 },
+ { name: 'Enslige forsørgere 0–17', selveier: 50.1, andel: 11.6, leier: 38.3 },
+ { name: 'Aleneboende 45–66', selveier: 54.7, andel: 17.2, leier: 28.1 },
+ { name: 'Aleneboende 67+', selveier: 60.0, andel: 23.0, leier: 17.0 },
+ { name: 'Par med barn 0–6', selveier: 70.8, andel: 12.1, leier: 17.1 },
+ { name: 'Par uten barn 67+', selveier: 78.7, andel: 15.2, leier: 6.1 },
+ { name: 'Par med barn 7–17', selveier: 82.9, andel: 8.2, leier: 8.8 },
+ { name: 'Par uten barn 45–66', selveier: 82.2, andel: 11.6, leier: 6.1 },
+ { name: 'Par med barn 18+', selveier: 87.7, andel: 6.8, leier: 5.6 },
+];
+
+// --- Formattering ---
+
+function fmtPct(n) {
+ return n.toLocaleString('nb-NO', { minimumFractionDigits: 1, maximumFractionDigits: 1 }) + '\u202f%';
+}
+
+const GRID_COLOR = 'rgba(0,0,0,0.06)';
+const TICK_COLOR = '#8a857e';
+
+function baseOpts() {
+ return {
+ responsive: true, maintainAspectRatio: false,
+ plugins: {
+ legend: { display: false },
+ tooltip: {
+ backgroundColor: '#1a1714',
+ titleColor: '#f5f2eb',
+ bodyColor: 'rgba(245,242,235,0.7)',
+ padding: 10,
+ cornerRadius: 4,
+ titleFont: { family: 'DM Sans', size: 12 },
+ bodyFont: { family: 'DM Sans', size: 12 }
+ }
+ },
+ scales: {
+ x: {
+ ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, maxRotation: 0 },
+ grid: { display: false },
+ border: { color: 'rgba(0,0,0,0.1)' }
+ },
+ y: {
+ ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, callback: v => v + ' %' },
+ grid: { color: GRID_COLOR },
+ border: { dash: [3, 3], color: 'transparent' }
+ }
+ }
+ };
+}
+
+// --- Diagram 1: Kakediagram (doughnut) ---
+
+new Chart(document.getElementById('chart1'), {
+ type: 'doughnut',
+ data: {
+ labels: ['Eier fritt (34 %)', 'Eier med lån (38 %)', 'Leier (28 %)'],
+ datasets: [{
+ data: [34.4, 37.9, 27.7],
+ backgroundColor: ['#2c6e49', '#1a4a8a', '#c0392b'],
+ borderColor: '#fff',
+ borderWidth: 3,
+ hoverOffset: 8
+ }]
+ },
+ options: {
+ responsive: true,
+ maintainAspectRatio: false,
+ cutout: '55%',
+ plugins: {
+ legend: { display: false },
+ tooltip: {
+ callbacks: {
+ label: function(c) {
+ return ' ' + c.label + ': ' + fmtPct(c.parsed);
+ }
+ },
+ backgroundColor: '#1a1714',
+ titleColor: '#f5f2eb',
+ bodyColor: 'rgba(245,242,235,0.7)',
+ padding: 10,
+ cornerRadius: 4,
+ titleFont: { family: 'DM Sans', size: 12 },
+ bodyFont: { family: 'DM Sans', size: 12 }
+ }
+ }
+ }
+});
+
+// --- Diagram 2: Gjeldsbyrde over tid (stablet stolpe) ---
+
+var chart2Opts = baseOpts();
+chart2Opts.scales.y.stacked = true;
+chart2Opts.scales.x.stacked = true;
+chart2Opts.scales.y.max = 55;
+chart2Opts.plugins.tooltip = {
+ mode: 'index',
+ callbacks: {
+ label: function(c) {
+ return ' ' + c.dataset.label + ': ' + fmtPct(c.parsed.y);
+ }
+ },
+ backgroundColor: '#1a1714',
+ titleColor: '#f5f2eb',
+ bodyColor: 'rgba(245,242,235,0.7)',
+ padding: 10,
+ cornerRadius: 4,
+ titleFont: { family: 'DM Sans', size: 12 },
+ bodyFont: { family: 'DM Sans', size: 12 }
+};
+
+new Chart(document.getElementById('chart2'), {
+ type: 'bar',
+ data: {
+ labels: YEARS,
+ datasets: [
+ {
+ label: 'Under 1 mill',
+ data: LOAN_DIST.under1M,
+ backgroundColor: '#27ae60cc',
+ borderColor: '#27ae60',
+ borderWidth: 1,
+ borderRadius: 1
+ },
+ {
+ label: '1–2 mill',
+ data: LOAN_DIST.from1to2M,
+ backgroundColor: '#e67e22cc',
+ borderColor: '#e67e22',
+ borderWidth: 1,
+ borderRadius: 1
+ },
+ {
+ label: '2–3 mill',
+ data: LOAN_DIST.from2to3M,
+ backgroundColor: '#e74c3ccc',
+ borderColor: '#e74c3c',
+ borderWidth: 1,
+ borderRadius: 1
+ },
+ {
+ label: 'Over 3 mill',
+ data: LOAN_DIST.over3M,
+ backgroundColor: '#8b1a1acc',
+ borderColor: '#8b1a1a',
+ borderWidth: 1,
+ borderRadius: 1
+ }
+ ]
+ },
+ options: chart2Opts
+});
+
+// --- Diagram 3: Eierskap etter livssituasjon (horisontal stablet) ---
+
+var chart3Opts = baseOpts();
+chart3Opts.indexAxis = 'y';
+chart3Opts.scales = {
+ x: {
+ stacked: true,
+ max: 100,
+ ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, callback: v => v + ' %' },
+ grid: { color: GRID_COLOR },
+ border: { dash: [3, 3], color: 'transparent' }
+ },
+ y: {
+ stacked: true,
+ ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, autoSkip: false },
+ grid: { display: false },
+ border: { color: 'rgba(0,0,0,0.1)' }
+ }
+};
+chart3Opts.plugins.tooltip = {
+ mode: 'index',
+ callbacks: {
+ label: function(c) {
+ return ' ' + c.dataset.label + ': ' + fmtPct(c.parsed.x);
+ }
+ },
+ backgroundColor: '#1a1714',
+ titleColor: '#f5f2eb',
+ bodyColor: 'rgba(245,242,235,0.7)',
+ padding: 10,
+ cornerRadius: 4,
+ titleFont: { family: 'DM Sans', size: 12 },
+ bodyFont: { family: 'DM Sans', size: 12 }
+};
+
+new Chart(document.getElementById('chart3'), {
+ type: 'bar',
+ data: {
+ labels: HOUSEHOLD_TYPES.map(h => h.name),
+ datasets: [
+ {
+ label: 'Selveier',
+ data: HOUSEHOLD_TYPES.map(h => h.selveier),
+ backgroundColor: '#2c6e49cc',
+ borderColor: '#2c6e49',
+ borderWidth: 1,
+ borderRadius: 2
+ },
+ {
+ label: 'Andelseier',
+ data: HOUSEHOLD_TYPES.map(h => h.andel),
+ backgroundColor: '#1a4a8acc',
+ borderColor: '#1a4a8a',
+ borderWidth: 1,
+ borderRadius: 2
+ },
+ {
+ label: 'Leier',
+ data: HOUSEHOLD_TYPES.map(h => h.leier),
+ backgroundColor: '#c0392bcc',
+ borderColor: '#c0392b',
+ borderWidth: 1,
+ borderRadius: 2
+ }
+ ]
+ },
+ options: chart3Opts
+});
diff --git a/public/boligeierskap/index.html b/public/boligeierskap/index.html
new file mode 100644
index 0000000..1498d5f
--- /dev/null
+++ b/public/boligeierskap/index.html
@@ -0,0 +1,236 @@
+
+
+
+
+
+Hvem eier boligen din? — SSB-data 2015–2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
43 % er bankens
+
For norske boligeiere med lån er gjennomsnittlig gjeld 2,2 millioner kr — mens boligen er verdt 5,0 millioner. Banken «eier» nesten halvparten.
+
+
+
+
+
+
34 %
+
Eier fritt
+
Har betalt ned boliglånet
+
+
+
38 %
+
Eier med banken
+
Har boliglån — banken eier en del
+
+
+
28 %
+
Leier
+
Bygger ingen egenkapital
+
+
+
+
+
+
+
+ Vi snakker ofte om at «8 av 10 nordmenn eier bolig». Men bare 1 av 3 eier fritt — uten boliglån.
+ De andre 38 % deler eierskapet med banken, som i snitt sitter på 43 % av boligens verdi.
+ Og nesten 3 av 10 leier — de bygger ingen egenkapital i det hele tatt.
+
+
+
+
+
+
+ Andelen boligeiere med lån over 3 millioner har tredoblet seg på ti år:
+ fra 4,5 % i 2015 til 13,8 % i 2024. Samtidig krymper gruppen med små lån.
+ Nordmenn skylder stadig mer — og banken eier en stadig større del av boligene våre.
+
+
+
+
+
+
+ 2 av 3 unge aleneboende leier. Blant par i alderen 45–66 eier over 90 % sin bolig.
+ Boligmarkedet er et generasjonsskille: de som kom inn tidlig, bygger formue —
+ de som ikke kom inn, betaler andres boliglån gjennom husleie.
+
+
+
+
+
Hvorfor er dette viktig?
+
Norge har en av verdens høyeste boligeierandeler — men eierskap er ikke det samme som formue .
+ En husholdning med 4 millioner i boliggjeld og en bolig verdt 5 millioner har bare 1 million i reell egenkapital.
+ Resten «eier» banken.
+
+ Boligverdi: 5 000 000 kr
+ Gjenstående lån: −2 200 000 kr
+ Din egenkapital: 2 800 000 kr (56 %)
+ Bankens andel: 2 200 000 kr (44 %)
+
+
For leiere er situasjonen enda verre: hver krone i husleie forsvinner. Ingen egenkapital bygges opp.
+ Mens boligeiere — selv de med lån — i det minste får med seg verdiøkningen.
+
Tallene viser også et tydelig generasjonsskille : 65 % av unge aleneboende leier,
+ mens nesten 90 % av par med voksne barn eier. Den «norske boligdrømmen» er i praksis
+ forbeholdt de som allerede har kommet inn på markedet — eller arvet seg inn.
+
Data er hentet fra SSB levekårsundersøkelsen
+ (tabell 14068 ,
+ 14059 ,
+ 14065 ).
+ «Eier fritt» er beregnet som andelen eiere × andelen uten boliglån.
+
+
+
+
+
+
+
+
+
diff --git a/public/index.html b/public/index.html
index 6b6689c..19cb5f6 100644
--- a/public/index.html
+++ b/public/index.html
@@ -181,6 +181,12 @@
Se visualiseringen →
+
+ Hvem eier boligen din?
+ Bare 1 av 3 eier boligen fritt. 38 % deler eierskapet med banken, og 28 % leier. Unge aleneboende? 2 av 3 leier. Reelle SSB-tall.
+ Se visualiseringen →
+
+