<?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>Gulvarbejde &#8211; MitBoligProjekt.dk</title>
	<atom:link href="https://mitboligprojekt.dk/kategori/gulvarbejde/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 11:25:27 +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>Gulvarbejde &#8211; MitBoligProjekt.dk</title>
	<link>https://mitboligprojekt.dk</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Gulvvarme i 70’er-huset: Sådan får du varme fødder uden at sprænge budgettet</title>
		<link>https://mitboligprojekt.dk/gulvvarme-i-70er-hus/</link>
					<comments>https://mitboligprojekt.dk/gulvvarme-i-70er-hus/#respond</comments>
		
		<dc:creator><![CDATA[Tobias]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 08:35:23 +0000</pubDate>
				<category><![CDATA[Gulvarbejde]]></category>
		<guid isPermaLink="false">https://mitboligprojekt.dk/?p=1449</guid>

					<description><![CDATA[70’er-huset blev tegnet til radiatorer og tæpper, ikke til varme nedefra. Men gulvvarme kan være den opgradering, der får hele stueplanet til at føles nyere, roligere og mere behageligt at bo i, hvis du rammer den rigtige løsning til netop din gulvkonstruktion.]]></description>
										<content:encoded><![CDATA[<section class="bde-section-1449-138 bde-section">
  
  
	



<div class="section-container"><div class="bde-columns-1449-139 bde-columns"><div class="bde-column-1449-140 bde-column">
  
  
	



<div class="bde-div-1449-141 bde-div">
  
  
	



<div class="bde-breadcrumbs-1449-142 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">Gulvarbejde</span></p></nav></div><ul class="bde-post-meta-1449-143 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-1449-144 bde-fancy-divider">


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

</div><div class="bde-rich-text-1449-145 bde-rich-text breakdance-rich-text-styles">
<h1><span style="font-weight: bold;">Gulvvarme i 70’er-huset:</span> <span style="font-weight: 500;">Sådan får du varme fødder uden at sprænge budgettet</span></h1>
</div><div class="bde-text-1449-146 bde-text">
<p>70’er-huset blev tegnet til radiatorer og tæpper, ikke til varme nedefra. Men gulvvarme kan være den opgradering, der får hele stueplanet til at føles nyere, roligere og mere behageligt at bo i, hvis du rammer den rigtige løsning til netop din gulvkonstruktion.</p>

</div><img decoding="async" class="bde-image2-1449-147 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.34.15.webp" alt="Gulvmand monterer gulvvarmeslange i sporplader med aluminium, som del af renovering af et 70’er hus." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.34.15.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.34.15-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.34.15-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.34.15-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1449-148 bde-rich-text breakdance-rich-text-styles">
Gulvmand monterer gulvvarmeslange i sporplader med aluminium, som del af renovering af et 70’er hus.
</div><div class="bde-fancy-divider-1449-149 bde-fancy-divider">


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

</div><div class="bde-rich-text-1449-150 bde-rich-text breakdance-rich-text-styles">
<p data-pm-slice="1 1 []">Der er to typer 70’er-huse om vinteren.</p>
<p>Dem, hvor man lærer at gå i uldsokker året rundt. Og dem, hvor nogen på et tidspunkt har gjort noget ved gulvene.</p>
<p>For mange er det ikke varmeregningen, der starter tanken. Det er følelsen. Entréens klinker, der aldrig bliver venlige. Stuen, hvor radiatoren gør sit bedste, men stadig efterlader et køligt bånd ved vinduerne. Og de rum, hvor du kan mærke kulden, før du kan se den.</p>
<p>Gulvvarme lyder som luksus, men i praksis er det ofte en meget konkret måde at få mere stabil varme, færre kolde hjørner og et hjem, der føles mere “samlet”. Særligt i 70’er-huse, hvor planløsningerne tit er åbne, rummene store, og radiatorer kan virke som små varmelamper i hver sin ende.</p>
<p>Vil du have et realistisk bud på pris og metode i dit eget hus, er den hurtigste genvej typisk at få flere fagfolk til at regne på det samme. Det kan du gøre via <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/gulvarbejde/" target="_blank" rel="noopener">3byggetilbud.dk</a> (gratis og uforpligtende), så du får tal på bordet i stedet for gætterier.</p>
</div><div class="bde-globalblock-1449-151 bde-globalblock"><div class="bde-rich-text-1452-100-1452-1 bde-rich-text bde-rich-text-1452-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 gulvvarme til dit 70'er hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på gulvvarme.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1449-152 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Hvorfor gulvvarme giver mening i et 70’er hus</h2>
<p>Mange 70’er-huse blev tegnet med lange gulvflader, brede stuer og den der karakteristiske “én stor daglig zone”, hvor køkken, alrum og stue glider sammen.</p>
<p>Det er godt nyt for gulvvarme.</p>
<p>Hvor radiatorer typisk varmer lokalt og får luften til at cirkulere, arbejder gulvvarme mere stille. Varmen fordeler sig jævnt og opleves ofte som en rolig baggrund i stedet for et system, der hele tiden tænder, slukker og skubber temperaturerne op og ned.</p>
<p>Det mærkes i hverdagen, især i rum med store vinduespartier. Ikke fordi gulvvarme er magi, men fordi du får en større, lun flade at “varme fra”. Det tager toppen af trækfornemmelsen og gør det lettere at holde en stabil temperatur uden at skrue op til et niveau, der føles som en sauna ved radiatoren.</p>
<p>Der er også en anden gevinst, som tit først går op for folk, når radiatorerne er væk. Indretningen bliver nemmere. Du får fri vægplads. Gardiner, sofaer og reoler skal ikke længere tage hensyn til, hvor varmen sidder.</p>
</div><div class="bde-rich-text-1449-153 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Start her: Hvilken gulvkonstruktion har du egentlig?</h2>
<p>Hvis du vil have gulvvarme, der føles godt og fungerer ordentligt, skal du starte under gulvet.</p>
<p>I 70’er-huse ser man typisk tre varianter.</p>
<p>Nogle har terrændæk i beton i store dele af huset, ofte med isolering, der var almindelig dengang, men som kan være tynd efter nutidens standard. Andre har trægulve på strøer, især i værelser eller på etagedæk. Og en del huse ender med en blanding, fordi der er lavet tilbygning, ombygning eller renoveringer gennem årene.</p>
<p>Det er ikke bare et teknisk spørgsmål. Det afgør også, hvor meget projektet griber ind i huset.</p>
<p>Hvis du kan fræse spor i et eksisterende betongulv, kan du nogle gange holde højderne nede. Hvis du skal bygge et nyt lag ovenpå, påvirker det døre, lister, trapper og i værste fald køkkenets højde. Og hvis du har trægulv, skal systemet tænkes sammen med stabilitet, underlag og fugtforhold, ellers får du knirk og bevægelser, der kan irritere længe efter håndværkerne er gået.</p>
<p>En hurtig tommelfingerregel er derfor denne: Jo mere du ved om gulvets opbygning, jo færre dyre overraskelser får du senere.</p>
</div><div class="bde-rich-text-1449-154 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Vandbåren eller elektrisk gulvvarme?</h2>
<p>Der findes to hovedspor, og de bliver ofte talt op som om det handler om smag. I virkeligheden handler det mere om drift, areal og varmekilde.</p>
<p>Vandbåren gulvvarme er typisk den mest oplagte løsning, når du taler større arealer. Den kobles på husets varmeproduktion, og den kan ofte køre med lavere temperatur end radiatorer. Det er især interessant, hvis du har eller overvejer varmepumpe, fordi varmepumper elsker lave fremløbstemperaturer.</p>
<p>Elektrisk gulvvarme giver til gengæld mening i mindre rum, hvor komforten er stor, men arealet begrænset. Badeværelse, entré og bryggers er klassikerne. Her kan du få varme fødder og tørre klinker uden at røre ved resten af varmeanlægget.</p>
<p>Det vigtige er at være ærlig om brugen.</p>
<p>Elektrisk gulvvarme kan blive dyr i drift, hvis du varmer et stort stueplan i mange timer hver dag. Omvendt kan vandbåren gulvvarme føles som overkill, hvis du bare drømmer om et lunere badeværelse.</p>
<p>Mange ender med en kombination, især i huse hvor man renoverer i etaper.</p>
</div><div class="bde-globalblock-1449-155 bde-globalblock"><div class="bde-rich-text-1452-100-1452-2 bde-rich-text bde-rich-text-1452-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 gulvvarme til dit 70'er hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på gulvvarme.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1449-156 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Isolering: Det sted gulvvarme enten bliver genialt eller irriterende</h2>
<p>Gulvvarme er bedst, når varmen bliver i rummet.</p>
<p>Det lyder indlysende, men i 70’er-huse er det ofte her, regnestykket vipper, fordi varmen ellers kan forsvinde nedad i konstruktionen.</p>
<p>Hvis gulvet er dårligt isoleret, kan en del af varmen forsvinde nedad. Du får stadig gulvvarme, ja, men du kan også få en oplevelse af, at systemet skal arbejde hårdere end nødvendigt. Det kan give højere driftsomkostninger og en lidt trægere respons.</p>
<p>Efterisolering under eller i forbindelse med en ny gulvopbygning er derfor ofte den manøvre, der giver mest effekt. Ikke kun på økonomien, men på komforten. Gulvet føles mindre “koldt” i grundtemperaturen, og varmen bliver mere stabil.</p>
<p>Her er det også værd at huske, at gulvvarme tit er mest logisk, når du alligevel skal lave gulvet. Hvis du står over for nye gulve, nye overflader eller en større energirenovering, kan gulvvarme tænkes ind som en del af samme greb, i stedet for at være et ekstra projekt på siden.</p>
</div><div class="bde-rich-text-1449-158 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Hvad koster gulvvarme i et 70’er hus?</h2>
<p>Prisen er ikke én pris. Det er en pakke.</p>
<p>For i virkeligheden betaler du ikke kun for slanger eller kabler. Du betaler for opbygning, underlag, eventuel efterisolering, styring, tilslutning og ofte også for det nye gulv ovenpå.</p>
<p>Som pejlemærker ligger man ofte omkring</p>
<ul data-spread="false">
<li>
<p>Vandbåren gulvvarme i forbindelse med gulvrenovering: cirka 800–1.200 kr. pr. m² afhængigt af opbygning, rum og kompleksitet.</p>
</li>
<li>
<p>Elektrisk gulvvarme: cirka 400–600 kr. pr. m² for selve varmedelen, men el-arbejde, underlag og belægning kommer typisk oveni.</p>
</li>
<li>
<p>Efterisolering og ekstra opbygning: ofte 300–500 kr. pr. m², og i nogle huse mere, hvis der skal løses niveauforskelle eller særlige forhold.</p>
</li>
</ul>
<p>De tal er grove, men de illustrerer pointen. To huse kan være lige store, og alligevel lande i hver sin prisklasse, hvis det ene har en enkel gulvopbygning og let adgang, mens det andet kræver omfattende opbygning, tilpasning af døre og meget arbejde med afslutninger.</p>
<p>Det er også derfor, tre konkrete tilbud er langt mere værd end ti generelle prisartikler. Når en håndværker har set gulvet, kan metoden pludselig blive tydelig.</p>
</div><div class="bde-rich-text-1449-157 bde-rich-text breakdance-rich-text-styles">
<!-- GULVVARME I 70'ER HUS – PRISBEREGNER v1.0 (Breakdance HTML-element) -->
<style>
  .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); }

  .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; }

    .gpb-line{ align-items:flex-start; }
    .gpb-line span:last-child{
      white-space:normal;
      overflow-wrap:anywhere;
      text-align:right;
      max-width:52%;
    }
    .gpb-kpi-value{
      white-space:normal;
      overflow-wrap:anywhere;
    }
  }
