{"id":18,"date":"2026-03-21T12:49:33","date_gmt":"2026-03-21T12:49:33","guid":{"rendered":"https:\/\/www.xn--lnskalkulator-pfb.no\/?page_id=18"},"modified":"2026-03-21T12:59:48","modified_gmt":"2026-03-21T12:59:48","slug":"hjem","status":"publish","type":"page","link":"https:\/\/l\u00e5nskalkulator.no\/","title":{"rendered":"Hjem"},"content":{"rendered":"<!DOCTYPE html>\r\n<html lang=\"nb\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>L\u00e5nekalkis \u2014 Enkle l\u00e5nekalkulatorer<\/title>\r\n<meta name=\"description\" content=\"Gratis og enkle l\u00e5nekalkulatorer. Beregn terminbel\u00f8p, totalkostnad og nedbetalingsplan for boligl\u00e5n og andre l\u00e5n.\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:wght@300;400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n:root {\r\n  --bg: #F5F2EE;\r\n  --surface: #FDFAF7;\r\n  --surface2: #EDE9E3;\r\n  --border: rgba(0,0,0,0.10);\r\n  --border2: rgba(0,0,0,0.18);\r\n  --text: #1A1714;\r\n  --muted: #6B6460;\r\n  --accent: #1D4E6B;\r\n  --accent2: #B84C2B;\r\n  --accent3: #2A7A52;\r\n  --radius: 10px;\r\n  --radius-lg: 16px;\r\n  --max: 960px;\r\n}\r\n\r\nhtml { scroll-behavior: smooth; }\r\n\r\nbody {\r\n  font-family: 'DM Sans', sans-serif;\r\n  background: var(--bg);\r\n  color: var(--text);\r\n  font-size: 15px;\r\n  line-height: 1.6;\r\n}\r\n\r\n\/* \u2500\u2500 NAV \u2500\u2500 *\/\r\nnav {\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 50;\r\n  background: rgba(245,242,238,0.92);\r\n  backdrop-filter: blur(10px);\r\n  -webkit-backdrop-filter: blur(10px);\r\n  border-bottom: 1px solid var(--border2);\r\n}\r\n\r\n.nav-inner {\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n  padding: 0 1.5rem;\r\n  height: 58px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n.nav-links {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  list-style: none;\r\n  height: 100%;\r\n}\r\n\r\n.nav-logo {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  text-decoration: none;\r\n}\r\n\r\n.nav-logo-text {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.35rem;\r\n  color: var(--text);\r\n  letter-spacing: -0.02em;\r\n}\r\n\r\n.nav-logo-accent {\r\n  font-family: 'DM Sans', sans-serif;\r\n  font-weight: 700;\r\n  font-size: 1.2rem;\r\n  color: var(--accent);\r\n  letter-spacing: -0.03em;\r\n}\r\n\r\n.nav-links {\r\n  display: flex;\r\n  gap: 6px;\r\n  list-style: none;\r\n}\r\n\r\n.nav-links a {\r\n  font-size: 13px;\r\n  color: var(--muted);\r\n  text-decoration: none;\r\n  padding: 5px 12px;\r\n  border-radius: var(--radius);\r\n  transition: background 0.15s, color 0.15s;\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.nav-links a:hover { background: var(--surface2); color: var(--text); }\r\n.nav-links a.active { background: var(--accent); color: #fff !important; padding: 4px 11px !important; border-radius: 6px !important; font-size: 13px !important; font-weight: 500; line-height: 1.4; }\r\n\r\n\/* \u2500\u2500 HERO \u2500\u2500 *\/\r\n.hero {\r\n  max-width: var(--max);\r\n  margin: 0 auto;\r\n  padding: 5rem 1.5rem 3.5rem;\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 3rem;\r\n  align-items: center;\r\n}\r\n\r\n.hero-eyebrow {\r\n  font-size: 11px;\r\n  font-weight: 500;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.1em;\r\n  color: var(--accent);\r\n  margin-bottom: 1rem;\r\n}\r\n\r\n.hero h1 {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 3rem;\r\n  font-weight: 400;\r\n  line-height: 1.1;\r\n  letter-spacing: -0.03em;\r\n  color: var(--text);\r\n  margin-bottom: 1.2rem;\r\n}\r\n\r\n.hero h1 em {\r\n  font-style: italic;\r\n  color: var(--accent);\r\n}\r\n\r\n.hero-desc {\r\n  font-size: 16px;\r\n  color: var(--muted);\r\n  font-weight: 300;\r\n  max-width: 380px;\r\n  line-height: 1.7;\r\n  margin-bottom: 2rem;\r\n}\r\n\r\n.hero-cta {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  background: var(--accent);\r\n  color: #fff;\r\n  text-decoration: none;\r\n  padding: 11px 22px;\r\n  border-radius: var(--radius);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  transition: opacity 0.15s;\r\n}\r\n\r\n.hero-cta:hover { opacity: 0.88; }\r\n\r\n.hero-stats {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 12px;\r\n}\r\n\r\n.stat-card {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border);\r\n  border-radius: var(--radius-lg);\r\n  padding: 1.2rem 1.4rem;\r\n}\r\n\r\n.stat-card:first-child {\r\n  grid-column: 1 \/ -1;\r\n  background: var(--accent);\r\n  border-color: transparent;\r\n}\r\n\r\n.stat-icon { font-size: 1.6rem; margin-bottom: 0.3rem; display: block; }\r\n.stat-label {\r\n  font-size: 11px;\r\n  font-weight: 500;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.07em;\r\n  color: var(--muted);\r\n  margin-bottom: 4px;\r\n}\r\n\r\n.stat-card:first-child .stat-label { color: rgba(255,255,255,0.55); }\r\n\r\n.stat-value {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.9rem;\r\n  color: var(--text);\r\n  letter-spacing: -0.02em;\r\n  line-height: 1;\r\n}\r\n\r\n.stat-card:first-child .stat-value { color: #fff; font-size: 2.4rem; }\r\n.stat-sub { font-size: 12px; color: var(--muted); margin-top: 3px; }\r\n.stat-card:first-child .stat-sub { color: rgba(255,255,255,0.55); }\r\n\r\n\/* \u2500\u2500 KALKULATOR SECTION \u2500\u2500 *\/\r\n.kalkulatorer {\r\n  max-width: var(--max);\r\n  margin: 0 auto;\r\n  padding: 0 1.5rem 2rem;\r\n}\r\n\r\n.section-header {\r\n  display: flex;\r\n  align-items: baseline;\r\n  gap: 1rem;\r\n  margin-bottom: 2rem;\r\n  padding-bottom: 1rem;\r\n  border-bottom: 1px solid var(--border2);\r\n}\r\n\r\n.section-title {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.6rem;\r\n  font-weight: 400;\r\n  letter-spacing: -0.02em;\r\n}\r\n\r\n.section-sub { font-size: 13px; color: var(--muted); }\r\n\r\n\/* \u2500\u2500 KALKULATOR TABS \u2500\u2500 *\/\r\n.kalk-nav {\r\n  display: flex;\r\n  gap: 6px;\r\n  margin-bottom: 2rem;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.kalk-tab {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 16px;\r\n  border-radius: var(--radius);\r\n  border: 1px solid var(--border2);\r\n  background: var(--surface);\r\n  cursor: pointer;\r\n  font-family: 'DM Sans', sans-serif;\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  color: var(--muted);\r\n  transition: all 0.15s;\r\n  text-decoration: none;\r\n}\r\n\r\n.kalk-tab:hover { border-color: var(--accent); color: var(--text); }\r\n\r\n.kalk-tab.active {\r\n  background: var(--accent);\r\n  border-color: var(--accent);\r\n  color: #fff;\r\n}\r\n\r\n.kalk-tab-icon {\r\n  width: 20px;\r\n  height: 20px;\r\n  border-radius: 6px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 11px;\r\n  background: rgba(255,255,255,0.15);\r\n  flex-shrink: 0;\r\n}\r\n\r\n.kalk-tab:not(.active) .kalk-tab-icon {\r\n  background: var(--surface2);\r\n}\r\n\r\n.coming-soon-badge {\r\n  font-size: 10px;\r\n  font-weight: 500;\r\n  background: var(--surface2);\r\n  color: var(--muted);\r\n  padding: 2px 7px;\r\n  border-radius: 20px;\r\n  letter-spacing: 0.04em;\r\n}\r\n\r\n\/* \u2500\u2500 KALKULATOR PANELS \u2500\u2500 *\/\r\n.kalk-panel { display: none; }\r\n.kalk-panel.active { display: block; }\r\n\r\n.coming-soon-panel {\r\n  background: var(--surface);\r\n  border: 1px dashed var(--border2);\r\n  border-radius: var(--radius-lg);\r\n  padding: 4rem 2rem;\r\n  text-align: center;\r\n}\r\n\r\n.coming-soon-panel h3 {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.4rem;\r\n  font-weight: 400;\r\n  margin-bottom: 0.5rem;\r\n  color: var(--text);\r\n}\r\n\r\n.coming-soon-panel p { font-size: 14px; color: var(--muted); }\r\n\r\n\/* \u2500\u2500 INLINE KALKULATOR \u2500\u2500 *\/\r\n.kalk-inner-header {\r\n  display: flex;\r\n  align-items: baseline;\r\n  gap: 0.75rem;\r\n  margin-bottom: 1.5rem;\r\n}\r\n\r\n.kalk-inner-title {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.4rem;\r\n  font-weight: 400;\r\n  letter-spacing: -0.02em;\r\n}\r\n\r\n.kalk-inner-sub { font-size: 12px; color: var(--muted); }\r\n\r\n\/* \u2500\u2500 CALCULATOR STYLES (from original) \u2500\u2500 *\/\r\n.layout {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 1.5rem;\r\n}\r\n\r\n@media (max-width: 680px) {\r\n  .layout { grid-template-columns: 1fr; }\r\n  .hero { grid-template-columns: 1fr; padding: 3rem 1.5rem 2rem; }\r\n  .hero h1 { font-size: 2.2rem; }\r\n  .hero-stats { display: none; }\r\n  .kalk-nav { gap: 4px; }\r\n  .kalk-tab { padding: 7px 12px; font-size: 12px; }\r\n}\r\n\r\n.card {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border);\r\n  border-radius: var(--radius-lg);\r\n  padding: 1.5rem;\r\n}\r\n\r\n.card-title {\r\n  font-size: 11px;\r\n  font-weight: 500;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.08em;\r\n  color: var(--muted);\r\n  margin-bottom: 1.2rem;\r\n}\r\n\r\n.field { margin-bottom: 1.1rem; }\r\n.field label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 5px; font-weight: 400; }\r\n\r\n.input-combo { display: flex; align-items: center; gap: 8px; }\r\n\r\n.input-combo input[type=\"number\"] {\r\n  width: 130px; padding: 7px 10px;\r\n  border: 1px solid var(--border2); border-radius: var(--radius);\r\n  background: var(--bg); color: var(--text);\r\n  font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 500;\r\n  transition: border-color 0.15s; -moz-appearance: textfield;\r\n}\r\n.input-combo input[type=\"number\"]::-webkit-inner-spin-button,\r\n.input-combo input[type=\"number\"]::-webkit-outer-spin-button { -webkit-appearance: none; }\r\n.input-combo input[type=\"number\"]:focus { outline: none; border-color: var(--accent); }\r\n\r\n.input-combo input[type=\"range\"] {\r\n  flex: 1; -webkit-appearance: none; appearance: none;\r\n  height: 4px; border-radius: 2px; background: var(--surface2); outline: none;\r\n}\r\n.input-combo input[type=\"range\"]::-webkit-slider-thumb {\r\n  -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%;\r\n  background: var(--accent); cursor: pointer; border: 2px solid var(--surface);\r\n  box-shadow: 0 0 0 1px transparent;\r\n  box-shadow: none}\r\n.input-combo input[type=\"range\"]::-moz-range-thumb {\r\n  width: 16px; height: 16px; border-radius: 50%; background: var(--accent);\r\n  cursor: pointer; border: 2px solid var(--surface);\r\n}\r\n\r\n.unit { font-size: 12px; color: var(--muted); min-width: 28px; }\r\n\r\n.results-card { background: var(--accent); border: none; border-radius: var(--radius-lg); padding: 1.5rem; color: #fff;   box-shadow: none;\r\n}\r\n.results-card .card-title { color: rgba(255,255,255,0.6); }\r\n.main-result { font-family: 'DM Serif Display', serif; font-size: 2.8rem; font-weight: 400; line-height: 1; margin: 0.5rem 0 0.2rem; letter-spacing: -0.02em; }\r\n.main-sub { font-size: 13px; color: rgba(255,255,255,0.65); margin-bottom: 1.5rem; }\r\n\r\n.result-rows { display: flex; flex-direction: column; gap: 10px; border-top: 1px solid rgba(255,255,255,0.15); padding-top: 1rem; }\r\n.result-row { display: flex; justify-content: space-between; align-items: baseline; font-size: 13px; }\r\n.result-row .rlabel { color: rgba(255,255,255,0.6); }\r\n.result-row .rval { font-weight: 500; color: #fff; }\r\n.result-section-label { font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(255,255,255,0.35); margin: 10px 0 4px; }\r\n.result-section-label:first-child { margin-top: 0; }\r\n\r\n.extra-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; grid-column: 1 \/ -1; }\r\n.extra-toggle { display: flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; padding: 0.6rem 0.8rem; }\r\n.toggle-icon { width: 22px; height: 22px; border-radius: 50%; background: var(--surface2); display: flex; align-items: center; justify-content: center; font-size: 14px; color: var(--muted); flex-shrink: 0; line-height: 1; margin-top: 0; align-self: center; }\r\n.toggle-icon { width: 18px; height: 18px; border-radius: 50%; background: var(--surface2); display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--muted); transition: background 0.15s, transform 0.2s; flex-shrink: 0; }\r\n.extra-toggle.open .toggle-icon { background: var(--accent); color: #fff; transform: rotate(45deg); }\r\n.extra-toggle h3 { font-size: 13px; font-weight: 500; color: var(--text); }\r\n.extra-body { display: none; margin-top: 1.2rem; }\r\n.extra-body.open { display: block; }\r\n.savings-banner { background: #EEF7F2; border: 1px solid #A8D9BE; border-radius: var(--radius); padding: 12px 16px; font-size: 13px; color: var(--accent3); margin-top: 1rem; line-height: 1.6; }\r\n\r\n.tabs { display: flex; gap: 4px; margin-bottom: 1.2rem; background: var(--surface2); border-radius: var(--radius); padding: 3px; }\r\n.tab { flex: 1; padding: 7px 0; text-align: center; font-size: 13px; font-weight: 400; color: var(--muted); cursor: pointer; border-radius: 8px; border: none; background: transparent; font-family: 'DM Sans', sans-serif; transition: all 0.15s; }\r\n.tab.active { background: var(--surface); color: var(--text); font-weight: 500; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }\r\n\r\n.chart-wrap { display: flex; align-items: flex-end; gap: 4px; height: 100px; margin: 1rem 0 0.5rem; }\r\n.bar-col { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; gap: 1px; position: relative; }\r\n.bar-seg { border-radius: 2px 2px 0 0; transition: height 0.35s cubic-bezier(.4,0,.2,1); min-height: 1px; }\r\n.bar-seg:not(:last-child) { border-radius: 0; }\r\n.bar-col:hover .bar-seg { opacity: 0.75; }\r\n.bar-col:hover { cursor: default; }\r\n\r\n.chart-tooltip { position: fixed; background: var(--surface); border: 1px solid var(--border2); border-radius: var(--radius); padding: 10px 14px; font-size: 12px; color: var(--text); pointer-events: none; opacity: 0; transition: opacity 0.15s; z-index: 100; min-width: 160px; box-shadow: 0 4px 16px rgba(0,0,0,0.10); }\r\n.chart-tooltip.visible { opacity: 1; }\r\n.chart-tooltip-title { font-weight: 500; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 8px; }\r\n.chart-tooltip-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 2px 0; }\r\n.chart-tooltip-label { display: flex; align-items: center; gap: 6px; color: var(--muted); }\r\n.chart-tooltip-dot { width: 7px; height: 7px; border-radius: 2px; flex-shrink: 0; }\r\n.chart-tooltip-val { font-variant-numeric: tabular-nums; font-weight: 500; color: var(--text); }\r\n.chart-tooltip-divider { border: none; border-top: 1px solid var(--border); margin: 6px 0; }\r\n\r\n.chart-labels { display: flex; gap: 4px; font-size: 10px; color: var(--muted); margin-bottom: 0.8rem; }\r\n.chart-labels span { flex: 1; text-align: center; }\r\n\r\n.legend { display: flex; gap: 14px; font-size: 12px; color: var(--muted); flex-wrap: wrap; }\r\n.legend-item { display: flex; align-items: center; gap: 5px; }\r\n.dot { width: 8px; height: 8px; border-radius: 2px; flex-shrink: 0; }\r\n\r\n.amort-wrap { overflow-x: auto; }\r\n.amort-year-row { cursor: pointer; user-select: none; }\r\n.amort-year-row:hover td { background: var(--surface2) !important; }\r\n.amort-year-row td:first-child { display: flex; align-items: center; gap: 7px; }\r\n.expand-icon { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 4px; background: var(--surface2); color: var(--muted); transition: transform 0.2s; flex-shrink: 0; transition: background 0.15s, transform 0.2s; line-height: 1; }\r\n.amort-year-row.expanded .expand-icon { background: var(--accent); color: #fff; transform: rotate(90deg); }\r\n\r\n.amort-month-row td { background: var(--bg); font-size: 12px; padding: 5px 12px; color: var(--muted); border-bottom: 1px solid var(--border); font-family: ui-monospace, 'SF Mono', 'Roboto Mono', 'Consolas', monospace; text-align: right; }\r\n.amort-month-row td:first-child { padding-left: 36px; color: var(--muted); text-align: left; font-family: 'DM Sans', sans-serif; font-size: 12px; }\r\n.amort-month-row:last-of-type td { border-bottom: 2px solid var(--border2); }\r\n\r\ntable.amort { width: 100%; border-collapse: collapse; font-size: 13px; table-layout: fixed; font-variant-numeric: tabular-nums; }\r\ntable.amort thead th { text-align: right; font-weight: 500; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); padding: 6px 12px; border-bottom: 1px solid var(--border2); white-space: nowrap; }\r\ntable.amort thead th:nth-child(1) { text-align: left; width: 140px; }\r\ntable.amort thead th:nth-child(2) { width: 14%; }\r\ntable.amort thead th:nth-child(3) { width: 14%; }\r\ntable.amort thead th:nth-child(4) { width: 9%; }\r\ntable.amort thead th:nth-child(5) { width: 14%; }\r\ntable.amort thead th:nth-child(6) { width: 16%; }\r\ntable.amort tbody td { text-align: right; padding: 7px 12px; border-bottom: 1px solid var(--border); color: var(--text); white-space: nowrap; font-family: ui-monospace, 'SF Mono', 'Roboto Mono', 'Consolas', monospace; font-size: 12.5px; letter-spacing: 0; }\r\ntable.amort thead th { font-variant-numeric: tabular-nums; }\r\ntable.amort tbody td:first-child { text-align: left; color: var(--muted); font-family: 'DM Sans', sans-serif; font-size: 13px; }\r\ntable.amort tbody td:last-child, table.amort thead th:last-child { padding-right: 0; }\r\ntable.amort tbody tr:last-child td { border-bottom: none; }\r\ntable.amort tbody tr:hover td { background: var(--bg); }\r\n\r\n.bottom-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.5rem; grid-column: 1 \/ -1; }\r\n.tabs-section { margin-bottom: 1rem; }\r\nselect:focus { outline: none; border-color: var(--accent); }\r\n\r\n\/* \u2500\u2500 FOOTER \u2500\u2500 *\/\r\nsite-footer {\r\n  display: block;\r\n  background: var(--text);\r\n  color: rgba(255,255,255,0.55);\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  margin: 0;\r\n  position: relative;\r\n}\r\n\r\n.footer-inner {\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n  padding: 3rem 2.5rem;\r\n  display: grid;\r\n  grid-template-columns: 1.5fr 1fr 1fr;\r\n  gap: 3rem;\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n}\r\n\r\n.footer-brand {\r\n  font-family: 'DM Serif Display', serif;\r\n  font-size: 1.3rem;\r\n  color: #fff;\r\n  margin-bottom: 0.6rem;\r\n  letter-spacing: -0.02em;\r\n}\r\n\r\n.footer-brand span { color: #7FB3CC; }\r\n.footer-desc { font-size: 13px; line-height: 1.6; max-width: 240px; }\r\n.footer-col-title { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(255,255,255,0.35); margin-bottom: 1rem; }\r\n\r\n.footer-links { list-style: none; display: flex; flex-direction: column; gap: 8px; }\r\n.footer-links a { font-size: 13px; color: rgba(255,255,255,0.55); text-decoration: none; transition: color 0.15s; }\r\n.footer-links a:hover { color: #fff; }\r\n\r\n.footer-bottom {\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n  width: 100%;\r\n  box-sizing: border-box;\r\n  padding-left: 2.5rem;\r\n  padding-right: 2.5rem;\r\n  padding: 1.2rem 1.5rem;\r\n  border-top: 1px solid rgba(255,255,255,0.08);\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  font-size: 12px;\r\n}\r\n\r\n@media (max-width: 680px) {\r\n  .footer-inner { grid-template-columns: 1fr; gap: 2rem; }\r\n  .footer-bottom { flex-direction: column; gap: 0.5rem; text-align: center; }\r\n}\r\n\r\n\/* Fjern skygge fra slidere og tabs *\/\r\ninput[type=\"range\"] { box-shadow: none !important; }\r\ninput[type=\"range\"]::-webkit-slider-thumb { box-shadow: none !important; }\r\ninput[type=\"range\"]::-moz-range-thumb { box-shadow: none !important; }\r\n.kalk-nav button { box-shadow: none !important; }\r\n.card, .results-card, .extra-card, .stat-card { box-shadow: none !important; }\r\n\r\n\r\n\/* \u2500\u2500 FIX 1: Slider \u2013 fjern ALL skygge inkl webkit-thumb \u2500\u2500 *\/\r\ninput[type=\"range\"] { -webkit-appearance: none; box-shadow: none !important; outline: none; }\r\ninput[type=\"range\"]::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--accent); cursor: pointer; border: 2px solid var(--surface); box-shadow: none !important; }\r\ninput[type=\"range\"]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--accent); cursor: pointer; border: 2px solid var(--surface); box-shadow: none !important; }\r\ninput[type=\"range\"]::-webkit-slider-runnable-track { height: 4px; background: var(--surface2); border-radius: 2px; box-shadow: none !important; }\r\ninput[type=\"range\"]::-moz-range-track { height: 4px; background: var(--surface2); border-radius: 2px; box-shadow: none !important; }\r\ninput[type=\"range\"]:focus { outline: none; box-shadow: none !important; }\r\ninput[type=\"range\"]:focus::-webkit-slider-thumb { box-shadow: none !important; }\r\n\r\n\/* \u2500\u2500 FIX 2: Nav \u2013 logo og lenker p\u00e5 samme horisontale linje \u2500\u2500 *\/\r\n.nav-inner { display: flex !important; align-items: center !important; justify-content: space-between !important; height: 58px; width: 100%; max-width: 1200px !important; margin: 0 auto !important; padding: 0 1.5rem !important; }\r\n.nav-links { display: flex !important; align-items: center !important; list-style: none; margin: 0; padding: 0; height: 100%; }\r\n.nav-links li { display: flex; align-items: center; height: 100%; }\r\n.nav-links a { display: flex; align-items: center; height: auto; padding: 5px 12px; font-size: 13px; color: var(--muted); text-decoration: none; border-radius: var(--radius); }\r\n.nav-links a:hover { background: var(--surface2); color: var(--text); }\r\n.nav-logo { display: flex; align-items: center; }\r\n\r\n\/* \u2500\u2500 FIX 4: Extra toggle \u2013 tekst sentrert med + tegnet \u2500\u2500 *\/\r\n.extra-toggle { display: flex !important; align-items: center !important; gap: 10px; padding: 0.6rem 0.8rem; }\r\n.toggle-icon { width: 22px !important; height: 22px !important; min-width: 22px; border-radius: 50%; background: var(--surface2); display: flex !important; align-items: center !important; justify-content: center !important; font-size: 14px; line-height: 1; flex-shrink: 0; }\r\n.extra-toggle h3 { margin: 0 !important; padding: 0 !important; line-height: 1.2; font-size: 1rem; display: flex; align-items: center; }\r\n\r\n\r\n\r\n\/* \u2500\u2500 FIX 4: Moderne select \u2500\u2500 *\/\r\nselect {\r\n  -webkit-appearance: none;\r\n  appearance: none;\r\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B6460' stroke-width='1.5' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\");\r\n  background-repeat: no-repeat;\r\n  background-position: right 10px center;\r\n  background-color: var(--surface2);\r\n  border: 1px solid var(--border2);\r\n  border-radius: var(--radius);\r\n  padding: 6px 32px 6px 10px !important;\r\n  font-size: 14px;\r\n  color: var(--text);\r\n  cursor: pointer;\r\n  outline: none;\r\n}\r\nselect:focus { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(29,78,107,0.12); }\r\n\r\n\/* \u2500\u2500 FIX 5: Moderne amort-tabell \u2500\u2500 *\/\r\n.amort-wrap { border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--border); }\r\n.amort { width: 100%; border-collapse: collapse; font-size: 13px; }\r\n.amort thead th { padding: 10px 12px; text-align: right; font-weight: 500; letter-spacing: 0.02em; font-size: 12px; text-transform: uppercase; }\r\n.amort thead th:first-child { text-align: left; }\r\n.amort tbody tr { border-bottom: 1px solid var(--border); transition: background 0.1s; }\r\n.amort tbody tr:last-child { border-bottom: none; }\r\n.amort tbody tr:hover { background: var(--surface2); }\r\n.amort td { padding: 8px 12px; text-align: right; color: var(--text); }\r\n.amort td:first-child { text-align: left; font-weight: 500; color: var(--muted); }\r\n.amort tr.year-row td { background: var(--surface2); font-weight: 600; color: var(--text); border-top: 2px solid var(--border2); }\r\n.amort tr.year-row td:first-child { color: var(--accent); }\r\n\r\n\/* \u2500\u2500 FIX 7: Footer full bredde \u2500\u2500 *\/\r\n.footer-inner, .footer-bottom { box-sizing: border-box; }\r\n\r\n\/* \u2500\u2500 FIX 8: Reduser padding p\u00e5 mobil \u2500\u2500 *\/\r\n@media (max-width: 768px) {\r\n  .ast-container { padding-left: 0 !important; padding-right: 0 !important; }\r\n  .hero { padding: 2rem 1rem 1.5rem; }\r\n  .section-header { padding: 0 1rem; }\r\n  .kalkulatorer { padding: 0 1rem; }\r\n  .kalk-panel { padding: 0 1rem; }\r\n}\r\n\r\n\/* \u2500\u2500 FIX 2: Hero stat-cards \u2500\u2500 *\/\r\n.stat-icon { font-size: 1.4rem; display: block; margin-bottom: 0.5rem; line-height: 1; }\r\n.stat-label { font-size: 0.9rem !important; font-weight: 600 !important; letter-spacing: 0 !important; text-transform: none !important; color: var(--text) !important; margin-bottom: 0.25rem !important; }\r\n.stat-card:first-child .stat-label { color: rgba(255,255,255,0.9) !important; }\r\n.stat-sub { font-size: 0.78rem !important; color: var(--muted) !important; line-height: 1.4; margin-top: 0; }\r\n.stat-card:first-child .stat-sub { color: rgba(255,255,255,0.6) !important; }\r\n\r\n\/* \u2500\u2500 FIX 3: Vis \"\u00e5r\" i kostnadsoversikt x-akse \u2500\u2500 *\/\r\n.chart-labels span { position: relative; }\r\n.chart-labels span::after { content: '\u00e5r'; font-size: 9px; color: var(--muted); margin-left: 1px; vertical-align: baseline; }\r\n\r\n\/* \u2500\u2500 Kostnadsoversikt tabs modern \u2500\u2500 *\/\r\n.tab { border-radius: var(--radius) !important; font-size: 13px; transition: all 0.15s; }\r\n\r\n\/* \u2500\u2500 FIX 7: Footer full bredde \u2500\u2500 *\/\r\n.footer-inner { max-width: 100% !important; width: 100%; padding: 3rem 2.5rem 2rem; box-sizing: border-box; }\r\n.footer-bottom { max-width: 100% !important; width: 100%; padding: 1.2rem 2.5rem; box-sizing: border-box; }\r\n\r\n\r\n\/* \u2500\u2500 Hero result card \u2500\u2500 *\/\r\n.hero-result-card {\r\n  background: var(--accent);\r\n  border-radius: var(--radius-lg);\r\n  padding: 1.8rem;\r\n  color: white;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 1.2rem;\r\n}\r\n.hero-result-label {\r\n  font-size: 10px;\r\n  letter-spacing: 0.1em;\r\n  text-transform: uppercase;\r\n  color: rgba(255,255,255,0.6);\r\n  margin-bottom: 0.3rem;\r\n}\r\n.hero-result-amount {\r\n  font-size: 2.4rem;\r\n  font-weight: 700;\r\n  letter-spacing: -0.02em;\r\n  color: white;\r\n  line-height: 1.1;\r\n}\r\n.hero-result-sub {\r\n  font-size: 12px;\r\n  color: rgba(255,255,255,0.55);\r\n  margin-top: 0.2rem;\r\n}\r\n.hero-result-grid {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 0.8rem;\r\n  border-top: 1px solid rgba(255,255,255,0.12);\r\n  padding-top: 1rem;\r\n}\r\n.hero-mini-stat {}\r\n.hero-mini-label {\r\n  font-size: 10px;\r\n  color: rgba(255,255,255,0.5);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.06em;\r\n  margin-bottom: 0.2rem;\r\n}\r\n.hero-mini-val {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: rgba(255,255,255,0.9);\r\n}\r\n.hero-mini-accent { color: #fff; }\r\n.hero-house-wrap { margin: 0.2rem 0; }\r\n.hero-bar-wrap { border-top: 1px solid rgba(255,255,255,0.12); padding-top: 0.8rem; }\r\n.hero-bar {\r\n  height: 6px;\r\n  border-radius: 3px;\r\n  overflow: hidden;\r\n  display: flex;\r\n  background: rgba(255,255,255,0.15);\r\n  margin-bottom: 0.5rem;\r\n}\r\n.hero-bar-avdrag { background: rgba(255,255,255,0.8); }\r\n.hero-bar-rente { background: #B84C2B; }\r\n.hero-bar-legend {\r\n  display: flex;\r\n  gap: 1rem;\r\n  font-size: 11px;\r\n  color: rgba(255,255,255,0.6);\r\n}\r\n.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; }\r\n.dot-avdrag { background: rgba(255,255,255,0.8); }\r\n.dot-rente { background: #B84C2B; }\r\n\r\n\/* \u2500\u2500 FIX 3+4+5: Kostnadsoversikt x-akse \u2500\u2500 *\/\r\n.chart-labels-wrap { position: relative; }\r\n.chart-labels { display: flex; justify-content: space-between; padding: 4px 0; }\r\n#chartLabels span { font-size: 11px; color: var(--muted); }\r\n#chartLabels span:empty { visibility: hidden; }\r\n#chartLabels span:not(:empty)::after { content: ' \u00e5r'; }\r\n.chart-axis-label { font-size: 10px; color: var(--muted); text-align: center; margin-top: 2px; letter-spacing: 0.06em; text-transform: uppercase; }\r\n\r\n\/* \u2500\u2500 FIX 4a: Modern select \u2500\u2500 *\/\r\nselect {\r\n  -webkit-appearance: none !important;\r\n  appearance: none !important;\r\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236B6460' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\") !important;\r\n  background-repeat: no-repeat !important;\r\n  background-position: right 10px center !important;\r\n  background-color: var(--surface2) !important;\r\n  border: 1px solid var(--border2) !important;\r\n  border-radius: var(--radius) !important;\r\n  padding: 6px 30px 6px 10px !important;\r\n  font-size: 14px !important;\r\n  color: var(--text) !important;\r\n  cursor: pointer;\r\n  outline: none !important;\r\n  font-family: 'DM Sans', sans-serif !important;\r\n}\r\nselect:focus { border-color: var(--accent) !important; box-shadow: 0 0 0 2px rgba(29,78,107,0.15) !important; }\r\n\r\n\/* \u2500\u2500 FIX 4b: Amort header hvit tekst \u2500\u2500 *\/\r\n.amort thead tr { background: var(--accent) !important; }\r\n.amort thead th { color: white !important; font-weight: 500 !important; font-size: 11px !important; text-transform: uppercase !important; letter-spacing: 0.06em !important; padding: 10px 12px !important; text-align: right !important; }\r\n.amort thead th:first-child { text-align: left !important; }\r\n\r\n\/* \u2500\u2500 FIX 5: Amort-tabell moderne \u2500\u2500 *\/\r\n.amort-wrap { border-radius: var(--radius-lg) !important; overflow: hidden !important; border: 1px solid var(--border) !important; }\r\n.amort { border-collapse: collapse !important; width: 100% !important; font-size: 13px !important; }\r\n.amort tbody td { padding: 8px 12px !important; text-align: right !important; border-bottom: 1px solid var(--border) !important; }\r\n.amort tbody td:first-child { text-align: left !important; font-weight: 500 !important; }\r\n.amort tbody tr:last-child td { border-bottom: none !important; }\r\n.amort tbody tr:hover { background: var(--surface2) !important; }\r\n.amort tr.year-row td { background: var(--surface2) !important; font-weight: 600 !important; border-top: 2px solid var(--border2) !important; cursor: pointer; }\r\n.amort tr.year-row td:first-child { color: var(--accent) !important; }\r\n.amort tr.year-row.open .expand-icon { transform: rotate(90deg); }\r\n\r\n\/* \u2500\u2500 FIX 6: Om-tekst finpuss \u2500\u2500 *\/\r\n.om-body p, .om-desc { font-size: 0.9rem; line-height: 1.7; }\r\n\r\n\/* \u2500\u2500 FIX 7: Footer full bredde \u2500\u2500 *\/\r\nsite-footer { overflow-x: clip; margin-top: 0 !important; }\r\n.site-content { padding-bottom: 5rem; }\r\n\r\n\r\n\/* \u2500\u2500 FIX 8: Mobil padding \u2500\u2500 *\/\r\n@media (max-width: 768px) {\r\n  .hero { padding: 2rem 1rem 1.5rem !important; }\r\n  .kalk-panel > div { padding: 1rem !important; }\r\n  .card, .results-card, .extra-card { padding: 1rem !important; }\r\n  .section-header, .kalkulatorer { padding-left: 1rem !important; padding-right: 1rem !important; }\r\n}\r\n\r\n\r\n\/* \u2500\u2500 Om-features ny layout \u2500\u2500 *\/\r\n.om-kalkis { background: var(--surface); border-radius: var(--radius-lg); margin: 1rem auto; max-width: var(--max); }\r\n.om-inner { display: grid; grid-template-columns: 1fr 1fr; gap: 2.5rem; padding: 1.8rem 2.5rem; align-items: center; }\r\n.om-eyebrow { font-size: 11px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent); margin-bottom: 0.6rem; }\r\n.om-title { font-family: 'DM Serif Display', serif; font-size: 1.8rem; color: var(--text); line-height: 1.25; margin-bottom: 1rem; }\r\n.om-title em { color: var(--accent2); font-style: italic; }\r\n.om-desc { font-size: 0.88rem; color: var(--muted); line-height: 1.7; }\r\n.om-features { display: flex !important; flex-direction: column !important; gap: 1rem !important; }\r\n.om-feature { display: flex !important; gap: 1rem !important; align-items: flex-start !important; padding: 0 !important; margin: 0 !important; }\r\n.om-feature-icon { width: 32px; height: 32px; min-width: 32px; border-radius: 8px; background: var(--accent); display: flex; align-items: center; justify-content: center; margin-top: 2px; }\r\n.om-feature-title { font-size: 0.9rem !important; font-weight: 600 !important; color: var(--text) !important; margin: 0 0 2px 0 !important; padding: 0 !important; line-height: 1.3 !important; }\r\n.om-feature-desc { font-size: 0.8rem !important; color: var(--muted) !important; line-height: 1.4 !important; margin: 0 !important; padding: 0 !important; }\r\n\r\n\/* \u2500\u2500 FIX 8: Mobil sentrert innhold \u2500\u2500 *\/\r\n@media (max-width: 680px) {\r\n  .ast-container { padding: 0 !important; }\r\n  .hero, .kalkulatorer, .om-kalkis { padding-left: 1rem !important; padding-right: 1rem !important; margin-left: 0 !important; margin-right: 0 !important; }\r\n  .hero { display: flex; flex-direction: column; gap: 1.5rem; padding: 2rem 1rem !important; max-width: 100% !important; }\r\n  .hero-result-card { width: 100% !important; }\r\n  .om-inner { grid-template-columns: 1fr !important; padding: 1.5rem !important; gap: 1.5rem !important; }\r\n  .kalk-nav { overflow-x: auto; flex-wrap: nowrap; padding-bottom: 4px; }\r\n  .card { padding: 1rem !important; }\r\n  .kalk-panel > .card-row { flex-direction: column !important; }\r\n  .results-card, .card { width: 100% !important; }\r\n  section { padding-left: 1rem; padding-right: 1rem; }\r\n  .section-header { padding: 0 !important; }\r\n  .kalkulatorer { padding: 0 1rem !important; }\r\n}\r\n\r\n\/* \u2500\u2500 FIX 9: Amort-tabell p\u00e5 mobil \u2014 horisontal scroll \u2500\u2500 *\/\r\n@media (max-width: 680px) {\r\n  .amort-wrap { overflow-x: auto !important; -webkit-overflow-scrolling: touch; border-radius: var(--radius) !important; }\r\n  .amort { min-width: 500px !important; font-size: 12px !important; }\r\n  .amort th, .amort td { padding: 7px 8px !important; }\r\n}\r\n\r\n\r\n\/* \u2500\u2500 Hero loantype velger \u2500\u2500 *\/\r\n.hero-loantype {\r\n  background: #1D4E6B;\r\n  border-radius: 16px;\r\n  padding: 28px 24px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 16px;\r\n}\r\n.hero-loantype-label {\r\n  font-size: 10px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.1em;\r\n  text-transform: uppercase;\r\n  color: rgba(255,255,255,0.45);\r\n  margin: 0;\r\n}\r\n.hero-loantype-list {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 8px;\r\n}\r\n.hero-loantype-item {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 14px;\r\n  padding: 14px 16px;\r\n  border-radius: 12px;\r\n  text-decoration: none;\r\n  transition: background 0.15s;\r\n  cursor: default;\r\n}\r\n.hero-loantype-item.active {\r\n  background: rgba(255,255,255,0.14);\r\n  border: 1px solid rgba(255,255,255,0.22);\r\n  cursor: pointer;\r\n}\r\n.hero-loantype-item.active:hover {\r\n  background: rgba(255,255,255,0.2);\r\n}\r\n.hero-loantype-item.coming {\r\n  background: rgba(255,255,255,0.04);\r\n  opacity: 0.7;\r\n}\r\n.hero-loantype-icon {\r\n  width: 38px;\r\n  height: 38px;\r\n  border-radius: 10px;\r\n  background: rgba(255,255,255,0.1);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n}\r\n.hero-loantype-item.active .active-icon {\r\n  background: #B84C2B;\r\n}\r\n.hero-loantype-text {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 2px;\r\n  flex: 1;\r\n}\r\n.hero-loantype-name {\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: white;\r\n}\r\n.hero-loantype-name.muted { color: rgba(255,255,255,0.45); }\r\n.hero-loantype-sub {\r\n  font-size: 11px;\r\n  color: rgba(255,255,255,0.5);\r\n}\r\n.hero-loantype-sub.muted { color: rgba(255,255,255,0.28); }\r\n.hero-loantype-arrow { flex-shrink: 0; }\r\n.hero-coming-badge {\r\n  font-size: 10px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.06em;\r\n  text-transform: uppercase;\r\n  background: rgba(255,255,255,0.1);\r\n  color: rgba(255,255,255,0.4);\r\n  padding: 3px 8px;\r\n  border-radius: 20px;\r\n  flex-shrink: 0;\r\n}\r\n@media (max-width: 680px) {\r\n  .hero-loantype { padding: 20px 16px; }\r\n  .hero-loantype-sub { display: none; }\r\n}\r\n\r\n\r\n\/* \u2500\u2500 Bill\u00e5n resultat-kort \u2500\u2500 *\/\r\n#bil-results { align-self: start !important; }\r\n\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<!-- NAV -->\r\n<nav>\r\n  <div class=\"nav-inner\">\r\n    <a href=\"#\" class=\"nav-logo\">\r\n      <svg width=\"22\" height=\"28\" viewBox=\"0 0 22 28\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"flex-shrink:0;\">\r\n        <rect width=\"22\" height=\"28\" rx=\"5\" fill=\"#1D4E6B\"\/>\r\n        <rect x=\"3\" y=\"3\" width=\"16\" height=\"7\" rx=\"2\" fill=\"white\" opacity=\"0.2\"\/>\r\n        <rect x=\"3\" y=\"13\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"9\" y=\"13\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"15\" y=\"13\" width=\"4\" height=\"3\" rx=\"1\" fill=\"#B84C2B\"\/>\r\n        <rect x=\"3\" y=\"18\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"9\" y=\"18\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"15\" y=\"18\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"3\" y=\"23\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"9\" y=\"23\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n        <rect x=\"15\" y=\"23\" width=\"4\" height=\"3\" rx=\"1\" fill=\"white\" opacity=\"0.8\"\/>\r\n      <\/svg>\r\n      <span class=\"nav-logo-text\">L\u00e5ne<span class=\"nav-logo-accent\">kalkis<\/span><\/span>\r\n    <\/a>\r\n    <ul class=\"nav-links\">\r\n      <li><a href=\"#kalkulatorer\" class=\"active\">Kalkulatorer<\/a><\/li>\r\n      \r\n    <\/ul>\r\n  <\/div>\r\n<\/nav>\r\n\r\n<!-- HERO -->\r\n<section class=\"hero\">\r\n  <div>\r\n    <p class=\"hero-eyebrow\">Gratis l\u00e5nekalkulatorer<\/p>\r\n    <h1>Forst\u00e5 l\u00e5net ditt \u2014 <em>enkelt<\/em><\/h1>\r\n    <p class=\"hero-desc\">Beregn terminbel\u00f8p, rentekostnad og nedbetalingsplan med noen f\u00e5 tastetrykk. Ingen registrering, ingen skjulte kostnader.<\/p>\r\n    <a href=\"#kalkulatorer\" class=\"hero-cta\">Pr\u00f8v kalkulatorene<\/a>\r\n  <\/div>\r\n  <div class=\"hero-loantype\" id=\"heroStats\">\r\n    <p class=\"hero-loantype-label\">Hva vil du beregne?<\/p>\r\n    <div class=\"hero-loantype-list\">\r\n      <a href=\"#kalkulatorer\" class=\"hero-loantype-item active\" onclick=\"switchKalkByName('boliglan')\">\r\n        <div class=\"hero-loantype-icon active-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2 8.5L9 2l7 6.5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><rect x=\"5\" y=\"9\" width=\"8\" height=\"7\" rx=\"1\" stroke=\"white\" stroke-width=\"1.5\"\/><\/svg>\r\n        <\/div>\r\n        <div class=\"hero-loantype-text\">\r\n          <span class=\"hero-loantype-name\">Boligl\u00e5n<\/span>\r\n          <span class=\"hero-loantype-sub\">Terminbel\u00f8p, renter og nedbetalingsplan<\/span>\r\n        <\/div>\r\n        <svg class=\"hero-loantype-arrow\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M5 3l6 5-6 5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n      <\/a>\r\n      <a href=\"#kalkulatorer\" class=\"hero-loantype-item\" onclick=\"switchKalkByName('billaan')\" style=\"cursor:pointer;\">\r\n        <div class=\"hero-loantype-icon\">\r\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2 11.5h14M3.5 11.5V13a.5.5 0 00.5.5h1a.5.5 0 00.5-.5v-1.5M12.5 11.5V13a.5.5 0 00.5.5h1a.5.5 0 00.5-.5v-1.5M3 11.5l1.5-4h9l1.5 4\" stroke=\"white\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><circle cx=\"5.5\" cy=\"11.5\" r=\"0.5\" fill=\"white\"\/><circle cx=\"12.5\" cy=\"11.5\" r=\"0.5\" fill=\"white\"\/><path d=\"M5 7.5h8\" stroke=\"white\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div class=\"hero-loantype-text\">\r\n          <span class=\"hero-loantype-name\">Bill\u00e5n<\/span>\r\n          <span class=\"hero-loantype-sub\">Beregn kostnad og terminbel\u00f8p for bil<\/span>\r\n        <\/div>\r\n        <svg class=\"hero-loantype-arrow\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M5 3l6 5-6 5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n      <\/a>\r\n      <div class=\"hero-loantype-item coming\">\r\n        <div class=\"hero-loantype-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><rect x=\"2\" y=\"3\" width=\"14\" height=\"12\" rx=\"2\" stroke=\"rgba(255,255,255,0.4)\" stroke-width=\"1.4\"\/><path d=\"M5 8h8M5 11h5\" stroke=\"rgba(255,255,255,0.4)\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div class=\"hero-loantype-text\">\r\n          <span class=\"hero-loantype-name muted\">Forbruksl\u00e5n<\/span>\r\n          <span class=\"hero-loantype-sub muted\">Se hva l\u00e5net faktisk koster deg<\/span>\r\n        <\/div>\r\n        <span class=\"hero-coming-badge\">Snart<\/span>\r\n      <\/div>\r\n      <div class=\"hero-loantype-item coming\">\r\n        <div class=\"hero-loantype-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M3 9h12M9 3l6 6-6 6\" stroke=\"rgba(255,255,255,0.4)\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div class=\"hero-loantype-text\">\r\n          <span class=\"hero-loantype-name muted\">Refinansiering<\/span>\r\n          <span class=\"hero-loantype-sub muted\">Finn ut hvor mye du kan spare<\/span>\r\n        <\/div>\r\n        <span class=\"hero-coming-badge\">Snart<\/span>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- KALKULATORER -->\r\n<section class=\"kalkulatorer\" id=\"kalkulatorer\">\r\n  <div class=\"section-header\">\r\n    <h2 class=\"section-title\">Kalkulatorer<\/h2>\r\n    <span class=\"section-sub\">Velg kalkulator nedenfor<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"kalk-nav\">\r\n    <a class=\"kalk-tab active\" onclick=\"switchKalk('boliglan', this)\" href=\"#\">\r\n      <span class=\"kalk-tab-icon\">\ud83c\udfe0<\/span>\r\n      Boligl\u00e5n\r\n    <\/a>\r\n    <a class=\"kalk-tab\" onclick=\"switchKalk('billaan', this)\" href=\"#\">\r\n      <span class=\"kalk-tab-icon\">\ud83d\ude97<\/span>\r\n      Bill\u00e5n\r\n\r\n    <\/a>\r\n    <a class=\"kalk-tab\" onclick=\"switchKalk('forbrukslaan', this)\" href=\"#\">\r\n      <span class=\"kalk-tab-icon\">\ud83d\udcb3<\/span>\r\n      Forbruksl\u00e5n\r\n      <span class=\"coming-soon-badge\">Kommer<\/span>\r\n    <\/a>\r\n    <a class=\"kalk-tab\" onclick=\"switchKalk('refinansiering', this)\" href=\"#\">\r\n      <span class=\"kalk-tab-icon\">\ud83d\udd04<\/span>\r\n      Refinansiering\r\n      <span class=\"coming-soon-badge\">Kommer<\/span>\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <!-- Boligl\u00e5n panel -->\r\n  <div class=\"kalk-panel active\" id=\"panel-boliglan\">\r\n    <div class=\"kalk-inner-header\">\r\n      <h3 class=\"kalk-inner-title\">Boligl\u00e5nskalkulator<\/h3>\r\n      <span class=\"kalk-inner-sub\">Annuitetsl\u00e5n \u00b7 Nominell rente<\/span>\r\n    <\/div>\r\n\r\n    <div class=\"layout\">\r\n      <div class=\"card\">\r\n        <p class=\"card-title\">L\u00e5nedetaljer<\/p>\r\n        <div class=\"field\">\r\n          <label>L\u00e5nebel\u00f8p (kr)<\/label>\r\n          <div class=\"input-combo\">\r\n            <input type=\"text\" id=\"loanN\" value=\"3 000 000\" inputmode=\"numeric\" style=\"width:140px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\" oninput=\"loanTextInput(this)\" onfocus=\"loanFocus(this)\" onblur=\"loanBlur(this)\">\r\n            <input type=\"range\" id=\"loan\" min=\"100000\" max=\"20000000\" step=\"50000\" value=\"3000000\" oninput=\"syncFromSlider('loan','loanN')\">\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\">\r\n          <label>Nominell rente (% p.a.)<\/label>\r\n          <div class=\"input-combo\">\r\n            <input type=\"text\" id=\"rateN\" value=\"5,00\" inputmode=\"decimal\" style=\"width:80px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\" oninput=\"rateTextInput(this)\" onfocus=\"rateFocus(this)\" onblur=\"rateBlur(this)\">\r\n            <input type=\"range\" id=\"rate\" min=\"0.01\" max=\"99.99\" step=\"0.01\" value=\"5.00\" oninput=\"syncFromSlider('rate','rateN')\">\r\n            <span class=\"unit\">%<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\">\r\n          <label>Nedbetalingstid<\/label>\r\n          <div class=\"input-combo\" style=\"gap:6px;\">\r\n            <input type=\"text\" id=\"yearsN\" value=\"25\" inputmode=\"numeric\" maxlength=\"2\" oninput=\"limitTwoDigits(this, 0, 99, syncYearsMonths)\" style=\"width:52px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\">\r\n            <span class=\"unit\" style=\"min-width:auto;\">\u00e5r<\/span>\r\n            <input type=\"text\" id=\"monthsN\" value=\"0\" inputmode=\"numeric\" maxlength=\"2\" oninput=\"limitTwoDigits(this, 0, 11, syncYearsMonths)\" style=\"width:52px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\">\r\n            <span class=\"unit\" style=\"min-width:auto;\">mnd<\/span>\r\n            <input type=\"range\" id=\"years\" min=\"1\" max=\"1199\" step=\"1\" value=\"300\" oninput=\"sliderToYearsMonths()\" style=\"flex:1;\">\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\">\r\n          <label>Termingebyr (kr)<\/label>\r\n          <div class=\"input-combo\">\r\n            <input type=\"text\" id=\"feeN\" value=\"50\" inputmode=\"numeric\" maxlength=\"3\" oninput=\"feeTextInput(this)\" onblur=\"feeBlur(this)\" style=\"width:80px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\">\r\n            <input type=\"range\" id=\"fee\" min=\"0\" max=\"500\" step=\"5\" value=\"50\" oninput=\"syncFromSlider('fee','feeN')\">\r\n            <span class=\"unit\">kr<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"field\">\r\n          <label>Startm\u00e5ned<\/label>\r\n          <div class=\"input-combo\">\r\n            <select id=\"startMonth\" onchange=\"update()\" style=\"padding:6px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; width:140px; cursor:pointer; transition:border-color 0.15s;\">\r\n              <option value=\"0\">Januar<\/option><option value=\"1\">Februar<\/option><option value=\"2\">Mars<\/option>\r\n              <option value=\"3\">April<\/option><option value=\"4\">Mai<\/option><option value=\"5\">Juni<\/option>\r\n              <option value=\"6\">Juli<\/option><option value=\"7\">August<\/option><option value=\"8\">September<\/option>\r\n              <option value=\"9\">Oktober<\/option><option value=\"10\">November<\/option><option value=\"11\">Desember<\/option>\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"results-card\">\r\n        <p class=\"card-title\">M\u00e5nedlig terminbel\u00f8p<\/p>\r\n        <div class=\"main-result\" id=\"mainTermin\">\u2013<\/div>\r\n        <div class=\"main-sub\" id=\"mainSub\"><\/div>\r\n        <div class=\"result-rows\">\r\n          <p class=\"result-section-label\">Per termin<\/p>\r\n          <div class=\"result-row\"><span class=\"rlabel\">Avdrag + rente<\/span><span class=\"rval\" id=\"rAvdrag\">\u2013<\/span><\/div>\r\n          <div class=\"result-row\"><span class=\"rlabel\">Termingebyr<\/span><span class=\"rval\" id=\"rGebyr\">\u2013<\/span><\/div>\r\n          <p class=\"result-section-label\" style=\"margin-top:14px;\">Over hele l\u00e5nets l\u00f8petid<\/p>\r\n          <div class=\"result-row\"><span class=\"rlabel\">Total rentekostnad<\/span><span class=\"rval\" id=\"rTotalRente\">\u2013<\/span><\/div>\r\n          <div class=\"result-row\"><span class=\"rlabel\">Totalt gebyr<\/span><span class=\"rval\" id=\"rTotalGebyr\">\u2013<\/span><\/div>\r\n          <div class=\"result-row\" style=\"border-top:1px solid rgba(255,255,255,0.15); padding-top:10px; margin-top:6px;\">\r\n            <span class=\"rlabel\" style=\"color:#fff; font-weight:500;\">Total kostnad<\/span>\r\n            <span class=\"rval\" id=\"rTotalKost\" style=\"font-size:15px;\">\u2013<\/span>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"extra-card\">\r\n        <div class=\"extra-toggle\" id=\"extraToggle\" onclick=\"toggleExtra()\">\r\n          <div class=\"toggle-icon\">+<\/div>\r\n          <h3>Ekstra m\u00e5nedlig innbetaling<\/h3>\r\n        <\/div>\r\n        <div class=\"extra-body\" id=\"extraBody\">\r\n          <div class=\"field\" style=\"margin-top:1rem;\">\r\n            <label>Ekstra bel\u00f8p per m\u00e5ned (kr)<\/label>\r\n            <div class=\"input-combo\">\r\n              <input type=\"text\" id=\"extraN\" value=\"0\" inputmode=\"numeric\" style=\"width:140px; padding:7px 10px; border:1px solid var(--border2); border-radius:var(--radius); background:var(--bg); color:var(--text); font-family:'DM Sans',sans-serif; font-size:14px; font-weight:500; transition:border-color 0.15s;\" oninput=\"extraTextInput(this)\" onfocus=\"extraFocus(this)\" onblur=\"extraBlur(this)\">\r\n              <input type=\"range\" id=\"extra\" min=\"0\" max=\"100000\" step=\"500\" value=\"0\" oninput=\"syncFromSlider('extra','extraN')\">\r\n              <span class=\"unit\">kr<\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"savings-banner\" id=\"savingsBanner\" style=\"display:none;\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bottom-card\">\r\n        <div class=\"tabs-section\">\r\n          <div class=\"tabs\">\r\n            <button class=\"tab active\" onclick=\"setTab('chart')\">Kostnadsoversikt<\/button>\r\n            <button class=\"tab\" onclick=\"setTab('amort')\">Nedbetalingsplan<\/button>\r\n          <\/div>\r\n        <\/div>\r\n        <div id=\"panelChart\">\r\n          <div class=\"legend\">\r\n            <div class=\"legend-item\"><div class=\"dot\" style=\"background:#1D4E6B;\"><\/div><span>Avdrag<\/span><\/div>\r\n            <div class=\"legend-item\"><div class=\"dot\" style=\"background:#B84C2B;\"><\/div><span>Renter<\/span><\/div>\r\n            <div class=\"legend-item\"><div class=\"dot\" style=\"background:#888780;\"><\/div><span>Gebyr<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"chart-wrap\" id=\"barChart\"><\/div>\r\n          <div class=\"chart-labels-wrap\">\r\n    <div class=\"chart-labels\" id=\"chartLabels\"><\/div>\r\n    <p class=\"chart-axis-label\">Antall \u00e5r<\/p>\r\n  <\/div>\r\n        <\/div>\r\n        <div class=\"chart-tooltip\" id=\"chartTooltip\"><\/div>\r\n        <div id=\"panelAmort\" style=\"display:none;\">\r\n          <div class=\"amort-wrap\"><table class=\"amort\" id=\"amortTable\"><\/table><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- Coming soon panels -->\r\n  <div class=\"kalk-panel\" id=\"panel-billaan\">\r\n  <div class=\"kalk-inner-header\"><h2 class=\"kalk-title\">Bill\u00e5nkalkulator<\/h2><p class=\"kalk-subtitle\">Annuitetsl\u00e5n \u00b7 Nominell rente<\/p><\/div>\r\n    <div class=\"layout\" id=\"billan-kalkulator\">\r\n<div class=\"card\">\r\n  <p class=\"card-title\">L\u00e5nedetaljer<\/p>\r\n  <div class=\"field\">\r\n    <label>Bilpris (kr)<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-pris\" value=\"400000\" min=\"50000\" max=\"3000000\" step=\"10000\" oninput=\"syncFromInput('bil-pris','bil-pris-slider');updateBillan()\">\r\n      <input type=\"range\" id=\"bil-pris-slider\" min=\"50000\" max=\"3000000\" step=\"10000\" value=\"400000\" oninput=\"syncFromSliderBil('bil-pris-slider','bil-pris');updateBillan()\">\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"field\">\r\n    <label>Egenkapital (kr)<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-ek\" value=\"0\" min=\"0\" max=\"2000000\" step=\"5000\" oninput=\"syncFromInput('bil-ek','bil-ek-slider');updateBillan()\">\r\n      <input type=\"range\" id=\"bil-ek-slider\" min=\"0\" max=\"2000000\" step=\"5000\" value=\"0\" oninput=\"syncFromSliderBil('bil-ek-slider','bil-ek');updateBillan()\">\r\n    <\/div>\r\n    <p class=\"field-hint\" id=\"bil-ek-hint\">Det er ingen krav til egenkapital for bill\u00e5n i Norge<\/p>\r\n  <\/div>\r\n  <div class=\"field\">\r\n    <label>Nominell rente (% p.a.)<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-rente\" value=\"7.5\" min=\"1\" max=\"25\" step=\"0.1\" oninput=\"syncFromInput('bil-rente','bil-rente-slider');updateBillan()\">\r\n      <input type=\"range\" id=\"bil-rente-slider\" min=\"1\" max=\"25\" step=\"0.1\" value=\"7.5\" oninput=\"syncFromSliderBil('bil-rente-slider','bil-rente');updateBillan()\">\r\n      <span class=\"unit\">%<\/span>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"field\">\r\n    <label>Nedbetalingstid<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-aar\" value=\"5\" min=\"1\" max=\"15\" step=\"1\" oninput=\"syncFromInput('bil-aar','bil-aar-slider');updateBillan()\">\r\n      <span class=\"unit\">\u00e5r<\/span>\r\n      <input type=\"number\" id=\"bil-mnd\" value=\"0\" min=\"0\" max=\"11\" step=\"1\" oninput=\"updateBillan()\" style=\"max-width:60px;\">\r\n      <span class=\"unit\">mnd<\/span>\r\n      <input type=\"range\" id=\"bil-aar-slider\" min=\"1\" max=\"15\" step=\"1\" value=\"5\" oninput=\"syncFromSliderBil('bil-aar-slider','bil-aar');updateBillan()\">\r\n    <\/div>\r\n    <p class=\"field-hint\">De fleste banker tilbyr maks 10 \u00e5r. Noen tilbyr inntil 15 \u00e5r for h\u00f8yere bel\u00f8p.<\/p>\r\n  <\/div>\r\n  <div class=\"field\">\r\n    <label>Termingebyr (kr)<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-gebyr\" value=\"45\" min=\"0\" max=\"500\" step=\"5\" oninput=\"syncFromInput('bil-gebyr','bil-gebyr-slider');updateBillan()\">\r\n      <input type=\"range\" id=\"bil-gebyr-slider\" min=\"0\" max=\"500\" step=\"5\" value=\"45\" oninput=\"syncFromSliderBil('bil-gebyr-slider','bil-gebyr');updateBillan()\">\r\n      <span class=\"unit\">kr<\/span>\r\n    <\/div>\r\n  <div class=\"field\">\r\n    <label>Etableringsgebyr (kr)<\/label>\r\n    <div class=\"input-combo\">\r\n      <input type=\"number\" id=\"bil-etablering\" value=\"0\" min=\"0\" max=\"20000\" step=\"100\" oninput=\"syncFromInput('bil-etablering','bil-etablering-slider');updateBillan()\">\r\n      <input type=\"range\" id=\"bil-etablering-slider\" min=\"0\" max=\"20000\" step=\"100\" value=\"0\" oninput=\"syncFromSliderBil('bil-etablering-slider','bil-etablering');updateBillan()\">\r\n      <span class=\"unit\">kr<\/span>\r\n    <\/div>\r\n    <p class=\"field-hint\">Engangsgebyr ved opptak av l\u00e5net<\/p>\r\n  <\/div>\r\n  <\/div>\r\n<\/div>\r\n<div class=\"results-card\" id=\"bil-results\">\r\n  <p class=\"card-title\">M\u00e5nedlig terminbel\u00f8p<\/p>\r\n  <div class=\"main-result\" id=\"bil-main-termin\">\u2013<\/div>\r\n  <div class=\"main-sub\" id=\"bil-main-sub\">400 000 kr \u00b7 7,5% \u00b7 5 \u00e5r<\/div>\r\n  <div class=\"result-rows\">\r\n    <p class=\"result-section-label\">Per termin<\/p>\r\n    <div class=\"result-row\"><span class=\"rlabel\">Avdrag + rente<\/span><span class=\"rval\" id=\"bil-avdrag-rente\">\u2013<\/span><\/div>\r\n    <div class=\"result-row\"><span class=\"rlabel\">Termingebyr<\/span><span class=\"rval\" id=\"bil-termingebyr\">\u2013<\/span><\/div>\r\n    <p class=\"result-section-label\">Over hele l\u00e5nets l\u00f8petid<\/p>\r\n    <div class=\"result-row\"><span class=\"rlabel\">Total rentekostnad<\/span><span class=\"rval\" id=\"bil-total-rente\">\u2013<\/span><\/div>\r\n    <div class=\"result-row\"><span class=\"rlabel\">Totalt gebyr<\/span><span class=\"rval\" id=\"bil-total-gebyr\">\u2013<\/span><\/div>\r\n    <div class=\"result-row result-total\"><span class=\"rlabel\">Total kostnad<\/span><span class=\"rval\" id=\"bil-total-kostnad\">\u2013<\/span><\/div>\r\n  <\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n  <div class=\"kalk-panel\" id=\"panel-forbrukslaan\">\r\n    <div class=\"coming-soon-panel\">\r\n      <h3>Forbruksl\u00e5nkalkulator<\/h3>\r\n      <p>Kommer snart \u2014 sammenlign kostnader for ulike forbruksl\u00e5n.<\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"kalk-panel\" id=\"panel-refinansiering\">\r\n    <div class=\"coming-soon-panel\">\r\n      <h3>Refinansieringskalkulator<\/h3>\r\n      <p>Kommer snart \u2014 se hvor mye du kan spare p\u00e5 \u00e5 refinansiere l\u00e5net ditt.<\/p>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- OM OSS -->\r\n<section class=\"om-kalkis\" id=\"om\">\r\n  <div class=\"om-inner\">\r\n    <div class=\"om-left\">\r\n      <p class=\"om-eyebrow\">Om L\u00e5nekalkis<\/p>\r\n      <h2 class=\"om-title\">Enkle verkt\u00f8y for <em>smarte<\/em> l\u00e5ntakere<\/h2>\r\n      <p class=\"om-desc\">L\u00e5nekalkis gir deg full oversikt over hva l\u00e5net ditt faktisk koster \u2014 terminbel\u00f8p, totale rentekostnader og nedbetalingsplan \u2014 p\u00e5 sekunder. Ingen skjemaer, ingen selgere, ingen liten skrift. Bare \u00e6rlige tall du kan stole p\u00e5.<\/p>\r\n    <\/div>\r\n    <div class=\"om-features\">\r\n      <div class=\"om-feature\">\r\n        <div class=\"om-feature-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2 10l4 4L16 4\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div>\r\n          <p class=\"om-feature-title\">Full kostnadsoversikt<\/p>\r\n          <p class=\"om-feature-desc\">Se terminbel\u00f8p, total rente og nedbetalingsplan samlet p\u00e5 ett sted<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"om-feature\">\r\n        <div class=\"om-feature-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2 10l4 4L16 4\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div>\r\n          <p class=\"om-feature-title\">Sammenlign ekstra innbetalinger<\/p>\r\n          <p class=\"om-feature-desc\">Se konkret hvor mange \u00e5r og kroner du sparer ved \u00e5 betale litt mer<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"om-feature\">\r\n        <div class=\"om-feature-icon\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2 10l4 4L16 4\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <div>\r\n          <p class=\"om-feature-title\">Ingen registrering n\u00f8dvendig<\/p>\r\n          <p class=\"om-feature-desc\">Bruk kalkulatoren direkte i nettleseren \u2014 ingen konto, ingen e-post<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n<!-- FOOTER -->\r\n<site-footer>\r\n  <div class=\"footer-inner\">\r\n    <div>\r\n      <p class=\"footer-brand\">L\u00e5ne<span>kalkis<\/span><\/p>\r\n      <p class=\"footer-desc\">Gratis og enkle l\u00e5nekalkulatorer for deg som vil forst\u00e5 hva l\u00e5net faktisk koster.<\/p>\r\n    <\/div>\r\n    <div>\r\n      <p class=\"footer-col-title\">Kalkulatorer<\/p>\r\n      <ul class=\"footer-links\">\r\n        <li><a href=\"#kalkulatorer\" onclick=\"switchKalkByName('boliglan')\">Boligl\u00e5n<\/a><\/li>\r\n        <li><a href=\"#\">Bill\u00e5n (kommer)<\/a><\/li>\r\n        <li><a href=\"#\">Forbruksl\u00e5n (kommer)<\/a><\/li>\r\n        <li><a href=\"#\">Refinansiering (kommer)<\/a><\/li>\r\n      <\/ul>\r\n    <\/div>\r\n    <div>\r\n      <p class=\"footer-col-title\">Info<\/p>\r\n      <ul class=\"footer-links\">\r\n        \r\n      <\/ul>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"footer-bottom\">\r\n    <span>\u00a9 2025 L\u00e5nekalkis. Beregningene er veiledende.<\/span>\r\n    <span><a href=\"https:\/\/tekio.no\" target=\"_blank\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;\">Tekio AS<\/a> \u00b7 Laget i Norge \ud83c\uddf3\ud83c\uddf4<\/span>\r\n  <\/div>\r\n<\/site-footer>\r\n\r\n<script>\r\n\/\/ \u2500\u2500 KALKULATOR SWITCHING \u2500\u2500\r\nfunction switchKalk(id, el) {\r\n  document.querySelectorAll('.kalk-panel').forEach(p => p.classList.remove('active'));\r\n  document.querySelectorAll('.kalk-tab').forEach(t => t.classList.remove('active'));\r\n  document.getElementById('panel-' + id).classList.add('active');\r\n  if (el) el.classList.add('active');\r\n  if (id === 'billaan') { setTimeout(function() { if (typeof initBillan === 'function') initBillan(); }, 50); }\r\n}\r\nfunction switchKalkByName(id) {\r\n  const tabs = document.querySelectorAll('.kalk-tab');\r\n  const panels = ['boliglan','billaan','forbrukslaan','refinansiering'];\r\n  switchKalk(id, tabs[panels.indexOf(id)]);\r\n}\r\n\r\n\/\/ \u2500\u2500 CALCULATOR LOGIC \u2500\u2500\r\nlet currentTab = 'chart';\r\nlet lastSchedule = [];\r\n\r\nfunction fmt(n) { return Math.round(n).toLocaleString('nb-NO') + '\\u00a0kr'; }\r\nfunction fmtShort(n) {\r\n  if (n >= 1000000) return (n\/1000000).toFixed(2).replace('.',',') + ' mill';\r\n  if (n >= 1000) return Math.round(n\/1000) + ' k';\r\n  return Math.round(n).toLocaleString('nb-NO');\r\n}\r\nfunction fmtThousands(n) { return Math.round(n).toLocaleString('nb-NO'); }\r\n\r\nfunction parseLoan(str) {\r\n  return parseInt(String(str).replace(\/\\s\/g,'').replace(\/\\.\/g,'').replace(\/,\/g,''), 10);\r\n}\r\n\r\nfunction loanTextInput(el) {\r\n  const raw = el.value.replace(\/\\s\/g,'').replace(\/\\.\/g,'');\r\n  const n = parseInt(raw, 10);\r\n  if (!isNaN(n)) {\r\n    const clamped = Math.max(100000, Math.min(20000000, n));\r\n    document.getElementById('loan').value = clamped;\r\n    const pos = el.selectionStart, oldLen = el.value.length;\r\n    el.value = fmtThousands(n);\r\n    const diff = el.value.length - oldLen;\r\n    try { el.setSelectionRange(pos + diff, pos + diff); } catch(e) {}\r\n    update();\r\n  }\r\n}\r\nfunction loanFocus(el) { const n = parseLoan(el.value); if (!isNaN(n)) el.value = n; el.select(); }\r\nfunction loanBlur(el) {\r\n  const n = parseLoan(el.value);\r\n  if (!isNaN(n)) {\r\n    const clamped = Math.max(100000, Math.min(20000000, n));\r\n    el.value = fmtThousands(clamped);\r\n    document.getElementById('loan').value = clamped;\r\n    update();\r\n  }\r\n}\r\n\r\nfunction syncFromSlider(sliderId, numId) {\r\n  const val = document.getElementById(sliderId).value;\r\n  const el = document.getElementById(numId);\r\n  if (sliderId === 'loan' || sliderId === 'extra') el.value = fmtThousands(parseFloat(val));\r\n  else if (sliderId === 'rate') el.value = parseFloat(val).toFixed(2).replace('.', ',');\r\n  else if (sliderId === 'fee') el.value = Math.round(parseFloat(val));\r\n  else el.value = val;\r\n  update();\r\n}\r\n\r\nfunction getTotalMonths() {\r\n  const y = parseInt(document.getElementById('yearsN').value, 10) || 0;\r\n  const m = parseInt(document.getElementById('monthsN').value, 10) || 0;\r\n  return Math.max(1, Math.min(1199, y * 12 + m));\r\n}\r\nfunction syncYearsMonths() { document.getElementById('years').value = getTotalMonths(); update(); }\r\nfunction sliderToYearsMonths() {\r\n  const total = parseInt(document.getElementById('years').value);\r\n  document.getElementById('yearsN').value = Math.min(99, Math.floor(total \/ 12));\r\n  document.getElementById('monthsN').value = total % 12;\r\n  update();\r\n}\r\n\r\nfunction setTab(t) {\r\n  currentTab = t;\r\n  document.querySelectorAll('.tab').forEach((el, i) => el.classList.toggle('active', ['chart','amort'][i] === t));\r\n  document.getElementById('panelChart').style.display = t === 'chart' ? '' : 'none';\r\n  document.getElementById('panelAmort').style.display = t === 'amort' ? '' : 'none';\r\n  if (t === 'amort') renderAmort();\r\n}\r\n\r\nfunction toggleExtra() {\r\n  document.getElementById('extraToggle').classList.toggle('open');\r\n  document.getElementById('extraBody').classList.toggle('open');\r\n}\r\n\r\nfunction calcPayment(principal, mr, n) {\r\n  if (mr === 0) return principal \/ n;\r\n  return principal * mr * Math.pow(1 + mr, n) \/ (Math.pow(1 + mr, n) - 1);\r\n}\r\n\r\nfunction buildSchedule(loan, mr, maxN, fee, extra) {\r\n  let bal = loan;\r\n  const rows = [];\r\n  const fixedPmt = calcPayment(loan, mr, maxN);\r\n  for (let i = 0; i < maxN && bal > 0.01; i++) {\r\n    const interest = bal * mr;\r\n    let principal = (fixedPmt - interest) + extra;\r\n    if (principal < 0) principal = 0;\r\n    if (principal > bal) principal = bal;\r\n    bal -= principal;\r\n    if (bal < 0) bal = 0;\r\n    rows.push({ month: i+1, interest: Math.round(interest), principal: Math.round(principal), fee, balance: Math.round(bal) });\r\n    if (bal < 0.01) break;\r\n  }\r\n  return rows;\r\n}\r\n\r\nfunction extraTextInput(el) {\r\n  const raw = el.value.replace(\/\\s\/g,'').replace(\/\\.\/g,'');\r\n  const n = parseInt(raw, 10);\r\n  if (!isNaN(n)) {\r\n    const clamped = Math.max(0, Math.min(100000, n));\r\n    document.getElementById('extra').value = clamped;\r\n    const pos = el.selectionStart, oldLen = el.value.length;\r\n    el.value = fmtThousands(n);\r\n    const diff = el.value.length - oldLen;\r\n    try { el.setSelectionRange(pos + diff, pos + diff); } catch(e) {}\r\n    update();\r\n  }\r\n}\r\nfunction extraFocus(el) { const n = parseLoan(el.value); if (!isNaN(n)) el.value = n === 0 ? '' : n; el.select(); }\r\nfunction extraBlur(el) {\r\n  const raw = el.value.trim() === '' ? '0' : el.value;\r\n  const n = parseLoan(raw);\r\n  const clamped = isNaN(n) ? 0 : Math.max(0, Math.min(100000, n));\r\n  el.value = fmtThousands(clamped);\r\n  document.getElementById('extra').value = clamped;\r\n  update();\r\n}\r\n\r\nfunction limitTwoDigits(el, mn, mx, callback) {\r\n  let raw = el.value.replace(\/[^0-9]\/g, '').slice(0, 2);\r\n  el.value = raw;\r\n  const n = parseInt(raw, 10);\r\n  if (!isNaN(n)) { if (n > mx) el.value = String(mx); if (n < mn) el.value = String(mn); }\r\n  callback();\r\n}\r\n\r\nfunction parseRate(str) { return parseFloat(String(str).replace(',', '.')); }\r\n\r\nfunction rateTextInput(el) {\r\n  const pos = el.selectionStart, oldLen = el.value.length;\r\n  let raw = el.value.replace(\/[^0-9.,]\/g, '');\r\n  const sepMatch = raw.match(\/[.,]\/);\r\n  if (sepMatch) {\r\n    const sepIdx = raw.indexOf(sepMatch[0]);\r\n    const before = raw.slice(0, sepIdx).replace(\/[.,]\/g, '').slice(0, 2);\r\n    const after = raw.slice(sepIdx + 1).replace(\/[.,]\/g, '').slice(0, 2);\r\n    raw = before + sepMatch[0] + after;\r\n  } else { raw = raw.slice(0, 2); }\r\n  el.value = raw;\r\n  const diff = el.value.length - oldLen;\r\n  try { el.setSelectionRange(pos + diff, pos + diff); } catch(e) {}\r\n  const n = parseFloat(raw.replace(',', '.'));\r\n  if (!isNaN(n) && n > 0) { document.getElementById('rate').value = Math.min(99.99, n); update(); }\r\n}\r\nfunction rateFocus(el) { el.value = el.value.replace(',', '.'); el.select(); }\r\nfunction rateBlur(el) {\r\n  const n = parseRate(el.value);\r\n  if (!isNaN(n)) { const c = Math.min(99.99, Math.max(0.01, n)); el.value = c.toFixed(2).replace('.', ','); document.getElementById('rate').value = c; update(); }\r\n  else { el.value = '5,00'; document.getElementById('rate').value = 5; update(); }\r\n}\r\n\r\nfunction feeTextInput(el) {\r\n  let raw = el.value.replace(\/[^0-9]\/g, '').slice(0, 3);\r\n  const n = parseInt(raw, 10);\r\n  if (!isNaN(n) && n > 500) raw = '500';\r\n  el.value = raw;\r\n  document.getElementById('fee').value = parseInt(raw, 10) || 0;\r\n  update();\r\n}\r\nfunction feeBlur(el) {\r\n  const n = parseInt(el.value, 10);\r\n  el.value = isNaN(n) || n < 0 ? '0' : Math.min(500, n);\r\n  document.getElementById('fee').value = parseInt(el.value, 10);\r\n  update();\r\n}\r\n\r\nfunction update() {\r\n  const loan = parseFloat(document.getElementById('loan').value) || parseLoan(document.getElementById('loanN').value);\r\n  const rate = parseRate(document.getElementById('rateN').value) || parseFloat(document.getElementById('rate').value);\r\n  const fee = parseInt(document.getElementById('feeN').value, 10) || 0;\r\n  const extra = parseFloat(document.getElementById('extra').value) || 0;\r\n  const n = getTotalMonths();\r\n  const mr = rate \/ 100 \/ 12;\r\n\r\n  const pmt = calcPayment(loan, mr, n);\r\n  const totalPmt = pmt * n;\r\n  const totalRente = totalPmt - loan;\r\n  const totalGebyr = fee * n;\r\n  const totalKost = totalPmt + totalGebyr;\r\n\r\n  document.getElementById('mainTermin').textContent = fmt(pmt + fee);\r\n  const dispY = Math.floor(n\/12), dispM = n%12;\r\n  const tidTxt = dispY + ' \u00e5r' + (dispM ? ' og ' + dispM + ' mnd' : '');\r\n  document.getElementById('mainSub').textContent = tidTxt + ' \u00b7 ' + rate.toFixed(2).replace('.', ',') + '\\u00a0%';\r\n  document.getElementById('rAvdrag').textContent = fmt(pmt);\r\n  document.getElementById('rGebyr').textContent = fmt(fee);\r\n  document.getElementById('rTotalRente').textContent = fmt(totalRente);\r\n  document.getElementById('rTotalGebyr').textContent = fmt(totalGebyr);\r\n  document.getElementById('rTotalKost').textContent = fmt(totalKost);\r\n\r\n  \/\/ Hero stats er statiske \u2013 ikke oppdater dem\r\n  \/\/ Hero-bokser er statiske (ikke oppdater)\r\n  \/\/ document.getElementById('heroTermin').textContent = fmt(pmt + fee);\r\n  \/\/ document.getElementById('heroRente').textContent = fmt(totalRente);\r\n  \/\/ document.getElementById('heroTotal').textContent = fmt(totalKost);\r\n\r\n  const sched = buildSchedule(loan, mr, n, fee, extra);\r\n  const schedNoExtra = extra > 0 ? buildSchedule(loan, mr, n, fee, 0) : null;\r\n  lastSchedule = sched;\r\n\r\n  if (extra > 0 && schedNoExtra) {\r\n    const savedMonths = schedNoExtra.length - sched.length;\r\n    const savedRente = schedNoExtra.reduce((a,r)=>a+r.interest,0) - sched.reduce((a,r)=>a+r.interest,0);\r\n    const sY = Math.floor(Math.abs(savedMonths)\/12), sM = Math.abs(savedMonths)%12;\r\n    const newY = Math.floor(sched.length\/12), newM = sched.length%12;\r\n    const banner = document.getElementById('savingsBanner');\r\n    banner.style.display = '';\r\n    banner.innerHTML = 'Ny nedbetalingstid: <strong>' + newY + ' \u00e5r' + (newM ? ' og ' + newM + ' mnd' : '') + '<\/strong> &nbsp;\u00b7&nbsp; Spart tid: <strong>' + (sY > 0 ? sY + ' \u00e5r og ' : '') + sM + ' mnd<\/strong> &nbsp;\u00b7&nbsp; Spart rente: <strong>' + fmt(savedRente) + '<\/strong>';\r\n  } else {\r\n    document.getElementById('savingsBanner').style.display = 'none';\r\n  }\r\n\r\n  if (currentTab === 'chart') renderChart(sched);\r\n  else renderAmort();\r\n}\r\n\r\nfunction renderChart(sched) {\r\n  const wrap = document.getElementById('barChart');\r\n  const lblWrap = document.getElementById('chartLabels');\r\n  const tooltip = document.getElementById('chartTooltip');\r\n  wrap.innerHTML = ''; lblWrap.innerHTML = '';\r\n  let firstTot = 0;\r\n  sched.slice(0,12).forEach(r => { firstTot += r.interest + r.principal + r.fee; });\r\n  const startM = parseInt(document.getElementById('startMonth').value);\r\n  const mndNavn = ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'];\r\n  const calGroups = [];\r\n  let i = 0;\r\n  while (i < sched.length) {\r\n    const calYear = Math.floor((startM + i) \/ 12);\r\n    const monthsLeft = 12 - ((startM + i) % 12);\r\n    const slice = sched.slice(i, i + monthsLeft);\r\n    if (slice.length) calGroups.push({ calYear, rows: slice });\r\n    i += monthsLeft;\r\n  }\r\n  const maxH = 88;\r\n  calGroups.forEach(function(grp, gi) {\r\n    const monthRows = grp.rows, isPartial = monthRows.length < 12;\r\n    const totAvd = monthRows.reduce((a,r)=>a+r.principal,0);\r\n    const totRente = monthRows.reduce((a,r)=>a+r.interest,0);\r\n    const totGebyr = monthRows.reduce((a,r)=>a+r.fee,0);\r\n    const totSum = totAvd+totRente+totGebyr;\r\n    const restgjeld = monthRows[monthRows.length-1].balance;\r\n    const scale = firstTot > 0 ? maxH \/ firstTot : 1;\r\n    const calYearNum = grp.calYear + 1;\r\n    const fromMnd = mndNavn[(startM + monthRows[0].month - 1) % 12];\r\n    const toMnd = mndNavn[(startM + monthRows[monthRows.length-1].month - 1) % 12];\r\n    const yearLabel = isPartial ? calYearNum + ' (' + fromMnd + '\u2013' + toMnd + ')' : String(calYearNum);\r\n    const col = document.createElement('div'); col.className = 'bar-col';\r\n    const b1 = document.createElement('div'); b1.className = 'bar-seg'; b1.style.cssText = 'background:#1D4E6B; height:' + Math.max(1, Math.round(totAvd*scale)) + 'px; border-radius:2px 2px 0 0;';\r\n    const b2 = document.createElement('div'); b2.className = 'bar-seg'; b2.style.cssText = 'background:#B84C2B; height:' + Math.max(1, Math.round(totRente*scale)) + 'px; border-radius:0;';\r\n    const b3 = document.createElement('div'); b3.className = 'bar-seg'; b3.style.cssText = 'background:#888780; height:' + Math.max(1, Math.round(totGebyr*scale)) + 'px; border-radius:0;';\r\n    col.appendChild(b1); col.appendChild(b2); col.appendChild(b3);\r\n    col.addEventListener('mouseenter', function(e) {\r\n      tooltip.innerHTML = '<div class=\"chart-tooltip-title\">\u00c5r ' + yearLabel + '<\/div>' +\r\n        '<div class=\"chart-tooltip-row\"><span class=\"chart-tooltip-label\"><span class=\"chart-tooltip-dot\" style=\"background:#1D4E6B;\"><\/span>Avdrag<\/span><span class=\"chart-tooltip-val\">' + Math.round(totAvd).toLocaleString('nb-NO') + ' kr<\/span><\/div>' +\r\n        '<div class=\"chart-tooltip-row\"><span class=\"chart-tooltip-label\"><span class=\"chart-tooltip-dot\" style=\"background:#B84C2B;\"><\/span>Renter<\/span><span class=\"chart-tooltip-val\">' + Math.round(totRente).toLocaleString('nb-NO') + ' kr<\/span><\/div>' +\r\n        '<div class=\"chart-tooltip-row\"><span class=\"chart-tooltip-label\"><span class=\"chart-tooltip-dot\" style=\"background:#888780;\"><\/span>Gebyr<\/span><span class=\"chart-tooltip-val\">' + Math.round(totGebyr).toLocaleString('nb-NO') + ' kr<\/span><\/div>' +\r\n        '<hr class=\"chart-tooltip-divider\">' +\r\n        '<div class=\"chart-tooltip-row\"><span class=\"chart-tooltip-label\" style=\"font-weight:500; color:var(--text);\">Totalt<\/span><span class=\"chart-tooltip-val\">' + Math.round(totSum).toLocaleString('nb-NO') + ' kr<\/span><\/div>' +\r\n        '<hr class=\"chart-tooltip-divider\">' +\r\n        '<div class=\"chart-tooltip-row\"><span class=\"chart-tooltip-label\" style=\"color:var(--muted);\">Restgjeld<\/span><span class=\"chart-tooltip-val\">' + Math.round(restgjeld).toLocaleString('nb-NO') + ' kr<\/span><\/div>';\r\n      tooltip.classList.add('visible'); positionTooltip(e);\r\n    });\r\n    col.addEventListener('mousemove', positionTooltip);\r\n    col.addEventListener('mouseleave', function() { tooltip.classList.remove('visible'); });\r\n    wrap.appendChild(col);\r\n    const lbl = document.createElement('span');\r\n\r\n      lbl.textContent = (gi + 1);\r\n    if ([0,4,9,14,19,24,29].includes(gi)) {\r\n      lbl.textContent = (gi + 1);\r\n    } else {\r\n      lbl.textContent = '';\r\n    }\r\n    lblWrap.appendChild(lbl);\r\n  });\r\n}\r\n\r\nfunction positionTooltip(e) {\r\n  const tooltip = document.getElementById('chartTooltip');\r\n  const tw = tooltip.offsetWidth || 170, th = tooltip.offsetHeight || 120;\r\n  let x = e.clientX + 14, y = e.clientY - th \/ 2;\r\n  if (x + tw > window.innerWidth - 8) x = e.clientX - tw - 14;\r\n  if (y < 8) y = 8;\r\n  if (y + th > window.innerHeight - 8) y = window.innerHeight - th - 8;\r\n  tooltip.style.left = x + 'px'; tooltip.style.top = y + 'px';\r\n}\r\n\r\nfunction renderAmort() {\r\n  const loan = parseFloat(document.getElementById('loan').value) || parseLoan(document.getElementById('loanN').value);\r\n  const rate = parseRate(document.getElementById('rateN').value) || parseFloat(document.getElementById('rate').value);\r\n  const fee = parseInt(document.getElementById('feeN').value, 10) || 0;\r\n  const extra = parseFloat(document.getElementById('extra').value) || 0;\r\n  const n = getTotalMonths();\r\n  const mr = rate \/ 100 \/ 12;\r\n  const sched = buildSchedule(loan, mr, n, fee, extra);\r\n  const table = document.getElementById('amortTable');\r\n  table.innerHTML = '';\r\n  const thead = document.createElement('thead');\r\n  thead.innerHTML = '<tr><th>Termin<\/th><th>Avdrag<\/th><th>Rente<\/th><th>Gebyr<\/th><th>Terminbel\u00f8p<\/th><th>Restgjeld<\/th><\/tr>';\r\n  table.appendChild(thead);\r\n  const tbody = document.createElement('tbody');\r\n  const startM = parseInt(document.getElementById('startMonth').value);\r\n  const mndNavnFull = ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'];\r\n  const calGroups = [];\r\n  let i = 0;\r\n  while (i < sched.length) {\r\n    const calYear = Math.floor((startM + i) \/ 12);\r\n    const monthsLeft = 12 - ((startM + i) % 12);\r\n    const slice = sched.slice(i, i + monthsLeft);\r\n    if (slice.length) calGroups.push({ calYear, rows: slice });\r\n    i += monthsLeft;\r\n  }\r\n  calGroups.forEach(function(grp) {\r\n    const monthRows = grp.rows, isPartial = monthRows.length < 12;\r\n    const calYearNum = grp.calYear + 1;\r\n    const fromMnd = mndNavnFull[(startM + monthRows[0].month - 1) % 12];\r\n    const toMnd = mndNavnFull[(startM + monthRows[monthRows.length-1].month - 1) % 12];\r\n    const lbl = isPartial ? '\u00c5r ' + calYearNum + ' (' + fromMnd.slice(0,3) + '\u2013' + toMnd.slice(0,3) + ')' : '\u00c5r ' + calYearNum;\r\n    const totAvd = monthRows.reduce((a,r)=>a+r.principal,0);\r\n    const totRente = monthRows.reduce((a,r)=>a+r.interest,0);\r\n    const totGebyr = monthRows.reduce((a,r)=>a+r.fee,0);\r\n    const totTerm = totAvd+totRente+totGebyr;\r\n    const restgjeld = monthRows[monthRows.length-1].balance;\r\n    const yearTr = document.createElement('tr'); yearTr.className = 'amort-year-row';\r\n    const tdLbl = document.createElement('td');\r\n    tdLbl.innerHTML = '<span class=\"expand-icon\"><svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\"><path d=\"M3 2l4 3-4 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/span>\u00c5r ' + calYearNum;\r\n    const tdAvd = document.createElement('td'); tdAvd.textContent = Math.round(totAvd).toLocaleString('nb-NO');\r\n    const tdRente = document.createElement('td'); tdRente.textContent = Math.round(totRente).toLocaleString('nb-NO');\r\n    const tdGebyr = document.createElement('td'); tdGebyr.textContent = Math.round(totGebyr).toLocaleString('nb-NO');\r\n    const tdTerm = document.createElement('td'); tdTerm.textContent = Math.round(totTerm).toLocaleString('nb-NO');\r\n    const tdRest = document.createElement('td'); tdRest.textContent = Math.round(restgjeld).toLocaleString('nb-NO');\r\n    yearTr.appendChild(tdLbl); yearTr.appendChild(tdAvd); yearTr.appendChild(tdRente);\r\n    yearTr.appendChild(tdGebyr); yearTr.appendChild(tdTerm); yearTr.appendChild(tdRest);\r\n    const monthTrs = monthRows.map(function(r) {\r\n      const mtr = document.createElement('tr'); mtr.className = 'amort-month-row'; mtr.style.display = 'none';\r\n      const mTermBelop = r.principal + r.interest + r.fee;\r\n      const absMonth = startM + (r.month - 1);\r\n      const mNavn = mndNavnFull[absMonth % 12];\r\n      mtr.innerHTML = '<td>' + mNavn + '<\/td><td>' + Math.round(r.principal).toLocaleString('nb-NO') + '<\/td><td>' + Math.round(r.interest).toLocaleString('nb-NO') + '<\/td><td>' + Math.round(r.fee).toLocaleString('nb-NO') + '<\/td><td>' + Math.round(mTermBelop).toLocaleString('nb-NO') + '<\/td><td>' + Math.round(r.balance).toLocaleString('nb-NO') + '<\/td>';\r\n      return mtr;\r\n    });\r\n    yearTr.addEventListener('click', function() {\r\n      const isOpen = yearTr.classList.toggle('expanded');\r\n      monthTrs.forEach(function(mtr) { mtr.style.display = isOpen ? '' : 'none'; });\r\n    });\r\n    tbody.appendChild(yearTr);\r\n    monthTrs.forEach(function(mtr) { tbody.appendChild(mtr); });\r\n  });\r\n  table.appendChild(tbody);\r\n}\r\n\r\nupdate();\r\n\r\n\/\/ \u2500\u2500 BILL\u00c5N KALKULATOR \u2500\u2500\r\nfunction updateBillan() {\r\n  var pris = parseFloat(document.getElementById('bil-pris')?.value) || 0;\r\n  var ek = parseFloat(document.getElementById('bil-ek')?.value) || 0;\r\n  var rente = parseFloat(document.getElementById('bil-rente')?.value) || 0;\r\n  var aar = parseInt(document.getElementById('bil-aar')?.value) || 5;\r\n  var mndExtra = parseInt(document.getElementById('bil-mnd')?.value) || 0;\r\n  var gebyr = parseFloat(document.getElementById('bil-gebyr')?.value) || 0;\r\n  var etablering = parseFloat(document.getElementById('bil-etablering')?.value) || 0;\r\n\r\n  var laan = Math.max(0, pris - ek);\r\n  var n = aar * 12 + mndExtra;\r\n  var r = rente \/ 100 \/ 12;\r\n  var termin = 0, totalRente = 0;\r\n\r\n  if (n > 0 && laan > 0) {\r\n    termin = r === 0 ? laan \/ n : laan * r * Math.pow(1+r,n) \/ (Math.pow(1+r,n)-1);\r\n    totalRente = (termin * n) - laan;\r\n  }\r\n  var totalGebyr = gebyr * n;\r\n  var totalKostnad = laan + totalRente + totalGebyr + etablering;\r\n  var terminTotal = termin + gebyr;\r\n\r\n  var f = function(v) { return Math.round(v).toLocaleString('nb-NO') + '\\u00a0kr'; };\r\n  var el = function(id) { return document.getElementById(id); };\r\n\r\n  if (el('bil-main-termin')) el('bil-main-termin').textContent = f(terminTotal);\r\n  if (el('bil-main-sub')) el('bil-main-sub').textContent = f(laan) + ' \u00b7 ' + rente.toFixed(2).replace('.',',') + '% \u00b7 ' + aar + '\\u00a0\u00e5r';\r\n  if (el('bil-avdrag-rente')) el('bil-avdrag-rente').textContent = f(termin);\r\n  if (el('bil-termingebyr')) el('bil-termingebyr').textContent = f(gebyr);\r\n  if (el('bil-total-rente')) el('bil-total-rente').textContent = f(totalRente);\r\n  if (el('bil-total-gebyr')) el('bil-total-gebyr').textContent = f(totalGebyr);\r\n  if (el('bil-total-kostnad')) el('bil-total-kostnad').textContent = f(totalKostnad);\r\n}\r\nfunction syncFromInput(inputId, sliderId) {\r\n  var el = document.getElementById(inputId);\r\n  var sl = document.getElementById(sliderId);\r\n  if (el && sl) sl.value = el.value;\r\n}\r\nfunction syncFromSliderBil(sliderId, inputId) {\r\n  var sl = document.getElementById(sliderId);\r\n  var el = document.getElementById(inputId);\r\n  if (el && sl) el.value = sl.value;\r\n}\r\n\r\nfunction initBillan() {\r\n  updateBillan();\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', initBillan);\r\n\r\n<\/script>\r\n\r\n<script>\r\n(function() {\r\n  function fullWidthFix() {\r\n    var nav = document.querySelector('nav');\r\n    var footer = document.querySelector('site-footer');\r\n    var body = document.body;\r\n\r\n    if (nav && nav.parentElement !== body) {\r\n      \/\/ Insert nav as first child of body (after wp-admin bar if present)\r\n      var adminBar = document.getElementById('wpadminbar');\r\n      if (adminBar) {\r\n        adminBar.after(nav);\r\n      } else {\r\n        body.prepend(nav);\r\n      }\r\n      nav.style.position = 'sticky';\r\n      nav.style.top = '0';\r\n      nav.style.zIndex = '9999';\r\n      nav.style.width = '100%';\r\n    }\r\n\r\n    if (footer && footer.parentElement !== body) {\r\n      body.appendChild(footer);\r\n      footer.style.width = '100%';\r\n      footer.style.margin = '0';\r\n      footer.style.marginTop = '0';\r\n      footer.style.width = '100%';\r\n    }\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', fullWidthFix);\r\n  } else {\r\n    fullWidthFix();\r\n  }\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"normal-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"disabled","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-18","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/pages\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18"}],"version-history":[{"count":3,"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/pages\/18\/revisions"}],"predecessor-version":[{"id":25,"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=\/wp\/v2\/pages\/18\/revisions\/25"}],"wp:attachment":[{"href":"https:\/\/l\u00e5nskalkulator.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}