<?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>Glarmester &#8211; MitBoligProjekt.dk</title>
	<atom:link href="https://mitboligprojekt.dk/kategori/glarmester/feed/" rel="self" type="application/rss+xml" />
	<link>https://mitboligprojekt.dk</link>
	<description>Find de rette fagfolk til dit boligprojekt</description>
	<lastBuildDate>Mon, 16 Feb 2026 07:44:22 +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>Glarmester &#8211; MitBoligProjekt.dk</title>
	<link>https://mitboligprojekt.dk</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kan det betale sig at skifte vinduer eller kun ruder?</title>
		<link>https://mitboligprojekt.dk/udskiftning-af-ruder-eller-vinduer/</link>
					<comments>https://mitboligprojekt.dk/udskiftning-af-ruder-eller-vinduer/#respond</comments>
		
		<dc:creator><![CDATA[Tobias]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 16:52:28 +0000</pubDate>
				<category><![CDATA[Glarmester]]></category>
		<guid isPermaLink="false">https://mitboligprojekt.dk/?p=1438</guid>

					<description><![CDATA[Dug mellem glassene, træk ved sofaen og en varmeregning, der ikke vil ned. Spørgsmålet er bare, om du skal skifte hele vinduet, eller om et rudeskift er nok. Her er den jordnære guide til at vælge rigtigt første gang.]]></description>
										<content:encoded><![CDATA[<section class="bde-section-1438-100 bde-section">
  
  
	



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



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



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


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

</div><div class="bde-rich-text-1438-107 bde-rich-text breakdance-rich-text-styles">
<h1>Kan det betale sig at skifte vinduer eller kun ruder?</h1>
</div><div class="bde-text-1438-108 bde-text">
<p>Dug mellem glassene, træk ved sofaen og en varmeregning, der ikke vil ned. Spørgsmålet er bare, om du skal skifte hele vinduet, eller om et rudeskift er nok. Her er den jordnære guide til at vælge rigtigt første gang.</p>

</div><img decoding="async" class="bde-image2-1438-109 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.25.11.webp" alt="Glarmesterarbejde i klassisk københavnerlejlighed: dannebrogsvindue med nye energiruder, radiator under vinduet og værktøj på plankegulv efter udskiftning af punkteret rude." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.25.11.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.25.11-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.25.11-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.25.11-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1438-110 bde-rich-text breakdance-rich-text-styles">
Glarmesterarbejde i klassisk københavnerlejlighed: dannebrogsvindue med nye energiruder, radiator under vinduet og værktøj på plankegulv efter udskiftning af punkteret rude.
</div><div class="bde-fancy-divider-1438-111 bde-fancy-divider">


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

</div><div class="bde-rich-text-1438-112 bde-rich-text breakdance-rich-text-styles">
<p>Det starter sjældent med en stor renoveringsdrøm.</p>
<p>For de fleste begynder det med en lille irritation, der vokser. En kold stribe på gulvet ved vinduet. En snert af træk, når man sidder stille. Eller den grålige dug inde mellem glassene, som hverken kan tørres væk eller luftes ud.</p>
<p>Så kommer regnestykket snigende. Nye vinduer kan koste en del. Men det kan også være dyrt at vælge forkert og ende med at betale to gange.</p>
<p>Vil du have et svar, der passer til netop din bolig, hjælper det at få en fagperson til at se på vinduerne i virkeligheden. En <a href="https://mitboligprojekt.dk/glarmester/">glarmester</a> kan vurdere, om rammen kan reddes, om der er plads til energiruder, og om det er glasset eller konstruktionen, der er synderen. Du kan <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/glarmester/" rel="sponsored noopener" target="_blank">indhente tre uforpligtende tilbud via 3byggetilbud.dk</a>.</p>
</div><div class="bde-globalblock-1438-113 bde-globalblock"><div class="bde-rich-text-1444-100-1444-1 bde-rich-text bde-rich-text-1444-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 udskiftning af ruder?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud fra glarmestre.</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/glarmester/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1438-114 bde-rich-text breakdance-rich-text-styles">
<h2>Skifte ruder eller skifte vinduer: sådan finder du fejlen</h2>
<p>Der er en grund til, at mange ender i tvivl. Symptomerne kan føles ens, men årsagerne gør ikke.</p>
<p>Nogle gange er det glasset, der har givet op. Andre gange er det selve vinduet. Og når man først blander de to ting sammen, er det let at købe en løsning, der kun løser halvdelen.</p>
<p>Glas-problemet er typisk til at få øje på. Termoruden er punkteret, så der kommer kondens og et mælket slør mellem lagene. Nogle ruder får også skjolder eller små “regnbuer” inde i ruden. Det er ikke kosmetik. Det er et tegn på, at ruden ikke længere er tæt.</p>
<p>Vindue-problemet er mere fysisk. Træet er blødt i bundkarmen. Samlingerne åbner sig. Karmen står skævt. Vinduet lukker ikke tæt, selv om du justerer og skifter lister. Eller håndtaget skal tvinges i bund på den måde, hvor man godt ved, at det ikke burde være sådan.</p>
<p>Det korte budskab er dette: Er rammen sund og tæt, kan et rudeskift være en stærk løsning. Er rammen træt, kan en ny rude blive en dyr omvej.</p>
</div><div class="bde-rich-text-1438-115 bde-rich-text breakdance-rich-text-styles">
<h2>Punkterede termoruder og kondens: tegnene du skal reagere på</h2>
<p>Mange opdager problemet på samme måde. Først tror man, det bare er almindelig kondens. Så tørrer man af. Og så kommer det igen.</p>
<p>Klassikeren er kondens mellem glassene. Den ligger som et slør inde i ruden, og den ændrer sig ofte med vejret. Nogle dage er den næsten væk. Andre dage ser ruden ud, som om den har stået i et dampbad.</p>
<p>En punkteret rude isolerer dårligere, men den kan også give dig mere end bare en koldere stue. Når ruden ikke fungerer, bliver overfladen koldere. Det kan give mere kondens på indersiden, især i kanten. Og på sigt kan det påvirke træ og samlinger, hvis fugt får lov til at arbejde.</p>
<p>Hvis du kun har et par punkterede ruder i et ellers velfungerende vindue, er det ofte et stærkt argument for at skifte glasset og beholde konstruktionen. Hvis du har mange punkterede ruder, og rammen samtidig er slidt, begynder pilen at pege mod en samlet udskiftning.</p>
</div><div class="bde-rich-text-1438-116 bde-rich-text breakdance-rich-text-styles">
<h2>Udskiftning af ruder: hvornår kan det betale sig?</h2>
<p>Rudeskift er en overset mellemvej. Ikke så drastisk som nye vinduer, men ofte langt mere effektivt, end mange regner med.</p>
<p>Det gælder især i boliger, hvor vinduerne i sig selv er solide. Træet er ordentligt. Rammerne står pænt. Udtrykket passer til huset. Men ruderne er fra en tid, hvor almindelige termoruder var standard, og hvor energicoating og varm kant ikke var noget, man talte om.</p>
<p>Når du skifter til energiruder, bliver glasset typisk varmere på indersiden. Det lyder som en detalje, men det er ofte det, der ændrer følelsen i rummet. Kuldenedfaldet langs ruden bliver mindre. Der bliver færre kolde zoner. Og stuen føles mere jævn, selv på rå vinterdage.</p>
<p>Der er også en helt simpel visuel gevinst. En punkteret rude ser træt ud. En klar rude gør ikke. Det betyder noget, især hvis du står foran et salg, eller hvis du bare er træt af at kigge på et sløret hjørne.</p>
<p>Men rudeskift kræver én ting: at rammen er i orden.</p>
</div><div class="bde-globalblock-1438-117 bde-globalblock"><div class="bde-rich-text-1444-100-1444-2 bde-rich-text bde-rich-text-1444-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 udskiftning af ruder?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud fra glarmestre.</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/glarmester/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1438-118 bde-rich-text breakdance-rich-text-styles">
<h2>Tjek vinduesrammen: kan den holde til nye ruder?</h2>
<p>Du behøver ikke være tømrer for at lave en grov sortering.</p>
<p>Start i bundkarmen. Det er her, problemerne ofte begynder, fordi vand og fugt samler sig i hjørnerne. Kig efter mørke misfarvninger, afskallet maling tæt på samlinger og små revner, hvor vand kan trænge ind.</p>
<p>Tag en tynd skruetrækker eller en syl og tryk forsigtigt i træet. Sundt træ føles hårdt og giver ikke efter. Hvis værktøjet synker let ind, eller træet føles svampet, er det et signal om, at du kan være på vej ind i råd.</p>
<p>Tjek også funktionen. Luk vinduet og mærk efter. Lukker det jævnt hele vejen rundt, eller “bider” det ét sted og står åbent et andet? Hvis du kan se lys eller mærke luft ved samlingerne, er det et problem, som et rudeskift ikke nødvendigvis løser.</p>
<p>Her kan et fagligt blik spare dig for en dyr fejl. Nogle rammer ser pæne ud, men er trætte i skjulte samlinger. Andre ser slidte ud, men fejler ikke noget, der ikke kan udbedres.</p>
</div><img decoding="async" class="bde-image2-1438-124 bde-image2" src="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.49.29.webp" alt="Kondens mellem glassene i punkteret termorude i stuevindue – glarmester vurderer om der skal skiftes ruder eller hele vinduet." loading="lazy" srcset="https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.49.29.webp 1536w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.49.29-300x200.webp 300w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.49.29-1024x683.webp 1024w, https://mitboligprojekt.dk/wp-content/uploads/2026/02/ChatGPT-Image-15.-feb.-2026-17.49.29-768x512.webp 768w" sizes="(max-width: 1536px) 100vw, 1536px"><div class="bde-rich-text-1438-120 bde-rich-text breakdance-rich-text-styles">
<h2>2-lags eller 3-lags energiruder: hvad kan dit vindue rumme?</h2>
<p>Spørgsmålet kommer næsten altid: Skal man bare vælge den mest isolerende rude?</p>
<p>Svaret er, at man kun kan vælge det, der passer.</p>
<p>En energirude har tykkelse og vægt. Den skal kunne ligge i falsen, og glaslisterne skal kunne holde den ordentligt fast. I mange ældre vinduer er pladsen begrænset. Har du en falsdybde omkring 40 millimeter, kan det være, at 3-lags ganske enkelt ikke kan være der. Eller at det bliver så tungt, at vinduet over tid bliver sværere at justere og lukke tæt.</p>
<p>Det betyder ikke, at du ender med en “dårlig” løsning. En velvalgt 2-lags energirude med energicoating og varm kant kan være et stort spring fra en gammel termorude. For mange boliger er det netop den realistiske løsning, fordi den giver forbedring uden at presse konstruktionen.</p>
<p>Hvis du skifter hele vinduet, åbner du typisk for 3-lags. Og her kan 3-lags give ekstra komfort, fordi den indvendige overflade bliver varmere. Det kan mindske kondensrisikoen og gøre rummet mere behageligt tæt på vinduet.</p>
</div><div class="bde-rich-text-1438-121 bde-rich-text breakdance-rich-text-styles">
<h2>U-værdi, varm kant og energicoating: oversat til almindeligt dansk</h2>
<p>U-værdi lyder teknisk, men princippet er simpelt. Jo lavere tal, jo mindre varme slipper ud.</p>
<p>Der er bare en vigtig detalje: Der findes U-værdi for ruden, og der findes U-værdi for hele vinduet. Ruden kan være fremragende, men hvis rammen er dårlig, eller hvis vinduet ikke er tæt, forsvinder en del af gevinsten.</p>
<p>Når du kun skifter ruden, forbedrer du især rudens del af regnestykket. Det kan gøre en mærkbar forskel i komfort, men effekten bliver bedst, når rammen og tætningen spiller med.</p>
<p>Varm kant handler om kanten mellem glaslagene. Den gamle type afstandsprofil kan skabe en kuldebro i rudens kant, og det er netop dér, kondens ofte samler sig. Med en bedre kantløsning får du typisk en lunere kant og mindre risiko for dug.</p>
<p>Energicoating er en tynd belægning på glasset, der reflekterer varme tilbage i rummet. Du ser den ikke. Men du kan ofte mærke, at ruden ikke føles lige så kold.</p>
</div><div class="bde-rich-text-1438-122 bde-rich-text breakdance-rich-text-styles">
<h2>Træk fra vinduer: derfor hjælper nye ruder ikke altid</h2>
<p>Mange siger “det trækker fra vinduet” og peger på ruden. Men træk kommer ofte et andet sted fra.</p>
<p>Det kan være samlingen mellem karm og mur. Det kan være sprukne fuger. Det kan være en lysning, der ikke er tæt. Eller tætningslister, der har mistet spændstighed og ikke længere trykker ordentligt mod rammen.</p>
<p>Derfor kan du også opleve, at et hus med nye ruder stadig føles utæt, hvis det omkringliggende arbejde ikke er udført ordentligt. Og omvendt kan et mere beskedent projekt med tætningslister, tætning og bedre glas give en større effekt, end du havde forventet.</p>
<p>Hvis nogen lover, at en ny rude alene fjerner alt træk, er det fair at stille et ekstra spørgsmål: Har de også set på samlingerne, listerne og fugerne?</p>
</div><div class="bde-rich-text-1438-123 bde-rich-text breakdance-rich-text-styles">
<h2>Udskiftning af vinduer: hvornår er nye vinduer pengene værd?</h2>
<p>Der er tidspunkter, hvor man skal droppe mellemvejene.</p>
<p>Hvis der er råd i bundkarmen, bliver det ikke bedre af en ny rude. Hvis rammen er skæv, bliver tæthed en kamp. Hvis du allerede har et vindue, der giver problemer med lukning og funktion, kan du hurtigt komme til at betale for en rude i dag og et nyt vindue i morgen.</p>
<p>Når du skifter hele vinduet, får du en samlet løsning. Ny karm, nye beslag og ny tæthed. Du får også mulighed for at vælge materialer, der passer til din hverdag. Træ kræver løbende vedligehold. Træ/alu kræver typisk mindre. PVC er vedligeholdelseslet, men passer ikke til alle huse og alle udtryk.</p>
<p>Nye vinduer kan også løfte helhedsindtrykket, især hvis de gamle ser slidte ud eller har synlige skader. Det er ikke et løfte om, at du får pengene tilbage krone for krone, men det kan fjerne en indvending hos købere.</p>
</div><div class="bde-rich-text-1438-125 bde-rich-text breakdance-rich-text-styles">
<h2>Lydglas, sikkerhedsglas og solglas: når glas skal mere end at isolere</h2>
<p>For nogle boligejere er varme ikke den primære drivkraft. Det er støj.</p>
<p>Bor du ud til en trafikeret vej, nær en skolegård eller ved en busrute, kan lydglas være en af de opgraderinger, der ændrer hverdagen mest. Pludselig kan du sidde i stuen uden konstant baggrundsstøj, og det er en effekt, der mærkes med det samme.</p>
<p>Sikkerhedsglas kan være relevant i stueplan, ved store ruder og i områder, hvor du vil mindske risikoen for indbrud. Har du børn, kan brudsikkerhed også være en praktisk årsag, fordi glasset opfører sig mere kontrolleret ved brud.</p>
<p>Solafskærmende glas kan give mening i boliger med store sydvendte ruder, hvor sommeren gør huset varmt. Ikke nødvendigt for alle, men for nogle er det forskellen på et behageligt indeklima og et drivhus i juli.</p>
</div><div class="bde-rich-text-1438-126 bde-rich-text breakdance-rich-text-styles">
<h2>Regler ved udskiftning af ruder og vinduer</h2>
<p>Her er det, mange blander sammen.</p>
<p>Når du udskifter en rude i et eksisterende vindue, er det i praksis ofte vedligehold. Det betyder typisk, at du kan udskifte til tilsvarende, for eksempel hvis ruden er punkteret eller gået i stykker.</p>
<p>Når du udskifter hele vinduet, bliver energikrav og standarder mere relevante, fordi du ændrer en større bygningsdel, og fordi løsningen vurderes som en samlet enhed.</p>
<p>Det betyder ikke, at du skal drukne i paragraffer. Men det betyder, at tilbuddet skal passe til opgaven.</p>
</div><div class="bde-rich-text-1438-119 bde-rich-text breakdance-rich-text-styles">
<!-- GLARMESTER – RUDEBEREGNER 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-grb="v1" aria-label="Prisberegner til udskiftning af ruder (glarmester)">
  <div class="gpb-top">
    <div>
      <p class="gpb-title">Prisberegner: udskiftning af ruder (glarmester)</p>
      <p class="gpb-sub">
        Indtast mål og antal ruder, og vælg glastype og adgang. Du får et vejledende overslag inkl. typiske poster
        som opmåling, håndtering, montering og bortskaffelse.
      </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 opgave</p>

    <div class="gpb-grid">
      <div class="gpb-field">
        <label class="gpb-label">Antal ruder</label>
        <div class="gpb-control">
          <input class="gpb-input" min="1" max="50" step="1" type="number" value="2" inputmode="numeric" data-count />
          <div class="gpb-unit" aria-hidden="true">stk.</div>
        </div>
        <p class="gpb-help" data-counthelp>Vælg hvor mange ruder der skal skiftes.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Opgavetype</label>
        <select class="gpb-select" data-job>
          <option value="punctured" selected>Punkteret termorude (standard)</option>
          <option value="replace">Udskiftning af rude (ikke punkteret)</option>
          <option value="door">Rude i dør/altandør</option>
          <option value="kit">Inkl. kit/glaslister (mere arbejde)</option>
        </select>
        <p class="gpb-help" data-jobhelp>Styrer arbejdstid og typiske tillæg.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Bredde</label>
        <div class="gpb-control">
          <input class="gpb-input" min="20" max="250" step="1" type="number" value="100" inputmode="numeric" data-w />
          <div class="gpb-unit" aria-hidden="true">cm</div>
        </div>
        <p class="gpb-help" data-whelp>Typisk 30–150 cm. Brug lysningsmål/falsmål hvis du kender dem.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Højde</label>
        <div class="gpb-control">
          <input class="gpb-input" min="20" max="250" step="1" type="number" value="120" inputmode="numeric" data-h />
          <div class="gpb-unit" aria-hidden="true">cm</div>
        </div>
        <p class="gpb-help" data-hhelp>Typisk 30–180 cm. Store ruder kræver ofte mere håndtering.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Glastype</label>
        <select class="gpb-select" data-glass>
          <option value="2std" selected>2-lags termorude (standard)</option>
          <option value="2energy">2-lags energirude (coating + varm kant)</option>
          <option value="3energy">3-lags energirude</option>
          <option value="sound">Lydglas (dæmper støj)</option>
          <option value="safe">Sikkerhedsglas/lamineret</option>
          <option value="solar">Solafskærmende glas</option>
        </select>
        <p class="gpb-help" data-glasshelp>Specialglas kan flytte prisen tydeligt, især ved store formater.</p>
      </div>

      <div class="gpb-field">
        <label class="gpb-label">Adgang/logistik</label>
        <select class="gpb-select" data-access>
          <option value="easy" selected>Let (stueplan / god plads)</option>
          <option value="normal">Normal (almindelig adgang)</option>
          <option value="hard">Svær (høj etage / smal adgang)</option>
        </select>
        <p class="gpb-help" data-accesshelp>Bæring, afdækning og bortskaffelse påvirker timeforbrug.</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" data-arealevelhelp>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" data-vathelp>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">Antal ruder<span data-out-count>—</span></div>
          <div class="gpb-line">Størrelse pr. rude<span data-out-size>—</span></div>
          <div class="gpb-line">Glastype<span data-out-glass>—</span></div>
          <div class="gpb-line">Opgavetype<span data-out-job>—</span></div>

          <div class="gpb-line">Glas (materiale)<span data-out-glasscost>—</span></div>
          <div class="gpb-line">Arbejde/montering<span data-out-labor>—</span></div>
          <div class="gpb-line">Opstart/kørsel/afdækning<span data-out-callout>—</span></div>
          <div class="gpb-line">Bortskaffelse<span data-out-disposal>—</span></div>
          <div class="gpb-line">Effektiv pris pr. rude<span data-out-perunit>—</span></div>

          <div class="gpb-line gpb-line--total">I alt<span data-out-total>—</span></div>
        </div>
      </div>
    </div>

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

    <div class="gpb-cta">
      <p>Vil du have en mere præcis pris? Indhent 3 uforpligtende tilbud fra glarmestre 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/glarmester/" rel="nofollow sponsored noopener" target="_blank">Indhent 3 tilbud</a>
    </div>
  </div>
</div>

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

  function linkLabels(root, idx){
    const prefix = "grb_" + 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-count") ? "count" :
          control.hasAttribute("data-job") ? "job" :
          control.hasAttribute("data-w") ? "w" :
          control.hasAttribute("data-h") ? "h" :
          control.hasAttribute("data-glass") ? "glass" :
          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 = "glarmester_ruder_beregner_v1_" + idx;
    const q = (sel) => root.querySelector(sel);

    const count = q("[data-count]");
    const job = q("[data-job]");
    const w = q("[data-w]");
    const h = q("[data-h]");
    const glass = q("[data-glass]");
    const access = q("[data-access]");
    const areaLevel = q("[data-arealevel]");
    const vat = q("[data-vat]");

    const pill = q("[data-pill]");

    const countHelp = q("[data-counthelp]");
    const wHelp = q("[data-whelp]");
    const hHelp = q("[data-hhelp]");

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

    const outCount = q("[data-out-count]");
    const outSize = q("[data-out-size]");
    const outGlass = q("[data-out-glass]");
    const outJob = q("[data-out-job]");

    const outGlassCost = q("[data-out-glasscost]");
    const outLabor = q("[data-out-labor]");
    const outCallout = q("[data-out-callout]");
    const outDisposal = q("[data-out-disposal]");
    const outPerUnit = q("[data-out-perunit]");
    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(!count || !job || !w || !h || !glass || !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.18;

    function levelFactor(){
      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 readInt(el, min, max, helpEl, helpText){
      const raw = (el.value ?? "").toString().trim();
      if(raw === "" || raw === "-" || raw === "."){
        el.classList.add("gpb-invalid");
        if(helpEl) helpEl.textContent = "Indtast et tal.";
        return null;
      }
      const n = parseFloat(raw);
      if(!Number.isFinite(n)){
        el.classList.add("gpb-invalid");
        if(helpEl) helpEl.textContent = "Indtast et tal.";
        return null;
      }
      el.classList.remove("gpb-invalid");
      if(helpEl && helpText) helpEl.textContent = helpText;
      return clamp(n, min, max);
    }

    function glassTable(){
      return {
        "2std":   { label:"2-lags termorude (standard)",   low: 850,  high: 1400 },  // pr. m²
        "2energy":{ label:"2-lags energirude",             low: 1250, high: 2100 },
        "3energy":{ label:"3-lags energirude",             low: 2100, high: 3400 },
        "sound":  { label:"Lydglas",                       low: 1800, high: 3100 },
        "safe":   { label:"Sikkerhedsglas/lamineret",      low: 1900, high: 3600 },
        "solar":  { label:"Solafskærmende glas",           low: 2000, high: 3600 }
      };
    }

    function jobTable(){
      return {
        punctured: { label:"Punkteret termorude", low: 650, high: 1100 },   // arbejde pr. rude
        replace:   { label:"Udskiftning af rude", low: 600, high: 1050 },
        door:      { label:"Rude i dør/altandør", low: 900, high: 1600 },
        kit:       { label:"Inkl. kit/glaslister",low: 950, high: 1800 }
      };
    }

    function sizeFactor(areaM2){
      if(areaM2 < 0.35) return 1.10;
      if(areaM2 < 0.75) return 1.03;
      if(areaM2 < 1.40) return 1.00;
      return 1.08;
    }

    function disposalPerUnit(areaM2){
      // typisk glas-affald og håndtering; skalerer med størrelse
      const baseLow = 90, baseHigh = 180;
      const extraLow = areaM2 * 60;
      const extraHigh = areaM2 * 110;
      return { low: baseLow + extraLow, high: baseHigh + extraHigh };
    }

    function calloutPack(){
      // opmåling/kørsel/afdækning
      return { low: 650, high: 1300 };
    }

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

      const c = readInt(count, 1, 50, countHelp, "Vælg hvor mange ruder der skal skiftes.");
      const wVal = readInt(w, 20, 250, wHelp, "Typisk 30–150 cm. Brug lysningsmål/falsmål hvis du kender dem.");
      const hVal = readInt(h, 20, 250, hHelp, "Typisk 30–180 cm. Store ruder kræver ofte mere håndtering.");

      if(c === null || wVal === null || hVal === null){
        totalOut.textContent = "—";
        rangeOut.textContent = "—";
        rateOut.textContent  = "—";
        outCount.textContent = "—";
        outSize.textContent = "—";
        outGlass.textContent = glass.options[glass.selectedIndex]?.textContent?.trim() || "—";
        outJob.textContent = job.options[job.selectedIndex]?.textContent?.trim() || "—";
        outGlassCost.textContent = "—";
        outLabor.textContent = "—";
        outCallout.textContent = "—";
        outDisposal.textContent = "—";
        outPerUnit.textContent = "—";
        outTotal.textContent = "—";
        badgeOut.textContent = "";
        return;
      }

      const areaM2 = (wVal/100) * (hVal/100);
      const totalArea = areaM2 * c;

      const lf = levelFactor();
      const af = accessFactor();
      const sf = sizeFactor(areaM2);

      const gtab = glassTable();
      const g = gtab[glass.value] || gtab["2std"];

      const jtab = jobTable();
      const j = jtab[job.value] || jtab.punctured;

      // Glaspris pr. m² justeres for niveau + størrelse (store formater kan være dyrere at håndtere/bestille)
      const glassLowM2 = g.low * lf * sf;
      const glassHighM2 = g.high * lf * sf;

      const glassLow = totalArea * glassLowM2;
      const glassHigh = totalArea * glassHighM2;
      const glassMid = mid(glassLow, glassHigh);

      // Arbejde pr. rude justeres for adgang + størrelse + niveau
      const laborLow = c * (j.low * lf * af * sf);
      const laborHigh = c * (j.high * lf * af * sf);
      const laborMid = mid(laborLow, laborHigh);

      // Opstart/kørsel/afdækning (samlet, justeret)
      const call = calloutPack();
      const callLow = call.low * lf * af;
      const callHigh = call.high * lf * af;
      const callMid = mid(callLow, callHigh);

      // Bortskaffelse
      const dispUnit = disposalPerUnit(areaM2);
      const dispLow = c * (dispUnit.low * af);
      const dispHigh = c * (dispUnit.high * af);
      const dispMid = mid(dispLow, dispHigh);

      // Sum
      let sumLowInc = glassLow + laborLow + callLow + dispLow;
      let sumHighInc = glassHigh + laborHigh + callHigh + dispHigh;
      let sumMidInc = glassMid + laborMid + callMid + dispMid;

      const ranged = enforceMinRange(sumLowInc, sumHighInc, sumMidInc);
      sumLowInc = ranged.low;
      sumHighInc = ranged.high;

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

      const totalLow = sumLowInc * vF;
      const totalHigh = sumHighInc * vF;
      const totalMid = sumMidInc * vF;

      const perUnit = totalMid / c;
      const perM2 = totalMid / totalArea;

      totalOut.textContent = nfCur.format(round0(totalMid)) + " " + suffix;
      rangeOut.textContent = "Prisspænd " + nfCur.format(round0(totalLow)) + "–" + nfCur.format(round0(totalHigh)) + " " + suffix;
      rateOut.textContent  = "Ca. " + nfCur.format(round0(perUnit)) + " pr. rude (" + nfCur.format(round0(perM2)) + "/m²) " + suffix;

      outCount.textContent = nfInt.format(c) + " stk.";
      outSize.textContent = nfInt.format(wVal) + " × " + nfInt.format(hVal) + " cm (" + (Math.round(areaM2*100)/100).toFixed(2) + " m²)";
      outGlass.textContent = g.label;
      outJob.textContent = j.label;

      outGlassCost.textContent = nfCur.format(round0(glassMid * vF));
      outLabor.textContent = nfCur.format(round0(laborMid * vF));
      outCallout.textContent = nfCur.format(round0(callMid * vF));
      outDisposal.textContent = nfCur.format(round0(dispMid * vF));
      outPerUnit.textContent = nfCur.format(round0(perUnit)) + " " + suffix;
      outTotal.textContent = nfCur.format(round0(totalMid)) + " " + suffix;

      badgeOut.textContent = "";

      try{
        localStorage.setItem(storageKey, JSON.stringify({
          count: c, job: job.value, w: wVal, h: hVal, glass: glass.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.count != null) count.value = saved.count;
        if(saved.job) job.value = saved.job;
        if(saved.w != null) w.value = saved.w;
        if(saved.h != null) h.value = saved.h;
        if(saved.glass) glass.value = saved.glass;
        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 c = Math.max(1, parseInt(count.value || "1", 10) || 1);
      const wv = Math.max(20, parseInt(w.value || "100", 10) || 100);
      const hv = Math.max(20, parseInt(h.value || "120", 10) || 120);
      const areaM2 = (wv/100) * (hv/100);

      const jobTxt = job.options[job.selectedIndex]?.textContent?.trim() || "";
      const glassTxt = glass.options[glass.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 (
        "Udskiftning af ruder (glarmester). " +
        "Antal: " + c + " stk. " +
        "Mål pr. rude: " + wv + "×" + hv + " cm (" + (Math.round(areaM2*100)/100).toFixed(2) + " m²). " +
        "Opgave: " + jobTxt + ". " +
        "Glastype: " + glassTxt + ". " +
        "Adgang/logistik: " + accessTxt + ". " +
        "Prisniveau: " + levelTxt + ". " +
        "Ønsker pris " + vatTxt + ". " +
        "Inkludér i tilbud: opmåling, levering, montering, afdækning, bortskaffelse af glas, samt bekræftelse af glastype/tykkelse og tidsplan."
      );
    }

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

    [count, job, w, h, glass, 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", () => {
      count.value = 2;
      job.value = "punctured";
      w.value = 100;
      h.value = 120;
      glass.value = "2std";
      access.value = "normal";
      areaLevel.value = "normal";
      vat.value = "inc";
      try{ localStorage.removeItem(storageKey); }catch(e){}
      count.classList.remove("gpb-invalid");
      w.classList.remove("gpb-invalid");
      h.classList.remove("gpb-invalid");
      if(countHelp) countHelp.textContent = "Vælg hvor mange ruder der skal skiftes.";
      if(wHelp) wHelp.textContent = "Typisk 30–150 cm. Brug lysningsmål/falsmål hvis du kender dem.";
      if(hHelp) hHelp.textContent = "Typisk 30–180 cm. Store ruder kræver ofte mere håndtering.";
      schedule();
      showToast("Nulstillet.");
    });

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

</div><div class="bde-rich-text-1438-127 bde-rich-text breakdance-rich-text-styles">
<h2>Pris på nye ruder og vinduer: sådan sammenligner du tilbud</h2>
<p>Det er fristende at bede om et enkelt tal. Men vinduer er et område, hvor “det kommer an på” faktisk er sandt.</p>
<p>Prisen afhænger af størrelse, antal vinduer, sprosser, adgang, glasvalg, specialmål og om der skal laves ekstraarbejde med lister, fuger eller træværk. To huse kan se ens ud udefra og ende med vidt forskellige regninger, fordi detaljerne er forskellige.</p>
<p>Der er dog en tommelfingerregel, der ofte holder. Rudeskift er typisk den billigere løsning, når rammerne er i orden. Udskiftning af vinduer er dyrere, men giver en samlet opgradering, hvor tæthed, beslag og funktion følger med.</p>
<p>Når du sammenligner tilbud, så kig efter, om de bygger på de samme forudsætninger. Er nye lister og tætning med? Er bortskaffelse og afdækning inkluderet? Er det samme glastype, samme kantløsning og samme niveau af montage? Det er ofte i detaljerne, at prisforskellen gemmer sig.</p>
</div><div class="bde-globalblock-1438-128 bde-globalblock"><div class="bde-rich-text-1444-100-1444-3 bde-rich-text bde-rich-text-1444-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 udskiftning af ruder?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud fra glarmestre.</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/glarmester/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1438-129 bde-rich-text breakdance-rich-text-styles">
<h2>Hvad er det kloge valg, hvis du vil have værdi for pengene?</h2>
<p>Hvis målet alene er at spare på varmeregningen, kan tilbagebetalingstiden være lang, især hvis du allerede har rimeligt moderne termoruder.</p>
<p>Men de fleste, der skifter vinduer eller ruder, gør det af tre grunde. Komfort, stand og fremtid.</p>
<p>Komforten er den hurtige gevinst. Når kuldenedfald og trækfornemmelse forsvinder, ændrer rummet sig. Det kan være forskellen på at undgå sofaen ved vinduet og faktisk bruge området.</p>
<p>Stand handler om at undgå forfald. Punkterede ruder og utætte samlinger kan føre til fugtproblemer, og de bliver sjældent billigere af at vente.</p>
<p>Fremtid handler om, hvor længe du bliver i huset, og hvad du vil med boligen. Skal du blive i mange år, kan en større løsning give ro. Står du foran et salg, kan det være vigtigere at fjerne de tydelige problemer, så købere ikke ser vinduerne som et stort kommende projekt.</p>
</div><div class="bde-rich-text-1438-130 bde-rich-text breakdance-rich-text-styles">
<h2>Klar til at få tilbud fra en glarmester?</h2>
<p>Det kan være fristende at beslutte sig ved skrivebordet. Men vinduer er et af de steder, hvor virkeligheden slår teorien, hver gang.</p>
<p>En glarmester kan vurdere, om du kan nøjes med at skifte ruderne, om rammen kan holde til energiglas, og hvilken løsning der giver mest mening i forhold til tæthed, komfort og pris.</p>
<p>Hvis du vil have konkrete priser og et realistisk bud på, hvad der kan betale sig i din bolig, kan du <a href="https://www.partner-ads.com/dk/klikbanner.php?partnerid=41736&amp;bannerid=25692&amp;htmlurl=https://www.3byggetilbud.dk/tilbud/glarmester/" rel="sponsored noopener" target="_blank">indhente tre uforpligtende tilbud via 3byggetilbud.dk</a>.</p>
</div><div class="bde-globalblock-1438-134 bde-globalblock"><div class="bde-rich-text-1444-100-1444-4 bde-rich-text bde-rich-text-1444-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 udskiftning af ruder?</div>
<div class="ad-690-text">Få tre uforpligtende tilbud fra glarmestre.</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/glarmester/" target="_blank" rel="nofollow sponsored noopener"> Få 3 gratis tilbud </a></aside>
</div></div><div class="bde-rich-text-1438-135 bde-rich-text breakdance-rich-text-styles">

</div>
</div><div class="bde-column-1438-136 bde-column">
  
  
	



<div class="bde-table-of-contents-1438-137 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-1438-138 bde-div">
  
  
	



<div class="bde-text-1438-139 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-1438-140 bde-globalblock"><div class="bde-rich-text-1445-100-1445-1 bde-rich-text bde-rich-text-1445-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">
      Mangler du en glarmester?
    </div>

    <div class="ad-text">
      Få et hurtigt overblik og sammenlign tilbud fra lokale glarmestre nær dig.
    </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/glarmester/" 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/udskiftning-af-ruder-eller-vinduer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