</style>

<div class="gpb-wrap" role="region" data-gvh="v1" aria-label="Prisberegner til gulvvarme i 70'er hus">
  <div class="gpb-top">
    <div>
      <p class="gpb-title">Prisberegner: gulvvarme i 70’er hus (vejledende)</p>
      <p class="gpb-sub">
        Indtast areal og vælg løsning. Du får et overslag baseret på typiske prisniveauer for ny opbygning vs. renovering,
        samt tillæg for isolering, gulvtype og adgang/logistik. Brug det som startbudget – ikke som endelig pris.
      </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 bolig og dit gulv</p>

    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Areal med gulvvarme</label>
        <div class="gpb-control">
          <input class="gpb-input" min="10" max="250" step="1" type="number" value="80" inputmode="numeric" data-area />
          <div class="gpb-unit" aria-hidden="true">m²</div>
        </div>
        <p class="gpb-help" data-areahelp>Typisk 10–250 m². Renovering i flere rum giver ofte bedre enhedspris.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Projekt-type</label>
        <select class="gpb-select" data-project>
          <option value="new">Nyt gulv / ny opbygning (ingen opbrydning)</option>
          <option value="reno" selected>Renovering (gulv op, klargøring og ny opbygning)</option>
        </select>
        <p class="gpb-help" data-projecthelp>Renovering i 70’er huse trækker ofte op pga. opbrydning og underlag.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">System</label>
        <select class="gpb-select" data-system>
          <option value="water" selected>Vandbåren gulvvarme</option>
          <option value="electric">El-gulvvarme (varmemåtter)</option>
        </select>
        <p class="gpb-help" data-systemhelp>Vand er typisk billigst i drift. El er ofte bedst i små rum.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Varmekilde</label>
        <select class="gpb-select" data-heat>
          <option value="district" selected>Fjernvarme</option>
          <option value="hp">Varmepumpe</option>
          <option value="gas">Gasfyr</option>
          <option value="oil">Oliefyr</option>
          <option value="electric">Primært el (dyrt i drift)</option>
        </select>
        <p class="gpb-help">Bruges til små realisme-tillæg (styring, tilpasning, driftstendens).</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Efterisolering under gulv</label>
        <select class="gpb-select" data-insulation>
          <option value="none">Ingen / minimal (ikke anbefalet)</option>
          <option value="some" selected>Normal (typisk opgradering)</option>
          <option value="high">Høj (mere isolering/bedre løsning)</option>
        </select>
        <p class="gpb-help">I 70’er huse er isolering ofte det, der afgør komfort og varmeforbrug.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Gulvtype ovenpå</label>
        <select class="gpb-select" data-floor>
          <option value="tile">Fliser/klinker</option>
          <option value="wood" selected>Trægulv/lamel (gulvvarme-egnet)</option>
          <option value="vinyl">Vinyl/linoleum</option>
        </select>
        <p class="gpb-help">Påvirker typisk underlag, støb/afretning og udførelse.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Adgang/logistik</label>
        <select class="gpb-select" data-access>
          <option value="easy">Let (god adgang, korte afstande)</option>
          <option value="normal" selected>Normal</option>
          <option value="hard">Svær (bæring, smal adgang, meget affald)</option>
        </select>
        <p class="gpb-help">Opbrydning og bortskaffelse kan flytte prisen i renovering.</p>
      </div>

      <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 (fx København/Frederiksberg)</option>
        </select>
        <p class="gpb-help">Grov justering for lokale prisforskelle.</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">Projekt-type<span data-out-project>—</span></div>
          <div class="gpb-line">System<span data-out-system>—</span></div>
          <div class="gpb-line">Gulvtype<span data-out-floor>—</span></div>
          <div class="gpb-line">Effektiv pris pr. m²<span data-out-m2>—</span></div>

          <div class="gpb-line">Gulvvarmesystem + montering<span data-out-systemcost>—</span></div>
          <div class="gpb-line">Opbrydning/klargøring<span data-out-demo>—</span></div>
          <div class="gpb-line">Isolering/undergulv<span data-out-insulation>—</span></div>
          <div class="gpb-line">Afretning/støb + underlag<span data-out-level>—</span></div>
          <div class="gpb-line">Styring/tilslutning<span data-out-control>—</span></div>
          <div class="gpb-line">Logistik/affald<span data-out-logistics>—</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 på gulvvarme i dit 70’er hus? 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/gulvarbejde/" rel="nofollow sponsored noopener" target="_blank">Indhent 3 tilbud</a>
    </div>
  </div>
