<?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>Camperausbau &#8211; Tribolias</title>
	<atom:link href="https://tribolias.com/tag/camperausbau/feed/" rel="self" type="application/rss+xml" />
	<link>https://tribolias.com</link>
	<description>Webdesigner, Handwerker, Vanlifer </description>
	<lastBuildDate>Sat, 01 Aug 2026 18:47:40 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://tribolias.com/wp-content/uploads/2024/05/cropped-IMG_7123-32x32.png</url>
	<title>Camperausbau &#8211; Tribolias</title>
	<link>https://tribolias.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">249203457</site>	<item>
		<title>Camper Energierechner – Solar, Batterie &#038; Wechselrichter kostenlos berechnen</title>
		<link>https://tribolias.com/camper/energierechner-fuer-autarke-wohnmobile-und-camper/</link>
					<comments>https://tribolias.com/camper/energierechner-fuer-autarke-wohnmobile-und-camper/#comments</comments>
		
		<dc:creator><![CDATA[Tribolias]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 11:10:41 +0000</pubDate>
				<category><![CDATA[Camper]]></category>
		<category><![CDATA[Batterie]]></category>
		<category><![CDATA[Camperausbau]]></category>
		<category><![CDATA[Energierechner]]></category>
		<category><![CDATA[LiFePo4]]></category>
		<category><![CDATA[Solar]]></category>
		<category><![CDATA[Strom]]></category>
		<category><![CDATA[Wechselrichter]]></category>
		<category><![CDATA[Wohnmobil]]></category>
		<guid isPermaLink="false">https://tribolias.com/?p=2489</guid>

					<description><![CDATA[<p>Wie viel Strom brauche ich in meinem Camper wirklich? Wie groß muss die Batterie sein &#8211; und reicht mein Solar auch im Herbst noch aus? Diese Fragen stellt sich jeder, der seinen Camper autark ausbauen möchte. Mit diesem kostenlosen Energierechner kannst du deinen individuellen Strombedarf berechnen, die Solaranlage dimensionieren, den richtigen Wechselrichter auswählen und bald [&#8230;]</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://tribolias.com/camper/energierechner-fuer-autarke-wohnmobile-und-camper/">Camper Energierechner – Solar, Batterie &amp; Wechselrichter kostenlos berechnen</a> first appeared on <a rel="nofollow" href="https://tribolias.com">Tribolias</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wie viel Strom brauche ich in meinem Camper wirklich? Wie groß muss die Batterie sein &#8211; und reicht mein Solar auch im Herbst noch aus? Diese Fragen stellt sich jeder, der seinen Camper autark ausbauen möchte.</p>



<p class="wp-block-paragraph">Mit diesem kostenlosen Energierechner kannst du deinen individuellen Strombedarf berechnen, die Solaranlage dimensionieren, den richtigen Wechselrichter auswählen und bald in einem weiteren Tool die Kabelquerschnitte ermitteln &#8211; alles ohne Registrierung, direkt im Browser.</p>



<h2 class="wp-block-heading">Was kann der Rechner?</h2>



<p class="wp-block-paragraph">Der Camper Energierechner deckt alle relevanten Bereiche eines autarken Stromausbaus ab:</p>



<ul class="wp-block-list">
<li><strong>Verbraucher erfassen</strong> – 12V, 24V, 230V und Grundlast getrennt, mit realistischen Hinweisen zu typischen Verbrauchswerten</li>



<li><strong>Solaranlage dimensionieren</strong> – inklusive Gegenrechnung mit deiner installierten Modulleistung und Systemwirkungsgrad</li>



<li><strong>Batterie berechnen</strong> – mit Autonomietagen und Entladetiefe je nach Batterietyp (AGM, LiFePO4, NMC)</li>



<li><strong>Wechselrichter und Laderegler auslegen</strong> – Dauerleistung und MPPT-Stromstärke</li>



<li><strong>Kabelquerschnitte ermitteln</strong> – mit Spannungsabfall-Berechnung und Normquerschnitt-Empfehlung (kommt bald wieder)</li>



<li><strong>Ladezeiten berechnen</strong> – für Solar und Landstrom</li>



<li><strong>Sonneneinstrahlung nach Region und Jahreszeit</strong> – mit Peak Sun Hours für Mitteleuropa, Südeuropa, Skandinavien und Nordafrika</li>
</ul>



<h2 class="wp-block-heading">So nutzt du den Rechner richtig</h2>



<p class="wp-block-paragraph"><strong>Schritt 1 – Verbraucher eintragen</strong><br>Trage alle Geräte mit ihrer tatsächlichen Leistung (Watt) und der täglichen Betriebszeit ein. Wichtig: Nicht die Nennleistung vom Typenschild, sondern den realen Verbrauch &#8211; den misst du am genauesten mit einem Shunt oder einem Energiemessgerät. Sollte das nicht mögich sein, dann doch das Typenschild und eine Angabe, wie viele Stunden das Gerät am Tag läuft.</p>



<p class="wp-block-paragraph"><strong>Schritt 2 – Grundlast nicht vergessen</strong><br>Die Grundlast umfasst alles, was dauerhaft läuft: Kühlschrank, Lüfter, Wechselrichter im Standby, Router, Alarmanlage. Bei mir sind das z.B. zwei Mastervolt-Wechselrichter, ein Kompressorkühlschrank, eine UV-Lampe für die Wasserdesinfektion und der Lüfter der Trockentrenntoilette.</p>



<p class="wp-block-paragraph"><strong>Schritt 3 – Solarertrag gegenrechnen</strong><br>Trage deine installierte Solarleistung und den Systemwirkungsgrad ein. Bei einem flachen Camperdach mit 30°C+ Außentemperatur sind 70% ein realistischer Wert &#8211; flache Module verlieren Leistung durch den ungünstigen Winkel, gewinnen aber durch längere Ertragsdauer.</p>



<p class="wp-block-paragraph"><strong>Schritt 4 – Berechnen und anpassen</strong><br>Klicke auf „Vollständig berechnen&#8220; und schau dir die Ergebnisse an. Die Empfehlungen für Solar, Batterie und Wechselrichter enthalten einen Sicherheitspuffer &#8211; das ist Absicht. Lieber etwas größer dimensionieren als im Urlaub ohne Strom dastehen.</p>



<h2 class="wp-block-heading">Mein eigenes Setup als Beispiel</h2>



<p class="wp-block-paragraph">In meinem Setra laufen dauerhaft:</p>



<ul class="wp-block-list">
<li>Zwei Mastervolt-Wechselrichter (Wirkungsgrad ~92% Volllast, ~10–15W Standby zusammen)</li>



<li>Kompressorkühlschrank (Herstellerangabe 68W, real durch Taktung ca. 20W Durchschnitt)</li>



<li>UV-Lampe Wasserdesinfektion und Umkehrosmose im Standby</li>



<li>Lüfter Trockentrenntoilette</li>
</ul>



<p class="wp-block-paragraph">Das ergibt meine Grundlast von rund 130W × 24h = 3.120 Wh/Tag &#8211; ein hoher Wert, der aber meiner realen Installation entspricht. Mit 1875Wp Solar auf dem Dach und 7 effektiven Sonnenstunden im Sommer reicht das locker für die Grundlast und die meisten Zusatzverbraucher.</p>



<h2 class="wp-block-heading">Tipps für realistische Ergebnisse</h2>



<ul class="wp-block-list">
<li><strong>Shunt installieren</strong> – Ein Batteriecomputer (z.B. Victron BMV-712) zeigt dir nach 24h genau, wie viel Strom du wirklich verbraucht hast. Das ist der beste Ausgangspunkt für die Berechnung.</li>



<li><strong>E-Bike richtig eintragen</strong> – Nicht die Akkukapazität, sondern die Ladegerätleistung! Ein 36V/4A-Ladegerät hat 144W – nicht 482W wie der Akku.</li>



<li><strong>Wechselrichter-Leerlauf nicht unterschätzen</strong> – Viele WR verbrauchen 10–30W auch wenn kein Gerät läuft. Bei 24h sind das bis zu 720Wh täglich.</li>



<li><strong>Solarwirkungsgrad realistisch wählen</strong> – Bei Hitze und flacher Dachmontage sind 70% ein guter Ausgangswert.</li>
</ul>



<h2 class="wp-block-heading">PDF und Drucken</h2>



<p class="wp-block-paragraph">Du kannst deine Berechnung als PDF speichern oder direkt ausdrucken – über die Schaltflächen oben im Tool. Die Druckversion fasst alle fünf Bereiche auf einem Dokument zusammen und eignet sich gut als Planungsunterlage für den Ausbau.</p>



<p class="wp-block-paragraph">Viel Spaß mit meinem Tool:</p>



<style>
/* ============================================================
   style.css — Camper Energierechner v3.0
   Alle CSS-Regeln. Keine Inline-Styles nötig.
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  --sun:      #D97706;
  --sun-d:    #92400E;
  --forest:   #166534;
  --forest-l: #DCFCE7;
  --steel:    #1E3A5F;
  --steel-l:  #EFF6FF;
  --bg:       #FAFAF8;
  --border:   #E5E1D6;
  --text:     #1C1917;
  --muted:    #78716C;
  --danger:   #B91C1C;
  --danger-l: #FEE2E2;
  --font-h:   'Georgia', 'Times New Roman', serif;
  --font-b:   system-ui, -apple-system, sans-serif;
  --r:        8px;
}

body {
  font-family: var(--font-b);
  background:  var(--bg);
  color:       var(--text);
  font-size:   15px;
  line-height: 1.6;
}

/* ── Header ── */
.tool-header {
  background:    transparent;
  color:         #111;
  padding:       2rem 2rem 1.5rem;
  border-bottom: 2px solid var(--border);
  margin-bottom: .5rem;
}
.header-inner   { max-width: 900px; margin: 0 auto; }
.header-eyebrow {
  font-size:      11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color:          #555;
  margin-bottom:  .5rem;
}
.header-eyebrow .vlink {
  color:                var(--sun-d);
  text-decoration:      underline;
  text-decoration-color:rgba(146,64,14,.4);
  cursor:               pointer;
}
.header-eyebrow .vlink:hover { color: var(--sun); }

.header-title {
  font-family:   var(--font-h);
  font-size:     clamp(1.4rem, 4vw, 2rem);
  font-weight:   400;
  color:         #111;
  line-height:   1.25;
  margin-bottom: .6rem;
}
.header-title span { color: var(--sun); }
.header-sub        { font-size: 13px; color: #444; max-width: 560px; }

.header-actions    { margin-top: 1.25rem; display: flex; gap: 8px; flex-wrap: wrap; }
.btn-print, .btn-pdf {
  display:     inline-flex;
  align-items: center;
  gap:         6px;
  padding:     7px 16px;
  border-radius: var(--r);
  font-size:   13px;
  font-weight: 500;
  cursor:      pointer;
  border:      1.5px solid #ccc;
  background:  #fff;
  color:       #111;
  transition:  .15s;
}
.btn-print:hover { background: #f0f0f0; }
.btn-pdf  { background: var(--sun); border-color: var(--sun); color: #fff; }
.btn-pdf:hover { background: #B45309; border-color: #B45309; }

/* ── Layout ── */
.tool-body { max-width: 920px; margin: 0 auto; padding: 1.5rem 1.25rem 3rem; }

/* ── Tabs ── */
.tabs {
  display:       flex;
  gap:           2px;
  margin-bottom: 1.5rem;
  border-bottom: 2px solid var(--border);
  overflow-x:    auto;
}
.tab-btn {
  padding:      9px 16px;
  font-size:    13px;
  font-weight:  500;
  border:       none;
  background:   transparent;
  cursor:       pointer;
  color:        var(--muted);
  white-space:  nowrap;
  border-bottom:2px solid transparent;
  margin-bottom:-2px;
  transition:   .15s;
}
.tab-btn:hover  { color: var(--text); }
.tab-btn.active { color: var(--steel); border-bottom-color: var(--steel); }
.panel          { display: none; }
.panel.active   { display: block; }

/* ── Abschnittstitel ── */
.section-title {
  font-family:   var(--font-h);
  font-size:     1.05rem;
  font-weight:   400;
  color:         var(--steel);
  margin:        1.4rem 0 .6rem;
}
.section-title:first-child { margin-top: 0; }

.section-hint {
  font-size:     12px;
  color:         var(--muted);
  background:    #F5F3EE;
  border-radius: var(--r);
  padding:       8px 12px;
  margin-bottom: .6rem;
  line-height:   1.5;
}

/* ── Info-/Warn-Boxen ── */
.info-box, .warn-box, .ok-box {
  font-size:     13px;
  padding:       10px 14px;
  border-radius: var(--r);
  margin-bottom: 1rem;
  line-height:   1.5;
}
.info-box { background: var(--steel-l); border-left: 3px solid var(--steel);  color: var(--steel);  }
.warn-box { background: #FFF7ED;        border-left: 3px solid var(--sun);    color: var(--sun-d);  }
.ok-box   { background: var(--forest-l);border-left: 3px solid var(--forest); color: var(--forest); }

/* ── Verbrauchertabellen ── */
.vtable { width: 100%; border-collapse: collapse; font-size: 13px; margin-bottom: .6rem; }
.vtable th {
  text-align:    left;
  padding:       7px 8px;
  background:    #F5F3EE;
  color:         var(--muted);
  font-weight:   600;
  border-bottom: 1.5px solid var(--border);
  font-size:     11px;
  letter-spacing:.04em;
  text-transform:uppercase;
}
.vtable td              { padding: 5px 6px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.vtable tr:last-child td{ border-bottom: none; }
.vtable td input,
.vtable td select {
  width:         100%;
  padding:       4px 7px;
  font-size:     13px;
  border:        1px solid #D6D3CA;
  border-radius: 5px;
  background:    #fff;
  color:         var(--text);
  font-family:   var(--font-b);
}
.vtable td input:focus,
.vtable td select:focus { outline: 2px solid var(--steel); }
.vtable td.col-aktiv    { text-align: center; width: 32px; }
.vtable td.col-aktiv input[type=checkbox] {
  width:  16px; height: 16px; cursor: pointer; accent-color: var(--steel);
}
.vtable td.col-wh {
  text-align:  right;
  font-weight: 700;
  color:       var(--steel);
  font-size:   13px;
  min-width:   60px;
  white-space: nowrap;
}
.vtable tr.row-inactive td            { opacity: .38; }
.vtable tr.row-inactive td.col-aktiv  { opacity: 1; }

/* ── Grundlast-Sektion ── */
.grundlast-section {
  border:        2px solid var(--sun);
  border-radius: var(--r);
  padding:       1rem;
  margin:        1rem 0;
  background:    #FFFBF0;
}
.grundlast-section .section-title { color: var(--sun-d); margin-top: 0; }

/* ── Buttons ── */
.btn {
  padding:       6px 14px;
  font-size:     13px;
  border:        1.5px solid var(--border);
  border-radius: var(--r);
  background:    #fff;
  color:         var(--text);
  cursor:        pointer;
  font-family:   var(--font-b);
  transition:    .13s;
}
.btn:hover    { background: #F5F3EE; }
.btn-add      { color: var(--steel); border-color: var(--steel); }
.btn-del      { color: var(--danger); border-color: transparent; padding: 4px 8px; font-size: 14px; }
.btn-del:hover{ background: var(--danger-l); }
.btn-calc     { background: var(--steel); color: #fff; border-color: var(--steel); padding: 9px 24px; font-size: 14px; font-weight: 500; }
.btn-calc:hover { background: #162E4D; }

/* ── Konfig-Reihe ── */
.config-row  { display: flex; gap: 1rem; flex-wrap: wrap; margin: 1rem 0; }
.config-field{ display: flex; flex-direction: column; gap: 5px; }
.config-field label {
  font-size:     12px;
  color:         var(--muted);
  font-weight:   600;
  letter-spacing:.04em;
  text-transform:uppercase;
}
.config-field input,
.config-field select {
  padding:       7px 12px;
  font-size:     14px;
  border:        1px solid #D6D3CA;
  border-radius: var(--r);
  background:    #fff;
  color:         var(--text);
  font-family:   var(--font-b);
  min-width:     160px;
}

/* ── Metrik-Karten ── */
.metrics {
  display:               grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap:                   10px;
  margin:                1rem 0;
}
.metric {
  background:    #fff;
  border:        1px solid var(--border);
  border-radius: var(--r);
  padding:       12px 14px;
  box-shadow:    0 1px 3px rgba(0,0,0,.08);
}
.metric-label { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 4px; }
.metric-value { font-size: 22px; font-weight: 700; color: var(--steel); line-height: 1; }
.metric-unit  { font-size: 12px; color: var(--muted); margin-top: 2px; }
.metric.accent       { background: var(--steel); border-color: var(--steel); }
.metric.accent .metric-label { color: rgba(255,255,255,.6); }
.metric.accent .metric-value { color: #fff; }
.metric.accent .metric-unit  { color: rgba(255,255,255,.6); }
.metric.ok-m         { background: var(--forest-l); border-color: var(--forest); }
.metric.ok-m .metric-value   { color: var(--forest); }
.metric.warn-m       { background: #FFF7ED; border-color: var(--sun); }
.metric.warn-m .metric-value { color: var(--sun-d); }

/* ── Saisonkarten ── */
.season-grid {
  display:               grid;
  grid-template-columns: repeat(4,1fr);
  gap:                   8px;
  margin-bottom:         1rem;
}
.season-card {
  border:        1.5px solid var(--border);
  border-radius: var(--r);
  padding:       12px 8px;
  text-align:    center;
  background:    #fff;
}
.season-card .s-icon  { font-size: 24px; margin-bottom: 4px; }
.season-card .s-name  { font-size: 13px; font-weight: 600; }
.season-card .s-hours { font-size: 12px; color: var(--muted); }

/* ── Ergebnis-Tabelle ── */
.rich-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.rich-table th {
  background:    #F5F3EE;
  padding:       8px 12px;
  text-align:    left;
  border-bottom: 1.5px solid var(--border);
  font-weight:   600;
  color:         var(--muted);
  font-size:     12px;
}
.rich-table td             { padding: 8px 12px; border-bottom: 1px solid var(--border); }
.rich-table tr:last-child td{ border-bottom: none; }
.rich-table tr:hover td    { background: #FAFAF8; }
.hl     { color: var(--steel); font-weight: 600; }
.hl-sun { color: var(--sun-d); font-weight: 600; }

/* ── Divider ── */
.divider { border: none; border-top: 1px solid var(--border); margin: 1.25rem 0; }

/* ── Live-Vorschau ── */
.live-bar {
  margin-top:    1rem;
  padding:       12px 16px;
  background:    #F5F3EE;
  border-radius: var(--r);
  font-size:     13px;
  display:       flex;
  gap:           1.5rem;
  flex-wrap:     wrap;
  align-items:   center;
}
.live-bar strong { color: var(--steel); }
.warn-val        { color: var(--sun-d); font-weight: 700; }

/* ── Changelog-Scrollbox ── */
.changelog-scroll {
  max-height: 480px;
  overflow-y: auto;
  margin-top: 1rem;
  border:     1px solid var(--border);
  border-radius: var(--r);
  padding:    1rem;
}

/* ── Drucken ── */
@media print {
  body                   { background: #fff; font-size: 12px; }
  .header-actions,
  .tabs,
  .no-print              { display: none !important; }
  .panel                 { display: block !important; }
  .panel::before {
    content:       attr(data-print-title);
    display:       block;
    font-family:   Georgia, serif;
    font-size:     1rem;
    color:         #1E3A5F;
    border-bottom: 2px solid #E5E1D6;
    padding-bottom:.4rem;
    margin:        1.2rem 0 .75rem;
  }
  .btn, .btn-add,
  .btn-calc, .btn-del    { display: none !important; }
  .tool-body             { padding: .5rem 0; }
}

</style>

<div class="tool-header">
  <div class="header-inner">
    <div class="header-eyebrow">
      Campervanbau &middot; Autarksystem &middot;
      <a href="javascript:void(0)" class="vlink" id="changelog-link">v3.0 &ndash; &Auml;nderungen</a>
    </div>
    <h1 class="header-title">&#9728;&#65039; Camper <span>Energierechner</span></h1>
    <p class="header-sub">Solar, Batterie, Wechselrichter &mdash; alle Werte realistisch berechnet.</p>
    <div class="header-actions">
      <button class="btn-print" id="btn-print">&#128424;&#65039; Drucken</button>
      <button class="btn-pdf"   id="btn-pdf">&#11015;&#65039; Als PDF speichern</button>
    </div>
  </div>
</div>

<!-- ══ BODY ══ -->
<div class="tool-body">

  <div class="tabs no-print">
    <button class="tab-btn active" data-tab="verbraucher">&#9889; Verbraucher</button>
    <button class="tab-btn"        data-tab="ergebnis">&#128202; Dimensionierung</button>
    <button class="tab-btn"        data-tab="laden">&#128267; Ladezeit</button>
    <button class="tab-btn"        data-tab="sonne">&#9728;&#65039; Sonnenertrag</button>
  </div>

  <!-- ══ TAB: VERBRAUCHER ══ -->
  <div id="tab-verbraucher" class="panel active" data-print-title="1 - Verbraucher">

    <div class="info-box">
      <strong>So funktioniert der Rechner:</strong>
      Trage alle Ger&auml;te mit ihrer tats&auml;chlichen Leistungsaufnahme und der t&auml;glichen
      Betriebsdauer ein. Die Checkbox aktiviert oder deaktiviert einen Verbraucher ohne ihn zu l&ouml;schen.
      Die Spalte <strong>Wh/Tag</strong> wird live berechnet.
    </div>

    <!-- 12 V -->
    <div class="section-title">12 V Verbraucher</div>
    <div class="section-hint">
      12V-Ger&auml;te laufen direkt von der Batterie. Leistung steht auf dem Ger&auml;t oder im Datenblatt.
      Wasserpumpen: nur die tats&auml;chliche Laufzeit eintragen (z.B. 3&times; 5 Min./Tag = 0,25 h).
    </div>
    <table class="vtable" id="t12">
      <thead><tr>
        <th class="col-aktiv">&#10003;</th>
        <th>Bezeichnung</th>
        <th>Leistung (W)</th>
        <th>h/Tag</th>
        <th>Wh/Tag</th>
        <th></th>
      </tr></thead>
      <tbody id="t12-body"></tbody>
    </table>
    <button class="btn btn-add no-print" id="add-t12">+ 12V Verbraucher</button>

    <hr class="divider">

    <!-- 24 V -->
    <div class="section-title">24 V Verbraucher</div>
    <div class="section-hint">
      Kompressork&uuml;hlschr&auml;nke haben hohe Nennleistung laut Hersteller, aber durch Taktung ist die
      tats&auml;chliche Durchschnittsleistung oft nur 15&ndash;30 W. Realen Wert mit Shunt nach 24 h messen.
    </div>
    <table class="vtable" id="t24">
      <thead><tr>
        <th class="col-aktiv">&#10003;</th>
        <th>Bezeichnung</th>
        <th>Leistung (W)</th>
        <th>h/Tag</th>
        <th>Wh/Tag</th>
        <th></th>
      </tr></thead>
      <tbody id="t24-body"></tbody>
    </table>
    <button class="btn btn-add no-print" id="add-t24">+ 24V Verbraucher</button>

    <hr class="divider">

    <!-- Grundlast -->
    <div class="grundlast-section">
      <div class="section-title">&#9889; Tribolias Grundlast</div>
      <div class="section-hint" style="background:#FEF3C7;border-radius:var(--r)">
        Die Grundlast fasst alle Verbraucher zusammen, die dauerhaft (24 h/Tag) laufen.
        <strong>Wichtig:</strong> Wenn der K&uuml;hlschrank bereits oben eingetragen ist,
        hier ohne K&uuml;hlschrank rechnen (Doppelz&auml;hlung vermeiden).
        Grundlast messen: Shunt oder Klemmmessger&auml;t bei ausgeschalteten Hauptverbrauchern.
      </div>
      <table class="vtable" id="tgrund">
        <thead><tr>
          <th class="col-aktiv">&#10003;</th>
          <th>Bezeichnung</th>
          <th>Leistung (W)</th>
          <th>h/Tag</th>
          <th>Wh/Tag</th>
          <th></th>
        </tr></thead>
        <tbody id="tgrund-body"></tbody>
      </table>
      <div id="grundlast-warn" class="warn-box" style="display:none"></div>
      <button class="btn btn-add no-print" id="add-tgrund">+ Grundlast-Verbraucher</button>
    </div>

    <hr class="divider">

    <!-- Heizung -->
    <div class="section-title">&#128293; Heizung &amp; L&uuml;ftung</div>
    <div class="section-hint">
      Standheizungen haben zwei Phasen: <strong>Startphase</strong> (~2&ndash;5 Min., bis 150 W) und
      <strong>Betriebsphase</strong> (nur 10&ndash;30 W). Startphase in Stunden:
      3 Starts &times; 3 Min. = 9 Min. = 0,15 h.
    </div>
    <table class="vtable" id="theiz">
      <thead><tr>
        <th class="col-aktiv">&#10003;</th>
        <th>Bezeichnung</th>
        <th>Leistung (W)</th>
        <th>h/Tag</th>
        <th>Wh/Tag</th>
        <th></th>
      </tr></thead>
      <tbody id="theiz-body"></tbody>
    </table>
    <button class="btn btn-add no-print" id="add-theiz">+ Heizung / L&uuml;ftung</button>

    <hr class="divider">

    <!-- 230 V -->
    <div class="section-title">230 V Verbraucher (&uuml;ber Wechselrichter)</div>
    <div class="section-hint">
      <strong>E-Bike:</strong> Nicht Akkukapazit&auml;t, sondern Ladeger&auml;tleistung eintragen!
      Beispiel: Ladeger&auml;t 36 V/4 A = 144 W, Ladezeit 3,35 h.<br>
      <strong>Laptop:</strong> Gesamte t&auml;gliche Betriebszeit eintragen, nicht nur Ladezeit.<br>
      <strong>WR-Leerlauf:</strong> Wechselrichter verbraucht auch im Standby Strom (ca. 10&ndash;30 W &times; 24 h).
    </div>
    <table class="vtable" id="t230">
      <thead><tr>
        <th class="col-aktiv">&#10003;</th>
        <th>Bezeichnung</th>
        <th>Ladeger&auml;t / Leistung (W)</th>
        <th>h/Tag</th>
        <th>Wh/Tag</th>
        <th></th>
      </tr></thead>
      <tbody id="t230-body"></tbody>
    </table>
    <button class="btn btn-add no-print" id="add-t230">+ 230V Verbraucher</button>

    <hr class="divider">

    <!-- Solarertrag Gegenrechnung -->
    <div class="section-title">&#9728;&#65039; T&auml;glicher Solarertrag (Gegenrechnung)</div>
    <div class="section-hint">
      Formel: Modulleistung &times; effektive Sonnenstunden &times; Systemwirkungsgrad.
      Bei Hitze &uuml;ber 30 &deg;C verlieren Module ca. 0,3 % pro Grad &uuml;ber 25 &deg;C.
      Realwert: MPPT-Laderegler-Display nach einem sonnigen Tag ablesen.
    </div>
    <div class="config-row">
      <div class="config-field">
        <label for="sol-wp">Installierte Solarleistung (Wp)</label>
        <input type="number" id="sol-wp" min="0">
      </div>
      <div class="config-field">
        <label for="sun-hours">Effektive Sonnenstunden/Tag</label>
        <select id="sun-hours">
          <option value="3">3 h &ndash; Mitteleuropa Winter</option>
          <option value="4">4 h &ndash; Fr&uuml;hling / Herbst</option>
          <option value="5">5 h &ndash; Mitteleuropa Sommer</option>
          <option value="6">6 h &ndash; S&uuml;deuropa Fr&uuml;hjahr</option>
          <option value="7">7 h &ndash; S&uuml;deuropa Sommer / flaches Dach</option>
          <option value="8">8 h &ndash; Tropen / Nordafrika</option>
        </select>
      </div>
      <div class="config-field">
        <label for="sol-eff">Systemwirkungsgrad Solar</label>
        <select id="sol-eff">
          <option value="0.90">90 % &ndash; neue Anlage, optimal</option>
          <option value="0.80">80 % &ndash; typischer Camper, gute Lage</option>
          <option value="0.70">70 % &ndash; flaches Dach, Hitze, Verluste</option>
          <option value="0.60">60 % &ndash; Teilverschattung, &auml;ltere Anlage</option>
        </select>
      </div>
    </div>

    <hr class="divider">

    <!-- Systemkonfiguration -->
    <div class="section-title">&#9881;&#65039; Systemkonfiguration</div>
    <div class="config-row">
      <div class="config-field">
        <label for="autonomy">Autonomietage (ohne Sonne)</label>
        <input type="number" id="autonomy" min="1" max="10">
      </div>
      <div class="config-field">
        <label for="battype">Batterietyp</label>
        <select id="battype">
          <option value="0.5">AGM / Gel (max. 50 % Entladung)</option>
          <option value="0.8">LiFePO4 (max. 80 % Entladung)</option>
          <option value="0.9">Lithium NMC (max. 90 % Entladung)</option>
        </select>
      </div>
      <div class="config-field">
        <label for="cable-loss">Leitungs- &amp; Sicherungsverluste</label>
        <select id="cable-loss">
          <option value="0.00">0 % &ndash; keine Verluste (ideal / Messung)</option>
          <option value="0.03">3 % &ndash; kurze, optimale Leitungen</option>
          <option value="0.05">5 % &ndash; guter Ausbau</option>
          <option value="0.08">8 % &ndash; typischer Camperausbau</option>
          <option value="0.10">10 % &ndash; konservative Sch&auml;tzung</option>
        </select>
      </div>
      <div class="config-field">
        <label for="inv-eff">Wechselrichter-Wirkungsgrad</label>
        <select id="inv-eff">
          <option value="1.00">100 % &ndash; kein Wechselrichter / Direktverbrauch</option>
          <option value="0.92">92 % &ndash; Hocheffizienz-WR</option>
          <option value="0.88">88 % &ndash; guter WR</option>
          <option value="0.85">85 % &ndash; typischer Camper-WR</option>
          <option value="0.80">80 % &ndash; &auml;lterer WR</option>
        </select>
      </div>
    </div>

    <!-- Live-Vorschau -->
    <div class="live-bar">
      <span>&#9889; Verbrauch: <strong id="lp-total">&mdash;</strong> Wh/Tag</span>
      <span>&#9728;&#65039; Solarertrag: <strong id="lp-solar-yield">&mdash;</strong> Wh/Tag</span>
      <span>&#128202; Bilanz: <strong id="lp-balance">&mdash;</strong> Wh/Tag</span>
      <span>&#128267; Batterie: <strong id="lp-bat">&mdash;</strong> Ah</span>
      <span style="margin-left:auto">
        <button class="btn btn-calc" id="btn-calc">Vollst&auml;ndig berechnen &rarr;</button>
      </span>
    </div>
  </div>

  <!-- ══ TAB: ERGEBNIS ══ -->
  <div id="tab-ergebnis" class="panel" data-print-title="2 - Dimensionierung">
    <div id="res-placeholder" class="info-box">
      Bitte zuerst Verbraucher eintragen und auf &bdquo;Vollst&auml;ndig berechnen&ldquo; klicken.
    </div>
    <div id="res-content" style="display:none">
      <div class="section-title">T&auml;gliche Energiebilanz</div>
      <div class="metrics">
        <div class="metric"><div class="metric-label">12 V</div>
          <div class="metric-value" id="r-12v">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric"><div class="metric-label">24 V</div>
          <div class="metric-value" id="r-24v">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric"><div class="metric-label">Grundlast</div>
          <div class="metric-value" id="r-grund">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric"><div class="metric-label">Heizung/L&uuml;ftung</div>
          <div class="metric-value" id="r-heiz">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric"><div class="metric-label">230 V (inkl. WR-Verlust)</div>
          <div class="metric-value" id="r-230v">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric accent"><div class="metric-label">Gesamt inkl. Verluste</div>
          <div class="metric-value" id="r-total">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
      </div>

      <div class="section-title">Solarertrag &amp; Bilanz</div>
      <div class="metrics">
        <div class="metric"><div class="metric-label">&#9728;&#65039; T&auml;glicher Solarertrag</div>
          <div class="metric-value" id="r-sol-yield">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
        <div class="metric" id="r-balance-card">
          <div class="metric-label">&#128202; Tagesbilanz</div>
          <div class="metric-value" id="r-balance">&mdash;</div>
          <div class="metric-unit">Wh (+ &Uuml;berschuss / &minus; Fehlbedarf)</div></div>
        <div class="metric"><div class="metric-label">&#128267; Aus Batterie t&auml;glich</div>
          <div class="metric-value" id="r-from-bat">&mdash;</div><div class="metric-unit">Wh/Tag</div></div>
      </div>

      <div class="section-title">Empfohlene Komponenten</div>
      <div class="metrics">
        <div class="metric"><div class="metric-label">&#9728;&#65039; Solarpanel (min.)</div>
          <div class="metric-value" id="r-solar">&mdash;</div><div class="metric-unit">Wattpeak</div></div>
        <div class="metric"><div class="metric-label">&#128267; Batterie (min.)</div>
          <div class="metric-value" id="r-bat">&mdash;</div><div class="metric-unit">Ah @ 12 V</div></div>
        <div class="metric"><div class="metric-label">&#9889; Wechselrichter</div>
          <div class="metric-value" id="r-inv">&mdash;</div><div class="metric-unit">W Dauerleistung</div></div>
        <div class="metric"><div class="metric-label">&#128295; Laderegler (MPPT)</div>
          <div class="metric-value" id="r-mppt">&mdash;</div><div class="metric-unit">Ampere min.</div></div>
      </div>

      <div id="res-tip"  class="info-box" style="margin-top:.5rem"></div>
      <div id="res-warn" class="warn-box"  style="display:none;margin-top:.5rem"></div>

      <div class="section-title">Kabelempfehlungen</div>
      <table class="rich-table">
        <thead><tr><th>Komponente</th><th>Empfehlung</th><th>Hinweis</th></tr></thead>
        <tbody id="res-details"></tbody>
      </table>
    </div>
  </div>

  <!-- ══ TAB: LADEN ══ -->
  <div id="tab-laden" class="panel" data-print-title="3 - Ladezeit">
    <div class="info-box">
      Ladezeiten f&uuml;r Solar und Landstrom.
      <strong>Hinweis:</strong> Kapazit&auml;t bezieht sich auf eine <strong>12 V Batterie</strong>.
    </div>

    <div class="section-title">Solarladung</div>
    <div class="config-row">
      <div class="config-field"><label for="l-ah">Batteriekapazit&auml;t (Ah)</label>
        <input type="number" id="l-ah" min="1"></div>
      <div class="config-field"><label for="l-soc">Aktueller Ladestand (%)</label>
        <input type="number" id="l-soc" min="0" max="100"></div>
      <div class="config-field"><label for="l-wp">Solarleistung (Wp)</label>
        <input type="number" id="l-wp" min="1"></div>
      <div class="config-field"><label for="l-sh">Eff. Sonnenstunden/Tag</label>
        <input type="number" id="l-sh" min="1" max="14" step="0.5"></div>
      <div class="config-field"><label for="l-eff">Systemwirkungsgrad (%)</label>
        <input type="number" id="l-eff" min="40" max="98" step="1"></div>
    </div>
    <button class="btn btn-calc" id="btn-laden">Ladezeit berechnen &rarr;</button>
    <div id="laden-result" style="margin-top:1rem"></div>

    <hr class="divider">

    <div class="section-title">Landstrom-Ladung</div>
    <div class="config-row">
      <div class="config-field"><label for="ls-ah">Batteriekapazit&auml;t (Ah)</label>
        <input type="number" id="ls-ah" min="1"></div>
      <div class="config-field"><label for="ls-soc">Ladestand (%)</label>
        <input type="number" id="ls-soc" min="0" max="100"></div>
      <div class="config-field"><label for="ls-a">Ladeger&auml;t-Strom (A)</label>
        <input type="number" id="ls-a" min="1"></div>
    </div>
    <button class="btn btn-calc" id="btn-landstrom">Ladezeit berechnen &rarr;</button>
    <div id="landstrom-result" style="margin-top:1rem"></div>
  </div>

  <!-- ══ TAB: SONNE ══ -->
  <div id="tab-sonne" class="panel" data-print-title="5 - Sonnenertrag">
    <div class="info-box">
      PSH = Stunden bei voller Nennleistung (1000 W/m&sup2;).
      400 Wp &times; 5 PSH &times; 70 % = 1.400 Wh/Tag real.
    </div>
    <div class="config-row" style="margin-bottom:.75rem">
      <div class="config-field">
        <label for="region">Region</label>
        <select id="region">
          <option value="mitte">Mitteleuropa (D / A / CH)</option>
          <option value="sued">S&uuml;deuropa (ES / IT / GR / HR)</option>
          <option value="nord">Nordeuropa / Skandinavien</option>
          <option value="tropen">Nordafrika / Tropen</option>
        </select>
      </div>
    </div>
    <div class="season-grid" id="season-cards"></div>
    <table class="rich-table">
      <thead><tr>
        <th>Jahreszeit</th><th>PSH/Tag</th>
        <th>Ertrag 400 Wp (70 %)</th><th>Monatsertrag</th><th>Tipp</th>
      </tr></thead>
      <tbody id="sun-table"></tbody>
    </table>

    <hr class="divider">
    <div class="section-title">Verluste &amp; Ausrichtung</div>
    <table class="rich-table">
      <thead><tr><th>Situation</th><th>Ertragsverlust</th></tr></thead>
      <tbody>
        <tr><td>Optimal (S&uuml;d, 30 &deg;)</td>
          <td class="hl" style="color:var(--forest)">+/- 0 %</td></tr>
        <tr><td>Flach (0 &deg;, Camperdach)</td>
          <td>&#8211; 10 bis 15 % Leistung, aber l&auml;ngere Ertragsdauer</td></tr>
        <tr><td>Ost- oder West</td><td>&#8211; 20 bis 30 %</td></tr>
        <tr><td>Teilverschattung</td><td>&#8211; 20 bis 50 %</td></tr>
        <tr><td>Vollverschattung</td><td>bis &#8211; 80 %</td></tr>
        <tr><td>Hitze 45 &deg;C Modultemp.</td><td>ca. &#8211; 6 % (0,3 %/&deg;C &uuml;ber 25 &deg;C)</td></tr>
        <tr><td>Verschmutzung / Staub</td><td>&#8211; 5 bis 15 %</td></tr>
      </tbody>
    </table>

    <hr class="divider">
    <div class="section-title">Sonnenstand Mitteleuropa (~48 &deg;N)</div>
    <table class="rich-table">
      <thead><tr><th>Monat</th><th>Sonnenh&ouml;he</th><th>Tagel&auml;nge</th><th>PSH</th></tr></thead>
      <tbody>
        <tr><td>Januar</td><td>19 &deg;</td><td>~8,5 h</td><td class="hl-sun">1,5</td></tr>
        <tr><td>Februar</td><td>27 &deg;</td><td>~10 h</td><td class="hl-sun">2,5</td></tr>
        <tr><td>M&auml;rz</td><td>39 &deg;</td><td>~12 h</td><td class="hl-sun">3,5</td></tr>
        <tr><td>April</td><td>50 &deg;</td><td>~14 h</td><td class="hl-sun">4,5</td></tr>
        <tr><td>Mai</td><td>58 &deg;</td><td>~15,5 h</td><td class="hl-sun">5,5</td></tr>
        <tr><td>Juni</td><td>62 &deg;</td><td>~16 h</td><td class="hl-sun">6,0</td></tr>
        <tr><td>Juli</td><td>60 &deg;</td><td>~15,5 h</td><td class="hl-sun">6,0</td></tr>
        <tr><td>August</td><td>53 &deg;</td><td>~14 h</td><td class="hl-sun">5,5</td></tr>
        <tr><td>September</td><td>42 &deg;</td><td>~12 h</td><td class="hl-sun">4,0</td></tr>
        <tr><td>Oktober</td><td>31 &deg;</td><td>~10,5 h</td><td class="hl-sun">3,0</td></tr>
        <tr><td>November</td><td>22 &deg;</td><td>~9 h</td><td class="hl-sun">1,8</td></tr>
        <tr><td>Dezember</td><td>17 &deg;</td><td>~8 h</td><td class="hl-sun">1,2</td></tr>
      </tbody>
    </table>
  </div>

  <!-- ══ TAB: CHANGELOG ══ -->
  <div id="tab-changelog" class="panel" data-print-title="6 - Aenderungen">
    <button class="btn no-print" id="btn-back">&larr; Zur&uuml;ck zum Rechner</button>
    <div class="changelog-scroll">
      <div class="section-title" style="margin-top:0">Version 3.0 &ndash; &Auml;nderungen gegen&uuml;ber v2.1</div>
      <div class="info-box">Leitungsrechner ausgelagert in ein eigenst&auml;ndiges Tool. Der Energierechner fokussiert sich jetzt auf Solar, Batterie und Wechselrichter.</div>
      <table class="rich-table">
        <thead><tr><th>Bereich</th><th>&Auml;nderung</th></tr></thead>
        <tbody>
          <tr><td>Leitungs-Tab</td><td>Entfernt &mdash; Kabelberechnung ist jetzt ein eigenst&auml;ndiges Tool auf einer separaten Seite.</td></tr>
          <tr><td>Untertitel</td><td>&bdquo;Leitungsquerschnitte&ldquo; aus der Kurzbeschreibung entfernt.</td></tr>
        </tbody>
      </table>
      <hr class="divider">
      <div class="section-title">Version 2.1 &ndash; &Auml;nderungen gegen&uuml;ber v2.0</div>
      <table class="rich-table">
        <thead><tr><th>Bereich</th><th>&Auml;nderung</th></tr></thead>
        <tbody>
          <tr><td>Leitungs- &amp; Sicherungsverluste</td><td>Neuer Wert <strong>0 %</strong> erg&auml;nzt &ndash; f&uuml;r Messungen mit Shunt oder wenn Verluste bereits in den Verbrauchswerten enthalten sind.</td></tr>
          <tr><td>Wechselrichter-Wirkungsgrad</td><td>Neuer Wert <strong>100 %</strong> erg&auml;nzt &ndash; f&uuml;r Systeme ohne Wechselrichter oder reinen 12V/24V-Direktverbrauch.</td></tr>
        </tbody>
      </table>
      <hr class="divider">
      <div class="section-title">Version 2.0 &ndash; Modularisierung</div>
      <div class="info-box">
        Der gesamte Code wurde in 8 separate Dateien aufgeteilt.
        Jede Datei kann unabh&auml;ngig mit Qwen2.5-Coder:7b weiterentwickelt werden.
      </div>
      <table class="rich-table">
        <thead><tr><th>Datei</th><th>Inhalt</th><th>Zeilen</th></tr></thead>
        <tbody>
          <tr><td>config.js</td><td>Alle Startwerte, Standardwerte, Sonnendaten</td><td>~65</td></tr>
          <tr><td>dom.js</td><td>gid(), gval(), buildRow(), updateWhCols(), setDefaults()</td><td>~80</td></tr>
          <tr><td>tables.js</td><td>buildAllTables(), addEmptyRow(), readTable()</td><td>~70</td></tr>
          <tr><td>calc.js</td><td>liveCalc(), calculate(), cableQ()</td><td>~120</td></tr>
          <tr><td>tools.js</td><td>calcLaden(), calcLandstrom() &mdash; calcLeitung() ausgelagert</td><td>~90</td></tr>
          <tr><td>sun.js</td><td>updateSun(), Saisonkarten</td><td>~50</td></tr>
          <tr><td>tabs.js</td><td>switchTab()</td><td>~30</td></tr>
          <tr><td>events.js</td><td>setupListeners(), init()</td><td>~60</td></tr>
          <tr><td>style.css</td><td>Alle CSS-Regeln</td><td>~150</td></tr>
          <tr><td>index.html</td><td>Nur HTML-Skelett, keine Logik</td><td>~250</td></tr>
        </tbody>
      </table>
      <hr class="divider">
      <div class="section-title">Version 1.4 &ndash; WordPress-Fix</div>
      <table class="rich-table">
        <thead><tr><th>Bereich</th><th>&Auml;nderung</th></tr></thead>
        <tbody>
          <tr><td>WP-Kompatibilit&auml;t</td><td>Alle inline Event-Handler entfernt, per JS gesetzt</td></tr>
          <tr><td>jQuery-Konflikt</td><td>$() umbenannt zu gid()</td></tr>
          <tr><td>DOMContentLoaded</td><td>Wrapper f&uuml;r sichere Initialisierung</td></tr>
        </tbody>
      </table>
      <hr class="divider">
      <div class="section-title">Version 1.3 &ndash; Community-Feedback</div>
      <table class="rich-table">
        <thead><tr><th>Bereich</th><th>&Auml;nderung</th></tr></thead>
        <tbody>
          <tr><td>E-Bike</td><td>480 W &rarr; 144 W (Ladeger&auml;tleistung, nicht Akkukapazit&auml;t)</td></tr>
          <tr><td>WR-Leerlauf</td><td>Eigene Zeile: 18 W &times; 24 h = 432 Wh/Tag</td></tr>
          <tr><td>Grundlast</td><td>Eigener Bereich mit Warnung bei hohen Werten</td></tr>
          <tr><td>Solarertrag</td><td>Gegenrechnung mit Bilanz und Fehlbedarf</td></tr>
          <tr><td>WR-Wirkungsgrad</td><td>Konfigurierbares Feld (Standard 85 %)</td></tr>
        </tbody>
      </table>
    </div>
  </div>

</div><!-- /tool-body -->

<script>
(function() {
/* Alles in einer IIFE — kein Konflikt mit WordPress oder alten Scripts */
/* === config.js === */
/* ============================================================
   config.js — Camper Energierechner v3.0
   Startwerte für alle Tabellen und Formularfelder.
   Hier neue Verbraucher ergänzen oder Standardwerte ändern.
   Keine Logik, keine DOM-Abhängigkeiten.
   ============================================================ */

var ROWS = {
  t12: [
    { name: 'LED Beleuchtung (gesamt)',         w: 20,   h: 4,    on: true  },
    { name: 'Wasserpumpe (nur Laufzeit!)',       w: 30,   h: 0.25, on: true  },
    { name: 'USB-Ladeger\u00e4te',              w: 25,   h: 3,    on: true  }
  ],
  t24: [
    { name: 'Dachgeb\u00e4se / Maxxair',        w: 30,   h: 4,    on: true  },
    { name: 'Kompressork\u00fchlschrank ' +
             '(68\u202fW Werksangabe, ' +
             '\u00d8-Leistung durch Taktung)',   w: 20,   h: 24,   on: true  }
  ],
  tgrund: [
    { name: 'Tribolias Grundlast ' +
             '(WC-L\u00fcfter, WR\u202fStandby, ' +
             'Elektronik)',                      w: 130,  h: 24,   on: true  }
  ],
  theiz: [
    { name: 'Standheizung \u2013 Betrieb ' +
             '(Geb\u00e4se\u202f+\u202fSteuerung)', w: 25,  h: 8,    on: false },
    { name: 'Standheizung \u2013 Startspitze ' +
             '(nur Minuten!)',                   w: 150,  h: 0.15, on: false }
  ],
  t230: [
    { name: 'Laptop (gesamte Betriebszeit, ' +
             'nicht nur Ladezeit!)',             w: 60,   h: 3,    on: true  },
    { name: 'Kaffeemaschine',                   w: 800,  h: 0.25, on: true  },
    { name: 'Induktionskochplatte',             w: 1500, h: 0.5,  on: true  },
    { name: 'E-Bike Ladeger\u00e4t ' +
             '(36\u202fV/4\u202fA\u202f=\u202f144\u202fW, ' +
             'nicht Akkukapazit\u00e4t!)',       w: 144,  h: 3.35, on: true  },
    { name: 'Wechselrichter \u2013 Leerlaufverlust ' +
             '(immer wenn WR eingeschaltet!)',   w: 18,   h: 24,   on: true  }
  ]
};

/* Standardwerte für <select>-Felder  (value-Attribut) */
var SELECT_DEFAULTS = {
  'sun-hours':  '7',
  'sol-eff':    '0.70',
  'battype':    '0.8',
  'cable-loss': '0.08',
  'inv-eff':    '0.85'
};

/* Standardwerte für <input type="number">-Felder */
var INPUT_DEFAULTS = {
  'sol-wp':   510,
  'autonomy': 2,
  /* Ladezeit Solar */
  'l-ah':  200,
  'l-soc': 30,
  'l-wp':  510,
  'l-sh':  7,
  'l-eff': 70,
  /* Ladezeit Landstrom */
  'ls-ah':  200,
  'ls-soc': 30,
  'ls-a':   20,
};

/* Sonnendaten je Region und Jahreszeit
   Format: [peak-sun-hours, monatlicher-referenzwert]            */
var SUN_DATA = {
  mitte:  { 'Fr\u00fchling': [4.5, 60], Sommer: [6.0, 75],
             Herbst: [3.0, 40], Winter: [1.5, 20] },
  sued:   { 'Fr\u00fchling': [6.0, 80], Sommer: [8.5, 105],
             Herbst: [5.0, 65], Winter: [3.5, 45] },
  nord:   { 'Fr\u00fchling': [3.5, 45], Sommer: [5.5, 68],
             Herbst: [2.0, 26], Winter: [0.8, 10] },
  tropen: { 'Fr\u00fchling': [7.0, 88], Sommer: [7.5, 94],
             Herbst: [7.0, 88], Winter: [6.5, 82] }
};

var SEASON_EMOJI = {
  'Fr\u00fchling': '\ud83c\udf38',
  Sommer:          '\u2600\ufe0f',
  Herbst:          '\ud83c\udf42',
  Winter:          '\u2744\ufe0f'
};

var SEASON_TIP = {
  'Fr\u00fchling': 'Panele sauber halten',
  Sommer:          'Hitze \u22126\u202f% bei 45\u202f\u00b0C Modultemp.',
  Herbst:          'Steileren Winkel einstellen',
  Winter:          'Schnee sofort entfernen'
};

/* IDs aller Tabellen (Reihenfolge für Berechnungen beibehalten) */
var TABLE_IDS = ['t12', 't24', 'tgrund', 'theiz', 't230'];

/* === dom.js === */
/* ============================================================
   dom.js — Camper Energierechner v3.0
   DOM-Hilfsfunktionen und Zeilen-Builder.
   Abhängigkeiten: keine (nur native DOM-API).
   ============================================================ */

/* Kurzform für getElementById */
function gid(id) {
  return document.getElementById(id);
}

/* Wert eines Input- oder Select-Elements als Float lesen */
function gval(id) {
  var el = gid(id);
  if (!el) return 0;
  return parseFloat(el.value) || 0;
}

/* Auf nächstes Vielfaches von 'step' aufrunden */
function roundUp(v, step) {
  return Math.ceil(v / step) * step;
}

/* Eine Tabellenzeile erzeugen und Event-Listener binden.
   cfg = { name: String, w: Number, h: Number, on: Boolean }
   liveCalc wird aus calc.js nach oben gereicht (via window).  */
function buildRow(cfg) {
  var tr = document.createElement('tr');
  tr.innerHTML =
    '<td class="col-aktiv"><input type="checkbox"' +
      (cfg.on ? ' checked' : '') + '></td>' +
    '<td><input type="text"></td>' +
    '<td><input type="number" min="0" step="0.01"></td>' +
    '<td><input type="number" min="0" step="0.05"></td>' +
    '<td class="col-wh">0</td>' +
    '<td><button class="btn btn-del" type="button">\u2715</button></td>';

  var inputs = tr.querySelectorAll('input');
  var cb     = inputs[0];   /* Checkbox  */
  var nameEl = inputs[1];   /* Text      */
  var wEl    = inputs[2];   /* Watt      */
  var hEl    = inputs[3];   /* h/Tag     */

  nameEl.value = cfg.name;
  wEl.value    = cfg.w;
  hEl.value    = cfg.h;

  if (!cfg.on) tr.classList.add('row-inactive');

  cb.addEventListener('change', function () {
    tr.classList.toggle('row-inactive', !this.checked);
    if (liveCalc) liveCalc();
  });
  nameEl.addEventListener('input', function () {
    if (liveCalc) liveCalc();
  });
  wEl.addEventListener('input', function () {
    if (liveCalc) liveCalc();
  });
  hEl.addEventListener('input', function () {
    if (liveCalc) liveCalc();
  });
  tr.querySelector('.btn-del').addEventListener('click', function () {
    tr.remove();
    if (liveCalc) liveCalc();
  });

  return tr;
}

/* Wh/Tag-Zelle einer einzelnen Zeile aktualisieren */
function updateWhCell(tr) {
  var cb   = tr.querySelector('input[type=checkbox]');
  var nums = tr.querySelectorAll('input[type=number]');
  var cell = tr.querySelector('.col-wh');
  if (!cell || nums.length < 2) return;
  var active = !cb || cb.checked;
  var w = parseFloat(nums[0].value) || 0;
  var h = parseFloat(nums[1].value) || 0;
  cell.textContent = active ? Math.round(w * h) : '\u2014';
}

/* Alle Wh/Tag-Zellen aller Tabellen aktualisieren */
function updateWhCols() {
  TABLE_IDS.forEach(function (tid) {
    var rows = document.querySelectorAll('#' + tid + '-body tr');
    rows.forEach(updateWhCell);
  });
}

/* Standardwerte in alle Formularfelder schreiben */
function setDefaults() {
  Object.keys(SELECT_DEFAULTS).forEach(function (id) {
    var el = gid(id);
    if (el) el.value = SELECT_DEFAULTS[id];
  });
  Object.keys(INPUT_DEFAULTS).forEach(function (id) {
    var el = gid(id);
    if (el) el.value = INPUT_DEFAULTS[id];
  });
}

/* Ergebnis-HTML für eine Metrik-Karte erzeugen */
function metricHTML(label, value, unit) {
  return '<div class="metric">' +
    '<div class="metric-label">' + label + '</div>' +
    '<div class="metric-value">' + value + '</div>' +
    '<div class="metric-unit">' + unit + '</div>' +
    '</div>';
}

/* Inhalt eines Elements setzen (mit null-Guard) */
function setText(id, val) {
  var el = gid(id);
  if (el) el.textContent = val;
}

/* === tables.js === */
/* ============================================================
   tables.js — Camper Energierechner v3.0
   Tabellen aufbauen, Zeilen hinzufügen/entfernen.
   Abhängigkeiten: config.js, dom.js
   ============================================================ */

/* Alle Tabellen aus ROWS-Konfig aufbauen */
function buildAllTables() {
  TABLE_IDS.forEach(function (tid) {
    var tb = gid(tid + '-body');
    if (!tb) return;
    var rows = ROWS[tid] || [];
    rows.forEach(function (cfg) {
      tb.appendChild(buildRow(cfg));
    });
  });
}

/* Leere neue Zeile ans Ende einer Tabelle anfügen */
function addEmptyRow(tid) {
  var tb = gid(tid + '-body');
  if (!tb) return;
  var tr = buildRow({ name: 'Neuer Verbraucher', w: 0, h: 1, on: true });
  tb.appendChild(tr);
  /* Namensfeld sofort selektieren für schnelle Eingabe */
  var nameInput = tr.querySelector('input[type=text]');
  if (nameInput) {
    nameInput.select();
    nameInput.focus();
  }
  if (liveCalc) liveCalc();
}

/* Werte einer Tabelle summieren (aktive Zeilen).
   Gibt { wh: Gesamtenergie, maxW: Spitzenlast } zurück.      */
function readTable(tid) {
  var wh = 0, maxW = 0;
  var rows = document.querySelectorAll('#' + tid + '-body tr');
  rows.forEach(function (tr) {
    var cb   = tr.querySelector('input[type=checkbox]');
    var nums = tr.querySelectorAll('input[type=number]');
    if (cb && !cb.checked) return;
    if (nums.length < 2) return;
    var w = parseFloat(nums[0].value) || 0;
    var h = parseFloat(nums[1].value) || 0;
    wh += w * h;
    if (w > maxW) maxW = w;
  });
  return { wh: wh, maxW: maxW };
}

/* Snapshot aller Tabellenwerte für Debug/Export */
function dumpTables() {
  var result = {};
  TABLE_IDS.forEach(function (tid) {
    result[tid] = [];
    var rows = document.querySelectorAll('#' + tid + '-body tr');
    rows.forEach(function (tr) {
      var cb   = tr.querySelector('input[type=checkbox]');
      var inputs = tr.querySelectorAll('input');
      if (inputs.length < 4) return;
      result[tid].push({
        active: cb ? cb.checked : true,
        name:   inputs[1].value,
        w:      parseFloat(inputs[2].value) || 0,
        h:      parseFloat(inputs[3].value) || 0
      });
    });
  });
  return result;
}

/* === calc.js === */
/* ============================================================
   calc.js — Camper Energierechner v3.0
   Kernberechnungen: liveCalc() und calculate().
   Abhängigkeiten: config.js, dom.js, tables.js
   ============================================================ */

/* Kabelquerschnitt berechnen und auf Normgröße runden.
   Formel: Q = (ρ × I × L) / (U × max_vdrop)
   ρ Kupfer = 0.0178 Ω·mm²/m                                   */
var CABLE_SIZES = [1, 1.5, 2.5, 4, 6, 10, 16, 25, 35, 50, 70];

function cableQ(ampere, length, voltage, maxDropFrac) {
  var rho  = 0.0178;
  var drop = maxDropFrac || 0.03;
  var q    = (rho * ampere * length) / (voltage * drop);
  return CABLE_SIZES.find(function (s) { return s >= q; }) || 70;
}

/* Rohwerte aus allen Tabellen lesen und summieren */
function collectEnergy() {
  var invEffRaw = parseFloat((document.getElementById('inv-eff')   || {}).value);
  var lossRaw   = parseFloat((document.getElementById('cable-loss') || {}).value);
  var invEff = isNaN(invEffRaw) ? 0.85 : invEffRaw;
  var loss   = isNaN(lossRaw)   ? 0.08 : lossRaw;
  var sunH   = gval('sun-hours') || 7;
  var solWp  = gval('sol-wp')    || 0;
  var solEff = gval('sol-eff')   || 0.70;

  var v12  = readTable('t12');
  var v24  = readTable('t24');
  var vg   = readTable('tgrund');
  var vh   = readTable('theiz');
  var v230 = readTable('t230');

  var wh12     = v12.wh;
  var wh24     = v24.wh;
  var whGrund  = vg.wh;
  var whHeiz   = vh.wh;
  var wh230raw = v230.wh;
  var wh230bat = wh230raw / invEff;

  var rawTotal   = wh12 + wh24 + whGrund + whHeiz + wh230bat;
  var total      = rawTotal * (1 + loss);
  var solarYield = solWp * sunH * solEff;
  var balance    = solarYield - total;
  var fromBat    = Math.max(0, total - solarYield);

  return {
    wh12: wh12, wh24: wh24, whGrund: whGrund,
    whHeiz: whHeiz, wh230raw: wh230raw,
    total: total, solarYield: solarYield,
    balance: balance, fromBat: fromBat,
    maxW230: v230.maxW,
    invEff: invEff, loss: loss,
    sunH: sunH, solWp: solWp, solEff: solEff
  };
}

/* Live-Vorschau: wird bei jeder Eingabe aufgerufen.
   Exponiert als window.liveCalc damit dom.js es aufrufen kann. */
var liveCalc = function liveCalc() {
  updateWhCols();

  var e        = collectEnergy();
  var autonomy = gval('autonomy') || 2;
  var batDod   = gval('battype')  || 0.8;
  var batAh    = roundUp((e.fromBat * autonomy) / (12 * batDod), 10);

  setText('lp-total',       Math.round(e.total));
  setText('lp-solar-yield', e.solWp > 0 ? Math.round(e.solarYield) : '\u2014');

  var bEl = gid('lp-balance');
  if (bEl) {
    if (e.solWp > 0) {
      bEl.textContent = (e.balance >= 0 ? '+' : '') + Math.round(e.balance);
      bEl.className   = e.balance >= 0 ? '' : 'warn-val';
    } else {
      bEl.textContent = '\u2014';
      bEl.className   = '';
    }
  }
  setText('lp-bat', batAh > 0 ? batAh : '\u2014');

  /* Grundlast-Warnung */
  var warnEl = gid('grundlast-warn');
  if (warnEl) {
    if (e.whGrund > 1000) {
      warnEl.style.display = 'block';
      warnEl.innerHTML =
        '\u26a0\ufe0f Grundlast <strong>' + Math.round(e.whGrund) + ' Wh/Tag</strong> — ' +
        (e.whGrund > 2000
          ? 'sehr hoch! Bitte mit Shunt nachpr\u00fcfen.'
          : 'Pr\u00fcfe ob die Werte realistisch sind.');
    } else {
      warnEl.style.display = 'none';
    }
  }
};

/* Vollständige Berechnung mit Ergebnis-Tab-Befüllung */
var calculate = function calculate() {
  var e        = collectEnergy();
  var autonomy = gval('autonomy') || 2;
  var batDod   = gval('battype')  || 0.8;

  var solarWp = roundUp(e.total / e.sunH / e.solEff * 1.25, 50);
  var batAh   = roundUp((e.fromBat * autonomy) / (12 * batDod), 10) ||
                roundUp((e.total   * autonomy) / (12 * batDod), 10);
  var invW    = roundUp(e.maxW230 * 1.25, 100) || 300;
  var mpptA   = Math.ceil(solarWp / 12 * 1.25);

  /* Ergebnis-Metriken befüllen */
  setText('r-12v',   Math.round(e.wh12));
  setText('r-24v',   Math.round(e.wh24));
  setText('r-grund', Math.round(e.whGrund));
  setText('r-heiz',  Math.round(e.whHeiz));
  setText('r-230v',  Math.round(e.wh230raw));
  setText('r-total', Math.round(e.total));
  setText('r-sol-yield', Math.round(e.solarYield));
  setText('r-balance',
    (e.balance >= 0 ? '+' : '') + Math.round(e.balance));
  setText('r-from-bat', Math.round(e.fromBat));
  setText('r-solar', solarWp);
  setText('r-bat',   batAh);
  setText('r-inv',   invW);
  setText('r-mppt',  mpptA);

  var balCard = gid('r-balance-card');
  if (balCard) balCard.className = 'metric ' + (e.balance >= 0 ? 'ok-m' : 'warn-m');

  /* Hinweistext */
  var tipEl = gid('res-tip');
  if (tipEl) {
    tipEl.innerHTML =
      'Basiert auf <strong>' + e.sunH + ' h Sonne/Tag</strong>, ' +
      Math.round(e.solEff * 100) + '% Systemwirkungsgrad, ' +
      Math.round(e.invEff * 100) + '% WR-Wirkungsgrad, ' +
      Math.round(e.loss * 100) + '% Leitungsverluste, ' +
      autonomy + ' Autonomietag(e).';
  }

  /* Warnungen */
  var warns = [];
  if (e.whGrund > 2000)
    warns.push('\u26a0\ufe0f Grundlast ' + Math.round(e.whGrund) +
               ' Wh/Tag ist sehr hoch \u2014 Shunt-Messung empfohlen.');
  if (e.balance < -500)
    warns.push('\u26a0\ufe0f Solar deckt nur ' + Math.round(e.solarYield) +
               ' von ' + Math.round(e.total) + ' Wh/Tag \u2014 t\u00e4glich ' +
               Math.round(-e.balance) + ' Wh aus Batterie.');
  var warnEl = gid('res-warn');
  if (warnEl) {
    warnEl.style.display = warns.length ? 'block' : 'none';
    warnEl.innerHTML     = warns.join('<br>');
  }

  /* Kabelempfehlungen */
  var invA = Math.ceil(invW / 12 * 1.1);
  var solA = Math.ceil(solarWp / 12);
  var detEl = gid('res-details');
  if (detEl) {
    detEl.innerHTML =
      '<tr><td>\u2600\ufe0f Solar \u2192 Laderegler</td>' +
        '<td class="hl">' + cableQ(solA, 3, 12, 0.01) + ' mm\u00b2</td>' +
        '<td>ca. ' + solA + ' A, L\u00e4nge ~3 m</td></tr>' +
      '<tr><td>\ud83d\udd27 Laderegler \u2192 Batterie</td>' +
        '<td class="hl">' + cableQ(mpptA, 1, 12, 0.01) + ' mm\u00b2</td>' +
        '<td>m\u00f6glichst kurz halten</td></tr>' +
      '<tr><td>\u26a1 Batterie \u2192 Wechselrichter</td>' +
        '<td class="hl">' + cableQ(invA, 1, 12, 0.01) + ' mm\u00b2</td>' +
        '<td>ca. ' + invA + ' A, so kurz wie m\u00f6glich</td></tr>' +
      '<tr><td>\ud83d\udd0c Sicherung Solar</td>' +
        '<td class="hl">' + Math.ceil(solA * 1.25) + ' A</td>' +
        '<td>am Solareingang des Ladereglers</td></tr>' +
      '<tr><td>\ud83d\udd0c Sicherung Wechselrichter</td>' +
        '<td class="hl">' + Math.ceil(invA * 1.25) + ' A</td>' +
        '<td>max. 30 cm vom Batterie-Pluspol</td></tr>';
  }

  /* Ergebnis-Tab anzeigen */
  var ph = gid('res-placeholder');
  var ct = gid('res-content');
  if (ph) ph.style.display = 'none';
  if (ct) ct.style.display = 'block';

  if (switchTab) switchTab('ergebnis');
}

/* === tools.js === */
/* ============================================================
   tools.js — Camper Energierechner v3.0
   Werkzeug-Berechnungen: Ladezeit Solar, Landstrom, Kabelquerschnitt.
   Abhängigkeiten: dom.js
   Keine Abhängigkeit von calc.js oder tables.js.
   ============================================================ */

/* ── Solarladung ── */
function calcLaden() {
  var ah  = gval('l-ah')  || 200;
  var soc = gval('l-soc') || 30;
  var wp  = gval('l-wp')  || 510;
  var sh  = gval('l-sh')  || 7;
  var eff = (gval('l-eff') || 70) / 100;

  var needed  = ah * (1 - soc / 100);
  var solarA  = wp * eff / 12;
  var totalH  = solarA > 0 ? needed / solarA : 9999;
  var days    = Math.ceil(totalH / sh);
  var dayWh   = Math.round(wp * sh * eff);

  var el = gid('laden-result');
  if (!el) return;
  el.innerHTML =
    '<div class="metrics">' +
      metricHTML('Fehlende Kapazit\u00e4t',
                 Math.round(needed), 'Ah') +
      metricHTML('Eff. Ladestrom (' + Math.round(eff * 100) + '\u202f%)',
                 solarA.toFixed(1), 'A') +
      metricHTML('Tagesertrag Solar',
                 dayWh, 'Wh/Tag') +
      '<div class="metric accent">' +
        '<div class="metric-label">Ladezeit (ohne Verbrauch)</div>' +
        '<div class="metric-value">' + days + '</div>' +
        '<div class="metric-unit">Tag(e) \u00e0 ' + sh + ' h Sonne</div>' +
      '</div>' +
    '</div>' +
    '<div class="info-box" style="margin-top:.5rem">' +
      'Paralleler Verbrauch verl\u00e4ngert die Ladezeit entsprechend. ' +
      'Werte gelten ohne gleichzeitigen Stromverbrauch.' +
    '</div>';
}

/* ── Landstrom-Ladung ── */
function calcLandstrom() {
  var ah  = gval('ls-ah')  || 200;
  var soc = gval('ls-soc') || 30;
  var a   = gval('ls-a')   || 20;

  var needed = ah * (1 - soc / 100);
  var h      = needed / a;
  var h80    = Math.max(0, (ah * 0.8 - ah * soc / 100) / a);
  var maxRec = Math.round(ah / 5);

  var el = gid('landstrom-result');
  if (!el) return;
  el.innerHTML =
    '<div class="metrics">' +
      metricHTML('Fehlende Kapazit\u00e4t',
                 Math.round(needed), 'Ah') +
      metricHTML('Ladestrom',
                 a, 'A') +
      metricHTML('Bis 80\u202f% (Bulk)',
                 h80.toFixed(1), 'Stunden') +
      '<div class="metric accent">' +
        '<div class="metric-label">Bis 100\u202f% (gesamt)</div>' +
        '<div class="metric-value">' + h.toFixed(1) + '</div>' +
        '<div class="metric-unit">Stunden</div>' +
      '</div>' +
    '</div>' +
    '<div class="ok-box" style="margin-top:.5rem">' +
      'Empfehlung: max. C/5 Ladestrom = <strong>' + maxRec + ' A</strong> ' +
      'bei ' + ah + ' Ah. Bei LiFePO4 ist h\u00f6herer Strom m\u00f6glich.' +
    '</div>';
}


/* === sun.js === */
/* ============================================================
   sun.js — Camper Energierechner v3.0
   Sonnenertrags-Tabelle und Saisonkarten.
   Abhängigkeiten: config.js, dom.js
   ============================================================ */

/* Sonnentab komplett neu rendern (bei Regionswechsel) */
var updateSun = function updateSun() {
  var rEl    = gid('region');
  var region = rEl ? rEl.value : 'mitte';
  var data   = SUN_DATA[region];
  if (!data) return;

  var seasons    = Object.keys(data);
  var cardsEl    = gid('season-cards');
  var tableEl    = gid('sun-table');
  var refWp      = 400;   /* Referenzleistung für Beispielertrag */
  var refEff     = 0.70;  /* 70 % Systemwirkungsgrad als Beispiel */

  /* Saisonkarten */
  if (cardsEl) {
    cardsEl.innerHTML = seasons.map(function (s) {
      var psh = data[s][0];
      return (
        '<div class="season-card">' +
          '<div class="s-icon">' + (SEASON_EMOJI[s] || '') + '</div>' +
          '<div class="s-name">' + s + '</div>' +
          '<div class="s-hours">' + psh + ' PSH/Tag</div>' +
        '</div>'
      );
    }).join('');
  }

  /* Ertrags-Tabelle */
  if (tableEl) {
    tableEl.innerHTML = seasons.map(function (s) {
      var psh    = data[s][0];
      var dayWh  = Math.round(refWp * psh * refEff);
      var monKwh = Math.round(dayWh * 30 / 1000 * 10) / 10;
      var tip    = SEASON_TIP[s] || '';
      return (
        '<tr>' +
          '<td>' + (SEASON_EMOJI[s] || '') + ' ' + s + '</td>' +
          '<td class="hl-sun">' + psh + ' h</td>' +
          '<td>' + dayWh + ' Wh</td>' +
          '<td>' + monKwh + ' kWh/Monat</td>' +
          '<td style="font-size:12px;color:var(--muted)">' + tip + '</td>' +
        '</tr>'
      );
    }).join('');
  }
}

/* === tabs.js === */
/* ============================================================
   tabs.js — Camper Energierechner v3.0
   Tab-Navigation. Exponiert switchTab() als window.switchTab
   damit calc.js nach Berechnung direkt zum Ergebnis-Tab springen kann.
   Abhängigkeiten: dom.js, sun.js (für Sonne-Tab-Init)
   ============================================================ */

var switchTab = function switchTab(name) {
  /* Alle Buttons und Panels deaktivieren */
  document.querySelectorAll('.tab-btn').forEach(function (b) {
    b.classList.remove('active');
  });
  document.querySelectorAll('.panel').forEach(function (p) {
    p.classList.remove('active');
  });

  /* Gewählten Panel aktivieren */
  var panel = gid('tab-' + name);
  if (panel) panel.classList.add('active');

  /* Passenden Button markieren */
  var btn = document.querySelector('.tab-btn[data-tab="' + name + '"]');
  if (btn) btn.classList.add('active');

  /* Sonne-Tab beim ersten Öffnen initialisieren */
  if (name === 'sonne' && updateSun) updateSun();
};

/* === events.js === */
/* ============================================================
   events.js — Camper Energierechner v3.0
   Event-Listener und Initialisierung.
   Muss als LETZTES geladen werden (nach allen anderen Modulen).
   Abhängigkeiten: config.js, dom.js, tables.js, calc.js,
                   tools.js, sun.js, tabs.js
   ============================================================ */

function setupListeners() {

  /* ── Tab-Buttons ── */
  document.querySelectorAll('.tab-btn').forEach(function (btn) {
    btn.addEventListener('click', function () {
      if (switchTab) switchTab(this.dataset.tab);
    });
  });

  /* ── Header-Buttons ── */
  var btnPrint = gid('btn-print');
  if (btnPrint) {
    btnPrint.addEventListener('click', function () {
      window.print();
    });
  }

  var btnPdf = gid('btn-pdf');
  if (btnPdf) {
    btnPdf.addEventListener('click', function () {
      var orig = document.title;
      document.title = 'Camper-Energierechner-v3.0';
      window.print();
      document.title = orig;
    });
  }

  var clLink = gid('changelog-link');
  if (clLink) {
    clLink.addEventListener('click', function () {
      if (switchTab) switchTab('changelog');
    });
  }

  var btnBack = gid('btn-back');
  if (btnBack) {
    btnBack.addEventListener('click', function () {
      if (switchTab) switchTab('verbraucher');
    });
  }

  /* ── Verbraucher hinzufügen ── */
  ['t12', 't24', 'tgrund', 'theiz', 't230'].forEach(function (tid) {
    var btn = gid('add-' + tid);
    if (btn) {
      btn.addEventListener('click', function () {
        addEmptyRow(tid);
      });
    }
  });

  /* ── Haupt-Berechnung ── */
  var btnCalc = gid('btn-calc');
  if (btnCalc) {
    btnCalc.addEventListener('click', function () {
      if (calculate) calculate();
    });
  }

  /* ── Werkzeug-Berechnungen ── */
  var btnLaden = gid('btn-laden');
  if (btnLaden) btnLaden.addEventListener('click', calcLaden);

  var btnLandstrom = gid('btn-landstrom');
  if (btnLandstrom) btnLandstrom.addEventListener('click', calcLandstrom);


  /* ── Konfig-Felder triggern liveCalc ── */
  ['sun-hours', 'sol-eff', 'battype', 'cable-loss', 'inv-eff',
   'sol-wp', 'autonomy'].forEach(function (id) {
    var el = gid(id);
    if (el) {
      el.addEventListener('change', function () {
        if (liveCalc) liveCalc();
      });
      el.addEventListener('input', function () {
        if (liveCalc) liveCalc();
      });
    }
  });

  /* ── Sonnen-Region ── */
  var regEl = gid('region');
  if (regEl) {
    regEl.addEventListener('change', function () {
      if (updateSun) updateSun();
    });
  }
}

/* ── Initialisierung (nach DOM-Ready) ── */
function init() {
  buildAllTables();   /* tables.js  */
  setDefaults();      /* dom.js     */
  setupListeners();   /* events.js  */
  if (updateSun) updateSun();  /* sun.js     */
  liveCalc();  /* calc.js    */
}

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', init);
} else {
  init();
}

})();
</script>



<p class="wp-block-paragraph"><em>Dieses Tool dient zur Planung und Abschätzung. Die Ergebnisse sind Richtwerte mit einkalkulierten Sicherheitspuffern &#8211; keine verbindliche Fachplanung. Vor dem Einbau elektrischer Anlagen im Fahrzeug immer einen Elektriker oder KFZ-Elektriker hinzuziehen.</em></p>



<p class="wp-block-paragraph">Um diese Seite zu finanzieren, nutzen wir Affiliate-Links. Wenn du über einen unserer Links einkaufst, erhalten wir eine kleine Provision &#8211; für dich entstehen keine Mehrkosten. Wir empfehlen nur Produkte, die wir selbst kennen oder nutzen.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://tribolias.com/camper/energierechner-fuer-autarke-wohnmobile-und-camper/">Camper Energierechner – Solar, Batterie &amp; Wechselrichter kostenlos berechnen</a> first appeared on <a rel="nofollow" href="https://tribolias.com">Tribolias</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tribolias.com/camper/energierechner-fuer-autarke-wohnmobile-und-camper/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2489</post-id>	</item>
	</channel>
</rss>
