<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tilbygning &#8211; MitBoligProjekt.dk</title>
	<atom:link href="https://mitboligprojekt.dk/kategori/tilbygning/feed/" rel="self" type="application/rss+xml" />
	<link>https://mitboligprojekt.dk</link>
	<description>Find de rette fagfolk til dit boligprojekt</description>
	<lastBuildDate>Tue, 17 Feb 2026 10:55:09 +0000</lastBuildDate>
	<language>da-DK</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mitboligprojekt.dk/wp-content/uploads/2026/01/cropped-noun-minimal-house-3697721-CCFA74-32x32.png</url>
	<title>Tilbygning &#8211; MitBoligProjekt.dk</title>
	<link>https://mitboligprojekt.dk</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Garagetilbygning: Pris, regler og de valg, der afgør projektets økonomi</title>
		<link>https://mitboligprojekt.dk/garagetilbygning-til-hus/</link>
					<comments>https://mitboligprojekt.dk/garagetilbygning-til-hus/#respond</comments>
		
		<dc:creator><![CDATA[Tobias]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 11:21:50 +0000</pubDate>
				<category><![CDATA[Tilbygning]]></category>
		<guid isPermaLink="false">https://mitboligprojekt.dk/?p=1463</guid>

					<description><![CDATA[En garagetilbygning kan være den mest praktiske opgradering af et hus, hvis den bliver tænkt rigtigt fra start. Her er prisniveauerne, reglerne og de valg, der typisk afgør, om det bliver en let udvidelse eller en dyr omvej.]]></description>
										<content:encoded><![CDATA[<section class="bde-section-1463-100 bde-section">
  
  
	



<div class="section-container"><div class="bde-columns-1463-101 bde-columns"><div class="bde-column-1463-102 bde-column">
  
  
	



<div class="bde-div-1463-103 bde-div">
  
  
	



<div class="bde-breadcrumbs-1463-104 bde-breadcrumbs"><nav aria-label="breadcrumbs" class="rank-math-breadcrumb"><p><a href="https://mitboligprojekt.dk">Forside</a><span class="separator"> &raquo; </span><span class="last">Tilbygning</span></p></nav></div><ul class="bde-post-meta-1463-105 bde-post-meta">            <li class="ee-postmeta-date-wrap">
                                                        <span class="ee-postmeta-date"><span
                            class="ee-postmeta-before">Senest opdateret: </span>16. februar 2026</span>
                                </li>
            </ul>
</div><div class="bde-fancy-divider-1463-106 bde-fancy-divider">


<div class="bde-fancy-divider__wrapper">
  <div class="bde-fancy-divider__separator   ">
  	  </div>
</div>

</div><div class="bde-rich-text-1463-107 bde-rich-text breakdance-rich-text-styles">
<h1><span style="font-weight: bold;">Garagetilbygning:</span> <span style="font-weight: 500;">Pris, regler og de valg, der afgør projektets økonomi</span></h1>
</div><div class="bde-text-1463-108 bde-text">
<p>En garagetilbygning kan være den mest praktiske opgradering af et hus, hvis den bliver tænkt rigtigt fra start. Her er prisniveauerne, reglerne og de valg, der typisk afgør, om det bliver en let udvidelse eller en dyr omvej.</p>

</div><img decoding="async" class="bde-image2-1463-109 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-11.23.49.webp" alt="Moderniseret dansk 70’er parcelhus med integreret garagetilbygning i lyse mursten, mørk træbeklædning og antracit garageport ved grå fliseindkørsel." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-11.23.49.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-11.23.49-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-11.23.49-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-11.23.49-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1463-110 bde-rich-text breakdance-rich-text-styles">
Moderniseret dansk 70’er parcelhus med integreret garagetilbygning i lyse mursten, mørk træbeklædning og antracit garageport ved grå fliseindkørsel.
</div><div class="bde-fancy-divider-1463-111 bde-fancy-divider">


<div class="bde-fancy-divider__wrapper">
  <div class="bde-fancy-divider__separator   ">
  	  </div>
</div>

</div><div class="bde-rich-text-1463-112 bde-rich-text breakdance-rich-text-styles">
<p>Du hører det næsten, før du ser det.</p>
<p>Porten, der knirker, fordi den åbnes for sjældent. Cyklen, der vælter, når du prøver at komme forbi. Og den samme stak kasser, du flytter hver gang, du skal ned til noget i bunden.</p>
<p>For mange boligejere begynder idéen om en garagetilbygning ikke med arkitekttegninger, men med de små irritationsmomenter, der bliver ved. Is på forruden en mandag morgen. Våde jakker i bagagerummet. Værktøj, der ender i bryggerset, fordi “der lige er plads”.</p>
<p>En tilbygning til garagen kan løse det hele på én gang. Den kan også blive et projekt, der vokser, hvis du først opdager begrænsningerne, når betonen allerede er støbt.</p>
<p style="text-align: left;">Vil du have et hurtigt realitetstjek på økonomien, kan du starte med at <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="noopener">indhente 3 uforpligtende tilbud på garagetilbygning via 3byggetilbud.dk</a>. Det giver et bedre udgangspunkt, før du forelsker dig i en bestemt løsning.</p>
</div><div class="bde-globalblock-1463-113 bde-globalblock"><div class="bde-rich-text-1498-100-1498-1 bde-rich-text bde-rich-text-1498-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en garagetilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på garagetilbygninger.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1463-114 bde-rich-text breakdance-rich-text-styles">
<h2>Garagetilbygning: Hvad mangler du egentlig plads til?</h2>
<p>Det lyder som et simpelt spørgsmål, men det er det, der bestemmer hele projektet.</p>
<p>Hvis svaret er “bilen”, så stop et øjeblik og kig på alt det, der allerede bor i garagen. Cykler, barnevogn, vinterhjul, haveredskaber, dåser med maling, den gamle kommode, som “lige skulle stå der midlertidigt”. Mange bygger ud, fordi de vil have en bil indenfor, men ender med en større garage, hvor bilen stadig står udenfor.</p>
<p>Det hjælper at gøre behovet konkret. Skal du kunne åbne bildørene helt uden at ramme reoler. Skal du kunne gå rundt om bilen. Skal der være en arbejdszone, der kan stå permanent, så du ikke rydder bordet hver gang, du skal bruge det.</p>
<p>Prøv en hurtig test. Forestil dig en tirsdag i november, klokken 17. Det regner. Du har poser i hænderne, måske et barn på bagsædet, og du skal ind hurtigt. Hvor går du hen, og hvor sætter du tingene. Den øvelse afslører, om du reelt bygger til parkering, til opbevaring eller til hverdagslogistik.</p>
</div><div class="bde-rich-text-1463-115 bde-rich-text breakdance-rich-text-styles">
<h2>Garagetilbygning pris: Hvad koster det, og hvorfor svinger det?</h2>
<p>Der findes et niveau, men der findes ikke én fast pris.</p>
<p>Prisen på en garagetilbygning afhænger især af størrelse, konstruktion, materialer, tagtype, port, indvendig standard og hvor meget installation der skal ind. Og så er der grunden. Det er ofte dér, de største forskelle gemmer sig.</p>
<p>Som et realistisk udgangspunkt ligger mange projekter typisk her.</p>
<!-- Garagetilbygning pris-tabel – forbedret desktop + mobil (match til beregner-look) -->
<div class="gpb-tablecard">
  <style>
    .gpb-tablecard{
      background:#fff;
      border:1px solid #E1E1E1;
      border-radius:10px;
      overflow:hidden;
      width:100%;
    }

    .gpb-price-table{
      width:100%;
      border-collapse:collapse;
      table-layout:fixed; /* giver pænere kolonnekontrol */
      color:#10110C;
      line-height:1.55;
      font-weight:300;
    }

    .gpb-price-table th,
    .gpb-price-table td{
      padding:0.85rem 1rem;
      border-bottom:1px solid #E1E1E1;
      vertical-align:middle;
    }

    .gpb-price-table thead th{
      background:#F5F5F2;
      color:#203723;
      font-weight:500;
      font-size:0.95rem;
      text-align:left;
    }

    /* Pris-kolonne: fast bredde og konsekvent højrejustering */
    .gpb-price-table th:nth-child(2),
    .gpb-price-table td:nth-child(2){
      width:34%;
      text-align:right;
      font-weight:500;
      font-variant-numeric:tabular-nums; /* pænere tal */
    }

    .gpb-price-table tbody tr:last-child td{
      border-bottom:0;
    }

    /* Mobil: gør hver række til en “mini-card” med pris på egen linje */
    @media (max-width:640px){
      .gpb-price-table thead{ display:none; }

      .gpb-price-table tbody tr{
        display:block;
        padding:0.85rem 1rem;
        border-bottom:1px solid #E1E1E1;
      }

      .gpb-price-table tbody tr:last-child{
        border-bottom:0;
      }

      .gpb-price-table td{
        display:block;
        padding:0;
        border:0;
      }

      .gpb-price-table td:nth-child(1){
        font-weight:500;
        color:#10110C;
        margin:0 0 0.35rem 0;
      }

      .gpb-price-table td:nth-child(2){
        text-align:left;
        font-weight:500;
        color:#203723;
      }
    }
  </style>

  <table class="gpb-price-table" aria-label="Typiske prisintervaller for garagetilbygning">
    <thead>
      <tr>
        <th>Type af garage</th>
        <th>Pris (ca.)</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Enkel garage (20–30 m²)</td>
        <td>150.000 – 250.000 kr.</td>
      </tr>
      <tr>
        <td>Dobbeltgarage (40–50 m²)</td>
        <td>300.000 – 500.000 kr.</td>
      </tr>
      <tr>
        <td>Garage med isolering og opvarmning</td>
        <td>400.000 – 700.000 kr.</td>
      </tr>
    </tbody>
  </table>
</div>

<p>Det spænd handler sjældent om, at nogen “tager sig betalt”. Det handler om standard.</p>
<p>En uisoleret garage med standardport kan være en enkel løsning. Men hvis garagen skal matche huset i murværk, have vinduer, en ekstra dør, pæn indvendig finish og el nok til både værktøj og opladning, så flytter regnestykket sig. Tilvalgene virker små hver for sig. Samlet kan de gøre en stor forskel.</p>
</div><div class="bde-rich-text-1463-120 bde-rich-text breakdance-rich-text-styles">
<!-- ============================================================
     GARAGETILBYGNING – PRISBEREGNER v5.2
     Klar til Breakdance Builder › Rich Text Element

     ✓ Ingen custom fonts – bruger sidens egne (inherit)
     ✓ Font-weight: 300 normal · 400 semi-fed · 500 fed
     ✓ Ingen Google Fonts links
     ✓ Ingen html/head/body/DOCTYPE
     ✓ Alle styles scopet til .gtb
     ✓ CSS-variabler scopet til .gtb (ikke :root)
     ✓ Ren gradient – ingen grid/firkant-mønstre
     ✓ JS: DOMContentLoaded guard + straks-fallback
============================================================ -->
<style>
/* ============================================================
   TOKENS – scopet til .gtb
============================================================ */
.gtb {
  --c-forest:      #203723;
  --c-forest-mid:  #2D4E31;
  --c-highlight:   #E9F0EA;
  --c-text:        #10110C;
  --c-muted:       #5A5A52;
  --c-subtle:      #8A8A82;
  --c-card:        #FFFFFF;
  --c-surface:     #F5F5F2;
  --c-border:      #E1E1DC;
  --c-danger:      #B00020;
  --c-note-bg:     #FFFBEB;
  --c-note-border: #E5D07A;
  --c-note-text:   #5C4A00;
  --r:             8px;
  --r-sm:          6px;
  --r-full:        999px;
  --sh-card:       0 1px 3px rgba(16,17,12,.05), 0 2px 12px rgba(16,17,12,.04);
  --sh-result:     0 6px 32px rgba(32,55,35,.18), 0 2px 8px rgba(16,17,12,.1);
  --fhover:        rgba(32,55,35,.08);
  --ffocus:        rgba(32,55,35,.12);
  --ease:          cubic-bezier(.22,1,.36,1);
  --spring:        cubic-bezier(.34,1.56,.64,1);
  --tf:            .14s;
  --tm:            .22s;
  --ts:            .38s;

  /* Wrapper */
  box-sizing:    border-box;
  width:         100%;
  max-width:     800px;
  margin:        0 auto;
  background:    var(--c-card);
  border-radius: 12px;
  border:        1px solid var(--c-border);
  box-shadow:    var(--sh-card);
  overflow:      hidden;

  /* Arver sidens font fra Breakdance */
  font-family:   inherit;
  font-size:     15px;
  font-weight:   300;        /* 300 = normal brødtekst */
  line-height:   1.55;
  color:         var(--c-text);
  -webkit-font-smoothing: antialiased;
}

.gtb *, .gtb *::before, .gtb *::after {
  box-sizing: border-box;
}

/* ── HEADER ─────────────────────────────────────── */
.gtb-header {
  background: linear-gradient(140deg, #2D5032 0%, #1E3520 55%, #111A13 100%);
  padding: 1.85rem 2rem 1.55rem;
  position: relative;
  overflow: hidden;
}

/* Blød lysrefleks øverst */
.gtb-header::before {
  content: '';
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  background: radial-gradient(ellipse at 15% 0%, rgba(255,255,255,.09) 0%, transparent 55%);
  pointer-events: none;
  z-index: 0;
}

/* Blød mørkning mod bunden */
.gtb-header::after {
  content: '';
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  background: linear-gradient(to bottom, transparent 45%, rgba(0,0,0,.2) 100%);
  pointer-events: none;
  z-index: 0;
}

.gtb-header-inner {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}

.gtb-badge {
  background:    rgba(255,255,255,.12);
  border:        1px solid rgba(255,255,255,.18);
  border-radius: var(--r-full);
  color:         rgba(255,255,255,.7);
  font-family:   inherit;
  font-size:     .69rem;
  font-weight:   400;
  letter-spacing:.09em;
  text-transform:uppercase;
  padding:       .28rem .75rem;
  flex-shrink:   0;
  white-space:   nowrap;
  margin:        0;
}

.gtb-title {
  font-family: inherit;
  font-size:   1.45rem;
  font-weight: 500;            /* 500 = fed */
  color:       #fff;
  line-height: 1.25;
  margin:      0 0 .3rem;
  padding:     0;
}

.gtb-subtitle {
  font-family: inherit;
  font-size:   .875rem;
  font-weight: 300;            /* 300 = normal */
  color:       rgba(255,255,255,.6);
  line-height: 1.55;
  margin:      0;
  padding:     0;
}

/* Momsvalg */
.gtb-vat-row {
  position:    relative;
  z-index:     1;
  display:     flex;
  align-items: center;
  gap:         .75rem;
  margin-top:  1.15rem;
  padding-top: 1rem;
  border-top:  1px solid rgba(255,255,255,.1);
}

.gtb-vat-label {
  font-family: inherit;
  font-size:   .82rem;
  font-weight: 300;
  color:       rgba(255,255,255,.55);
  margin:      0;
}

.gtb-toggle {
  display:       flex;
  background:    rgba(255,255,255,.1);
  border-radius: var(--r-full);
  padding:       3px;
  gap:           2px;
}

.gtb-toggle-btn {
  border:        none;
  background:    transparent;
  color:         rgba(255,255,255,.55);
  font-family:   inherit;
  font-size:     .8rem;
  font-weight:   400;
  padding:       .3rem .9rem;
  border-radius: var(--r-full);
  cursor:        pointer;
  white-space:   nowrap;
  min-height:    30px;
  display:       flex;
  align-items:   center;
  line-height:   1;
  transition:    background var(--tf) var(--ease), color var(--tf) var(--ease);
}

.gtb-toggle-btn.active {
  background: rgba(255,255,255,.95);
  color:      var(--c-forest);
  font-weight:400;
}

/* ── BODY ───────────────────────────────────────── */
.gtb-body {
  padding: 1.85rem 2rem;
}

/* ── STEP SEKTIONER ─────────────────────────────── */
.gtb-section {
  margin-bottom: 1.65rem;
}

.gtb-step-head {
  display:     flex;
  align-items: center;
  gap:         .6rem;
  margin-bottom: .85rem;
}

.gtb-step-num {
  width:       22px;
  height:      22px;
  min-width:   22px;
  border-radius: 50%;
  background:  var(--c-forest);
  color:       #fff;
  font-family: inherit;
  font-size:   .68rem;
  font-weight: 500;
  display:     flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

.gtb-step-label {
  font-family: inherit;
  font-size:   .9rem;
  font-weight: 400;            /* 400 = semi-fed */
  color:       var(--c-text);
  margin:      0;
  padding:     0;
}

/* ── DIVIDER ────────────────────────────────────── */
.gtb-divider {
  border:     none;
  border-top: 1px solid var(--c-border);
  margin:     0 0 1.65rem;
  height:     0;
}

/* ── AREAL LAYOUT ───────────────────────────────── */
.gtb-area-row {
  display:               grid;
  grid-template-columns: 148px 1fr;
  gap:                   1rem;
  align-items:           start;
}

.gtb-field {
  display: grid;
  gap:     .32rem;
}

.gtb-label {
  font-family:    inherit;
  font-size:      .75rem;
  font-weight:    400;         /* 400 = semi-fed */
  color:          var(--c-muted);
  text-transform: uppercase;
  letter-spacing: .07em;
  display:        block;
  margin:         0;
  padding:        0;
}

/* ── INPUT ──────────────────────────────────────── */
.gtb-input-wrap {
  display:    flex;
  border:     1.5px solid var(--c-border);
  border-radius: var(--r);
  overflow:   hidden;
  background: var(--c-surface);
  transition:
    border-color var(--tf) var(--ease),
    background   var(--tf) var(--ease),
    box-shadow   var(--tf) var(--ease);
}

.gtb-input-wrap:focus-within {
  border-color: var(--c-forest);
  background:   var(--c-card);
  box-shadow:   0 0 0 3px var(--ffocus);
}

.gtb-input-wrap.is-invalid {
  border-color: var(--c-danger);
  box-shadow:   0 0 0 3px rgba(176,0,32,.08);
}

.gtb-input {
  flex:       1;
  min-width:  0;
  border:     none;
  outline:    none;
  background: transparent;
  padding:    .6rem .75rem;
  font-family:inherit;
  font-size:  1.3rem;
  font-weight:500;             /* 500 = fed – tal skal veje */
  color:      var(--c-text);
  line-height:1;
  margin:     0;
}

.gtb-input::-webkit-outer-spin-button,
.gtb-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.gtb-input[type=number]               { -moz-appearance: textfield; }

.gtb-input-unit {
  background:    var(--c-surface);
  border-left:   1.5px solid var(--c-border);
  padding:       0 .75rem;
  font-family:   inherit;
  font-size:     .8rem;
  font-weight:   400;
  color:         var(--c-subtle);
  display:       flex;
  align-items:   center;
  white-space:   nowrap;
}

.gtb-help {
  font-family: inherit;
  font-size:   .78rem;
  font-weight: 300;
  color:       var(--c-subtle);
  min-height:  1.1rem;
  line-height: 1.45;
  margin:      0;
  padding:     0;
  transition:  color var(--tm) var(--ease);
}

/* ── PRESET-KNAPPER ─────────────────────────────── */
.gtb-presets {
  display:     flex;
  flex-wrap:   wrap;
  gap:         .38rem;
  padding-top: 1.7rem;
}

.gtb-preset {
  height:        33px;
  padding:       0 .85rem;
  border:        1.5px solid var(--c-border);
  border-radius: var(--r-full);
  background:    var(--c-card);
  color:         var(--c-muted);
  font-family:   inherit;
  font-size:     .8rem;
  font-weight:   400;
  cursor:        pointer;
  white-space:   nowrap;
  line-height:   1;
  transition:
    border-color var(--tf) var(--ease),
    background   var(--tf) var(--ease),
    color        var(--tf) var(--ease),
    transform    var(--tf) var(--spring);
}

.gtb-preset:hover {
  border-color: var(--c-forest-mid);
  color:        var(--c-forest);
  background:   var(--c-highlight);
}

.gtb-preset.is-active {
  border-color: var(--c-forest);
  background:   var(--c-forest);
  color:        #fff;
  font-weight:  400;
}

.gtb-preset:active { transform: scale(.94); }

/* ── OPTION-CARDS ───────────────────────────────── */
.gtb-opts { display: grid; gap: .42rem; }
.gtb-opts--3 { grid-template-columns: repeat(3, 1fr); }
.gtb-opts--2 { grid-template-columns: repeat(2, 1fr); }

.gtb-opt {
  background:    var(--c-surface);
  border:        1.5px solid var(--c-border);
  border-radius: var(--r);
  padding:       .85rem .95rem;
  cursor:        pointer;
  text-align:    left;
  width:         100%;
  position:      relative;
  transition:
    border-color var(--tf) var(--ease),
    background   var(--tf) var(--ease),
    box-shadow   var(--tm) var(--ease),
    transform    var(--tf) var(--spring);
}

/* Radio-dot */
.gtb-opt::after {
  content:       '';
  position:      absolute;
  top:           .85rem;
  right:         .85rem;
  width:         13px;
  height:        13px;
  border-radius: 50%;
  border:        1.5px solid var(--c-border);
  background:    var(--c-card);
  transition:
    border-color var(--tf) var(--ease),
    background   var(--tf) var(--ease),
    box-shadow   var(--tf) var(--ease);
}

.gtb-opt:hover                { border-color: var(--c-forest-mid); background: var(--c-highlight); }
.gtb-opt:hover::after         { border-color: var(--c-forest-mid); }
.gtb-opt:active               { transform: scale(.98); }

.gtb-opt.is-selected {
  border-color: var(--c-forest);
  background:   var(--c-highlight);
  box-shadow:   0 0 0 3px var(--fhover);
}

.gtb-opt.is-selected::after {
  border-color: var(--c-forest);
  background:   var(--c-forest);
  box-shadow:   inset 0 0 0 2.5px #fff;
}

.gtb-opt-name {
  display:     block;
  font-family: inherit;
  font-size:   .9rem;
  font-weight: 400;            /* 400 = semi-fed */
  color:       var(--c-text);
  margin:      0 0 .18rem;
  padding:     0 1.25rem 0 0;
  line-height: 1.3;
  transition:  color var(--tf) var(--ease);
}

.gtb-opt.is-selected .gtb-opt-name { color: var(--c-forest); font-weight: 500; }

.gtb-opt-desc {
  display:     block;
  font-family: inherit;
  font-size:   .775rem;
  font-weight: 300;            /* 300 = normal */
  color:       var(--c-subtle);
  line-height: 1.4;
  margin:      0;
  padding:     0;
}

.gtb-opt.is-selected .gtb-opt-desc { color: var(--c-muted); }

/* ── GRID 2 ─────────────────────────────────────── */
.gtb-grid-2 {
  display:               grid;
  grid-template-columns: 1fr 1fr;
  gap:                   1.15rem;
  align-items:           start;
}

/* ── SELECT ─────────────────────────────────────── */
.gtb-select {
  width:              100%;
  border:             1.5px solid var(--c-border);
  border-radius:      var(--r);
  padding:            .62rem 2.4rem .62rem .82rem;
  background:         var(--c-surface);
  background-image:   url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%23203723' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");
  background-repeat:  no-repeat;
  background-position:right .65rem center;
  background-size:    18px;
  -webkit-appearance: none;
  appearance:         none;
  font-family:        inherit;
  font-size:          .875rem;
  font-weight:        300;     /* 300 = normal */
  color:              var(--c-text);
  outline:            none;
  min-height:         42px;
  cursor:             pointer;
  transition:
    border-color    var(--tf) var(--ease),
    background-color var(--tf) var(--ease),
    box-shadow      var(--tf) var(--ease);
}

.gtb-select:focus {
  border-color:     var(--c-forest);
  background-color: var(--c-card);
  box-shadow:       0 0 0 3px var(--ffocus);
}

/* ── RESULTAT-BOX ───────────────────────────────── */
.gtb-result {
  background:    linear-gradient(160deg, #2D5032 0%, #1E3520 50%, #111A13 100%);
  border-radius: var(--r);
  overflow:      hidden;
  margin-top:    .5rem;
  box-shadow:    var(--sh-result);
}

.gtb-result-hero {
  padding:         1.65rem 1.85rem 1.4rem;
  display:         flex;
  align-items:     flex-start;
  justify-content: space-between;
  gap:             1.25rem;
  flex-wrap:       wrap;
  border-bottom:   1px solid rgba(255,255,255,.1);
}

.gtb-result-eyebrow {
  font-family:    inherit;
  font-size:      .7rem;
  font-weight:    400;
  letter-spacing: .1em;
  text-transform: uppercase;
  color:          rgba(255,255,255,.6);   /* ↑ mere synlig */
  margin:         0 0 .4rem;
  padding:        0;
}

.gtb-result-amount {
  font-family:    inherit;
  font-size:      2.2rem;
  font-weight:    500;         /* 500 = fed */
  color:          #fff;
  line-height:    1.1;
  letter-spacing: -.02em;
  margin:         0 0 .35rem;
  padding:        0;
}

.gtb-result-amount.is-empty {
  font-size:   1rem;
  font-weight: 300;
  color:       rgba(255,255,255,.4);
  letter-spacing: 0;
}

.gtb-result-meta {
  font-family: inherit;
  font-size:   .82rem;
  font-weight: 300;
  color:       rgba(255,255,255,.65);   /* ↑ mere synlig */
  line-height: 1.6;
  margin:      0;
  padding:     0;
}

/* CTA-knap inde i result */
.gtb-result-cta {
  display:       inline-flex;
  align-items:   center;
  background:    rgba(255,255,255,.97);
  color:         var(--c-forest) !important;
  text-decoration: none !important;
  font-family:   inherit;
  font-size:     .875rem;
  font-weight:   500;          /* 500 = fed */
  padding:       .68rem 1.2rem;
  border-radius: var(--r-full);
  white-space:   nowrap;
  flex-shrink:   0;
  align-self:    center;
  box-shadow:    0 2px 12px rgba(0,0,0,.16);
  transition:
    background var(--tf) var(--ease),
    transform  var(--tf) var(--spring),
    box-shadow var(--tm) var(--ease);
}

.gtb-result-cta:hover {
  background: #fff;
  transform:  translateY(-2px);
  box-shadow: 0 6px 22px rgba(0,0,0,.22);
}

.gtb-result-cta:active { transform: scale(.97); }

.gtb-cta-arrow {
  display:     inline-block;
  margin-left: .4rem;
  transition:  transform var(--tf) var(--spring);
}

.gtb-result-cta:hover .gtb-cta-arrow { transform: translateX(3px); }

/* ── BREAKDOWN ──────────────────────────────────── */
.gtb-breakdown {
  padding: 1.25rem 1.85rem 1.55rem;
}

.gtb-bd-label {
  font-family:    inherit;
  font-size:      .68rem;
  font-weight:    400;
  letter-spacing: .1em;
  text-transform: uppercase;
  color:          rgba(255,255,255,.5);  /* ↑ mere synlig */
  margin:         0 0 .7rem;
  padding:        0;
}

.gtb-bd-lines { display: grid; }

.gtb-bd-line {
  display:         flex;
  justify-content: space-between;
  align-items:     center;
  gap:             1rem;
  padding:         .48rem 0;
  border-bottom:   1px solid rgba(255,255,255,.08);
  transition:      opacity var(--tf) var(--ease);
}

.gtb-bd-line:last-child { border-bottom: none; }

.gtb-bd-line .bd-name {
  font-family: inherit;
  font-size:   .855rem;
  font-weight: 300;            /* 300 = normal */
  color:       rgba(255,255,255,.72);   /* ↑ var .46 – nu tydelig */
  line-height: 1.4;
  margin:      0;
}

.gtb-bd-line .bd-val {
  font-family:        inherit;
  font-size:          .855rem;
  font-weight:        400;     /* 400 = semi-fed */
  color:              rgba(255,255,255,.95);  /* ↑ næsten hvid */
  text-align:         right;
  flex-shrink:        0;
  font-variant-numeric: tabular-nums;
  white-space:        nowrap;
  margin:             0;
}

.gtb-bd-line.is-zero { opacity: .3; }

.gtb-bd-line.is-total {
  margin-top:  .45rem;
  padding-top: .65rem;
  border-top:  1px solid rgba(255,255,255,.2);
  border-bottom: none;
}

.gtb-bd-line.is-total .bd-name {
  font-weight: 500;            /* 500 = fed */
  color:       #fff;
  font-size:   .9rem;
}

.gtb-bd-line.is-total .bd-val {
  font-weight: 500;
  color:       #fff;
  font-size:   .9rem;
}

/* ── HANDLINGER ─────────────────────────────────── */
.gtb-actions {
  display:    flex;
  gap:        .48rem;
  flex-wrap:  wrap;
  margin-top: .85rem;
}

.gtb-btn {
  height:        36px;
  padding:       0 1.05rem;
  border:        1.5px solid var(--c-border);
  border-radius: var(--r-full);
  background:    var(--c-card);
  color:         var(--c-muted);
  font-family:   inherit;
  font-size:     .82rem;
  font-weight:   400;
  cursor:        pointer;
  display:       inline-flex;
  align-items:   center;
  gap:           .4rem;
  white-space:   nowrap;
  line-height:   1;
  transition:
    border-color var(--tf) var(--ease),
    background   var(--tf) var(--ease),
    color        var(--tf) var(--ease),
    transform    var(--tf) var(--spring);
}

.gtb-btn:hover {
  border-color: var(--c-forest);
  color:        var(--c-forest);
  background:   var(--c-highlight);
}

.gtb-btn:active { transform: scale(.96); }

/* ── TOAST ──────────────────────────────────────── */
.gtb-toast {
  display:       flex;
  align-items:   center;
  gap:           .32rem;
  background:    #10110C;
  color:         #fff;
  border-radius: var(--r-full);
  padding:       .4rem .9rem;
  font-family:   inherit;
  font-size:     .8rem;
  font-weight:   400;
  margin-top:    .55rem;
  width:         fit-content;
  opacity:       0;
  transform:     translateY(4px);
  pointer-events:none;
  transition:
    opacity   var(--tm) var(--ease),
    transform var(--tm) var(--ease);
}

.gtb-toast.visible {
  opacity:       1;
  transform:     translateY(0);
  pointer-events:auto;
}

/* ── BEMÆRK ─────────────────────────────────────── */
.gtb-note {
  background:    var(--c-note-bg);
  border:        1px solid var(--c-note-border);
  border-radius: var(--r-sm);
  padding:       .72rem 1rem;
  font-family:   inherit;
  font-size:     .8rem;
  font-weight:   300;          /* 300 = normal */
  color:         var(--c-note-text);
  line-height:   1.55;
  margin:        .9rem 0 0;
}

.gtb-note strong { font-weight: 500; }

/* ── CTA STRIP ──────────────────────────────────── */
.gtb-cta {
  background:    var(--c-surface);
  border:        1.5px solid var(--c-border);
  border-radius: var(--r);
  padding:       1.1rem 1.25rem;
  margin:        .9rem 0 0;
  display:       flex;
  align-items:   center;
  gap:           1rem;
  flex-wrap:     wrap;
}

.gtb-cta-text {
  flex:        1;
  min-width:   200px;
  font-family: inherit;
  font-size:   .875rem;
  font-weight: 300;
  color:       var(--c-muted);
  line-height: 1.55;
  margin:      0;
}

.gtb-cta-text strong {
  font-weight: 500;
  color:       var(--c-text);
}

.gtb-cta-link {
  display:       inline-flex;
  align-items:   center;
  background:    var(--c-forest);
  color:         #fff !important;
  text-decoration: none !important;
  font-family:   inherit;
  font-size:     .9rem;
  font-weight:   500;
  padding:       .68rem 1.25rem;
  border-radius: var(--r-full);
  white-space:   nowrap;
  flex-shrink:   0;
  transition:
    filter    var(--tf) var(--ease),
    transform var(--tf) var(--spring),
    box-shadow var(--tm) var(--ease);
}

.gtb-cta-link:hover {
  filter:    brightness(1.1);
  transform: translateY(-1px);
  box-shadow:0 4px 14px rgba(32,55,35,.22);
}

.gtb-cta-link:active { transform: scale(.97); }

.gtb-cta-link .gtb-cta-arrow {
  display:     inline-block;
  margin-left: .4rem;
  transition:  transform var(--tf) var(--spring);
}

.gtb-cta-link:hover .gtb-cta-arrow { transform: translateX(3px); }

/* Bundluft */
.gtb-body-end { height: 1.5rem; }

/* ── LOAD-ANIMATIONER ───────────────────────────── */
@keyframes gtbFadeUp {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}

.gtb-header { animation: gtbFadeUp var(--ts) var(--ease) both; }

.gtb-body > * { animation: gtbFadeUp var(--ts) var(--ease) both; }

.gtb-section:nth-child(1) { animation-delay: .06s; }
.gtb-divider:nth-child(2) { animation-delay: .09s; }
.gtb-section:nth-child(3) { animation-delay: .11s; }
.gtb-divider:nth-child(4) { animation-delay: .13s; }
.gtb-section:nth-child(5) { animation-delay: .15s; }
.gtb-divider:nth-child(6) { animation-delay: .17s; }
.gtb-section:nth-child(7) { animation-delay: .19s; }
.gtb-result               { animation-delay: .23s; }
.gtb-actions              { animation-delay: .25s; }
.gtb-toast                { animation: none; }
.gtb-note                 { animation-delay: .27s; }
.gtb-cta                  { animation-delay: .29s; }

/* ── TABLET 680px ───────────────────────────────── */
@media (max-width: 680px) {
  .gtb-grid-2  { grid-template-columns: 1fr; gap: 1rem; }
  .gtb-opts--3 { grid-template-columns: 1fr; }
}

/* ── MOBIL 580px ────────────────────────────────── */
@media (max-width: 580px) {
  .gtb           { border-radius: var(--r); }
  .gtb-header    { padding: 1.4rem 1.25rem 1.15rem; }
  .gtb-title     { font-size: 1.2rem; }
  .gtb-body      { padding: 1.4rem 1.25rem; }

  .gtb-area-row  { grid-template-columns: 115px 1fr; gap: .75rem; }
  .gtb-presets   { padding-top: 1.6rem; gap: .3rem; }
  .gtb-preset    { height: 31px; font-size: .77rem; padding: 0 .72rem; }

  .gtb-opts--2   { grid-template-columns: 1fr 1fr; }
  .gtb-opt-desc  { display: none; }
  .gtb-opt       { padding: .75rem .85rem; }
  .gtb-opt::after { top: .75rem; right: .75rem; }

  .gtb-result-hero   { padding: 1.3rem 1.25rem 1.15rem; flex-direction: column; gap: .85rem; }
  .gtb-result-amount { font-size: 1.55rem; }
  .gtb-result-cta    { width: 100%; justify-content: center; }
  .gtb-breakdown     { padding: 1rem 1.25rem 1.3rem; }

  .gtb-actions .gtb-btn { flex: 1; justify-content: center; }
  .gtb-cta-link  { width: 100%; justify-content: center; }
  .gtb-cta-text  { min-width: unset; }
}

/* ── XS 420px ───────────────────────────────────── */
@media (max-width: 420px) {
  .gtb-area-row  { grid-template-columns: 1fr; }
  .gtb-presets   { padding-top: 0; }
  .gtb-opts--2   { grid-template-columns: 1fr; }
}
</style>

<!-- ============================================================
     HTML
============================================================ -->
<div class="gtb" role="region" data-gtb="v52" aria-label="Prisberegner til garagetilbygning">

  <!-- HEADER -->
  <header class="gtb-header">
    <div class="gtb-header-inner">
      <div>
        <h2 class="gtb-title">Prisberegner: Garagetilbygning</h2>
        <p class="gtb-subtitle">Vejledende overslag – brug det som startbudget, ikke som endelig pris</p>
      </div>
      <span class="gtb-badge" aria-hidden="true">Vejledende</span>
    </div>
    <div class="gtb-vat-row">
      <span class="gtb-vat-label" id="gtb-vat-lbl">Vis priser</span>
      <div class="gtb-toggle" role="group" aria-labelledby="gtb-vat-lbl">
        <button class="gtb-toggle-btn active" type="button" data-vat-btn="inc">Inkl. moms</button>
        <button class="gtb-toggle-btn"        type="button" data-vat-btn="ex">Ekskl. moms</button>
      </div>
    </div>
  </header>

  <!-- BODY -->
  <div class="gtb-body">

    <!-- 1: STØRRELSE -->
    <div class="gtb-section">
      <div class="gtb-step-head">
        <span class="gtb-step-num" aria-hidden="true">1</span>
        <span class="gtb-step-label">Hvor stor skal garagen være?</span>
      </div>
      <div class="gtb-area-row">
        <div class="gtb-field">
          <label class="gtb-label" for="gtb-area-inp">Areal</label>
          <div class="gtb-input-wrap" data-area-wrap>
            <input class="gtb-input" type="number" id="gtb-area-inp"
              min="10" max="80" step="1" value="30"
              inputmode="numeric" data-area
              aria-describedby="gtb-area-help" />
            <span class="gtb-input-unit" aria-hidden="true">m²</span>
          </div>
          <p class="gtb-help" id="gtb-area-help" data-area-help>Typisk 20–50 m²</p>
        </div>
        <div class="gtb-presets" role="group" aria-label="Hurtigvalg til størrelse">
          <button class="gtb-preset"           type="button" data-preset="20">20 m²</button>
          <button class="gtb-preset is-active" type="button" data-preset="30">30 m²</button>
          <button class="gtb-preset"           type="button" data-preset="40">40 m²</button>
          <button class="gtb-preset"           type="button" data-preset="50">50 m²</button>
          <button class="gtb-preset"           type="button" data-preset="60">60 m²</button>
        </div>
      </div>
    </div>

    <hr class="gtb-divider">

    <!-- 2: GARAGETYPE -->
    <div class="gtb-section">
      <div class="gtb-step-head">
        <span class="gtb-step-num" aria-hidden="true">2</span>
        <span class="gtb-step-label">Hvilken type garage?</span>
      </div>
      <div class="gtb-opts gtb-opts--3" data-group="solution" role="radiogroup" aria-label="Garagetype">
        <button class="gtb-opt is-selected" type="button" data-val="wood">
          <span class="gtb-opt-name">Trægarage</span>
          <span class="gtb-opt-desc">Hurtigst at opføre og lavest pris pr. m²</span>
        </button>
        <button class="gtb-opt" type="button" data-val="masonry">
          <span class="gtb-opt-name">Muret garage</span>
          <span class="gtb-opt-desc">Matcher typisk husets udtryk – dyrere og tungere</span>
        </button>
        <button class="gtb-opt" type="button" data-val="insulated">
          <span class="gtb-opt-name">Isoleret / opvarmet</span>
          <span class="gtb-opt-desc">Til værksted, kontor eller bilpleje</span>
        </button>
      </div>
    </div>

    <hr class="gtb-divider">

    <!-- 3: PLACERING + PORT -->
    <div class="gtb-section">
      <div class="gtb-step-head">
        <span class="gtb-step-num" aria-hidden="true">3</span>
        <span class="gtb-step-label">Placering og port</span>
      </div>
      <div class="gtb-grid-2">

        <div class="gtb-field">
          <label class="gtb-label">Placering</label>
          <div class="gtb-opts gtb-opts--2" data-group="placement" role="radiogroup" aria-label="Placering">
            <button class="gtb-opt is-selected" type="button" data-val="free">
              <span class="gtb-opt-name">Fritstående</span>
              <span class="gtb-opt-desc">Typisk enklest og billigst</span>
            </button>
            <button class="gtb-opt" type="button" data-val="attached">
              <span class="gtb-opt-name">Tilbygning</span>
              <span class="gtb-opt-desc">Integreret – kræver tilpasning</span>
            </button>
          </div>
          <p class="gtb-help" data-help-placement>Fritstående er som regel den enklere løsning</p>
        </div>

        <div class="gtb-field">
          <label class="gtb-label">Porttype</label>
          <div class="gtb-opts gtb-opts--2" data-group="door" role="radiogroup" aria-label="Porttype">
            <button class="gtb-opt is-selected" type="button" data-val="manual">
              <span class="gtb-opt-name">Manuel port</span>
              <span class="gtb-opt-desc">Lavest pris</span>
            </button>
            <button class="gtb-opt" type="button" data-val="electric">
              <span class="gtb-opt-name">Elektrisk port</span>
              <span class="gtb-opt-desc">Ca. 20–25.000 kr. inkl. montage</span>
            </button>
          </div>
          <p class="gtb-help" data-help-door>Portpris varierer med mål og kvalitet</p>
        </div>

      </div>
    </div>

    <hr class="gtb-divider">

    <!-- 4: EL, ADGANG, TILVALG -->
    <div class="gtb-section">
      <div class="gtb-step-head">
        <span class="gtb-step-num" aria-hidden="true">4</span>
        <span class="gtb-step-label">El, adgang og tilvalg</span>
      </div>
      <div class="gtb-grid-2">

        <div class="gtb-field">
          <label class="gtb-label" for="gtb-electrics">El og installationer</label>
          <select class="gtb-select" id="gtb-electrics" data-electrics>
            <option value="basic">Basis – lys og få stik</option>
            <option value="standard">Standard – kraftigere tavle</option>
            <option value="ev">Klargøring til elbiloplader</option>
          </select>
          <p class="gtb-help" data-help-elec>Dimensionér rigtigt fra start – billigere end at opgradere</p>
        </div>

        <div class="gtb-field">
          <label class="gtb-label" for="gtb-access">Adgang til byggepladsen</label>
          <select class="gtb-select" id="gtb-access" data-access>
            <option value="easy">Let – god adgang</option>
            <option value="normal" selected>Normal</option>
            <option value="hard">Svær – smal adgang eller meget affald</option>
          </select>
          <p class="gtb-help" data-help-access>Svær adgang kan give mærkbare tillæg</p>
        </div>

        <div class="gtb-field">
          <label class="gtb-label" for="gtb-arealevel">Lokalt prisniveau</label>
          <select class="gtb-select" id="gtb-arealevel" data-arealevel>
            <option value="low">Lavt</option>
            <option value="normal" selected>Normalt</option>
            <option value="high">Højt (fx Kbh. / Frederiksberg)</option>
          </select>
          <p class="gtb-help">Overordnet justering for geografiske prisforskelle</p>
        </div>

        <div class="gtb-field">
          <label class="gtb-label" for="gtb-extras">Tilvalg</label>
          <select class="gtb-select" id="gtb-extras" data-extras>
            <option value="none">Ingen tilvalg</option>
            <option value="door">Sidedør</option>
            <option value="door_windows">Sidedør og to vinduer</option>
          </select>
          <p class="gtb-help">Sidedør og vinduer øger den daglige brugsværdi markant</p>
        </div>

      </div>
    </div>

    <!-- RESULTAT-BOX -->
    <div class="gtb-result" aria-live="polite" aria-atomic="true">

      <div class="gtb-result-hero">
        <div>
          <p class="gtb-result-eyebrow">Dit overslag</p>
          <p class="gtb-result-amount is-empty" data-out-total>Udfyld felterne herover</p>
          <p class="gtb-result-meta" data-out-range>&nbsp;</p>
          <p class="gtb-result-meta" data-out-m2>&nbsp;</p>
        </div>
        <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" class="gtb-result-cta" rel="nofollow sponsored noopener" target="_blank">
          Indhent 3 gratis tilbud
          <span class="gtb-cta-arrow" aria-hidden="true">→</span>
        </a>
      </div>

      <div class="gtb-breakdown">
        <p class="gtb-bd-label">Prisfordeling – poster (middeltal)</p>
        <div class="gtb-bd-lines">
          <div class="gtb-bd-line">
            <span class="bd-name">Byggeri inkl. fundament</span>
            <span class="bd-val" data-bd-build>—</span>
          </div>
          <div class="gtb-bd-line" data-row-attach style="display:none">
            <span class="bd-name">Tilpasning og tilslutning til hus</span>
            <span class="bd-val" data-bd-attach>—</span>
          </div>
          <div class="gtb-bd-line">
            <span class="bd-name">Port inkl. montering</span>
            <span class="bd-val" data-bd-door>—</span>
          </div>
          <div class="gtb-bd-line">
            <span class="bd-name">El og installationer</span>
            <span class="bd-val" data-bd-elec>—</span>
          </div>
          <div class="gtb-bd-line">
            <span class="bd-name">Logistik og bortskaffelse</span>
            <span class="bd-val" data-bd-log>—</span>
          </div>
          <div class="gtb-bd-line is-zero" data-row-extras>
            <span class="bd-name">Tilvalg</span>
            <span class="bd-val" data-bd-extras>—</span>
          </div>
          <div class="gtb-bd-line is-total">
            <span class="bd-name">Samlet overslag</span>
            <span class="bd-val" data-bd-total>—</span>
          </div>
        </div>
      </div>

    </div><!-- /result -->

    <!-- HANDLINGER -->
    <div class="gtb-actions">
      <button class="gtb-btn" type="button" data-copy-btn>
        <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
        Kopiér tilbudsbeskrivelse
      </button>
      <button class="gtb-btn" type="button" data-reset-btn>
        <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/></svg>
        Nulstil
      </button>
    </div>

    <div class="gtb-toast" role="status" aria-live="polite" data-toast></div>

    <!-- BEMÆRK -->
    <div class="gtb-note">
      <strong>Bemærk:</strong> Overslaget er vejledende og dækker ikke uforudsete jordbundsforhold, nedrivning, afvandingsproblemer eller særlige kommunale krav. Indhent altid konkrete tilbud, inden du beslutter dig.
    </div>

    <!-- CTA -->
    <div class="gtb-cta">
      <div class="gtb-cta-text">
        <strong>Vil du have en præcis pris?</strong><br>
        Indhent 3 uforpligtende tilbud fra lokale håndværkere og sammenlign på de samme forudsætninger.
      </div>
      <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" class="gtb-cta-link" rel="nofollow sponsored noopener" target="_blank">
        Indhent 3 gratis tilbud
        <span class="gtb-cta-arrow" aria-hidden="true">→</span>
      </a>
    </div>

    <div class="gtb-body-end"></div>
  </div><!-- /body -->
</div><!-- /gtb -->

<script>
/* ============================================================
   GARAGETILBYGNING PRISBEREGNER v5.2
   – IIFE, ingen globale lækager
   – Initialiserer straks ELLER via DOMContentLoaded
   – localStorage med try/catch
   – requestAnimationFrame batching
============================================================ */
(function () {
  "use strict";

  var SK = "gtb_v52";

  var nfCur = new Intl.NumberFormat("da-DK", {
    style: "currency", currency: "DKK", maximumFractionDigits: 0
  });
  var nfInt = new Intl.NumberFormat("da-DK", { maximumFractionDigits: 0 });

  function fmt(n) { return nfCur.format(Math.round(n)); }
  function clamp(n, lo, hi) { return Math.min(hi, Math.max(lo, n)); }
  function avg(a, b) { return (a + b) / 2; }

  function enforceMinRange(lo, hi, anchor) {
    var desired = Math.max(0, anchor) * 0.16;
    if (hi - lo < desired) {
      lo = Math.max(0, anchor - desired / 2);
      hi = anchor + desired / 2;
    }
    return { lo: lo, hi: hi };
  }

  function getSel(btns) {
    for (var i = 0; i < btns.length; i++) {
      if (btns[i].classList.contains("is-selected")) return btns[i].dataset.val;
    }
    return btns[0] ? btns[0].dataset.val : "";
  }

  function setSel(btns, val) {
    for (var i = 0; i < btns.length; i++) {
      btns[i].classList.toggle("is-selected", btns[i].dataset.val === val);
    }
  }

  function init() {
    var roots = document.querySelectorAll("[data-gtb='v52']");
    if (!roots.length) return;

    roots.forEach(function (root) {

      var areaInput    = root.querySelector("[data-area]");
      var areaWrap     = root.querySelector("[data-area-wrap]");
      var areaHelp     = root.querySelector("[data-area-help]");
      var presetBtns   = root.querySelectorAll("[data-preset]");
      var vatBtns      = root.querySelectorAll("[data-vat-btn]");
      var electricsSel = root.querySelector("[data-electrics]");
      var accessSel    = root.querySelector("[data-access]");
      var areaLevelSel = root.querySelector("[data-arealevel]");
      var extrasSel    = root.querySelector("[data-extras]");
      var solBtns      = root.querySelectorAll("[data-group='solution'] .gtb-opt");
      var plaBtns      = root.querySelectorAll("[data-group='placement'] .gtb-opt");
      var dorBtns      = root.querySelectorAll("[data-group='door'] .gtb-opt");
      var helpPlacement = root.querySelector("[data-help-placement]");
      var helpDoor      = root.querySelector("[data-help-door]");
      var helpElec      = root.querySelector("[data-help-elec]");
      var helpAccess    = root.querySelector("[data-help-access]");
      var outTotal  = root.querySelector("[data-out-total]");
      var outRange  = root.querySelector("[data-out-range]");
      var outM2Line = root.querySelector("[data-out-m2]");
      var bdBuild   = root.querySelector("[data-bd-build]");
      var bdAttach  = root.querySelector("[data-bd-attach]");
      var bdDoor    = root.querySelector("[data-bd-door]");
      var bdElec    = root.querySelector("[data-bd-elec]");
      var bdLog     = root.querySelector("[data-bd-log]");
      var bdExtras  = root.querySelector("[data-bd-extras]");
      var bdTotal   = root.querySelector("[data-bd-total]");
      var rowAttach = root.querySelector("[data-row-attach]");
      var rowExtras = root.querySelector("[data-row-extras]");
      var copyBtn   = root.querySelector("[data-copy-btn]");
      var resetBtn  = root.querySelector("[data-reset-btn]");
      var toastEl   = root.querySelector("[data-toast]");

      var S = {
        area: 30, solution: "wood", placement: "free", door: "manual",
        electrics: "basic", access: "normal", areaLevel: "normal",
        vat: "inc", extras: "none"
      };

      /* ── BEREGNING ──────────────────────────────── */
      function compute() {
        var rawArea = parseFloat(areaInput.value);
        var ok = isFinite(rawArea) && rawArea > 0;

        if (!ok) {
          areaWrap.classList.add("is-invalid");
          if (areaHelp) areaHelp.textContent = "Indtast et tal, fx 30";
          outTotal.textContent  = "Udfyld felterne herover";
          outTotal.className    = "gtb-result-amount is-empty";
          outRange.textContent  = "\u00a0";
          outM2Line.textContent = "\u00a0";
          [bdBuild,bdAttach,bdDoor,bdElec,bdLog,bdExtras,bdTotal].forEach(function(el){
            if (el) el.textContent = "—";
          });
          return;
        }

        areaWrap.classList.remove("is-invalid");
        if (areaHelp) areaHelp.textContent = "Typisk 20–50 m²";

        S.area      = clamp(rawArea, 10, 80);
        S.solution  = getSel(solBtns);
        S.placement = getSel(plaBtns);
        S.door      = getSel(dorBtns);
        S.electrics = electricsSel.value;
        S.access    = accessSel.value;
        S.areaLevel = areaLevelSel.value;
        S.extras    = extrasSel.value;

        var m2  = S.area;
        var vf  = S.vat === "ex" ? 0.8 : 1.0;
        var sfx = S.vat === "inc" ? "inkl. moms" : "ekskl. moms";

        if (helpPlacement) helpPlacement.textContent = S.placement === "attached"
          ? "Tilbygning til hus udl\u00f8ser ekstra poster for tilpasning, t\u00e6thed og krav"
          : "Frists\u00e5ende er som regel den enklere og billigere l\u00f8sning";
        if (helpDoor) helpDoor.textContent = S.door === "electric"
          ? "Elektrisk port koster typisk 20\u201325.000 kr. inkl. montage"
          : "Manuel port varierer med m\u00e5l og kvalitet";
        if (helpElec) helpElec.textContent = S.electrics === "ev"
          ? "Elbilkl\u00e6rg\u00f8ring kr\u00e6ver ekstra kapacitet og korrekt installation"
          : "Dimensionér rigtigt fra start \u2013 billigere end at opgradere bagefter";
        if (helpAccess) helpAccess.textContent = S.access === "hard"
          ? "Sv\u00e6r adgang \u00f8ger timer og affaldsh\u00e5ndtering markant"
          : "Logistik kan stadig p\u00e5virke prisen noget";

        var fL    = S.areaLevel === "low" ? 0.95 : S.areaLevel === "high" ? 1.10 : 1.00;
        var fAcc  = S.access === "easy"   ? 0.97 : S.access === "hard"    ? 1.10 : 1.00;
        var fSize = m2 < 25 ? 1.10 : m2 < 35 ? 1.04 : m2 < 60 ? 1.00 : 0.97;

        var RATE = {
          wood:      { lo: 5000,  hi: 8500  },
          masonry:   { lo: 8000,  hi: 14000 },
          insulated: { lo: 12000, hi: 20000 }
        };
        var r    = RATE[S.solution];
        var minB = { wood: 120000, masonry: 160000, insulated: 220000 };

        var bLo  = Math.max(m2 * r.lo * fL * fAcc * fSize, minB[S.solution] * fL * fAcc);
        var bHi  = Math.max(m2 * r.hi * fL * fAcc * fSize, minB[S.solution] * 1.25 * fL * fAcc);
        var bMid = avg(bLo, bHi);

        var aLo  = S.placement === "attached" ? bMid * 0.08 * fL : 0;
        var aHi  = S.placement === "attached" ? bMid * 0.16 * fL : 0;
        var aMid = avg(aLo, aHi);

        var DR   = S.door === "electric" ? { lo: 20000, hi: 25000 } : { lo: 11000, hi: 18000 };
        var dLo  = DR.lo * fL; var dHi = DR.hi * fL; var dMid = avg(dLo, dHi);

        var ER   = S.electrics === "basic"    ? { lo: 8000,  hi: 16000 }
                 : S.electrics === "standard" ? { lo: 14000, hi: 26000 }
                 :                              { lo: 22000, hi: 38000 };
        var eLo  = ER.lo * fL; var eHi = ER.hi * fL; var eMid = avg(eLo, eHi);

        var base = m2 < 30 ? 6500 : m2 < 50 ? 8500 : 11000;
        var LR   = S.access === "easy"
                 ? { lo: base * 0.8, hi: base * 1.2 }
                 : S.access === "hard"
                 ? { lo: base * 1.2, hi: base * 2.0 }
                 : { lo: base,       hi: base * 1.6 };
        var lLo  = LR.lo * fL; var lHi = LR.hi * fL; var lMid = avg(lLo, lHi);

        var XR   = S.extras === "none"
                 ? { lo: 0,     hi: 0     }
                 : S.extras === "door"
                 ? { lo: 4500,  hi: 10000 }
                 : { lo: 11000, hi: 22000 };
        var xLo  = XR.lo * fL; var xHi = XR.hi * fL; var xMid = avg(xLo, xHi);

        var midInc = bMid + aMid + dMid + eMid + lMid + xMid;
        var loInc  = bLo  + aLo  + dLo  + eLo  + lLo  + xLo;
        var hiInc  = bHi  + aHi  + dHi  + eHi  + lHi  + xHi;
        var bd     = enforceMinRange(loInc, hiInc, midInc);

        var tMid  = midInc * vf;
        var tLo   = bd.lo  * vf;
        var tHi   = bd.hi  * vf;
        var perM2 = tMid / m2;

        outTotal.textContent  = fmt(tMid) + " " + sfx;
        outTotal.className    = "gtb-result-amount";
        outRange.textContent  = "Sp\u00e6nd: " + fmt(tLo) + " \u2013 " + fmt(tHi) + " " + sfx;
        outM2Line.textContent = fmt(perM2) + " pr. m\u00b2";

        bdBuild.textContent  = fmt(bMid * vf);
        bdAttach.textContent = S.placement === "attached" ? fmt(aMid * vf) : "—";
        bdDoor.textContent   = fmt(dMid * vf);
        bdElec.textContent   = fmt(eMid * vf);
        bdLog.textContent    = fmt(lMid * vf);
        bdExtras.textContent = S.extras !== "none" ? fmt(xMid * vf) : "—";
        bdTotal.textContent  = fmt(tMid) + " " + sfx;

        if (rowAttach) rowAttach.style.display = S.placement === "attached" ? "" : "none";
        if (rowExtras) rowExtras.classList.toggle("is-zero", S.extras === "none");

        try { localStorage.setItem(SK, JSON.stringify(S)); } catch (e) {}
      }

      /* ── KOPIÉR-TEKST ───────────────────────────── */
      function buildCopyText() {
        var solMap = { wood: "tr\u00e6garage (standard)", masonry: "muret garage (standard)", insulated: "isoleret/opvarmet garage" };
        var plaMap = { free: "frists\u00e5ende garage", attached: "tilbygning til eksisterende hus (integreret)" };
        var dorMap = { manual: "manuel port", electric: "elektrisk port" };
        var elcMap = { basic: "basis el (lys og f\u00e5 stik)", standard: "standard el med kraftigere tavle", ev: "el med kl\u00e6rg\u00f8ring til elbiloplader" };
        var accMap = { easy: "let adgang", normal: "normal adgang", hard: "sv\u00e6r adgang (smal adgang eller meget affald)" };
        var xMap   = { none: null, door: "sidedr\u00f8r", door_windows: "sidedr\u00f8r og to vinduer" };

        return [
          "Hej 3byggetilbud.dk,",
          "",
          "Jeg \u00f8nsker tre uforpligtende tilbud p\u00e5 f\u00f8lgende garageprojekt:",
          "",
          "- Areal: ca. " + nfInt.format(S.area) + " m\u00b2",
          "- Type: " + (solMap[S.solution] || S.solution),
          "- Placering: " + (plaMap[S.placement] || S.placement),
          "- Port: " + (dorMap[S.door] || S.door),
          "- El: " + (elcMap[S.electrics] || S.electrics),
          "- Adgang til byggepladsen: " + (accMap[S.access] || S.access),
          xMap[S.extras] ? "- Tilvalg: " + xMap[S.extras] : null,
          "",
          "Tilbuddet bedes inkludere:",
          "- Fundament og jordarbejde",
          "- Opbygning af v\u00e6gge og tag",
          "- Port inkl. montering",
          "- El (" + (elcMap[S.electrics] || S.electrics) + ")",
          S.placement === "attached" ? "- Tilpasning og tilslutning til eksisterende hus" : null,
          "- Bortskaffelse af byggeaffald og reetablering",
          "- Tidsplan og forventet aflevering",
          "",
          "\u00d8nsker prisen " + (S.vat === "inc" ? "inkl. moms" : "ekskl. moms") + ".",
          "",
          "Mvh"
        ].filter(function (l) { return l !== null; }).join("\n");
      }

      /* ── TOAST ──────────────────────────────────── */
      var toastTimer = null;
      function showToast(msg) {
        if (toastTimer) clearTimeout(toastTimer);
        toastEl.textContent = msg;
        toastEl.classList.add("visible");
        toastTimer = setTimeout(function () { toastEl.classList.remove("visible"); }, 2600);
      }

      /* ── RAF ────────────────────────────────────── */
      var raf = 0;
      function schedule() {
        if (raf) cancelAnimationFrame(raf);
        raf = requestAnimationFrame(compute);
      }

      /* ── EVENTS ─────────────────────────────────── */
      presetBtns.forEach(function (btn) {
        btn.addEventListener("click", function () {
          areaInput.value = this.dataset.preset;
          syncPresets(parseInt(this.dataset.preset, 10));
          schedule();
        });
      });

      function syncPresets(val) {
        presetBtns.forEach(function (b) {
          b.classList.toggle("is-active", parseInt(b.dataset.preset, 10) === val);
        });
      }

      areaInput.addEventListener("input", function () {
        syncPresets(parseInt(this.value, 10));
        schedule();
      });

      function wireGroup(btns) {
        btns.forEach(function (btn) {
          btn.addEventListener("click", function () {
            setSel(btns, this.dataset.val);
            schedule();
          });
        });
      }

      wireGroup(Array.from(solBtns));
      wireGroup(Array.from(plaBtns));
      wireGroup(Array.from(dorBtns));

      [electricsSel, accessSel, areaLevelSel, extrasSel].forEach(function (el) {
        if (el) el.addEventListener("change", schedule);
      });

      vatBtns.forEach(function (btn) {
        btn.addEventListener("click", function () {
          S.vat = this.dataset.vatBtn;
          vatBtns.forEach(function (b) {
            b.classList.toggle("active", b.dataset.vatBtn === S.vat);
          });
          schedule();
        });
      });

      copyBtn.addEventListener("click", function () {
        var text = buildCopyText();
        if (navigator.clipboard && navigator.clipboard.writeText) {
          navigator.clipboard.writeText(text)
            .then(function () { showToast("\u2713  Kopieret til udklipsholder"); })
            .catch(function () { fallbackCopy(text); });
        } else { fallbackCopy(text); }
      });

      function fallbackCopy(text) {
        var ta = document.createElement("textarea");
        ta.value = text;
        ta.style.cssText = "position:fixed;top:-9999px;left:-9999px;opacity:0;";
        document.body.appendChild(ta);
        ta.focus(); ta.select();
        try { document.execCommand("copy"); showToast("\u2713  Kopieret til udklipsholder"); }
        catch (e) { showToast("Kopiering mislykkedes \u2013 mark\u00e9r og kopi\u00e9r manuelt"); }
        document.body.removeChild(ta);
      }

      resetBtn.addEventListener("click", function () {
        areaInput.value    = 30;
        setSel(Array.from(solBtns), "wood");
        setSel(Array.from(plaBtns), "free");
        setSel(Array.from(dorBtns), "manual");
        electricsSel.value = "basic";
        accessSel.value    = "normal";
        areaLevelSel.value = "normal";
        extrasSel.value    = "none";
        S.vat = "inc";
        vatBtns.forEach(function (b) { b.classList.toggle("active", b.dataset.vatBtn === "inc"); });
        syncPresets(30);
        try { localStorage.removeItem(SK); } catch (e) {}
        schedule();
        showToast("Nulstillet");
      });

      /* ── RESTORE ────────────────────────────────── */
      function restore() {
        try {
          var sv = JSON.parse(localStorage.getItem(SK) || "null");
          if (!sv) return;
          if (sv.area != null) { areaInput.value = sv.area; syncPresets(parseInt(sv.area, 10)); }
          if (sv.solution)  setSel(Array.from(solBtns), sv.solution);
          if (sv.placement) setSel(Array.from(plaBtns), sv.placement);
          if (sv.door)      setSel(Array.from(dorBtns), sv.door);
          if (sv.electrics && electricsSel) electricsSel.value = sv.electrics;
          if (sv.access    && accessSel)    accessSel.value    = sv.access;
          if (sv.areaLevel && areaLevelSel) areaLevelSel.value = sv.areaLevel;
          if (sv.extras    && extrasSel)    extrasSel.value    = sv.extras;
          if (sv.vat) {
            S.vat = sv.vat;
            vatBtns.forEach(function (b) { b.classList.toggle("active", b.dataset.vatBtn === sv.vat); });
          }
        } catch (e) {}
      }

      restore();
      schedule();

    }); /* forEach root */
  }

  /* Kør straks hvis DOM er klar, ellers vent */
  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }

})();
</script>

</div><div class="bde-rich-text-1463-116 bde-rich-text breakdance-rich-text-styles">
<h2>Garagetilbygning og jordarbejde: Det usynlige, der kan vælte budgettet</h2>
<p>Når garagen står færdig, er fundamentet det, du mindst lægger mærke til. Og netop derfor er det kritisk.</p>
<p>Jordarbejde og fundament er ofte den mest uforudsigelige post. Skal der graves ud i en eksisterende indkørsel. Skal belægning brydes op og lægges igen. Skal der køres jord væk, eller kræver jordbunden ekstra fundering. Så kan budgettet flytte sig hurtigt.</p>
<p>Der er også vandet. Ligger grunden lavt, eller står der vand i haven efter kraftig regn, er det et tegn på, at afvanding og fald skal tages alvorligt. Det er ikke en “senere”-detalje. Det er en forudsætning.</p>
<p>Overvejer du gulvafløb, vask eller bare mulighed for at spule uden at gøre garagen til en skøjtebane, skal afløbsløsningen med i planlægningen fra start. Det kan være tilslutning til kloak, det kan være en anden håndtering af overfladevand, men det bør være gennemtænkt, før du bygger.</p>
</div><div class="bde-globalblock-1463-117 bde-globalblock"><div class="bde-rich-text-1498-100-1498-2 bde-rich-text bde-rich-text-1498-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en garagetilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på garagetilbygninger.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1463-118 bde-rich-text breakdance-rich-text-styles">
<h2>Regler for garagetilbygning: Byggetilladelse kommer ofte tidligere end du tror</h2>
<p>Nogle kommuner er hurtige. Andre er grundige. Fælles for dem er, at de kræver dokumentation.</p>
<p>I mange tilfælde kræver en garagetilbygning byggetilladelse. Samtidig kan lokalplaner og servitutter stille krav, der ændrer både placering og udtryk. Det kan være højden, tagformen eller materialerne, der skal passe ind i området.</p>
<p>Det er værd at vide allerede nu, at en integreret garage ofte kan udløse flere krav end en fritstående. Når garagen kobles tættere på boligen, kan brandforhold, konstruktion og tæthed få større betydning. Det er ikke nødvendigvis et problem. Det kan bare ændre opgaven.</p>
</div><div class="bde-rich-text-1463-119 bde-rich-text breakdance-rich-text-styles">
<h2>Afstand til skel og bebyggelsesprocent: De to tal, der styrer din garagetilbygning</h2>
<p>Hvis du vil undgå at tegne noget om tre gange, så start her.</p>
<p>Afstand til skel er et punkt, der går igen i de fleste garageprojekter. Mange har hørt om en tommelfingerregel på omkring 2,5 meter, men den gælder ikke som en universel garanti. Lokale bestemmelser, servitutter og særlige forhold kan ændre, hvad du må på netop din grund.</p>
<p>Bebyggelsesprocenten er den anden. En garage tæller med i, hvor meget du må bebygge på grunden. Det gør udestuer, skure og andre bygninger også. Derfor kan du ramme grænsen, selv om du ikke føler, at du bygger stort.</p>
<p>Hvis du allerede er tæt på loftet, kan løsningen blive en anden. Måske en mindre garage. Måske en kombination med carport. Måske en placering, der er mindre oplagt, men som får projektet til at hænge sammen.</p>
</div><div class="bde-rich-text-1463-121 bde-rich-text breakdance-rich-text-styles">
<h2>Byggetilladelse til garagetilbygning: Hvad kommunen typisk vil se</h2>
<p>Det er ikke her, drømmene bor. Det er her, projektet bliver muligt.</p>
<p>Kommunen vil som regel se tegninger og oplysninger om mål, højder, placering på grunden, afstande til skel og materialer. Det er den type dokumentation, der gør sagsbehandlingen lettere, og som kan spare dig for ekstra runder.</p>
<p>Nabohøring kan komme i spil, hvis du bygger tæt på skel, eller hvis du afviger fra rammerne i området. Det betyder ikke automatisk konflikt, men det betyder ofte tid.</p>
<p>Derfor giver det mening at indregne sagsbehandling i planlægningen. Du kan ikke bygge dig ud af en manglende tilladelse med ekstra tempo.</p>
</div><div class="bde-rich-text-1463-122 bde-rich-text breakdance-rich-text-styles">
<h2>Integreret garagetilbygning: Komforten du mærker hver dag</h2>
<p>Der er noget befriende ved at komme hjem i regnvejr og bare gå ind.</p>
<p>En integreret garagetilbygning kan give en mere sammenhængende hverdag. Den kan også få huset til at se mere “færdigt” ud, hvis materialer og linjer bliver løst rigtigt.</p>
<p>Til gengæld er det sjældent den billigste vej. Når garagen bliver en del af boligen, stiller det større krav til detaljerne. Det kan handle om isolering, tæthed, adskillelse og det visuelle udtryk, så <a href="https://mitboligprojekt.dk/tilbygning/">tilbygningen</a> ikke ligner en eftertanke.</p>
<p>Hvis du går den vej, er det værd at beslutte tidligt, om garagen primært skal være et funktionsrum, eller om den skal kunne bruges som værksted og ekstra opholdszone. De to ambitioner kræver ikke det samme.</p>
</div><div class="bde-rich-text-1463-124 bde-rich-text breakdance-rich-text-styles">
<h2>Fritstående garagetilbygning: Når grunden bestemmer, og huset får ro</h2>
<p>Nogle grunde lægger nærmest selv en plan.</p>
<p>En fritstående garage giver dig flere muligheder for placering. Du kan lægge den der, hvor indkørslen fungerer bedst, og hvor venderadius og adgang giver mening. Du undgår ofte også at ændre ved husets konstruktion, fordi garagen står som sin egen bygning.</p>
<p>Ulempen er ikke dramatisk, men den er reel. Du skal ud i vejret. For nogle er det ligegyldigt. For andre bliver det den ting, man bander over på de dage, hvor alt i forvejen sejler.</p>
</div><div class="bde-globalblock-1463-123 bde-globalblock"><div class="bde-rich-text-1498-100-1498-3 bde-rich-text bde-rich-text-1498-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en garagetilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på garagetilbygninger.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1463-126 bde-rich-text breakdance-rich-text-styles">
<h2>Garagetilbygning med carport: Den løsning der ofte passer bedst til hverdagen</h2>
<p>Hvis du har to biler, har du sikkert allerede regnet på en dobbeltgarage.</p>
<p>En dobbeltgarage er lækker, men den fylder og koster. Derfor vælger mange en kombination, hvor du får en lukket del og en overdækket del.</p>
<p>Den lukkede del tager cykler, værktøj og det, du gerne vil have bag en port. Carporten tager den bil, der ikke behøver stå inde, og giver dig et sted at læsse af i tørvejr. I praksis er det ofte carporten, der redder hverdagen mest, fordi den bliver brugt hele tiden.</p>
<p>Æstetisk kan carportdelen også gøre byggeriet lettere i udtrykket, især på mindre grunde, hvor en stor lukket bygning kan virke tung.</p>
</div><div class="bde-rich-text-1463-127 bde-rich-text breakdance-rich-text-styles">
<h2>Isolering og el i garagetilbygning: Når garagen bliver et rum, du faktisk bruger</h2>
<p>Det er her, mange projekter skifter karakter uden at nogen siger det højt.</p>
<p>Vil du kunne stå derude om vinteren, er isolering ofte det, der gør forskellen på “et koldt skur” og et brugbart rum. Men isolering kommer sjældent alene. Du skal typisk også have en bedre port, tættere samlinger, dampspærre og en plan for ventilation.</p>
<p>Varme kan løses på flere måder. Elradiatorer er en enkel løsning. En luft-til-luft varmepumpe kan være mere effektiv, hvis rummet bruges meget. Gulvvarme er komfortabelt, men kræver planlægning, før betonen støbes.</p>
<p>El er et kapitel for sig. Hvis du forventer at lade elbil i garagen, bør du planlægge kapacitet og installation fra start. Det handler om drift og sikkerhed, ikke bare om bekvemmelighed.</p>
</div><div class="bde-rich-text-1463-128 bde-rich-text breakdance-rich-text-styles">
<h2>Port, lys og opbevaring i garagetilbygning: De små valg du lever med</h2>
<p>Det er sjældent tagets hældning, der afgør, om du bliver glad for garagen. Det er hverdagsdetaljerne.</p>
<p>Porten er en af de største. Mange fokuserer på bredden, men glemmer højden. Har du SUV, tagboks eller cykelholder, kan standardmål blive en begrænsning, du opdager for sent. Og vil du have motor, fjernstyring og ordentlig tætning, er det klogt at have det med i projektet fra begyndelsen.</p>
<p>Belysning bliver også undervurderet. Ét loftlys er fint, når garagen er tom. Når reolerne er fyldt, og du skal finde noget bagerst, bliver det hurtigt utilstrækkeligt. Et par ekstra lyskilder og et tydeligt arbejdslys ved bordet gør mere, end prisen på armaturerne antyder.</p>
<p>Opbevaring er tredje punkt. Hvis du tænker hylder, reoler og arbejdsbord ind fra start, bliver rummet lettere at holde ryddeligt. Det handler ikke om at fylde garagen op. Det handler om at undgå, at den ender som et depot igen.</p>
</div><div class="bde-rich-text-1463-129 bde-rich-text breakdance-rich-text-styles">
<h2>Tidsplan for garagetilbygning: Hvorfor det sjældent tager “bare et par uger”</h2>
<p>En garage kan bygges hurtigt, når alt spiller.</p>
<p>Men tidsplanen har flere steder, hvor den kan flytte sig. Byggetilladelser kan tage tid afhængigt af kommune og sagens kompleksitet. Levering af porte, vinduer og særlige materialer kan også påvirke. Og vejrlig spiller ind, især ved jordarbejde og støbning.</p>
<p>Hvis du bor i huset under byggeriet, kan logistikken bremse tempoet. Materialer skal ligge et sted. Adgangsveje skal fungere. Naboer skal kunne komme forbi. Det er den slags, der gør, at en plan på papiret ikke altid holder i virkeligheden.</p>
<p>Nogle vælger at tage projektet i etaper. Først råbygningen, senere isolering og el. Det kan give luft i budgettet, men det kræver en plan, så “senere” ikke ender med at blive permanent.</p>
</div><img decoding="async" class="bde-image2-1463-125 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-12.19.14.webp" alt="Moderniseret dansk 70’er parcelhus med integreret garagetilbygning, lyse mursten, mørk træbeklædning og antracit garageport." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-12.19.14.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-12.19.14-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-12.19.14-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-12.19.14-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1463-137 bde-rich-text breakdance-rich-text-styles">
<h2>Tilbud på garagetilbygning: Sådan sammenligner du uden at gætte</h2>
<p>Her bliver mange snydt, uden at nogen har prøvet at snyde dem.</p>
<p>Problemet opstår, når tilbuddene dækker forskellige ting. Ét tilbud inkluderer reetablering af indkørslen. Et andet gør ikke. Ét tilbud regner portmotor med. Et andet nævner den ikke. Og pludselig sammenligner du to tal, der ikke handler om det samme.</p>
<p>Hvis du vil have tilbud, der kan sammenlignes, så sørg for at din opgavebeskrivelse indeholder de centrale punkter.</p>
<p>Hvilken løsning og størrelse du ønsker, og om det er integreret eller fritstående. Hvilke materialer der skal bruges, og hvilken tagtype du ser for dig. Porttype og om du vil have motor. Om der skal være sidedør, vinduer eller loft. Om garagen skal isoleres, og om der skal være varme.</p>
<p>Og så de praktiske poster, der ofte er dem, der kommer bagefter.</p>
<p>El i hvilket niveau, bare lys og stik, eller også klargøring til elbil. Afløb, hvis du ønsker gulvafløb eller vask. Bortkørsel, oprydning og reetablering af belægning. Hvem koordinerer elektriker og eventuelt kloakarbejde.</p>
<p>Mange boligejere får mest ro i maven ved at indhente flere tilbud. Ikke for at presse prisen, men for at få et realistisk spænd og høre, hvad fagfolk ser som risici på netop din grund.</p>
</div><div class="bde-rich-text-1463-138 bde-rich-text breakdance-rich-text-styles">
<h2>Vedligehold af garagetilbygning: Den årlige runde der holder den tæt</h2>
<p>En garage passer ofte sig selv. Lige indtil den ikke gør.</p>
<p>En gang om året er det en god vane at kigge taget efter for utætheder og løse inddækninger. Tjek også revner i murværk eller samlinger, og hold øje med soklen, hvor fugt typisk viser sig først.</p>
<p>Rens tagrender og nedløb, så vandet ledes væk, som det skal. Og giv porten et blik. Den skal køre glat og lukke tæt. Små justeringer i tide er næsten altid billigere end større reparationer senere.</p>
<p>Har du træbeklædning, handler det især om overfladebehandling og de udsatte facader. Har du en isoleret garage, er ventilationen vigtig, så kondens ikke får lov at sætte sig og blive et problem.</p>
</div><div class="bde-rich-text-1463-139 bde-rich-text breakdance-rich-text-styles">
<h2>Klar til at få 3 uforpligtende tilbud på garagetilbygning?</h2>
<p>Hvis du overvejer en garagetilbygning til dit hus, kan næste skridt være at få konkrete bud på pris og løsning, før du binder dig til en bestemt plan.</p>
<p>Det kan også være den hurtigste måde at finde ud af, om det skal være den integrerede løsning, den fritstående garage eller kombinationen med carport, der passer bedst til din grund og dit budget.</p>
<p>Du kan starte ved at <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="noopener">indhente 3 uforpligtende tilbud på garagetilbygning via 3byggetilbud.dk</a>, så du får lokale bud og et mere realistisk beslutningsgrundlag, før du går videre med tegninger og tilladelser.</p>
</div><div class="bde-globalblock-1463-130 bde-globalblock"><div class="bde-rich-text-1498-100-1498-4 bde-rich-text bde-rich-text-1498-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en garagetilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på garagetilbygninger.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1463-131 bde-rich-text breakdance-rich-text-styles">

</div>
</div><div class="bde-column-1463-132 bde-column">
  
  
	



<div class="bde-table-of-contents-1463-133 bde-table-of-contents">
<div class="bde-table-of-contents__wrapper">
  <header class="bde-table-of-contents__header">
        <h3 class="bde-table-of-contents__title toc-ignore">Indholdsfortegnelse</h3>
           </header>
  
  <div class="bde-table-of-contents__list">
    <nav id="bde-toc" class="toc js-breakdance-toc" aria-label="Indholdsfortegnelse">There are no headings in this document.</nav>
  </div>
</div>


</div><div class="bde-div-1463-134 bde-div">
  
  
	



<div class="bde-text-1463-135 bde-text">
Vi samarbejder med 3Byggetilbud.dk og modtager provision for henvisninger via links på denne side. Vi tager ikke ansvar for kvaliteten af det udførte arbejde eller for aftaler indgået mellem dig og de formidlede håndværkere. Alle aftaler indgås direkte mellem dig og den valgte håndværker.
</div>
</div><div class="bde-globalblock-1463-142 bde-globalblock"><div class="bde-rich-text-1500-100-1500-1 bde-rich-text bde-rich-text-1500-100 breakdance-rich-text-styles">
<style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-336 {
  position: relative;
  width: 336px;
  height: 280px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  overflow: hidden;
}

.ad-336::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(
      rgba(245,245,242,0.05) 1px,
      transparent 1px
    ),
    linear-gradient(
      90deg,
      rgba(245,245,242,0.05) 1px,
      transparent 1px
    );
  background-size: 32px 32px;
  z-index: 0;
}

.ad-336::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at top,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-336 > * {
  position: relative;
  z-index: 1;
}

.ad-content {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.ad-label {
  font-size: 0.7rem;
  opacity: 0.8;
}

.ad-headline {
  font-size: 1.35rem;
  line-height: 1.25;
  font-weight: 600;
}

.ad-text {
  font-size: 0.95rem;
  line-height: 1.5;
  color: #E6ECE8;
}

.ad-badge {
  align-self: flex-start;
  border: 1px solid rgba(204,250,116,0.6);
  color: #EAF7C8;
  padding: 6px 10px;
  border-radius: 999px;
  font-size: 0.75rem;
}

.ad-footer {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.ad-cta {
  background: var(--brand-light);
  color: #10110C !important;
  text-align: center;
  padding: 12px;
  border-radius: 999px;
  font-size: 1.1rem;
  font-weight: 600;
  text-decoration: none;
}

.ad-note {
  font-size: 0.7rem;
  opacity: 0.85;
  text-align: center;
}
</style>

<aside class="ad-336">
  <div class="ad-content">
    <div class="ad-label">Annonce</div>

    <div class="ad-headline">
      Garagetilbygning til hus
    </div>

    <div class="ad-text">
      Få et hurtigt overblik og sammenlign tilbud på garagetilbygninger til dit hus.
    </div>

    <div class="ad-badge">
      Gratis og uforpligtende
    </div>
  </div>

  <div class="ad-footer">
    <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" class="ad-cta" target="_blank" rel="nofollow sponsored noopener">
      Få 3 gratis tilbud
    </a>

    <div class="ad-note">
      Sammenlign pris og løsning
    </div>
  </div>
</aside>

</div></div>
</div></div></div>
</section>]]></content:encoded>
					
					<wfw:commentRss>https://mitboligprojekt.dk/garagetilbygning-til-hus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Overvejer du en tilbygning? 8 ting du bør have styr på, før du går i gang</title>
		<link>https://mitboligprojekt.dk/tilbygning-8-ting-foer-du-bygger-til/</link>
					<comments>https://mitboligprojekt.dk/tilbygning-8-ting-foer-du-bygger-til/#respond</comments>
		
		<dc:creator><![CDATA[Tobias]]></dc:creator>
		<pubDate>Mon, 09 Feb 2026 13:00:53 +0000</pubDate>
				<category><![CDATA[Tilbygning]]></category>
		<guid isPermaLink="false">https://mitboligprojekt.dk/?p=1060</guid>

					<description><![CDATA[En tilbygning kan give jer de kvadratmeter, I savner, uden at I skal flytte. Men de forkerte beslutninger bliver hurtigt støbt fast i både huset og økonomien.]]></description>
										<content:encoded><![CDATA[<section class="bde-section-1060-140 bde-section">
  
  
	



<div class="section-container"><div class="bde-columns-1060-141 bde-columns"><div class="bde-column-1060-142 bde-column">
  
  
	



<div class="bde-div-1060-143 bde-div">
  
  
	



<div class="bde-breadcrumbs-1060-144 bde-breadcrumbs"><nav aria-label="breadcrumbs" class="rank-math-breadcrumb"><p><a href="https://mitboligprojekt.dk">Forside</a><span class="separator"> &raquo; </span><span class="last">Tilbygning</span></p></nav></div><ul class="bde-post-meta-1060-145 bde-post-meta">            <li class="ee-postmeta-date-wrap">
                                                        <span class="ee-postmeta-date"><span
                            class="ee-postmeta-before">Senest opdateret: </span>9. februar 2026</span>
                                </li>
            </ul>
</div><div class="bde-fancy-divider-1060-146 bde-fancy-divider">


<div class="bde-fancy-divider__wrapper">
  <div class="bde-fancy-divider__separator   ">
  	  </div>
</div>

</div><div class="bde-rich-text-1060-147 bde-rich-text breakdance-rich-text-styles">
<h1><span style="font-weight: bold;">Overvejer du en tilbygning?</span> <span style="font-weight: 500;">8 ting du bør have styr på, før du går i gang</span></h1>
</div><div class="bde-text-1060-148 bde-text">
<p>En tilbygning kan give jer de kvadratmeter, I savner, uden at I skal flytte. Men de forkerte beslutninger bliver hurtigt støbt fast i både huset og økonomien.</p>

</div><img decoding="async" class="bde-image2-1060-149 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-9.-feb.-2026-13.59.25.webp" alt="Dansk murstensvilla med stor tilbygning i thermowood under opførelse og store glaspartier." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-9.-feb.-2026-13.59.25.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-9.-feb.-2026-13.59.25-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-9.-feb.-2026-13.59.25-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-9.-feb.-2026-13.59.25-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1060-150 bde-rich-text breakdance-rich-text-styles">
Dansk murstensvilla med stor tilbygning i thermowood under opførelse og store glaspartier.
</div><div class="bde-fancy-divider-1060-151 bde-fancy-divider">


<div class="bde-fancy-divider__wrapper">
  <div class="bde-fancy-divider__separator   ">
  	  </div>
</div>

</div><div class="bde-rich-text-1060-152 bde-rich-text breakdance-rich-text-styles">
<p>Det begynder tit med noget helt jordnært. Entréen flyder, køkkenet føles for smalt, og der er aldrig et sted, du kan lukke døren og få ro.</p>
<p>Så dukker spørgsmålet op ved spisebordet: Skal du flytte, eller kan du bygge dig ud af problemet?</p>
<p>Inden du forelsker dig i en løsning, kan det give ro at få et tidligt praj om pris og muligheder. Du kan starte med at <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" rel="sponsored noopener" target="_blank">indhente tre uforpligtende tilbud på din tilbygning</a>, så du har noget konkret at holde idéerne op imod.</p>
<p>Her får du en guide til otte overvejelser, der tilsammen rammer de steder, hvor en tilbygning typisk bliver enten en gevinst eller en belastning.</p>
</div><div class="bde-globalblock-1060-153 bde-globalblock"><div class="bde-rich-text-1062-100-1062-1 bde-rich-text bde-rich-text-1062-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en tilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på tilbygningsprojekter.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1060-154 bde-rich-text breakdance-rich-text-styles">
<h2>1. Start med behovet</h2>
<p>Før du tænker i nye kvadratmeter, så tænk i hverdage.</p>
<p>Hvad er det præcis, der ikke fungerer i dag? Er det mangel på værelser, manglende opbevaring, en for trang passage mellem køkken og spiseplads eller et hus, hvor for mange funktioner ligger oven i hinanden?</p>
<p>Prøv at beskrive behovet som noget, der kan testes: “Jeg vil have et værelse, der kan være kontor til hverdag og gæsteværelse i weekenden.” Eller: “Jeg vil have en stue, der kan rumme familien, uden at man skal gennem rummet for at komme ud.” Når behovet er konkret, bliver det langt lettere at vurdere, om løsningen faktisk løser det.</p>
<p>Tænk også fremad. Mange bygger efter den akutte fase, men behov ændrer sig. Det, der i dag er et børneværelse, bliver et teenagerrum, og senere et rum, du gerne vil bruge til noget helt andet. Den bedste løsning er ofte den, der kan skifte rolle uden at kræve en ny ombygning.</p>
</div><div class="bde-rich-text-1060-178 bde-rich-text breakdance-rich-text-styles">
<h2>2. Vurdér om du kan ombygge dig til det samme</h2>
<p>Inden du beslutter dig for en tilbygning, er det værd at give huset en grundig chance for at løse problemet selv.</p>
<p>At ombygge kan for eksempel være at flytte et køkken, så passager bliver bredere, at åbne mellem rum på en måde, der giver bedre flow, eller at udnytte arealer, der i dag bare er gang, hjørner og døde kvadratmeter. I mange huse er det ikke antallet af m², der er udfordringen. Det er måden, de er brugt på.</p>
<p>Men ombygning kan også give bagslag, hvis du bare jagter “mere åbent”. Når vægge forsvinder, forsvinder også vægplads til skabe, reoler og møbler. Og så kommer støjen. Et åbent rum kan være skønt, men hvis akustikken ikke tænkes med, kan huset blive sværere at bo i.</p>
<p>En enkel test er møblering. Kan du placere sofa, spisebord og opbevaring på en plan, uden at det hele ender i dørzoner og ganglinjer? Hvis svaret er nej, er det ikke en detalje. Det er et signal om, at planløsningen skal gentænkes, før du bygger til eller river ned.</p>
</div><div class="bde-rich-text-1060-156 bde-rich-text breakdance-rich-text-styles">
<h2>3. Få styr på økonomien, før den får styr på dig</h2>
<p>De fleste kan overskue prisen på gulve, vinduer og facade. Det er alt det udenom, der plejer at overraske.</p>
<p>Fundament, jordarbejde, tilslutninger, el, vand, ventilation, dræn, reetablering, stillads, nedrivning og byggeplads kan fylde mere, end man forventer. Og så er der alle de små valg undervejs, hvor “nu hvor vi er i gang” kan få projektet til at vokse i det stille.</p>
<p>Som et groft pejlemærke ser man ofte tilbygninger i størrelsesordenen 25.000 til 30.000 kroner pr. m², afhængigt af kompleksitet, materialer og om der indgår bad eller køkken. Det er ikke et facit, men et godt reality check, når du sidder med skitser.</p>
<p>Gør dig selv en tjeneste og lav et budget, der kan holde til virkeligheden. Det betyder typisk en buffer til uforudsete forhold og en klar prioritering af, hvad der er nødvendigt, og hvad der er rart at få med, hvis økonomien kan bære.</p>
</div><div class="bde-globalblock-1060-159 bde-globalblock"><div class="bde-rich-text-1062-100-1062-2 bde-rich-text bde-rich-text-1062-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en tilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på tilbygningsprojekter.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1060-158 bde-rich-text breakdance-rich-text-styles">
<h2>4. Kend rammerne, før du tegner drømmen</h2>
<p>Reglerne er sjældent det, man drømmer om. Men de afgør, hvad der kan lade sig gøre.</p>
<p>En tilbygning kræver byggetilladelse, og det er almindeligt, at der ses på bebyggelsesprocent, afstand til skel, højde og placering på grunden. Der kan også være lokale bestemmelser, som påvirker tagform, materialer og udtryk, og servitutter kan lægge yderligere begrænsninger.</p>
<p>Det er netop her, mange rammer muren: De har betalt for fine skitser og opdager bagefter, at projektet skal tegnes om, fordi det kolliderer med rammerne for området.</p>
<p>Samtidig skal den nye del leve op til bygningsreglementets krav. I praksis handler det blandt andet om isolering og energiforbrug, brandsikkerhed og andre tekniske krav, som ofte kræver dokumentation. Jo tidligere du ved, hvad der kræves, jo færre dyre overraskelser får du.</p>
</div><div class="bde-rich-text-1060-160 bde-rich-text breakdance-rich-text-styles">
<h2>5. Tag naboerne med i processen</h2>
<p>Nabokonflikter opstår sjældent, fordi nogen har lyst til at være besværlige. De opstår, fordi nogen føler sig overrasket.</p>
<p>Bygger du tæt på skel, ændrer du højden eller planlægger store vinduer, kan naboen opleve mere skygge eller mindre privatliv. Det kan give modstand, som trækker tiden ud, og som i værste fald gør projektet mere besværligt, end det behøver at være.</p>
<p>En tidlig samtale kan gøre en stor forskel. Vis, hvor tilbygningen skal ligge, og forklar, hvordan du har tænkt på indkig og lys. Nogle gange er det et vindue, der skal flyttes, en højde, der skal justeres, eller en løsning, der kan laves mere diskret. Små ændringer er lettest, mens projektet stadig er fleksibelt.</p>
<p>Og helt ærligt: Det er svært at nyde en ny stue, hvis stemningen med naboen samtidig er blevet dårlig.</p>
</div><div class="bde-rich-text-1060-161 bde-rich-text breakdance-rich-text-styles">
<h2>6. Tænk helhed, så tilbygningen hører hjemme</h2>
<p>En tilbygning ændrer husets udtryk, og det er ikke altid, man ser konsekvensen på en hurtig skitse.</p>
<p>Helhed handler om proportioner og linjer: vinduesformater, dybder i vindues- og dørpartier, tagudhæng, sokkel, taghældning og hvordan den nye del møder den gamle. Når noget ikke passer, kan det se forkert ud, selv om man ikke kan sætte ord på det.</p>
<p>Materialer er et kapitel for sig. Det er ikke altid det bedste at forsøge at matche alt perfekt. En næsten-match kan virke mærkelig, fordi øjet fanger forskellen. I nogle tilfælde fungerer et bevidst nyt materialevalg bedre, hvis det spiller sammen med huset og området.</p>
<p>En praktisk øvelse: Kig på huset udefra fra flere vinkler, også fra vejen. Tag et par billeder og tegn tilbygningen ind på dem. Det gør det sværere at overse, om det nye kommer til at dominere eller skubbe huset ud af balance.</p>
</div><div class="bde-rich-text-1060-163 bde-rich-text breakdance-rich-text-styles">
<h2>7. Pas på lys og planløsning</h2>
<p>Flere kvadratmeter kan give et dårligere hus, hvis du tager lyset eller ødelægger flowet.</p>
<p>Lægger tilbygningen sig foran eksisterende vinduer, kan køkken eller stue miste dagslys. Og ændrer du rummenes forbindelser, kan det nye rum ende som gennemgang, hvor man konstant passerer igennem. Det er præcis sådan et rum, der kan se flot ud på tegningen, men føles upraktisk i hverdagen.</p>
<p>Tænk dagslys tidligt ind. Hvor falder morgensolen? Hvor opholder I jer om eftermiddagen? Hvilke rum må ikke blive mørkere? Det er spørgsmål, der lyder som detaljer, men som ofte afgør, om tilbygningen føles som en naturlig forlængelse.</p>
<p>Tænk også opbevaring og møblering sammen med placeringen af døre og vinduer. Store glaspartier kan være fantastiske, men de kan også fjerne den væg, du havde regnet med til sofa, skænk eller skabe.</p>
</div><div class="bde-rich-text-1060-164 bde-rich-text breakdance-rich-text-styles">
<h2>8. Tag teknik og proces alvorligt</h2>
<p>Det usynlige er ikke kun økonomi. Det er også det, der kan vælte tidsplanen.</p>
<p>Bærende vægge, afløb, varme, ventilation og el sætter grænser for, hvad der er smart at gøre. Hvis der skal etableres bad eller køkken i tilbygningen, skal installationerne kunne hænge sammen. Jo længere de skal flyttes, jo mere komplekst bliver projektet.</p>
<p>Fundament og jordbund kan også overraske. Hvis der kræves en anden funderingsløsning end forventet, ændrer både pris og tidsplan sig. Det er derfor, faglige vurderinger og forundersøgelser tidligt i forløbet ofte kan betale sig.</p>
<p>Og så er der aftalerne. Få på skrift, hvad der er med i prisen, hvordan ekstraarbejde håndteres, hvem der koordinerer underleverandører, og hvordan kvalitet følges undervejs. Det lyder tørt, men det er den del, der forhindrer dyre misforståelser midt i byggeriet.</p>
</div><div class="bde-rich-text-1060-183 bde-rich-text breakdance-rich-text-styles">
<!-- TILBYGNING – PRISBEREGNER v1.1 (Breakdance HTML-element) -->
<p><style>
  /* Genbruger dit gpb-design 1:1 */
  .gpb-wrap{
    background:#F5F5F2;
    border:1px solid #E1E1E1;
    border-radius:10px;
    padding:1.25rem;
    max-width:780px;
    margin:0 auto;
    color:#10110C;
    line-height:1.55;
    font-weight:300;
    width:100%;
    overflow-x:hidden;
  }
  .gpb-wrap *{ box-sizing:border-box; }
  .gpb-wrap, .gpb-top, .gpb-card, .gpb-grid, .gpb-field, .gpb-control, .gpb-results,
  .gpb-kpi, .gpb-kpi-top, .gpb-breakdown, .gpb-line, .gpb-actions, .gpb-cta { min-width:0; }
  .gpb-control > *{ min-width:0; }

  .gpb-top{ display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:0.85rem; }
  .gpb-title{ margin:0; font-size:1.15rem; color:#203723; font-weight:500; }
  .gpb-sub{ margin:0.25rem 0 0 0; font-size:0.95rem; color:#333; font-weight:300; max-width:78ch; }
  .gpb-pill{ background:#fff; border:1px solid #E1E1E1; border-radius:999px; padding:0.4rem 0.7rem; font-size:0.9rem; color:#203723; font-weight:400; white-space:nowrap; flex:0 0 auto; }

  .gpb-card{ background:#fff; border:1px solid #E1E1E1; border-radius:10px; padding:1rem; }
  .gpb-section-title{ margin:0 0 0.75rem 0; color:#203723; font-size:1.02rem; font-weight:500; }

  .gpb-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0.85rem; align-items:start; }
  .gpb-field{ display:grid; gap:0.35rem; align-content:start; }

  .gpb-label{ font-size:0.92rem; color:#333; font-weight:500; line-height:1.2; }
  .gpb-control{ display:flex; gap:0.5rem; align-items:stretch; }

  .gpb-input, .gpb-select{
    width:100%; max-width:100%;
    border:1px solid #E1E1E1; border-radius:10px;
    padding:0.62rem 0.75rem;
    background:#fff; color:#10110C;
    font-size:0.98rem; font-weight:300;
    outline:none; min-height:44px;
  }
  .gpb-input:focus, .gpb-select:focus{ border-color:#203723; }
  .gpb-input.gpb-invalid{ border-color:#B00020; }

  .gpb-select{
    appearance:none; -webkit-appearance:none; -moz-appearance:none;
    padding-right:2.6rem;
    background-color:#fff;
    background-clip:padding-box;
    background-repeat:no-repeat;
    background-position:right 0.9rem center;
    background-size:16px 16px;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%23203723' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");
  }
  .gpb-select::-ms-expand{ display:none; }

  .gpb-unit{
    border:1px solid #E1E1E1; border-radius:10px;
    padding:0.62rem 0.5rem;
    background:#F5F5F2;
    font-size:0.9rem; color:#333; font-weight:400;
    min-height:44px;
    width:74px;
    display:flex; align-items:center; justify-content:center;
    white-space:nowrap; flex:0 0 auto;
  }

  .gpb-help{ margin:0.05rem 0 0 0; font-size:0.86rem; color:#555; font-weight:300; min-height:2.2em; }

  .gpb-divider{ height:1px; background:#E1E1E1; border:0; margin:0.95rem 0; }

  .gpb-results{ display:grid; gap:0.65rem; margin-top:0.75rem; }
  .gpb-kpi{ border:1px solid #E1E1E1; border-radius:10px; padding:0.85rem; background:#fff; }
  .gpb-kpi-top{ display:flex; align-items:baseline; justify-content:space-between; gap:0.75rem; margin-bottom:0.15rem; }
  .gpb-kpi-label{ font-size:0.92rem; color:#333; font-weight:500; }
  .gpb-kpi-value{ font-size:1.08rem; color:#10110C; font-weight:500; text-align:right; }
  .gpb-kpi-sub{ margin:0.15rem 0 0 0; font-size:0.86rem; color:#555; font-weight:300; }

  .gpb-breakdown{ display:grid; gap:0.4rem; padding-top:0.25rem; }
  .gpb-line{ display:flex; justify-content:space-between; gap:0.75rem; font-size:0.92rem; color:#333; font-weight:300; }
  .gpb-line span:last-child{ font-weight:500; color:#10110C; white-space:nowrap; }

  .gpb-line--total{ margin-top:0.2rem; padding-top:0.45rem; border-top:1px solid #E1E1E1; }
  .gpb-line--total span:first-child{ font-weight:500; }
  .gpb-line--total span:last-child{ font-size:1rem; }

  .gpb-actions{ display:flex; gap:0.55rem; flex-wrap:wrap; margin-top:0.9rem; }
  .gpb-btn{
    appearance:none; border:1px solid #E1E1E1; background:#fff; color:#10110C;
    padding:0.6rem 0.85rem; border-radius:10px;
    font-size:0.95rem; cursor:pointer; font-weight:500;
    transition:transform 0.08s ease, border-color 0.12s ease, filter 0.12s ease;
  }
  .gpb-btn:hover{ border-color:#203723; }
  .gpb-btn:active{ transform:scale(0.99); }

  .gpb-toast{ display:none; margin-top:0.65rem; padding:0.65rem 0.75rem; border-radius:10px; border:1px solid #E1E1E1; background:#F5F5F2; color:#333; font-size:0.9rem; font-weight:300; }

  .gpb-cta{ margin-top:0.9rem; border:1px solid #E1E1E1; border-radius:10px; background:#fff; padding:1rem; }
  .gpb-cta p{ margin:0 0 0.75rem 0; font-size:0.95rem; color:#333; font-weight:300; }
  .gpb-cta a{ display:inline-block; background:#203723; border:1px solid #203723; color:#fff !important; text-decoration:none; padding:0.75rem 1.05rem; border-radius:10px; font-size:1rem; font-weight:500; }
  .gpb-cta a:hover{ filter:brightness(0.95); }

  /* tiny helper for conditional fields */
  .gpb-hidden{ display:none !important; }

  @media (max-width:640px){
    .gpb-wrap{ padding:1.05rem; }
    .gpb-top{ flex-direction:column; }
    .gpb-grid{ grid-template-columns:1fr; }
    .gpb-actions .gpb-btn, .gpb-cta a{ width:100%; text-align:center; }
  }
</style></p>

<div class="gpb-wrap" role="region" data-tpb="v1" aria-label="Prisberegner til tilbygning">
  <div class="gpb-top">
    <div>
      <p class="gpb-title">Prisberegner: tilbygning (m², tilvalg og kompleksitet)</p>
      <p class="gpb-sub">
        Indtast areal og vælg type/tilvalg, så får du et vejledende overslag. Tilbygninger påvirkes især af sammenbygning,
        fundament/jordbund, vinduer/døre – og om der er køkken/bad.
      </p>
    </div>
    <div class="gpb-pill" data-pill="" aria-hidden="true">Vejledende overslag</div>
  </div>

  <div class="gpb-card">
    <p class="gpb-section-title">Din tilbygning</p>

    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Areal</label>
        <div class="gpb-control">
          <input class="gpb-input" min="10" max="200" step="1" type="number" value="40" data-area />
          <div class="gpb-unit" aria-hidden="true">m²</div>
        </div>
        <p class="gpb-help" data-areahelp="">Samlet areal (typisk 10–200 m²). De første m² er ofte dyrest.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Konstruktion / facade</label>
        <select class="gpb-select" data-type>
          <option value="light_wood">Let konstruktion (træ)</option>
          <option value="brick" selected>Muret (standard)</option>
          <option value="exclusive">Arkitekt/eksklusiv</option>
        </select>
        <p class="gpb-help" data-typehelp="">Basis m²-pris uden køkken/bad. Materialer og detaljer flytter meget.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Tagløsning</label>
        <select class="gpb-select" data-roof>
          <option value="flat" selected>Fladt tag</option>
          <option value="pitched">Sadeltag / komplekst tag</option>
        </select>
        <p class="gpb-help">Tagkonstruktion, gennembrydninger og tilpasninger til eksisterende tag kan påvirke pris og tid.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Indhold i tilbygningen</label>
        <select class="gpb-select" data-content>
          <option value="rooms" selected>Kun rum (stue/værelse)</option>
          <option value="kitchen">Med køkken</option>
          <option value="bath">Med badeværelse</option>
          <option value="kitchen_bath">Med køkken + badeværelse</option>
        </select>
        <p class="gpb-help">Køkken/bad er typisk de dyreste funktioner (installationer + inventar/vådrum).</p>
      </div>

      <div class="gpb-field" data-bathfield>
        <label class="gpb-label">Badeværelse: ca. areal</label>
        <div class="gpb-control">
          <input class="gpb-input" min="3" max="12" step="1" type="number" value="6" data-bathm2 />
          <div class="gpb-unit" aria-hidden="true">m²</div>
        </div>
        <p class="gpb-help">Bruges kun hvis du vælger “med badeværelse”. (Ofte 4–8 m²).</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Vinduer/døre i ydervæg</label>
        <select class="gpb-select" data-glazing>
          <option value="normal" selected>Normal mængde</option>
          <option value="many">Mange vinduer/døre</option>
          <option value="large">Store glaspartier</option>
        </select>
        <p class="gpb-help">Store partier og mange åbninger kan øge både materiale- og arbejdstid.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Kompleksitet (form/sammenbygning)</label>
        <select class="gpb-select" data-complexity>
          <option value="simple" selected>Simpel forlængelse</option>
          <option value="normal">Normal (nogle specialløsninger)</option>
          <option value="complex">Kompleks (vinkel, mange hjørner/store åbninger)</option>
        </select>
        <p class="gpb-help">Hjørner, store åbninger og svær sammenbygning trækker ofte op.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Fundament / jordbund</label>
        <select class="gpb-select" data-ground>
          <option value="normal" selected>Normal</option>
          <option value="difficult">Krævende (dybere/forstærket)</option>
        </select>
        <p class="gpb-help">Geoteknik og fundamentsløsning kan ændre budgettet markant.</p>
      </div>
    </div>

    <hr class="gpb-divider" />

    <p class="gpb-section-title">Prisniveau, rådgivning og moms</p>

    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Prisniveau i området</label>
        <select class="gpb-select" data-arealevel>
          <option value="low">Lavt</option>
          <option value="normal" selected>Normalt</option>
          <option value="high">Højt</option>
        </select>
        <p class="gpb-help">Grov justering for lokale prisforskelle.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Rådgivning/projektering</label>
        <select class="gpb-select" data-advice>
          <option value="0">0% (ingen / allerede afklaret)</option>
          <option value="5" selected>Ca. 5% (typisk)</option>
          <option value="10">Ca. 10% (mange ydelser/tilsyn)</option>
        </select>
        <p class="gpb-help">Skøn som procent af byggesum (tegninger, styring, tilsyn).</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Momsvisning</label>
        <select class="gpb-select" data-vat>
          <option value="inc" selected>Inkl. moms</option>
          <option value="ex">Ekskl. moms</option>
        </select>
        <p class="gpb-help">De fleste private vil bruge “inkl. moms”.</p>
      </div>
    </div>

    <hr class="gpb-divider" />

    <div class="gpb-results">
      <div class="gpb-kpi" aria-live="polite" aria-atomic="true">
        <div class="gpb-kpi-top">
          <div class="gpb-kpi-label">Prisoverslag</div>
          <div class="gpb-kpi-value" data-total>—</div>
        </div>
        <p class="gpb-kpi-sub" data-range>—</p>
        <p class="gpb-kpi-sub" data-rate>—</p>
      </div>

      <div class="gpb-kpi" aria-live="polite" aria-atomic="true">
        <div class="gpb-kpi-top">
          <div class="gpb-kpi-label">Detaljer</div>
          <div class="gpb-kpi-value" style="font-weight:500;color:#203723;" data-badge></div>
        </div>

        <div class="gpb-breakdown">
          <div class="gpb-line">Areal<span data-out-area>—</span></div>
          <div class="gpb-line">Type<span data-out-type>—</span></div>
          <div class="gpb-line">Indhold<span data-out-content>—</span></div>
          <div class="gpb-line">Effektiv pris pr. m² (alt inkl.)<span data-out-m2>—</span></div>
          <div class="gpb-line">Grundpris (m² × sats)<span data-out-base>—</span></div>
          <div class="gpb-line">Fast opstart og sammenbygning<span data-out-setup>—</span></div>
          <div class="gpb-line">Køkken (pakke)<span data-out-kitchen>—</span></div>
          <div class="gpb-line">Badeværelse (vådrum)<span data-out-bath>—</span></div>
          <div class="gpb-line">Rådgivning/projektering<span data-out-advice>—</span></div>
          <div class="gpb-line gpb-line--total">I alt<span data-out-total>—</span></div>
        </div>
      </div>
    </div>

    <div class="gpb-actions">
      <button class="gpb-btn" type="button" data-copy>Kopiér projektbeskrivelse</button>
      <button class="gpb-btn" type="button" data-reset>Nulstil</button>
    </div>
    <div class="gpb-toast" role="status" data-toast aria-live="polite">Kopieret.</div>

    <div class="gpb-cta">
      <p>Vil du have en mere præcis pris? Indhent 3 uforpligtende tilbud og sammenlign på samme forudsætninger.</p>
      <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" rel="nofollow sponsored noopener" target="_blank">Indhent 3 tilbud</a>
    </div>

  </div>
</div>

<p><script>
(function(){
  const instances = Array.from(document.querySelectorAll('[data-tpb="v1"]'));
  if(!instances.length) return;

  instances.forEach((root, idx) => {
    const storageKey = "tilbygning_prisberegner_v1_1_" + idx;
    const q = (sel) => root.querySelector(sel);

    const area = q("[data-area]");
    const type = q("[data-type]");
    const roof = q("[data-roof]");
    const content = q("[data-content]");
    const bathM2 = q("[data-bathm2]");
    const bathField = q("[data-bathfield]");
    const glazing = q("[data-glazing]");
    const complexity = q("[data-complexity]");
    const ground = q("[data-ground]");
    const areaLevel = q("[data-arealevel]");
    const advice = q("[data-advice]");
    const vat = q("[data-vat]");

    const pill = q("[data-pill]");
    const areaHelp = q("[data-areahelp]");
    const typeHelp = q("[data-typehelp]");

    const totalOut = q("[data-total]");
    const rangeOut = q("[data-range]");
    const rateOut  = q("[data-rate]");
    const badgeOut = q("[data-badge]");

    const outArea = q("[data-out-area]");
    const outType = q("[data-out-type]");
    const outContent = q("[data-out-content]");
    const outM2 = q("[data-out-m2]");
    const outBase = q("[data-out-base]");
    const outSetup = q("[data-out-setup]");
    const outKitchen = q("[data-out-kitchen]");
    const outBath = q("[data-out-bath]");
    const outAdvice = q("[data-out-advice]");
    const outTotal = q("[data-out-total]");

    const toast = q("[data-toast]");
    const copyBtn = q("[data-copy]");
    const resetBtn = q("[data-reset]");

    if(!area || !type || !roof || !content) return;

    const nfCur = new Intl.NumberFormat("da-DK", { style:"currency", currency:"DKK", maximumFractionDigits:0 });
    const nfInt = new Intl.NumberFormat("da-DK", { maximumFractionDigits:0 });

    const clamp = (n, min, max) => Math.min(max, Math.max(min, n));
    const round0 = (n) => Math.round(n);
    const mid = (low, high) => (low + high) / 2;

    /* --- Satser (inkl. moms) --- */
    const baseTable = {
      light_wood: { label:"Let konstruktion (træ)", low:16500, high:23500 },
      brick:      { label:"Muret (standard)",       low:18500, high:25500 },
      exclusive:  { label:"Arkitekt/eksklusiv",     low:24500, high:33500 }
    };

    const SETUP = { low:95000, high:190000 };
    const KITCHEN = { low:110000, high:240000 };
    const BATH_PER_M2 = { low:26000, high:38000 };

    const MIN_RANGE_PCT = 0.14;

    function areaFactor(m2){
      if(m2 < 25) return 1.16;
      if(m2 < 40) return 1.08;
      if(m2 < 60) return 1.03;
      return 1.00;
    }
    function areaLevelFactor(){
      if(areaLevel.value === "low") return 0.95;
      if(areaLevel.value === "high") return 1.08;
      return 1.00;
    }
    function roofFactor(){
      return (roof.value === "pitched") ? 1.03 : 0.99;
    }
    function complexityFactor(){
      if(complexity.value === "normal") return 1.07;
      if(complexity.value === "complex") return 1.14;
      return 1.00;
    }
    function groundFactor(){
      return (ground.value === "difficult") ? 1.10 : 1.00;
    }
    function glazingFactor(){
      if(glazing.value === "many") return 1.05;
      if(glazing.value === "large") return 1.10;
      return 1.00;
    }
    function advicePct(){
      const p = parseFloat(advice.value || "0");
      return Number.isFinite(p) ? (p/100) : 0;
    }
    function vatFactor(){
      return (vat.value === "ex") ? 0.8 : 1.0; // 1/1.25
    }
    function vatSuffix(){
      return (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";
    }
    function enforceMinRange(low, high, anchor){
      const a = Math.max(0, anchor);
      const desired = a * MIN_RANGE_PCT;
      let L = low, H = high;
      if(H - L < desired){
        const minHigh = a + desired/2;
        const minLow  = Math.max(0, a - desired/2);
        L = Math.min(L, minLow);
        H = Math.max(H, minHigh);
      }
      if(H < L){ const tmp=L; L=H; H=tmp; }
      return { low:L, high:H };
    }

    function readArea(){
      const raw = (area.value ?? "").toString().trim();
      if(raw === "" || raw === "-" || raw === "."){
        area.classList.add("gpb-invalid");
        areaHelp.textContent = "Indtast et areal (m²), så du får et overslag.";
        return null;
      }
      const n = parseFloat(raw);
      if(!Number.isFinite(n)){
        area.classList.add("gpb-invalid");
        areaHelp.textContent = "Indtast et tal (m²), fx 40.";
        return null;
      }
      area.classList.remove("gpb-invalid");
      areaHelp.textContent = "Samlet areal (typisk 10–200 m²). De første m² er ofte dyrest.";
      return clamp(n, 10, 200);
    }

    function readBathM2(){
      const raw = (bathM2?.value ?? "").toString().trim();
      const n = parseFloat(raw);
      if(!Number.isFinite(n)) return 6;
      return clamp(n, 3, 12);
    }

    function typeHelpText(){
      const map = {
        light_wood: "Let konstruktion kan være hurtigere. Den endelige pris afhænger især af facade, vinduer og detaljer.",
        brick: "Muret tilbygning matcher ofte huset. Typisk dyrere end let konstruktion pga. materialer og arbejdstid.",
        exclusive: "Eksklusiv/arkitekt: flere detaljer, specialløsninger og ofte dyrere materialevalg."
      };
      typeHelp.textContent = map[type.value] || "Basis m²-pris uden køkken/bad. Materialer og detaljer flytter meget.";
    }

    function contentLabel(){
      const o = content.options[content.selectedIndex];
      return (o && o.textContent) ? o.textContent.trim() : "";
    }

    function shouldShowBath(){
      return (content.value === "bath" || content.value === "kitchen_bath");
    }

    function compute(){
      typeHelpText();
      pill.textContent = "Vejledende overslag";

      if(bathField){
        bathField.classList.toggle("gpb-hidden", !shouldShowBath());
      }

      const m2Val = readArea();
      if(m2Val === null){
        totalOut.textContent = "—";
        rangeOut.textContent = "—";
        rateOut.textContent  = "—";
        outArea.textContent = "—";
        outType.textContent = (baseTable[type.value] || baseTable.brick).label;
        outContent.textContent = contentLabel();
        outM2.textContent = "—";
        outBase.textContent = "—";
        outSetup.textContent = "—";
        outKitchen.textContent = "—";
        outBath.textContent = "—";
        outAdvice.textContent = "—";
        outTotal.textContent = "—";
        badgeOut.textContent = "";
        return;
      }

      const m2 = m2Val;

      const t = baseTable[type.value] || baseTable.brick;
      const fA = areaFactor(m2);
      const fL = areaLevelFactor();
      const fR = roofFactor();
      const fC = complexityFactor();
      const fG = groundFactor();
      const fW = glazingFactor();

      const factor = fA * fL * fR * fC * fG * fW;

      const m2Low  = t.low  * factor;
      const m2High = t.high * factor;
      const m2Mid  = mid(m2Low, m2High);

      const baseLow  = m2 * m2Low;
      const baseHigh = m2 * m2High;
      const baseMid  = m2 * m2Mid;

      const setupAdj = (fL * fC * fG);
      const setupLow  = SETUP.low  * setupAdj;
      const setupHigh = SETUP.high * setupAdj;
      const setupMid  = mid(setupLow, setupHigh);

      let kitchenLow=0, kitchenHigh=0, kitchenMid=0;
      let bathLow=0, bathHigh=0, bathMid=0;

      const withKitchen = (content.value === "kitchen" || content.value === "kitchen_bath");
      const withBath    = shouldShowBath();

      if(withKitchen){
        kitchenLow  = KITCHEN.low  * fL;
        kitchenHigh = KITCHEN.high * fL;
        kitchenMid  = mid(kitchenLow, kitchenHigh);
      }

      if(withBath){
        const bm2 = readBathM2();
        bathLow  = bm2 * (BATH_PER_M2.low  * fL);
        bathHigh = bm2 * (BATH_PER_M2.high * fL);
        bathMid  = mid(bathLow, bathHigh);
      }

      const sumLow  = baseLow  + setupLow  + kitchenLow  + bathLow;
      const sumHigh = baseHigh + setupHigh + kitchenHigh + bathHigh;
      const sumMid  = baseMid  + setupMid  + kitchenMid  + bathMid;

      const ap = advicePct();
      const advLow  = sumLow  * ap;
      const advHigh = sumHigh * ap;
      const advMid  = sumMid  * ap;

      let totalLowInc  = sumLow  + advLow;
      let totalHighInc = sumHigh + advHigh;
      let totalMidInc  = sumMid  + advMid;

      const ranged = enforceMinRange(totalLowInc, totalHighInc, totalMidInc);
      totalLowInc  = ranged.low;
      totalHighInc = ranged.high;

      const vF = vatFactor();
      const suffix = vatSuffix();

      const totalLow  = totalLowInc  * vF;
      const totalHigh = totalHighInc * vF;
      const totalMid  = totalMidInc  * vF;

      const m2Shown = (totalMidInc / m2) * vF;

      totalOut.textContent = nfCur.format(round0(totalMid)) + " " + suffix;
      rangeOut.textContent = "Prisspænd " + nfCur.format(round0(totalLow)) + "–" + nfCur.format(round0(totalHigh)) + " " + suffix;
      rateOut.textContent  = "Effektiv pris pr. m² (alt inkl.): " + nfCur.format(round0(m2Shown)) + "/m² " + suffix;

      outArea.textContent = nfInt.format(m2) + " m²";
      outType.textContent = t.label;
      outContent.textContent = contentLabel();
      outM2.textContent = nfCur.format(round0(m2Shown)) + "/m² " + suffix;
      outBase.textContent = nfCur.format(round0(baseMid * vF));
      outSetup.textContent = nfCur.format(round0(setupMid * vF));
      outKitchen.textContent = withKitchen ? nfCur.format(round0(kitchenMid * vF)) : "0 kr.";
      outBath.textContent = withBath ? nfCur.format(round0(bathMid * vF)) : "0 kr.";
      outAdvice.textContent = (ap > 0) ? nfCur.format(round0(advMid * vF)) : "0 kr.";
      outTotal.textContent = nfCur.format(round0(totalMid));

      badgeOut.textContent = "";
      try{
        localStorage.setItem(storageKey, JSON.stringify({
          m2, type: type.value, roof: roof.value, content: content.value,
          bathM2: withBath ? readBathM2() : 6,
          glazing: glazing.value,
          complexity: complexity.value, ground: ground.value,
          areaLevel: areaLevel.value, advice: advice.value, vat: vat.value
        }));
      }catch(e){}
    }

    function restore(){
      try{
        const saved = JSON.parse(localStorage.getItem(storageKey) || "null");
        if(!saved) return;
        if(saved.m2 != null) area.value = saved.m2;
        if(saved.type) type.value = saved.type;
        if(saved.roof) roof.value = saved.roof;
        if(saved.content) content.value = saved.content;
        if(saved.bathM2 != null && bathM2) bathM2.value = saved.bathM2;
        if(saved.glazing) glazing.value = saved.glazing;
        if(saved.complexity) complexity.value = saved.complexity;
        if(saved.ground) ground.value = saved.ground;
        if(saved.areaLevel) areaLevel.value = saved.areaLevel;
        if(saved.advice != null) advice.value = saved.advice;
        if(saved.vat) vat.value = saved.vat;
      }catch(e){}
    }

    function showToast(msg){
      toast.textContent = msg;
      toast.style.display = "block";
      setTimeout(() => (toast.style.display = "none"), 2200);
    }

    function projectText(){
      const m2Val = readArea();
      const m2 = (m2Val === null) ? 40 : m2Val;

      const typeTxt = type.options[type.selectedIndex]?.textContent?.trim() || "";
      const roofTxt = roof.options[roof.selectedIndex]?.textContent?.trim() || "";
      const contentTxt = content.options[content.selectedIndex]?.textContent?.trim() || "";
      const bathTxt = shouldShowBath() ? (" Bad ca. " + readBathM2() + " m².") : "";
      const glazeTxt = glazing.options[glazing.selectedIndex]?.textContent?.trim() || "";
      const compTxt = complexity.options[complexity.selectedIndex]?.textContent?.trim() || "";
      const groundTxt = ground.options[ground.selectedIndex]?.textContent?.trim() || "";
      const levelTxt = areaLevel.options[areaLevel.selectedIndex]?.textContent?.trim() || "";
      const advTxt = advice.options[advice.selectedIndex]?.textContent?.trim() || "";
      const vatTxt = (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";

      return (
        "Tilbygning til bolig. " +
        "Areal ca. " + m2 + " m². " +
        "Type: " + typeTxt + ". " +
        "Tag: " + roofTxt + ". " +
        "Indhold: " + contentTxt + "." + bathTxt + " " +
        "Vinduer/døre: " + glazeTxt + ". " +
        "Kompleksitet: " + compTxt + ". " +
        "Jordbund/fundament: " + groundTxt + ". " +
        "Prisniveau: " + levelTxt + ". " +
        "Rådgivning/projektering: " + advTxt + ". " +
        "Ønsker pris " + vatTxt + ". " +
        "Inkludér i tilbud: fundament/jord, sammenbygning (åbninger/afstivning), tagkonstruktion, vinduer/døre, el/VVS/ventilation, finish (gulv/væg/loft), samt tidsplan og aflevering."
      );
    }

    let raf = 0;
    function schedule(){ if(raf) cancelAnimationFrame(raf); raf = requestAnimationFrame(compute); }

    [area, type, roof, content, bathM2, glazing, complexity, ground, areaLevel, advice, vat]
      .filter(Boolean)
      .forEach((n) => {
        n.addEventListener("input", schedule);
        n.addEventListener("change", schedule);
      });

    copyBtn.addEventListener("click", async () => {
      const text = projectText();
      try{ await navigator.clipboard.writeText(text); showToast("Kopieret."); }
      catch(e){
        const ta = document.createElement("textarea");
        ta.value = text; document.body.appendChild(ta); ta.select();
        try{ document.execCommand("copy"); }catch(err){}
        document.body.removeChild(ta);
        showToast("Kopieret.");
      }
    });

    resetBtn.addEventListener("click", () => {
      area.value = 40;
      type.value = "brick";
      roof.value = "flat";
      content.value = "rooms";
      if(bathM2) bathM2.value = 6;
      glazing.value = "normal";
      complexity.value = "simple";
      ground.value = "normal";
      areaLevel.value = "normal";
      advice.value = "5";
      vat.value = "inc";
      try{ localStorage.removeItem(storageKey); }catch(e){}
      area.classList.remove("gpb-invalid");
      areaHelp.textContent = "Samlet areal (typisk 10–200 m²). De første m² er ofte dyrest.";
      schedule();
      showToast("Nulstillet.");
    });

    restore();
    schedule();
  });
})();
</script></p>

</div><div class="bde-rich-text-1060-165 bde-rich-text breakdance-rich-text-styles">
<h2>Få tre uforpligtende tilbud på tilbygninger</h2>
<p>Når du har et nogenlunde klart billede af behov, rammer og retning, giver det mening at få konkrete bud på bordet.</p>
<p>Tre tilbud gør det lettere at se, hvad der er realistisk, og hvad der virker billigt, fordi noget mangler. Det er også her, du opdager forskelle i kvalitet og tilgang: Er materialer specificeret tydeligt? Er tidsplanen realistisk? Er det klart, hvem der har ansvaret, hvis der opstår noget uforudset?</p>
<p>Hvis du vil starte med noget, der er til at sammenligne, kan du <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" rel="sponsored noopener" target="_blank">indhente tre uforpligtende tilbud på din tilbygning</a>.</p>
</div><div class="bde-globalblock-1060-167 bde-globalblock"><div class="bde-rich-text-1062-100-1062-3 bde-rich-text bde-rich-text-1062-100 breakdance-rich-text-styles">
<p><style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-690 {
  position: relative;
  width: 690px;
  height: 90px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px 20px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  overflow: hidden;
}

.ad-690::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(245,245,242,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(245,245,242,0.05) 1px, transparent 1px);
  background-size: 32px 32px;
  z-index: 0;
}

.ad-690::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at center,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-690 > * {
  position: relative;
  z-index: 1;
}

.ad-690-content {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.ad-690-label {
  font-size: 0.65rem;
  opacity: 0.8;
}

.ad-690-headline {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.2;
}

.ad-690-text {
  font-size: 0.9rem;
  opacity: 0.9;
}

.ad-690-cta {
  background: var(--brand-light);
  color: #10110C !important;
  padding: 12px 22px;
  border-radius: 999px;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

@media (max-width: 768px) {

  .ad-690 {
    width: 336px;
    height: 280px;
    flex-direction: column;
    align-items: stretch;
    justify-content: space-between;
    padding: 16px;
    gap: 0;
  }

  .ad-690-content {
    gap: 10px;
  }

  .ad-690-label {
    font-size: 0.7rem;
    opacity: 0.8;
  }

  .ad-690-headline {
    font-size: 1.35rem;
    line-height: 1.25;
    font-weight: 600;
  }

  .ad-690-text {
    font-size: 0.95rem;
    line-height: 1.5;
    color: #E6ECE8;
  }

  .ad-690-cta {
    width: 100%;
    text-align: center;
    padding: 12px;
    font-size: 1.1rem;
    border-radius: 999px;
  }
}

</style></p>
<aside class="ad-690">
<div class="ad-690-content">
<div class="ad-690-label">Annonce</div>
<div class="ad-690-headline">Overvejer du en tilbygning til dit hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på tilbygningsprojekter.</div>
</div>
<a class="ad-690-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1060-172 bde-rich-text breakdance-rich-text-styles">

</div>
</div><div class="bde-column-1060-173 bde-column">
  
  
	



<div class="bde-table-of-contents-1060-174 bde-table-of-contents">
<div class="bde-table-of-contents__wrapper">
  <header class="bde-table-of-contents__header">
        <h3 class="bde-table-of-contents__title toc-ignore">Indholdsfortegnelse</h3>
           </header>
  
  <div class="bde-table-of-contents__list">
    <nav id="bde-toc" class="toc js-breakdance-toc" aria-label="Indholdsfortegnelse">There are no headings in this document.</nav>
  </div>
</div>


</div><div class="bde-div-1060-175 bde-div">
  
  
	



<div class="bde-text-1060-176 bde-text">
Vi samarbejder med 3Byggetilbud.dk og modtager provision for henvisninger via links på denne side. Vi tager ikke ansvar for kvaliteten af det udførte arbejde eller for aftaler indgået mellem dig og de formidlede håndværkere. Alle aftaler indgås direkte mellem dig og den valgte håndværker.
</div>
</div><div class="bde-globalblock-1060-177 bde-globalblock"><div class="bde-rich-text-1063-100-1063-1 bde-rich-text bde-rich-text-1063-100 breakdance-rich-text-styles">
<style>
:root{
  --brand: #203723;
  --brand-light: #CCFA74;
  --text-light: #F5F5F2;
}

.ad-336 {
  position: relative;
  width: 336px;
  height: 280px;
  background-color: var(--brand);
  border-radius: 8px;
  padding: 16px;
  color: var(--text-light);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  overflow: hidden;
}

.ad-336::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(
      rgba(245,245,242,0.05) 1px,
      transparent 1px
    ),
    linear-gradient(
      90deg,
      rgba(245,245,242,0.05) 1px,
      transparent 1px
    );
  background-size: 32px 32px;
  z-index: 0;
}

.ad-336::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      ellipse at top,
      rgba(255,255,255,0.06) 0%,
      rgba(0,0,0,0.35) 70%
    );
  z-index: 0;
}

.ad-336 > * {
  position: relative;
  z-index: 1;
}

.ad-content {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.ad-label {
  font-size: 0.7rem;
  opacity: 0.8;
}

.ad-headline {
  font-size: 1.35rem;
  line-height: 1.25;
  font-weight: 600;
}

.ad-text {
  font-size: 0.95rem;
  line-height: 1.5;
  color: #E6ECE8;
}

.ad-badge {
  align-self: flex-start;
  border: 1px solid rgba(204,250,116,0.6);
  color: #EAF7C8;
  padding: 6px 10px;
  border-radius: 999px;
  font-size: 0.75rem;
}

.ad-footer {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.ad-cta {
  background: var(--brand-light);
  color: #10110C !important;
  text-align: center;
  padding: 12px;
  border-radius: 999px;
  font-size: 1.1rem;
  font-weight: 600;
  text-decoration: none;
}

.ad-note {
  font-size: 0.7rem;
  opacity: 0.85;
  text-align: center;
}
</style>

<aside class="ad-336">
  <div class="ad-content">
    <div class="ad-label">Annonce</div>

    <div class="ad-headline">
      Overvejer du en tilbygning?
    </div>

    <div class="ad-text">
      Få et hurtigt overblik og sammenlign tilbud på tilbygningsprojekter.
    </div>

    <div class="ad-badge">
      Gratis og uforpligtende
    </div>
  </div>

  <div class="ad-footer">
    <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/tilbygning/" class="ad-cta" target="_blank" rel="nofollow sponsored noopener">
      Få 3 gratis tilbud
    </a>

    <div class="ad-note">
      Sammenlign pris og løsning
    </div>
  </div>
</aside>

</div></div>
</div></div></div>
</section>]]></content:encoded>
					
					<wfw:commentRss>https://mitboligprojekt.dk/tilbygning-8-ting-foer-du-bygger-til/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