</div>

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

  function linkLabels(root, idx){
    const prefix = "gvh_" + idx + "_";
    let n = 0;

    root.querySelectorAll(".gpb-field").forEach((field) => {
      const label = field.querySelector(".gpb-label");
      const control = field.querySelector(".gpb-input, .gpb-select");
      if(!label || !control) return;

      if(!control.id){
        const key =
          control.hasAttribute("data-area") ? "area" :
          control.hasAttribute("data-project") ? "project" :
          control.hasAttribute("data-system") ? "system" :
          control.hasAttribute("data-heat") ? "heat" :
          control.hasAttribute("data-insulation") ? "insulation" :
          control.hasAttribute("data-floor") ? "floor" :
          control.hasAttribute("data-access") ? "access" :
          control.hasAttribute("data-arealevel") ? "arealevel" :
          control.hasAttribute("data-vat") ? "vat" :
          ("field" + (n++));
        control.id = prefix + key;
      }
      label.setAttribute("for", control.id);

      const help = field.querySelector(".gpb-help");
      if(help){
        if(!help.id) help.id = control.id + "__help";
        const existing = (control.getAttribute("aria-describedby") || "").trim();
        const want = help.id;
        if(!existing){
          control.setAttribute("aria-describedby", want);
        }else if(!existing.split(/\s+/).includes(want)){
          control.setAttribute("aria-describedby", existing + " " + want);
        }
      }
    });
  }

  instances.forEach((root, idx) => {
    linkLabels(root, idx);

    const storageKey = "gulvvarme_70er_beregner_v1_" + idx;
    const q = (sel) => root.querySelector(sel);

    const area = q("[data-area]");
    const project = q("[data-project]");
    const system = q("[data-system]");
    const heat = q("[data-heat]");
    const insulation = q("[data-insulation]");
    const floor = q("[data-floor]");
    const access = q("[data-access]");
    const areaLevel = q("[data-arealevel]");
    const vat = q("[data-vat]");

    const pill = q("[data-pill]");
    const areaHelp = q("[data-areahelp]");
    const projectHelp = q("[data-projecthelp]");
    const systemHelp = q("[data-systemhelp]");

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

    const outArea = q("[data-out-area]");
    const outProject = q("[data-out-project]");
    const outSystem = q("[data-out-system]");
    const outFloor = q("[data-out-floor]");
    const outM2 = q("[data-out-m2]");

    const outSystemCost = q("[data-out-systemcost]");
    const outDemo = q("[data-out-demo]");
    const outInsulation = q("[data-out-insulation]");
    const outLevel = q("[data-out-level]");
    const outControl = q("[data-out-control]");
    const outLogistics = q("[data-out-logistics]");
    const outTotal = q("[data-out-total]");

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

    if(!area || !project || !system || !heat || !insulation || !floor || !access || !areaLevel || !vat) 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;

    const MIN_RANGE_PCT = 0.16;

    function areaLevelFactor(){
      if(areaLevel.value === "low") return 0.95;
      if(areaLevel.value === "high") return 1.10;
      return 1.00;
    }
    function accessFactor(){
      if(access.value === "easy") return 0.95;
      if(access.value === "hard") return 1.12;
      return 1.00;
    }
    function vatFactor(){
      return (vat.value === "ex") ? 0.8 : 1.0;
    }
    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");
        if(areaHelp) areaHelp.textContent = "Indtast areal (m²) for at få et overslag.";
        return null;
      }
      const n = parseFloat(raw);
      if(!Number.isFinite(n)){
        area.classList.add("gpb-invalid");
        if(areaHelp) areaHelp.textContent = "Indtast et tal (m²), fx 80.";
        return null;
      }
      area.classList.remove("gpb-invalid");
      if(areaHelp) areaHelp.textContent = "Typisk 10–250 m². Renovering i flere rum giver ofte bedre enhedspris.";
      return clamp(n, 10, 250);
    }

    function labels(){
      const p = project.options[project.selectedIndex]?.textContent?.trim() || "";
      const s = system.options[system.selectedIndex]?.textContent?.trim() || "";
      const f = floor.options[floor.selectedIndex]?.textContent?.trim() || "";
      return { p, s, f };
    }

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

      if(projectHelp){
        projectHelp.textContent =
          (project.value === "reno")
            ? "Renovering i 70’er huse trækker ofte op pga. opbrydning og underlag."
            : "Nyt gulv/ny opbygning er typisk billigere end renovering med opbrydning.";
      }

      if(systemHelp){
        systemHelp.textContent =
          (system.value === "water")
            ? "Vand er typisk billigst i drift og bedst til større arealer."
            : "El er ofte bedst i små rum og som supplement. Drift kan være dyrere.";
      }

      const m2Val = readArea();
      if(m2Val === null){
        totalOut.textContent = "—";
        rangeOut.textContent = "—";
        rateOut.textContent  = "—";
        outArea.textContent = "—";
        outProject.textContent = project.options[project.selectedIndex]?.textContent?.trim() || "—";
        outSystem.textContent = system.options[system.selectedIndex]?.textContent?.trim() || "—";
        outFloor.textContent = floor.options[floor.selectedIndex]?.textContent?.trim() || "—";
        outM2.textContent = "—";
        outSystemCost.textContent = "—";
        outDemo.textContent = "—";
        outInsulation.textContent = "—";
        outLevel.textContent = "—";
        outControl.textContent = "—";
        outLogistics.textContent = "—";
        outTotal.textContent = "—";
        badgeOut.textContent = "";
        return;
      }

      const m2 = m2Val;
      const fL = areaLevelFactor();
      const fAcc = accessFactor();

      // Skala: små arealer bliver dyrere pr. m²
      function sizeFactor(m2){
        if(m2 < 25) return 1.18;
        if(m2 < 50) return 1.08;
        if(m2 < 110) return 1.00;
        return 0.97;
      }
      const fSize = sizeFactor(m2);

      // Baseline pr. m² (professionel, groft niveau)
      const BASE = {
        new:  { low: 850,  high: 1200 },
        reno: { low: 1200, high: 2200 }
      };

      // System-faktor: vand typisk dyrere i etablering end el i små løsninger,
      // men ved "reno" vil begge ofte ligge i samme totalområde – vi justerer moderat.
      function systemFactor(){
        if(system.value === "electric"){
          // el kan være billigere at etablere, men vi holder den realistisk (ofte stadig ny opbygning/afretning m.m.)
          return (project.value === "new") ? 0.95 : 0.97;
        }
        return 1.00;
      }

      // Isolering: tillæg pr. m² (typisk, groft) – især relevant i reno
      function insulationAdd(){
        if(insulation.value === "none") return { low: 0, high: 120 };
        if(insulation.value === "high") return { low: 180, high: 340 };
        return { low: 90, high: 220 };
      }

      // Gulvtype påvirker afretning/underlag (ikke selve gulvbelægning, kun det "under")
      function floorFactor(){
        if(floor.value === "tile") return 1.05;
        if(floor.value === "vinyl") return 0.98;
        return 1.00; // wood
      }

      // Varmekilde: små realisme-tillæg til styring/tilslutning
      function heatControlAdd(){
        if(system.value !== "water") return { low: 800, high: 1800 }; // termostat/elektriker/opsætning
        if(heat.value === "district") return { low: 3500, high: 8000 };
        if(heat.value === "hp") return { low: 4500, high: 9500 };
        if(heat.value === "gas") return { low: 4000, high: 9000 };
        if(heat.value === "oil") return { low: 4500, high: 10000 };
        return { low: 5000, high: 12000 }; // primært el / blandet
      }

      // Logistik/affald – især reno
      function logisticsPack(){
        if(project.value === "new") return { low: 1800, high: 4200 };
        return { low: 3500, high: 9000 };
      }

      // Opbrydning/klargøring – kun reno
      function demoPack(){
        if(project.value === "new") return { low: 0, high: 0 };
        // grov: pr. m² + minimum
        const low = Math.max(12000, m2 * 180);
        const high = Math.max(24000, m2 * 360);
        return { low, high };
      }

      // Split total i poster: system/montering, demo, isolering, afretning/underlag, styring/tilslutning, logistik
      const base = BASE[project.value];
      const fSys = systemFactor();
      const fFloor = floorFactor();

      // System + montering (hoveddelen): baseline pr. m² * m², justeret
      let sysLow = m2 * (base.low * fL * fAcc * fSize * fSys * fFloor);
      let sysHigh = m2 * (base.high * fL * fAcc * fSize * fSys * fFloor);

      // For at undgå urealistisk lave tal på små projekter: minimum
      const sysMin = (project.value === "new") ? 22000 : 35000;
      sysLow = Math.max(sysLow, sysMin * fL * fAcc);
      sysHigh = Math.max(sysHigh, (sysMin * 1.35) * fL * fAcc);

      const sysMid = mid(sysLow, sysHigh);

      // Demo
      const demo = demoPack();
      const demoLow = demo.low * fL * fAcc;
      const demoHigh = demo.high * fL * fAcc;
      const demoMid = mid(demoLow, demoHigh);

      // Isolering
      const ins = insulationAdd();
      let insLow = m2 * (ins.low * fL * fSize);
      let insHigh = m2 * (ins.high * fL * fSize);

      // Hvis man vælger "none", hold stadig et lille minimum i reno (tætning/udbedring)
      if(insulation.value === "none" && project.value === "reno"){
        insLow = Math.max(insLow, 3500 * fL);
        insHigh = Math.max(insHigh, 6500 * fL);
      }
      const insMid = mid(insLow, insHigh);

      // Afretning/underlag (flydespartel/støb/varmefordelingsplader) – typisk højere i reno
      function levelPack(){
        if(project.value === "new") return { low: 140, high: 280 }; // pr. m²
        return { low: 220, high: 520 }; // pr. m²
      }
      const lvl = levelPack();
      const lvlLow = m2 * (lvl.low * fL * fSize * fFloor);
      const lvlHigh = m2 * (lvl.high * fL * fSize * fFloor);
      const lvlMid = mid(lvlLow, lvlHigh);

      // Styring/tilslutning
      const ctrl = heatControlAdd();
      const ctrlLow = ctrl.low * fL;
      const ctrlHigh = ctrl.high * fL;
      const ctrlMid = mid(ctrlLow, ctrlHigh);

      // Logistik/affald
      const log = logisticsPack();
      const logLow = log.low * fL * fAcc;
      const logHigh = log.high * fL * fAcc;
      const logMid = mid(logLow, logHigh);

      // Sum
      let totalLowInc = sysLow + demoLow + insLow + lvlLow + ctrlLow + logLow;
      let totalHighInc = sysHigh + demoHigh + insHigh + lvlHigh + ctrlHigh + logHigh;
      let totalMidInc = sysMid + demoMid + insMid + lvlMid + ctrlMid + logMid;

      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 perM2 = totalMid / m2;

      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²: " + nfCur.format(round0(perM2)) + "/m² " + suffix;

      const lab = labels();
      outArea.textContent = nfInt.format(m2) + " m²";
      outProject.textContent = lab.p || "—";
      outSystem.textContent = lab.s || "—";
      outFloor.textContent = lab.f || "—";
      outM2.textContent = nfCur.format(round0(perM2)) + "/m² " + suffix;

      outSystemCost.textContent = nfCur.format(round0(sysMid * vF));
      outDemo.textContent = nfCur.format(round0(demoMid * vF));
      outInsulation.textContent = nfCur.format(round0(insMid * vF));
      outLevel.textContent = nfCur.format(round0(lvlMid * vF));
      outControl.textContent = nfCur.format(round0(ctrlMid * vF));
      outLogistics.textContent = nfCur.format(round0(logMid * vF));
      outTotal.textContent = nfCur.format(round0(totalMid)) + " " + suffix;

      badgeOut.textContent = "";

      try{
        localStorage.setItem(storageKey, JSON.stringify({
          m2, project: project.value, system: system.value, heat: heat.value,
          insulation: insulation.value, floor: floor.value, access: access.value,
          areaLevel: areaLevel.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.project) project.value = saved.project;
        if(saved.system) system.value = saved.system;
        if(saved.heat) heat.value = saved.heat;
        if(saved.insulation) insulation.value = saved.insulation;
        if(saved.floor) floor.value = saved.floor;
        if(saved.access) access.value = saved.access;
        if(saved.areaLevel) areaLevel.value = saved.areaLevel;
        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) ? 80 : m2Val;

      const projectTxt = project.options[project.selectedIndex]?.textContent?.trim() || "";
      const systemTxt = system.options[system.selectedIndex]?.textContent?.trim() || "";
      const heatTxt = heat.options[heat.selectedIndex]?.textContent?.trim() || "";
      const insTxt = insulation.options[insulation.selectedIndex]?.textContent?.trim() || "";
      const floorTxt = floor.options[floor.selectedIndex]?.textContent?.trim() || "";
      const accessTxt = access.options[access.selectedIndex]?.textContent?.trim() || "";
      const levelTxt = areaLevel.options[areaLevel.selectedIndex]?.textContent?.trim() || "";
      const vatTxt = (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";

      return (
        "Etablering af gulvvarme i 70’er hus. " +
        "Areal ca. " + m2 + " m². " +
        "Projekt-type: " + projectTxt + ". " +
        "System: " + systemTxt + ". " +
        "Varmekilde: " + heatTxt + ". " +
        "Efterisolering: " + insTxt + ". " +
        "Gulvtype: " + floorTxt + ". " +
        "Adgang/logistik: " + accessTxt + ". " +
        "Prisniveau: " + levelTxt + ". " +
        "Ønsker pris " + vatTxt + ". " +
        "Inkludér i tilbud: opbrydning/bortskaffelse (ved reno), isolering, undergulv/afretning/støb, gulvvarmesystem, styring/termostater, tilslutning (VVS/el), samt tidsplan og aflevering."
      );
    }

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

    [area, project, system, heat, insulation, floor, access, areaLevel, 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 = 80;
      project.value = "reno";
      system.value = "water";
      heat.value = "district";
      insulation.value = "some";
      floor.value = "wood";
      access.value = "normal";
      areaLevel.value = "normal";
      vat.value = "inc";
      try{ localStorage.removeItem(storageKey); }catch(e){}
      area.classList.remove("gpb-invalid");
      if(areaHelp) areaHelp.textContent = "Typisk 10–250 m². Renovering i flere rum giver ofte bedre enhedspris.";
      schedule();
      showToast("Nulstillet.");
    });

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

</div><div class="bde-rich-text-1449-159 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Tre typiske løsninger i praksis</h2>
<p>Når man ser på gulvvarmeprojekter i 70’er-huse, lander mange i en af tre løsninger.</p>
<p>Den første er fræsning i eksisterende beton. Her fræser man spor til slanger i gulvet og lukker dem igen. Fordelen er, at du ofte kan undgå stor forhøjelse af gulvet. Ulempen er, at det kræver den rigtige type betongulv, og at isoleringsforholdene stadig kan være afgørende for, hvor effektivt det bliver.</p>
<p>Den anden er ny opbygning ovenpå eksisterende gulv. Det er en meget almindelig løsning, især når man alligevel skal have nye gulve. Her kan man tænke isolering, varmefordeling og underlag ordentligt igennem. Til gengæld skal du forholde dig til højder, dørtrin, lister og i nogle tilfælde køkken og faste skabe.</p>
<p>Den tredje er pladesystemer til trægulve, ofte i rum med strøer eller etagedæk. Det kan være en god og relativt skånsom måde at få vandbåren gulvvarme på uden at støbe nyt. Men det kræver præcision. Små fejl i opbygning og afstivning kan give knirk, “bløde” gulve eller varmefordeling, der ikke føles helt rigtig.</p>
<p>Hvilken løsning der passer bedst, kan sjældent afgøres ud fra en beskrivelse alene. Man skal ofte se gulvet, måle højder og vurdere, hvor meget du kan og vil ændre.</p>
</div><div class="bde-rich-text-1449-160 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Varmekilden: Den skjulte motor i hele projektet</h2>
<p>Gulvvarme handler ikke kun om gulv. Det handler også om, hvordan huset laver varme.</p>
<p>Vandbåren gulvvarme fungerer bedst, når varmekilden kan levere varme ved relativt lav temperatur. Derfor passer gulvvarme ofte rigtig godt sammen med varmepumper. Fjernvarme kan også fungere rigtig fint, men kræver ofte en korrekt opsat blandesløjfe og regulering, så gulvkredsene ikke får for høj temperatur.</p>
<p>Har du en ældre kedel, kan gulvvarme stadig være mulig, men det kan påvirke effektiviteten og styringen. Det er ikke et argument for at skifte alt på én gang. Det er et argument for at tænke systemet sammen, så du ikke ender med et dyrt gulvvarmeanlæg, der bliver styret af en varmekilde, som ikke spiller optimalt med lave temperaturer.</p>
</div><div class="bde-globalblock-1449-166 bde-globalblock"><div class="bde-rich-text-1452-100-1452-3 bde-rich-text bde-rich-text-1452-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 gulvvarme til dit 70'er hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på gulvvarme.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1449-161 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Gulvbelægning: Træ, klinker og det du helst vil gå på</h2>
<p>Klinker er den oplagte makker til gulvvarme. De leder varme godt og føles naturligt lune.</p>
<p>Men mange 70’er-huse har store opholdsrum, hvor man hellere vil have træ, laminat eller vinyl. Det kan også fungere, men du skal vælge rigtigt.</p>
<p>Trægulve kan være fine på gulvvarme, især hvis de er lamelopbyggede og stabile. Massive gulve kan også fungere, men kræver ofte mere omtanke om træsort, tykkelse og fugt. Nogle gulvtyper isolerer mere, og så kan du opleve, at gulvvarmen føles lidt “svagere”, selvom den arbejder.</p>
<p>Vinyl og linoleum kan være gode løsninger, men her er temperaturgrænser og underlag vigtige. Det samme gælder laminat, hvor kvalitet og specifikationer betyder meget for både komfort og levetid.</p>
<p>Hvis du allerede drømmer om en bestemt belægning, så tag den med i planlægningen fra start. Det er en klassiker at designe varmesystemet først og bagefter opdage, at gulvet, man helst vil gå på, ikke passer til opbygningen.</p>
</div><img decoding="async" class="bde-image2-1449-162 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.55.21.webp" alt="Under renovering af et 70’er-hus lægges gulvvarme i hjørnet af et lyst rum – gulvvarmerør monteres på aluminiumsplader langs vinduet." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.55.21.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.55.21-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.55.21-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-16.-feb.-2026-09.55.21-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1449-163 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Styring og zoner: Det punkt folk ofte undervurderer</h2>
<p>Gulvvarme reagerer ikke som en radiator. Det er en vigtig detalje.</p>
<p>Gulvet har masse, og det betyder, at opvarmning og nedkøling tager tid. Det kan være en fordel, fordi temperaturen bliver mere stabil. Men det kræver, at styringen er gennemtænkt.</p>
<p>Zonestyring kan gøre en mærkbar forskel i 70’er-huse, især hvor rum hænger sammen, og hvor solen kan varme stuen op, mens værelserne ligger koldere. Med zoner og ordentlig indregulering undgår du, at huset bliver for varmt det ene sted og for koldt det andet.</p>
<p>Det handler ikke om “smarte” gadgets. Det handler om komfort og kontrol.</p>
</div><div class="bde-rich-text-1449-164 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">De klassiske faldgruber i 70’er huse</h2>
<p>Det første problem er næsten altid højder, og det er her, mange projekter bliver dyrere end forventet.</p>
<p>Selv få centimeter kan få konsekvenser for døre, trin, paneler og faste installationer. Og det kan blive dyrt, hvis man først opdager det, når gulvet er lagt.</p>
<p>Det andet er fugt og konstruktion. Nogle 70’er-huse har forhold, hvor det er vigtigt at tænke ventilation, underlag og opbygning rigtigt. Det gælder især ved terrændæk og ved renovering af gulve, der allerede har været “lappet” flere gange.</p>
<p>Det tredje er forventninger. Gulvvarme kan løfte komforten markant, men det kan ikke alene redde et hus med store utætheder eller dårlig isolering i klimaskærmen. Hvis huset taber varmen hurtigt, kan det være klogt at tænke i helhed, hvor gulv, vinduer, tætningslister og varmekilde spiller sammen.</p>
</div><div class="bde-rich-text-1449-165 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Hvornår gulvvarme giver mest mening</h2>
<p>Gulvvarme giver ofte bedst mening i tre situationer.</p>
<p>Når du alligevel skal skifte gulve. Her betaler du allerede for nedrivning, opbygning og belægning, og gulvvarmen bliver en del af samme projekt.</p>
<p>Når du opgraderer varmekilden, for eksempel til varmepumpe. Her kan gulvvarme være den løsning, der får varmepumpen til at arbejde mere effektivt og mere stabilt.</p>
<p>Og når du vil have komfort i udvalgte rum. Badeværelse, entré og bryggers er de steder, hvor du får stor effekt uden nødvendigvis at røre hele huset.</p>
</div><div class="bde-rich-text-1449-167 bde-rich-text breakdance-rich-text-styles">
<h2 data-pm-slice="1 1 []">Klar til at få tilbud på gulvvarme i 70’er hus?</h2>
<p>Det bedste næste skridt er næsten altid at få en faglig vurdering af gulvets opbygning og dine muligheder, før du beslutter metode og budget.</p>
<p>Vil du hurtigt have konkrete priser og forslag, kan du indhente <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/gulvarbejde/" target="_blank" rel="noopener">3 uforpligtende tilbud</a> via <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/gulvarbejde/" target="_blank" rel="noopener">3byggetilbud.dk</a>. Så kan du sammenligne løsninger og ikke kun tal, og du får et klart billede af, hvad der giver mest mening i netop dit 70’er-hus.</p>
</div><div class="bde-globalblock-1449-172 bde-globalblock"><div class="bde-rich-text-1452-100-1452-4 bde-rich-text bde-rich-text-1452-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 gulvvarme til dit 70'er hus?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud på gulvvarme.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1449-173 bde-rich-text breakdance-rich-text-styles">

</div>
</div><div class="bde-column-1449-174 bde-column">
  
  
	



<div class="bde-table-of-contents-1449-175 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-1449-176 bde-div">
  
  
	



<div class="bde-text-1449-177 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-1449-178 bde-globalblock"><div class="bde-rich-text-1453-100-1453-1 bde-rich-text bde-rich-text-1453-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 gulvvarme?
    </div>

    <div class="ad-text">
      Få et hurtigt overblik og sammenlign tilbud på gulvvarme til et 70'er 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/gulvarbejde/" 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/gulvvarme-i-70er-hus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kan det betale sig at få slebet gulvet eller lægge et nyt?</title>
		<link>https://mitboligprojekt.dk/gulvafslibning-eller-nyt-gulv/</link>
					<comments>https://mitboligprojekt.dk/gulvafslibning-eller-nyt-gulv/#respond</comments>
		
		<dc:creator><![CDATA[Tobias]]></dc:creator>
		<pubDate>Sun, 08 Feb 2026 14:49:10 +0000</pubDate>
				<category><![CDATA[Gulvarbejde]]></category>
		<guid isPermaLink="false">https://mitboligprojekt.dk/?p=1013</guid>

					<description><![CDATA[Et slidt trægulv kan få hele boligen til at se træt ud, men løsningen er ikke altid at skifte det ud. I mange danske hjem gemmer der sig gulve, der kan blive virkelig flotte igen med en gulvafslibning og en ny overfladebehandling. I denne guide får du hjælp til at vurdere, om dit gulv kan slibes, hvor langt en professionel kan komme, hvad det typisk koster, og hvornår det faktisk giver mest mening at lægge et nyt gulv.]]></description>
										<content:encoded><![CDATA[<section class="bde-section-1013-100 bde-section">
  
  
	



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



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



<div class="bde-breadcrumbs-1013-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">Gulvarbejde</span></p></nav></div><ul class="bde-post-meta-1013-105 bde-post-meta">            <li class="ee-postmeta-date-wrap">
                                                        <span class="ee-postmeta-date"><span
                            class="ee-postmeta-before">Senest opdateret: </span>8. februar 2026</span>
                                </li>
            </ul>
</div><div class="bde-fancy-divider-1013-106 bde-fancy-divider">


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

</div><div class="bde-rich-text-1013-107 bde-rich-text breakdance-rich-text-styles">
<h1>Kan det betale sig at få slebet gulvet eller lægge et nyt?</h1>
</div><div class="bde-text-1013-108 bde-text">
<p>Et slidt trægulv kan få hele boligen til at se træt ud, men løsningen er ikke altid at skifte det ud. I mange danske hjem gemmer der sig gulve, der kan blive virkelig flotte igen med en gulvafslibning og en ny overfladebehandling. I denne guide får du hjælp til at vurdere, om dit gulv kan slibes, hvor langt en professionel kan komme, hvad det typisk koster, og hvornår det faktisk giver mest mening at lægge et nyt gulv.</p>

</div><img decoding="async" class="bde-image2-1013-109 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.47.54.webp" alt="Split-screen før/efter gulvafslibning i moderne lejlighed – slidt gyldent plankegulv vs. nyslebet lyst trægulv." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.47.54.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.47.54-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.47.54-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.47.54-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1013-110 bde-rich-text breakdance-rich-text-styles">
Split-screen før/efter gulvafslibning i moderne lejlighed – slidt gyldent plankegulv vs. nyslebet lyst trægulv.
</div><div class="bde-fancy-divider-1013-111 bde-fancy-divider">


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

</div><div class="bde-rich-text-1013-112 bde-rich-text breakdance-rich-text-styles">
<p><span class="selection-highlight bg-[Highlight]!">Der er noget særligt ved et gammelt trægulv. Det knirker måske lidt, og det har sikkert set både flyttekasser, legoklodser og små uheld gennem årene. Men det har også en varme og en tyngde, som mange moderne klikgulve bare ikke kan kopiere. Derfor står mange boligejere med det samme spørgsmål, når gulvet bliver mat, ridset eller plettet: Skal vi slibe det, eller skal vi starte forfra med et helt nyt gulv?</span></p>
<p><span class="selection-highlight bg-[Highlight]!">Svaret afhænger af tre ting. Hvilket gulv du har. Hvor slidt det er. Og hvad du vil ende med, både i udtryk, komfort og pris.</span></p>
<p><span class="selection-highlight bg-[Highlight]!">Hvis du vil have en konkret vurdering af dit gulv og en pris, kan det være en fordel at indhente flere bud. Mange vælger at starte med </span><a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/gulvarbejde/" rel="sponsored noopener" target="_blank"><span class="selection-highlight bg-[Highlight]!">tre gratis og uforpligtende tilbud på gulvarbejde</span></a><span class="selection-highlight bg-[Highlight]!">, så man kan sammenligne både metode, materialer og totalpris.</span></p>
</div><div class="bde-globalblock-1013-113 bde-globalblock"><div class="bde-rich-text-1019-100-1019-1 bde-rich-text bde-rich-text-1019-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">Ønsker du et tilbud på gulvafslibning?</div>
<div class="ad-690-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning af dit gulv.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>

</div></div><div class="bde-rich-text-1013-114 bde-rich-text breakdance-rich-text-styles">
<h2><span class="selection-highlight bg-[Highlight]!">Derfor giver gulvafslibning ofte mere værdi end man tror</span></h2>
<p><span class="selection-highlight bg-[Highlight]!">Når man ser et slidt gulv hver dag, kan det være svært at forestille sig, at det kan blive pænt igen. Men gulvafslibning er i praksis en slags nulstilling. Den fjerner den gamle overflade, de små ridser, misfarvninger og den matte “film”, der kommer af mange års brug. Når gulvet bagefter får en ny behandling med lak, olie, sæbe eller lud, kan det ligne et helt andet rum.</span></p>
<p><span class="selection-highlight bg-[Highlight]!">For mange handler det også om at bevare noget, der allerede er godt. Et ældre plankegulv er typisk lavet af massivt træ og har ofte en kvalitet, der er svær at købe i dag uden at betale en helt anden pris. Hvis gulvet kan slibes, er det ofte den mest nænsomme og økonomiske måde at få et markant løft i boligen.</span></p>
<p><span class="selection-highlight bg-[Highlight]!">Det betyder ikke, at slibning altid er det rigtige. Nogle gulve er simpelthen for tynde. Andre er så ujævne eller skadede, at det kræver en mere grov behandling, eller at udskiftning giver mere mening. Men før du afskriver muligheden, er det værd at vide, hvordan man vurderer gulvet i praksis.</span></p>
</div><div class="bde-rich-text-1013-138 bde-rich-text breakdance-rich-text-styles">
<h2><span class="selection-highlight bg-[Highlight]!">Start med gulvtypen: Nogle gulve kan slibes mange gange, andre næsten ikke</span></h2>
<p><span class="selection-highlight bg-[Highlight]!">Det vigtigste spørgsmål er ikke, om gulvet ser slidt ud. Det vigtigste er, hvad der ligger under den sli</span>dte overflade.</p>
<p>Massive plankegulve og traditionelle bræddegulve kan som regel tåle flere slibninger, fordi der er “kød” i træet. Det er også ofte de gulve, der bliver rigtig flotte efter en professionel tur, fordi åretegningen og patinaen kommer frem på en måde, der føles ægte.</p>
<p>Parketgulve og lamelgulve kan også ofte slibes, men her er det afgørende, hvor tykt slidlaget er. Mange lamelgulve er bygget op af flere lag, hvor kun det øverste lag er det pæne træ. Hvis det øverste lag er tyndt, kan du måske kun klare én slibning, og nogle gange slet ingen.</p>
<p>Klikgulve i laminat eller vinyl kan ikke slibes på samme måde. De har ikke et trælag, du kan “gå ned i”. Hvis det er sådan et gulv, du har, handler valget typisk om reparation eller udskiftning.</p>
<p>Hvis du er i tvivl om typen, kan et gulvfirma ofte vurdere det hurtigt ved at kigge på en synlig kant ved en dør, ved en liste eller et gulvvarmerør. Det kan være et lille kig, der sparer dig for at træffe en dyr beslutning på et forkert grundlag.</p>
</div><div class="bde-rich-text-1013-116 bde-rich-text breakdance-rich-text-styles">
<h2>Hvor mange gange kan et trægulv slibes?</h2>
<p>Der findes ikke et magisk tal, men der findes en logik.</p>
<p>Hver gang man sliber et gulv, fjerner man en tynd del af overfladen. På massive gulve er det sjældent et problem, fordi der er masser af træ at arbejde med. På lamelgulve er det derimod helt centralt. Her kan slidlaget være så tyndt, at én afslibning er det, der er tilbage.</p>
<p>Derfor er en god tommelfingerregel: Jo mere “massivt” gulvet er, jo mere spillerum har du. Jo mere gulvet er bygget op af lag, jo mere skal du passe på.</p>
<p>Det er også derfor, man nogle gange hører om gulve, der bliver ødelagt af en for hård slibning. Ikke fordi slibning i sig selv er farligt, men fordi man kan slibe igennem slidlaget, hvis man ikke ved, hvad man arbejder med.</p>
<p>Et professionelt gulvfirma vil typisk være forsigtigt. De vælger kornstørrelser og slibeforløb ud fra gulvets type og tilstand, og de kan ofte tage en snak med dig om, hvor meget der realistisk kan fjernes, før man nærmer sig en grænse.</p>
</div><div class="bde-rich-text-1013-118 bde-rich-text breakdance-rich-text-styles">
<h2>Hvad kan en gulvafslibning rette op på, og hvad kan den ikke?</h2>
<p>Gulvafslibning kan meget. Men den er ikke magisk.</p>
<p>Den kan typisk fjerne almindelige ridser, slidspor, små hakker og pletter. Den kan også tage den grå, mat overflade, som især lakerede gulve kan få efter mange år. Har gulvet gamle skygger efter tæpper eller møbler, kan slibning ofte udligne farveforskelle, så gulvet bliver mere ens.</p>
<p>Men der er også ting, der ikke forsvinder bare fordi du sliber.</p>
<p>Hvis gulvet har dybe brandmærker, store vandskader eller decideret råd, kan det kræve udskiftning af enkelte brædder. Og hvis gulvet er meget ujævnt, kan man nogle gange forbedre det, men man kan sjældent gøre det perfekt uden at fjerne rigtig meget materiale.</p>
<p>Det er her, forventningsafstemning betyder alt. Et ældre gulv må godt se ud som et ældre gulv. Mange synes faktisk, at det er charmen. Men hvis du ønsker et helt ensartet “nybyggerlook”, er det værd at tale med gulvfirmaet om, hvad der realistisk kan lade sig gøre.</p>
</div><div class="bde-globalblock-1013-119 bde-globalblock"><div class="bde-rich-text-1019-100-1019-2 bde-rich-text bde-rich-text-1019-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">Ønsker du et tilbud på gulvafslibning?</div>
<div class="ad-690-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning af dit gulv.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>

</div></div><div class="bde-rich-text-1013-120 bde-rich-text breakdance-rich-text-styles">
<h2>Gulvafhøvling: Den grove løsning, der kan være nødvendig</h2>
<p>Nogle gulve kan ikke nøjes med en almindelig afslibning. Hvis gulvet har meget dybe ridser, gammel fernis, malingrester, lim i samlinger eller store ujævnheder, kan en gulvafhøvling være nødvendig før slibningen.</p>
<p>Afhøvling er en grovere proces, hvor man tager mere af gulvets overflade af i et hug. Det kan være den rigtige løsning, hvis gulvet er “for langt ude” til, at en slibning kan give et pænt resultat.</p>
<p>Men afhøvling kræver også, at gulvet kan tåle det. Hvis gulvet allerede er tyndt eller slidt ned, kan en afhøvling tage dig for tæt på grænsen, og så står du pludselig med et gulv, der er blevet svagere.</p>
<p>Derfor giver det mening at se afhøvling som et værktøj, ikke som standard. Det er noget, man vælger, når gulvet kræver det.</p>
</div><div class="bde-rich-text-1013-121 bde-rich-text breakdance-rich-text-styles">
<h2>Efterbehandling: Her bliver resultatet for alvor besluttet</h2>
<p>Når gulvet er slebet, står du med et rent stykke træ. Og herfra kan udtrykket gå i flere retninger.</p>
<p>Lak giver typisk en stærk og slidstærk overflade, som er nem at holde ren. Det er ofte et populært valg i børnefamilier og i rum med meget trafik. Lak kan fås i forskellige glansgrader, og det er ofte glansen, der afgør, om gulvet ser moderne eller mere klassisk ud.</p>
<p>Olie giver en anden følelse. Mange oplever, at olierede gulve ser mere “levende” ud, fordi træstrukturen står tydeligere. Til gengæld kræver olierede gulve typisk mere løbende vedligehold. Ikke hver uge, men en plan, hvor du giver gulvet nyt olie, når det begynder at se tørt ud.</p>
<p>Sæbebehandling og lud bruges ofte, hvis man ønsker et lyst og nordisk udtryk. Lud kan lysne eller “stoppe” træets naturlige gulning, og sæbe giver en mere mat og naturlig overflade. Det kan blive rigtig flot, især på lyse plankegulve, men det er også en type gulv, der bedst trives med den rigtige rengøring og vedligehold.</p>
<p>Det bedste råd er egentlig simpelt: Vælg efterbehandling ud fra din hverdag, ikke kun ud fra billeder. Har du hund, små børn eller en gang, der får alt trafikken, så må du gerne vælge en løsning, der er nem at leve med.</p>
</div><img decoding="async" class="bde-image2-1013-117 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.28.29.webp" alt="Nærfoto af professionel gulvslibemaskine der sliber bredt plankegulv i moderne lejlighed, med gulvmandens ben og støv fra renovering i naturligt dagslys." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.28.29.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.28.29-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.28.29-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-8.-feb.-2026-15.28.29-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1013-123 bde-rich-text breakdance-rich-text-styles">
<h2>Hvad koster gulvafslibning, og hvorfor varierer prisen så meget?</h2>
<p>Prisen afhænger især af gulvets stand, arealet og den efterbehandling du vælger. Som pejlemærke ligger almindelig afslibning ofte i størrelsesordenen 70–155 kr. pr. m² inkl. moms.<br data-start="5526" data-end="5529" />Med efterbehandling ligger mange opgaver typisk omkring 100–165 kr. pr. m², men ved flere lag lak, meget forarbejde, reparationer eller mindstepris kan prisen ligge højere.</p>
<p>Vil du have et konkret billede, er der en række typiske priseksempler, der går igen:</p>
<p>En afslibning uden efterbehandling bliver ofte regnet omkring 95 kr. pr. m².</p>
<p>Slibning med lud eller olie ligger typisk omkring 120 til 145 kr. pr. m².</p>
<p>Slibning med lakering kan ligge omkring 135 til 200 kr. pr. m², især hvis der skal flere lag lak på.</p>
<p>Er der brug for gulvafhøvling først, ligger det ofte omkring 50 kr. ekstra pr. m² i forhold til en almindelig afslibning.</p>
<p>Et gulv på omkring 30 m² med fuld behandling ender ofte fra cirka 4.500 kr. og op, afhængigt af gulvets tilstand og valg af behandling.</p>
<p>Det er vejledende tal, men de er nyttige, fordi de viser, hvorfor to tilbud kan se meget forskellige ud. Hvis det ene tilbud inkluderer mere forarbejde, flere laklag, afdækning eller reparationer, kan det være en bedre løsning, selv om prisen pr. m² er højere.</p>
</div><div class="bde-rich-text-1013-115 bde-rich-text breakdance-rich-text-styles">
<!-- GULV – PRISBEREGNER V1.4b (Breakdance HTML-element) -->
<style>
  .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, .gpb-note, .gpb-details { 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; }
  .gpb-kpi-sub{ margin:0.15rem 0 0 0; font-size:0.86rem; color:#555; font-weight:300; }

  .gpb-badge{
    display:inline-flex; align-items:center; gap:0.4rem;
    border:1px solid #E1E1E1; border-radius:999px;
    padding:0.25rem 0.55rem;
    font-size:0.85rem; font-weight:500;
    color:#203723; background:#fff;
    white-space:nowrap;
  }

  .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-note{ margin-top:0.75rem; padding:0.7rem 0.8rem; border-radius:10px; border:1px solid #E1E1E1; background:#F5F5F2; font-size:0.9rem; color:#333; font-weight:300; }

  details.gpb-details{ margin-top:0.75rem; border:1px solid #E1E1E1; border-radius:10px; background:#fff; padding:0.55rem 0.75rem; }
  details.gpb-details summary{
    cursor:pointer; font-size:0.92rem; color:#203723; font-weight:500;
    display:flex; align-items:center; gap:0.5rem; list-style:none;
  }
  details.gpb-details summary::-webkit-details-marker{ display:none; }
  details.gpb-details summary::marker{ content:""; }
  details.gpb-details summary::after{
    content:""; width:16px; height:16px; flex:0 0 16px; margin-left:auto;
    background-repeat:no-repeat; background-position: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");
    transform:rotate(-90deg); transition:transform 0.15s ease;
  }
  details.gpb-details[open] summary::after{ transform:rotate(0deg); }
  details.gpb-details .gpb-details-body{ margin-top:0.55rem; font-size:0.88rem; color:#444; font-weight:300; line-height:1.5; }
  .gpb-details-body ul{ margin:0.35rem 0 0 1.1rem; padding:0; }
  .gpb-details-body li{ margin:0.25rem 0; }

  .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); }
  .gpb-smallprint{ margin-top:0.65rem; font-size:0.82rem; color:#666; font-weight:300; }

  @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>

<div class="gpb-wrap" data-gpb="v1" role="region" aria-label="Prisberegner til gulvafslibning">
  <div class="gpb-top">
    <div>
      <p class="gpb-title">Prisberegner: gulvafslibning, efterbehandling og tillæg</p>
      <p class="gpb-sub">Indtast areal og vælg efterbehandling, så får du et vejledende prisoverslag. Tallene er estimater – gulvets stand, tidligere behandling og boligens detaljer kan flytte prisen.</p>
    </div>
    <div class="gpb-pill" data-pill aria-hidden="true">Vejledende overslag</div>
  </div>

  <div class="gpb-card">
    <p class="gpb-section-title">Dit gulv og opgaven</p>

    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Areal</label>
        <div class="gpb-control">
          <input class="gpb-input" data-area max="500" min="5" step="1" type="number" value="50" />
          <div class="gpb-unit" aria-hidden="true">m²</div>
        </div>
        <p class="gpb-help" data-areahelp>Samlet areal, der skal afslibes. Store opgaver kan ofte give en lavere m²-pris.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Efterbehandling</label>
        <select class="gpb-select" data-treatment>
          <option selected value="sand_only">Ingen (kun afslibning)</option>
          <option value="sand_oil_lud">Olie eller lud</option>
          <option value="sand_lud_soap">Lud og sæbe</option>
          <option value="sand_lacquer_2">Lak (2 lag)</option>
          <option value="sand_lacquer_3">Lak (3 lag)</option>
        </select>
        <p class="gpb-help" data-treatmenthelp></p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Gulvets stand</label>
        <select class="gpb-select" data-condition>
          <option selected value="normal">Normal slitage</option>
          <option value="worn">Slidt (ridser og pletter)</option>
          <option value="rough">Meget slidt (fernis, maling eller ujævnheder)</option>
        </select>
        <p class="gpb-help">Et meget slidt gulv kan kræve ekstra forarbejde – og i nogle tilfælde afhøvling.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Afhøvling før afslibning</label>
        <select class="gpb-select" data-planing>
          <option selected value="0">Nej</option>
          <option value="1">Ja</option>
        </select>
        <p class="gpb-help">Ofte relevant ved fernis/maling, limrester, dybe hakker eller store ujævnheder (tillæg pr. m²).</p>
      </div>
    </div>

    <hr class="gpb-divider" />

    <p class="gpb-section-title">Tillæg og prisniveau</p>
    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Dørtrin</label>
        <div class="gpb-control">
          <input class="gpb-input" data-thresholds max="30" min="0" step="1" type="number" value="0" />
          <div class="gpb-unit" aria-hidden="true">stk.</div>
        </div>
        <p class="gpb-help">Tillæg pr. dørtrin inkl. afslibning og behandling.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Trappetrin</label>
        <div class="gpb-control">
          <input class="gpb-input" data-stairs max="40" min="0" step="1" type="number" value="0" />
          <div class="gpb-unit" aria-hidden="true">trin</div>
        </div>
        <p class="gpb-help">Trapper prissættes ofte pr. trin (tillæg).</p>
      </div>

      <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 selected value="normal">Normalt</option>
          <option value="high">Højt</option>
        </select>
        <p class="gpb-help">Lokale forskelle kan forekomme. Justeringen er et groft skøn.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Mindstepris (små opgaver)</label>
        <select class="gpb-select" data-minfee>
          <option selected value="1">Ja (typisk)</option>
          <option value="0">Nej</option>
        </select>
        <p class="gpb-help">Mange firmaer har en mindstepris pga. transport, opstart og afdækning.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Momsvisning</label>
        <select class="gpb-select" data-vat>
          <option selected value="inc">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 style="display:flex;align-items:baseline;gap:0.55rem;flex-wrap:wrap;justify-content:flex-end;">
            <span class="gpb-badge" data-vatbadge>inkl. moms</span>
            <span class="gpb-kpi-value" data-total>—</span>
          </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" data-badge style="font-weight:500;color:#203723;">—</div>
        </div>

        <div class="gpb-breakdown">
          <div class="gpb-line">Areal<span data-out-area>—</span></div>
          <div class="gpb-line">Efterbehandling<span data-out-treatment>—</span></div>
          <div class="gpb-line">Pris pr. m² (estimat)<span data-out-m2>—</span></div>
          <div class="gpb-line">Grundpris<span data-out-base>—</span></div>
          <div class="gpb-line">Afhøvling<span data-out-planing>—</span></div>
          <div class="gpb-line">Dørtrin<span data-out-thresholds>—</span></div>
          <div class="gpb-line">Trappetrin<span data-out-stairs>—</span></div>
          <div class="gpb-line">Mindstepris anvendt<span data-out-minfee>—</span></div>
          <div class="gpb-line gpb-line--total">I alt<span data-out-total>—</span></div>
        </div>

        <div class="gpb-note" data-hint></div>

        <details class="gpb-details">
          <summary>Sådan er tallene regnet</summary>
          <div class="gpb-details-body">
            <ul>
              <li>m²-priserne er vejledende intervaller for professionelle gulvfirmaer.</li>
              <li>Gulvets stand justerer prisen (ekstra arbejde, flere slibninger).</li>
              <li>Afhøvling regnes som et tillæg pr. m², når det er valgt.</li>
              <li>Dørtrin regnes pr. stk., og trappetrin regnes pr. trin (tillæg).</li>
              <li>Der er en valgfri mindstepris, som ofte ses ved små opgaver.</li>
              <li>Prisspændet har et minimum, så estimatet ikke bliver “samme–samme”.</li>
            </ul>
          </div>
        </details>

        <p class="gpb-kpi-sub" data-assume style="margin-top:0.65rem;">&nbsp;</p>
      </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" data-toast role="status" aria-live="polite">Kopieret.</div>
  </div>
</div>

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

  instances.forEach((root, idx) => {
    const storageKey = "gulv_prisberegner_v1_" + idx;

    const q = (sel) => root.querySelector(sel);

    const area = q("[data-area]");
    const treatment = q("[data-treatment]");
    const condition = q("[data-condition]");
    const planing = q("[data-planing]");
    const thresholds = q("[data-thresholds]");
    const stairs = q("[data-stairs]");
    const areaLevel = q("[data-arealevel]");
    const minFeeToggle = q("[data-minfee]");
    const vat = q("[data-vat]");

    const pill = q("[data-pill]");
    const treatmentHelp = q("[data-treatmenthelp]");
    const areaHelp = q("[data-areahelp]");

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

    const outArea = q("[data-out-area]");
    const outTreatment = q("[data-out-treatment]");
    const outM2 = q("[data-out-m2]");
    const outBase = q("[data-out-base]");
    const outPlaning = q("[data-out-planing]");
    const outThresholds = q("[data-out-thresholds]");
    const outStairs = q("[data-out-stairs]");
    const outMinFee = q("[data-out-minfee]");
    const outTotal = q("[data-out-total]");

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

    if(!area || !treatment || !condition || !planing) 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 priceTable = {
      sand_only:       { label:"Ingen (kun afslibning)", low:70,  high:95  },
      sand_oil_lud:    { label:"Olie eller lud",         low:120, high:145 },
      sand_lud_soap:   { label:"Lud og sæbe",            low:135, high:155 },
      sand_lacquer_2:  { label:"Lak (2 lag)",            low:135, high:165 },
      sand_lacquer_3:  { label:"Lak (3 lag)",            low:155, high:200 }
    };

    const ADD_PLANING   = { low:50,  high:70  };
    const ADD_THRESHOLD = { low:200, high:250 };
    const ADD_STAIR     = { low:250, high:350 };

    const MIN_JOB_FEE_INC = 3500;
    const MIN_RANGE_PCT = 0.12;

    function mid(low, high){ return (low + high) / 2; }

    function areaFactor(m2){
      if(m2 < 20) return 1.18;
      if(m2 < 35) return 1.08;
      if(m2 < 60) return 1.03;
      return 1.00;
    }
    function conditionFactor(){
      if(condition.value === "worn") return 1.07;
      if(condition.value === "rough") return 1.14;
      return 1.00;
    }
    function areaLevelFactor(){
      if(areaLevel.value === "low") return 0.95;
      if(areaLevel.value === "high") return 1.08;
      return 1.00;
    }
    function vatFactor(){
      return (vat.value === "ex") ? 0.8 : 1.0;
    }

    function updateTreatmentHelp(){
      const v = treatment.value;
      const map = {
        sand_only: "Kun afslibning. Godt hvis gulvet skal have anden behandling senere – eller hvis du vil have prisen på slibning isoleret.",
        sand_oil_lud: "Olie giver et mere “levende” udtryk og kræver løbende vedligehold. Lud lysner træet og bruges ofte sammen med sæbe eller olie.",
        sand_lud_soap: "Lud og sæbe giver et lyst, nordisk udtryk. Flot – men kræver korrekt rengøring og kan være mere følsomt over for pletter.",
        sand_lacquer_2: "Lak er typisk mest slidstærkt og nemt i hverdagen. 2 lag er standard ved normal belastning.",
        sand_lacquer_3: "3 lag lak vælges typisk ved høj belastning eller hvis du vil have ekstra robust overflade."
      };
      treatmentHelp.textContent = map[v] || "Efterbehandling påvirker både pris, slidstyrke og vedligehold.";
    }

    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 en pris.";
        return null;
      }
      const n = parseFloat(raw);
      if(!Number.isFinite(n)){
        area.classList.add("gpb-invalid");
        areaHelp.textContent = "Indtast et tal (m²), fx 45.";
        return null;
      }
      area.classList.remove("gpb-invalid");
      areaHelp.textContent = "Samlet areal, der skal afslibes. Store opgaver kan ofte give en lavere m²-pris.";
      return clamp(n, 5, 500);
    }

    function setVatUi(){
      const vatTxt = (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";
      vatBadge.textContent = vatTxt;
      badgeOut.textContent = "Værdier vises " + vatTxt;
      pill.textContent = "Vejledende overslag · " + vatTxt;
    }

    function compute(){
      updateTreatmentHelp();
      setVatUi();

      const m2Val = readArea();
      if(m2Val === null){
        totalOut.textContent = "—";
        rangeOut.textContent = "—";
        rateOut.textContent  = "—";
        outArea.textContent = "—";
        outTreatment.textContent = (priceTable[treatment.value] || priceTable.sand_only).label;
        outM2.textContent = "—";
        outBase.textContent = "—";
        outPlaning.textContent = "—";
        outThresholds.textContent = "—";
        outStairs.textContent = "—";
        outMinFee.textContent = "—";
        outTotal.textContent = "—";
        hintEl.textContent = "Tip: Indtast areal først – så får du et mere brugbart overslag.";
        assumeOut.textContent = "Vejledende estimat. Indtast manglende felter for at se beregningen.";
        return;
      }

      const m2  = m2Val;
      const thr = clamp(parseInt(thresholds.value || "0", 10), 0, 30);
      const st  = clamp(parseInt(stairs.value || "0", 10), 0, 40);

      const t = priceTable[treatment.value] || priceTable.sand_only;

      const fA = areaFactor(m2);
      const fC = conditionFactor();
      const fL = areaLevelFactor();

      const m2Low  = t.low  * fA * fC * fL;
      const m2High = t.high * fA * fC * fL;
      const m2Mid  = mid(m2Low, m2High);

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

      const planOn = (planing.value === "1");
      const plLow  = planOn ? (m2 * (ADD_PLANING.low  * fA * fC * fL)) : 0;
      const plHigh = planOn ? (m2 * (ADD_PLANING.high * fA * fC * fL)) : 0;
      const plMid  = planOn ? mid(plLow, plHigh) : 0;

      const thrLow  = thr * (ADD_THRESHOLD.low  * fL);
      const thrHigh = thr * (ADD_THRESHOLD.high * fL);
      const thrMid  = mid(thrLow, thrHigh);

      const stLow  = st * (ADD_STAIR.low  * fL);
      const stHigh = st * (ADD_STAIR.high * fL);
      const stMid  = mid(stLow, stHigh);

      let totalLowInc  = baseLow  + plLow  + thrLow  + stLow;
      let totalHighInc = baseHigh + plHigh + thrHigh + stHigh;
      let totalMidInc  = baseMid  + plMid  + thrMid  + stMid;

      let minApplied = false;
      if(minFeeToggle.value === "1" && totalMidInc < MIN_JOB_FEE_INC){
        minApplied = true;
        totalMidInc  = MIN_JOB_FEE_INC;
        totalLowInc  = Math.max(totalLowInc,  MIN_JOB_FEE_INC);
        totalHighInc = Math.max(totalHighInc, MIN_JOB_FEE_INC);
      }

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

      const vF = vatFactor();
      const totalLow  = totalLowInc  * vF;
      const totalHigh = totalHighInc * vF;
      const totalMid  = totalMidInc  * vF;

      const m2Shown = (minApplied ? (totalMidInc / m2) : m2Mid) * vF;

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

      outArea.textContent = nfInt.format(m2) + " m²";
      outTreatment.textContent = t.label;
      outM2.textContent = nfCur.format(round0(m2Shown)) + "/m²";
      outBase.textContent = nfCur.format(round0(baseMid * vF));
      outPlaning.textContent = planOn ? nfCur.format(round0(plMid * vF)) : "0 kr.";
      outThresholds.textContent = (thr > 0) ? nfCur.format(round0(thrMid * vF)) : "0 kr.";
      outStairs.textContent = (st > 0) ? nfCur.format(round0(stMid * vF)) : "0 kr.";
      outMinFee.textContent = minApplied ? "Ja" : "Nej";
      outTotal.textContent = nfCur.format(round0(totalMid));

      if(condition.value === "rough" && !planOn){
        hintEl.textContent = "Tip: Ved fernis/maling eller store ujævnheder kan afhøvling være nødvendig. Få gerne vurderet gulvets tykkelse, før du beslutter dig.";
      } else if(minApplied){
        hintEl.textContent = "Tip: Mindstepris slår ofte igennem ved små opgaver. Hvis du kan samle flere rum/arealer, kan m²-prisen ofte blive lavere.";
      } else {
        hintEl.textContent = "Tip: Sammenlign tilbud på samme forudsætninger (antal lag, reparationer, afdækning/støvkontrol og oprydning).";
      }

      const vatTxt = (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";
      assumeOut.textContent =
        "Vejledende estimat " + vatTxt + ". Gulvets stand, tidligere behandling, reparationer, afdækning, adgang og tørretid mellem lag kan ændre prisen.";

      try{
        localStorage.setItem(storageKey, JSON.stringify({
          m2, treatment: treatment.value, condition: condition.value, planing: planing.value,
          thr, st, areaLevel: areaLevel.value, minFee: minFeeToggle.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.treatment) treatment.value = saved.treatment;
        if(saved.condition) condition.value = saved.condition;
        if(saved.planing != null) planing.value = saved.planing;
        if(saved.thr != null) thresholds.value = saved.thr;
        if(saved.st != null) stairs.value = saved.st;
        if(saved.areaLevel) areaLevel.value = saved.areaLevel;
        if(saved.minFee != null) minFeeToggle.value = saved.minFee;
        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) ? 50 : m2Val;
      const thr = clamp(parseInt(thresholds.value || "0", 10), 0, 30);
      const st  = clamp(parseInt(stairs.value || "0", 10), 0, 40);
      const t = priceTable[treatment.value] || priceTable.sand_only;
      const condTxt  = condition.options[condition.selectedIndex]?.textContent?.trim() || "";
      const levelTxt = areaLevel.options[areaLevel.selectedIndex]?.textContent?.trim() || "";
      const planTxt  = (planing.value === "1") ? "Ja" : "Nej";
      const vatTxt   = (vat.value === "inc") ? "inkl. moms" : "ekskl. moms";

      return (
        "Gulvafslibning i bolig. " +
        "Areal ca. " + m2 + " m². " +
        "Efterbehandling: " + t.label + ". " +
        "Gulvets stand: " + condTxt + ". " +
        "Afhøvling før afslibning: " + planTxt + ". " +
        "Dørtrin: " + thr + " stk. Trappetrin: " + st + " trin. " +
        "Prisniveau i området: " + levelTxt + ". " +
        "Ønsker pris " + vatTxt + ". " +
        "Inkludér i tilbud: afdækning/støvkontrol, evt. reparationer/spartling, antal lag behandling, tørre-/hærdetid samt oprydning."
      );
    }

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

    [area, treatment, condition, planing, thresholds, stairs, areaLevel, minFeeToggle, vat].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 = 50;
      treatment.value = "sand_only";
      condition.value = "normal";
      planing.value = "0";
      thresholds.value = 0;
      stairs.value = 0;
      areaLevel.value = "normal";
      minFeeToggle.value = "1";
      vat.value = "inc";
      try{ localStorage.removeItem(storageKey); }catch(e){}
      area.classList.remove("gpb-invalid");
      areaHelp.textContent = "Samlet areal, der skal afslibes. Store opgaver kan ofte give en lavere m²-pris.";
      schedule();
      showToast("Nulstillet.");
    });

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

</div><div class="bde-globalblock-1013-122 bde-globalblock"><div class="bde-rich-text-1019-100-1019-3 bde-rich-text bde-rich-text-1019-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">Ønsker du et tilbud på gulvafslibning?</div>
<div class="ad-690-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning af dit gulv.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>

</div></div><div class="bde-rich-text-1013-124 bde-rich-text breakdance-rich-text-styles">
<h2>Nyt gulv: Det kan være fristende, men regnestykket har flere linjer</h2>
<p>Når man overvejer at lægge et nyt gulv, tænker mange først på prisen på selve gulvet. Men materialet er kun én del.</p>
<p>Der kan også være udgifter til at fjerne det gamle gulv, afrette undergulvet, lægge nyt underlag, tilpasse dørtrin, skifte lister og ordne overgange mellem rum. Hvis der er gulvvarme, skal man også være sikker på, at gulvtypen passer, og at man får den rigtige opbygning.</p>
<p>Et klikgulv kan være en fin løsning, hvis du vil have et hurtigt og relativt budgetvenligt løft. Men det ændrer også karakteren af boligen. Et gammelt plankegulv føles ikke som et klikgulv, og det kan være en del af grunden til, at du overhovedet overvejer projektet.</p>
<p>Derfor kan det hjælpe at stille spørgsmålet på en anden måde: Hvad er målet.</p>
<p>Hvis målet er et pænere gulv, kan slibning ofte klare det.</p>
<p>Hvis målet er en ny rumfølelse, bedre akustik, gulvvarmeoptimering eller en helt anden farve og struktur, kan et nyt gulv give mening.</p>
</div><div class="bde-rich-text-1013-125 bde-rich-text breakdance-rich-text-styles">
<h2>Kan man slibe gulvet selv, og hvad går typisk galt?</h2>
<p>Det kan lade sig gøre at slibe et gulv selv, men det er en af de opgaver, hvor “det ser nemt ud på video” og føles anderledes i virkeligheden.</p>
<p>Den klassiske fejl er ujævn slibning. Hvis maskinen står for længe ét sted, kan du lave fordybninger. Og hvis du ikke får et jævnt slibeforløb med de rigtige kornstørrelser, kan du ende med synlige slibespor, der først bliver rigtig tydelige, når du lægger lak eller olie på.</p>
<p>Kanter og hjørner er en anden udfordring. Det er ofte dér, gulvet får et ujævnt udtryk, hvis man ikke har erfaring.</p>
<p>Der er også støv og logistik. Selvom mange maskiner har støvopsamling, bliver gulvafslibning sjældent en helt støvfri oplevelse. Og så er der efterbehandlingen, hvor timing, mængde og teknik betyder meget for resultatet.</p>
<p>Hvis du har et gulv, du virkelig gerne vil bevare, eller hvis du ved, at gulvet har begrænset slibelag, er det ofte her, en fagmand kan betale sig. Ikke fordi du ikke kan lære det, men fordi konsekvensen af en fejl kan være dyr.</p>
</div><div class="bde-rich-text-1013-126 bde-rich-text breakdance-rich-text-styles">
<h2>Hvor lang tid tager en professionel afslibning, og hvor længe skal gulvet tørre?</h2>
<p>Selve arbejdstiden afhænger af størrelsen og gulvets tilstand. Som en tommelfingerregel tager afslibning og behandling af et gulv på omkring 45 m² typisk et par arbejdsdage for en fagmand.</p>
<p>Det, der ofte overrasker, er ikke arbejdstiden, men tørretiden. Efter behandlingen skal gulvet have ro. Man skal regne med, at gulvet ikke bør belastes med møbler eller tung trafik i flere dage, fordi overfladen skal hærde.</p>
<p>Det betyder, at gulvprojektet også er en planlægningsopgave. Hvor skal møblerne stå. Kan man tage rummene ét ad gangen. Og passer det bedst at gøre det op til en ferie eller en weekend.</p>
</div><div class="bde-globalblock-1013-127 bde-globalblock"><div class="bde-rich-text-1019-100-1019-4 bde-rich-text bde-rich-text-1019-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">Ønsker du et tilbud på gulvafslibning?</div>
<div class="ad-690-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning af dit gulv.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>

</div></div><div class="bde-rich-text-1013-128 bde-rich-text breakdance-rich-text-styles">
<h2>Små reparationer kan gøre en stor forskel</h2>
<p>Mange gulve har enkelte brædder, der stikker ud. Måske er der et område, hvor gulvet er misfarvet af en gammel planteskjuler, eller hvor der er en skade tæt ved en dør.</p>
<p>Det er ofte muligt at udskifte enkelte brædder eller lave reparationer før slibning, så det samlede resultat bliver langt bedre. Det kræver håndværk, men det er i mange tilfælde billigere end at lægge et helt nyt gulv.</p>
<p>Hvis du går med tanken om at slibe, er det derfor en god idé at nævne de konkrete problemområder, når du taler med et gulvfirma. Så kan de vurdere, om det kan udbedres, eller om du skal leve med det.</p>
</div><div class="bde-rich-text-1013-129 bde-rich-text breakdance-rich-text-styles">
<h2>Sådan sammenligner du tilbud, så du ikke kun sammenligner tal</h2>
<p>Det er fristende at vælge den laveste pris pr. m². Men på <a href="https://mitboligprojekt.dk/gulvarbejde/">gulvarbejde</a> kan prisen snyde, hvis du ikke ved, hvad der er med.</p>
<p>Når du sammenligner tilbud, giver det mening at kigge efter:</p>
<p>Om der er tale om afslibning alene eller afslibning med efterbehandling.</p>
<p>Hvilken efterbehandling der er valgt, og hvor mange lag der indgår.</p>
<p>Om der er forarbejde med i prisen, for eksempel reparationer, spartling eller afhøvling.</p>
<p>Om afdækning og oprydning er inkluderet.</p>
<p>Og ikke mindst, hvad gulvfirmaet forventer af dig, for eksempel at rummet er tømt.</p>
<p>Det er også helt fair at spørge: Hvad er det, der kan gøre prisen højere, når I har set gulvet rigtigt. Så får du en mere realistisk forventning, og du undgår ubehagelige overraskelser.</p>
</div><div class="bde-rich-text-1013-130 bde-rich-text breakdance-rich-text-styles">
<h2>Hvornår giver det mest mening at vælge nyt gulv?</h2>
<p>Der er situationer, hvor et nyt gulv er den bedste løsning.</p>
<p>Hvis gulvet ikke kan slibes, fordi det er et klikgulv, eller fordi slidlaget er for tyndt, er valget ret enkelt.</p>
<p>Hvis gulvet har alvorlige fugtskader, råd eller meget omfattende skader, kan det være mere trygt at starte forfra.</p>
<p>Og hvis du alligevel står foran en større renovering, hvor du ændrer planløsning, isolerer, lægger gulvvarme eller retter store skævheder op, kan et nyt gulv være det mest logiske valg.</p>
<p>Men for alle de andre tilfælde er det værd at give gulvafslibning en reel chance. Især i danske hjem, hvor originale trægulve ofte er en stor del af boligens udtryk.</p>
</div><div class="bde-rich-text-1013-139 bde-rich-text breakdance-rich-text-styles">
<h2>Få tre uforpligtende tilbud på gulvafslibning</h2>
<p>Hvis du er i tvivl, er det ofte det konkrete tilbud, der gør beslutningen nem. Når tre gulvfirmaer vurderer dit gulv, får du både en pris og en faglig forklaring på, hvad der kan lade sig gøre. Du får også et bedre grundlag for at vælge efterbehandling, og du kan hurtigt se, om der er noget, du skal være ekstra opmærksom på, for eksempel et tyndt slidelag eller behov for afhøvling.</p>
<p>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/gulvarbejde/" rel="sponsored noopener" target="_blank">indhente tre gratis og uforpligtende tilbud på gulvarbejde</a>. Det er en enkel måde at få tal på bordet og samtidig få en fornemmelse af, hvem du har bedst kemi med, før du siger ja til et projekt, der skal holde i mange år.</p>
</div><div class="bde-globalblock-1013-131 bde-globalblock"><div class="bde-rich-text-1019-100-1019-5 bde-rich-text bde-rich-text-1019-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">Ønsker du et tilbud på gulvafslibning?</div>
<div class="ad-690-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning af dit gulv.</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/gulvarbejde/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>

</div></div><div class="bde-rich-text-1013-132 bde-rich-text breakdance-rich-text-styles">

</div>
</div><div class="bde-column-1013-133 bde-column">
  
  
	



<div class="bde-table-of-contents-1013-134 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-1013-135 bde-div">
  
  
	



<div class="bde-text-1013-136 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-1013-137 bde-globalblock"><div class="bde-rich-text-1021-100-1021-1 bde-rich-text bde-rich-text-1021-100 breakdance-rich-text-styles">
<p><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></p>
<aside class="ad-336">
<div class="ad-content">
<div class="ad-label">Annonce</div>
<div class="ad-headline">Overvejer du gulvafslibning?</div>
<div class="ad-text">Få et hurtigt overblik og sammenlign tilbud på gulvafslibning.</div>
<div class="ad-badge">Gratis og uforpligtende</div>
</div>
<div class="ad-footer"><a class="ad-cta" href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/gulvarbejde/" 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/gulvafslibning-eller-nyt-gulv/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
