Files
felhom.eu/website/preview/index.html
T
admin a818b9c576
gates / gates (push) Failing after 14m33s
website: the redesigned home page, staged at /preview/ (noindex)
Part C. The live home page is NOT touched: every CSS rule added is a new class
under .page-index, so index.html renders byte-for-byte as before.

website/preview/index.html  (BOM + CRLF, noindex, Disallow: /preview/)
  Ten sections, ten different layout families. The three repeats the audit found
  are gone: why-grid ran 3x and apps-showcase 2x.
    - hero: a real dashboard screenshot instead of the logo, sized by its content
      instead of a forced 100vh band, no infinite float animation, and a sentence
      made of four facts instead of "Professzionalis ... telepites es uzemeltetes".
    - the ten capability cards become three labelled clusters. Their TEXT is
      verbatim: the audit's own finding was that the writing is right and the
      layout is wrong, so only the layout moved. Every hedge ("ha van") survives.
    - NEW "Ki all mogotte" with the operator's photo and five approved sentences.
    - the 3 cloud-problem cards + the 4 own-server cards merge into ONE two-column
      comparison. No new claim about any competitor: all four left-hand sentences
      already existed on the page.
    - the two tile walls (10 + 7 tiles duplicating pages that already exist) shrink
      to a two-item band that keeps the app names and the links.
    - section headers are left-aligned and varied, not 11x centred-two-words-plus-
      one-blue-word.

  Em dashes in the page's own copy: 18 -> 0. Deliberately kept: the 6 in <title>,
  meta description, OG, Twitter and JSON-LD (operator decision at STOP 1 - indexed
  strings deserve their own pass), and 1 in the shared footer, which gate 3 requires
  to be identical across all 14 pages. Both stated, neither swept silently.

  JetBrains Mono is no longer fetched. Exactly 13 characters were loading 31 KB:
  the 1..5 process badges, the 01..05 service numbers, and - the audit missed this
  at first and it is corrected in the file - the 3/2/1 of the backup rule.

assets/operator-portrait.webp  720x900, 93 KB
  Cropped from an original that stays OUTSIDE this public repo. All metadata
  stripped and VERIFIED BY READ-BACK: 0 EXIF tags, 0 GPS IFD entries, and none of
  EXIF/XMP/ICCP/samsung/SM-A705FN/2023:10:18 appear anywhere in the bytes. Built by
  re-writing the pixels into a fresh image, so the source info dict cannot travel.
  Honest correction to the brief's premise: this photo had NO GPS tag to begin with.

scripts/site_gates.py
  preview/index.html registered in NO_TWIN, with the reason. It cannot go in TWINS:
  gate 3 wants its nav identical to index.html's (globe -> / and /en/) while the
  twin check wants a pair's globe pointing at the pair's own URLs. The English twin
  is written in the same commit as the switch, as a real twin. Everything else still
  runs on the preview - BOM, emoji, nav/footer, globe, analytics, CDN, tokens,
  cache-busting, dash-language, viewer, tail.

site_gates.py green. The builder (kept in the session scratchpad) writes BOM + CRLF
and asserts both: it first wrote LF and turned the nav/footer gate red for the
preview, which is exactly the trap this CHANGELOG's morning entry records.
2026-10-10 22:01:12 +02:00

445 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Otthoni szerver a saját otthonodban: fényképek, dokumentumok, médiatár. 58 telepíthető alkalmazás, háromszintű automatikus mentés, magyar vagy angol nyelvű vezérlőpult. Most zárt teszt indul.">
<title>Felhom.eu — Saját felhőd, saját szabályaid | Otthoni szerver szolgáltatás</title>
<!-- SEO meta -->
<meta name="keywords" content="otthoni szerver, saját felhő, self-hosting, Google Drive alternatíva, iCloud alternatíva, adatvédelem, nyílt forráskódú, szerver telepítés, szerver üzemeltetés, Nextcloud, Immich, Magyarország">
<meta name="author" content="Felhom.eu">
<meta name="robots" content="noindex, nofollow">
<!-- PREVIEW ONLY. This file becomes website/index.html at the switch; this noindex
line and robots.txt's Disallow: /preview/ are removed in that same commit. -->
<link rel="canonical" href="https://felhom.eu/">
<link rel="alternate" hreflang="hu" href="https://felhom.eu/">
<link rel="alternate" hreflang="en" href="https://felhom.eu/en/">
<link rel="alternate" hreflang="x-default" href="https://felhom.eu/">
<!-- Open Graph (Facebook, LinkedIn) -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://felhom.eu/">
<meta property="og:title" content="Felhom.eu — Saját felhőd, saját szabályaid">
<meta property="og:description" content="Otthoni szerver a te otthonodban: fényképek, dokumentumok, médiatár — automatikus mentéssel, és egy helyreállítási kóddal, amit csak te ismersz. Most zárt teszt indul.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Felhom.eu — Saját felhőd, saját szabályaid. Zárt teszt indul.">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<!-- Twitter/X Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Felhom.eu — Saját felhőd, saját szabályaid">
<meta name="twitter:description" content="Otthoni szerver a te otthonodban: fényképek, dokumentumok, médiatár — automatikus mentéssel, és egy helyreállítási kóddal, amit csak te ismersz.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<!-- Structured Data (JSON-LD) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Felhom.eu",
"description": "Professzionális otthoni szerver telepítés és üzemeltetés Magyarországon.",
"url": "https://felhom.eu",
"logo": "https://felhom.eu/assets/logo.png",
"email": "info@felhom.eu",
"areaServed": {
"@type": "Country",
"name": "Magyarország"
},
"serviceType": ["Szerver telepítés", "Szerver üzemeltetés", "Self-hosting"],
"knowsLanguage": ["hu", "en"],
"sameAs": []
}
</script>
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
<link rel="stylesheet" href="/assets/site.css?v=11">
<link rel="icon" type="image/png" href="/assets/logo_favicon_2.svg">
<script defer src="/assets/gallery.js?v=2"></script>
<script defer src="https://stats.felhom.eu/script.js" data-website-id="d419db57-5e1c-48df-bdb3-c29f25fb1661"></script>
</head>
<body class="page-index">
<nav>
<div class="container">
<a href="/" class="logo">
<img class="logo-mark" src="/assets/logo-mark.svg" alt="" aria-hidden="true">
<img class="logo-word" src="/assets/logo-wordmark.png" alt="felhom.eu">
</a>
<ul class="nav-links">
<li><a href="/#szolgaltatasok">Szolgáltatások</a></li>
<li><a href="/alkalmazasok">Alkalmazások</a></li>
<li><a href="/technologiak">Technológiák</a></li>
<li><a href="/biztonsagimentes">Mentések</a></li>
<li><a href="/gyik">GYIK</a></li>
<li><a href="/kapcsolat">Kapcsolat</a></li>
<li class="lang-globe-li"><details class="lang-globe"><summary class="lang-globe-btn" aria-label="Nyelv" title="Nyelv"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg></summary><ul class="lang-globe-menu"><li><a href="/" lang="hu" hreflang="hu" class="lang-globe-item current" aria-current="true">Magyar</a></li><li><a href="/en/" lang="en" hreflang="en" class="lang-globe-item">English</a></li></ul></details></li>
</ul>
<button class="hamburger" id="hamburger" aria-label="Menü megnyitása" aria-expanded="false">
<span class="hamburger-box">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</span>
</button>
</div>
</nav>
<div class="mobile-overlay" id="mobileOverlay"></div>
<section class="lede">
<div class="container">
<div class="lede-grid">
<div class="lede-text">
<h1>Saját felhőd,<br><span>saját szabályaid</span></h1>
<p>Egy kis gép az otthonodban: a fényképeid, a dokumentumaid, a filmjeid. Minden éjjel mentés készül. Mi figyeljük, te használod.</p>
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
</div>
<figure class="lede-shot">
<img src="/assets/dashboard-start-hu.webp" alt="A Felhom vezérlőpult indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" fetchpriority="high">
<figcaption>A vezérlőpult indítópultja egy éles Felhom dobozon.</figcaption>
</figure>
</div>
</div>
</section>
<section class="content-section" id="mit-tud">
<div class="container">
<div class="sec-head">
<h2>Mit tud <span>a doboz ma?</span></h2>
<p>Nem terv és nem ígéret: ezek ma működő funkciók egy éles Felhom dobozon.</p>
</div>
<div class="caps">
<div class="caps-group">
<h3>Amit nap mint nap használsz</h3>
<ul class="caps-list">
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-camera"/></svg> Fényképek, dokumentumok, média</h4>
<p>A telefonod fotói automatikusan feltöltődnek a saját gépedre. A beszkennelt papírjaidat a rendszer felismeri és kereshetővé teszi. A filmjeid, zenéid böngészőből és mobil appból is mennek.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-folder"/></svg> Hálózati megosztás</h4>
<p>A doboz mappái megjelennek a Windows Intézőben és a Mac Finderben: úgy húzod rájuk a fájlokat, mint bármelyik másik mappára. Megosztásonként beállítható, hogy csak olvasható legyen.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-package"/></svg> 58 telepíthető alkalmazás</h4>
<p>A vezérlőpultból telepíthetők, pár kattintással, parancssor nélkül. Szinte mind nyílt forráskódú (a kivételeket az alkalmazások oldalán jelöljük), és mind a te gépeden fut.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg> Magyarul vagy angolul</h4>
<p>A vezérlőpult magyarul és angolul is használható. A nyelvet a háztartás választja, és a dobozról érkező e-mailek is ezt a nyelvet követik.</p>
</li>
</ul>
</div>
<div class="caps-group">
<h3>Ami a háttérben véd</h3>
<ul class="caps-list">
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-shield-check"/></svg> Háromszintű automatikus mentés</h4>
<p>Minden éjjel készül egy mentés a dobozon, egy másodpéldány egy második meghajtóra (ha van), és egy titkosított másolat egy távoli tárhelyre. A megosztott mappáid a második meghajtón és a távoli másolatban is benne vannak.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-lock"/></svg> Helyreállítási kód, amit csak te ismersz</h4>
<p>A távoli mentésed titkosításának kulcsa egy helyreállítási kód, ami pontosan egyszer jelenik meg: a te képernyődön. Mi nem ismerjük, és nem tudjuk visszaállítani. Ez azt is jelenti, hogy a kód nélkül a távoli mentés nekünk sem olvasható: tedd el jól.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Visszaállítás, ha baj van</h4>
<p>Egy törölt fájl visszahozható a mentésből. Ha maga a doboz megy tönkre, az újratelepített rendszerre a titkosított távoli mentésből visszahozhatók az alkalmazásaid adatai, a helyreállítási kóddal.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-home"/></svg> Internetkimaradáskor is működik</h4>
<p>A doboz az otthonodban van. Ha elmegy a net, az otthoni hálózaton továbbra is eléred a fotóidat és a fájljaidat: nem egy távoli szolgáltató engedélyétől függenek.</p>
</li>
</ul>
</div>
<div class="caps-group">
<h3>Amiről mi gondoskodunk</h3>
<ul class="caps-list">
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-stethoscope"/></svg> Távoli felügyelet, automatikus frissítés</h4>
<p>Figyeljük a doboz állapotát. A vezérlőpult magától frissül a legutóbbi kiadásra, és a doboz rendszere is megkapja a biztonsági frissítéseket. Neked nem kell csinálnod semmit. Ha valami elromlik, mi látjuk.</p>
</li>
<li class="caps-item">
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Óvatos alkalmazásfrissítés</h4>
<p>Egy alkalmazás új verziója csak akkor jut el hozzád, ha előbb kipróbáltuk. Frissítés előtt friss mentés készül, és ha az új verzió nem indul el rendesen, a doboz magától visszaállítja az előzőt, az adataiddal együtt.</p>
</li>
</ul>
</div>
</div>
</div>
</section>
<section class="content-section alt-bg" id="vezerlopult">
<div class="container">
<div class="sec-head">
<h2>Így néz ki <span>a vezérlőpult</span></h2>
<p>Valódi képek egy Felhom dobozról. Kattints rájuk a teljes mérethez.</p>
</div>
<div class="dash-grid">
<figure class="dash-shot">
<a href="/assets/dashboard-start-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-start-hu.webp" alt="A vezérlőpult Indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" loading="lazy"></a>
<figcaption><strong>Indítópult</strong>: minden alkalmazásod egy kattintásra.</figcaption>
</figure>
<figure class="dash-shot">
<a href="/assets/dashboard-apps-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-apps-hu.webp" alt="Az Alkalmazások oldal: telepített és telepíthető alkalmazások kártyái, állapottal" width="1440" height="900" loading="lazy"></a>
<figcaption><strong>Alkalmazások</strong>: telepítés pár kattintással, és látod, mi fut és mi naprakész.</figcaption>
</figure>
<figure class="dash-shot">
<a href="/assets/dashboard-app-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-app-hu.webp" alt="Egy alkalmazás saját oldala: mire jó, képek, és az első lépések" width="1440" height="900" loading="lazy"></a>
<figcaption><strong>Egy alkalmazás oldala</strong>: mire jó, hova tedd a fájlokat, és hogyan kezdj hozzá.</figcaption>
</figure>
<figure class="dash-shot">
<a href="/assets/dashboard-backups-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-backups-hu.webp" alt="A mentések oldala: minden alkalmazás adatbázisának éjszakai mentése, ellenőrizve" width="1440" height="900" loading="lazy"></a>
<figcaption><strong>Mentések</strong>: minden éjjel minden alkalmazás adatbázisa mentésre kerül, és ellenőrizzük.</figcaption>
</figure>
</div>
</div>
</section>
<section class="content-section" id="ki-all-mogotte">
<div class="container">
<div class="who">
<figure class="who-photo">
<img src="/assets/operator-portrait.webp" alt="Nagyfenyvesi Viktor, a Felhom üzemeltetője" width="720" height="900" loading="lazy">
</figure>
<div class="who-text">
<h2>Ki áll <span>mögötte</span></h2>
<p><strong>Nagyfenyvesi Viktor vagyok.</strong> Tíz éve tervezek hálózatokat és infrastruktúrát, ma DevOps mérnökként dolgozom, otthon pedig évek óta megy a saját szerverem; a mostani nagyjából egy éve fut.</p>
<p>A Felhom onnan indult, hogy ilyen szolgáltatást itthon nem találtam. Saját szervert sokan meg tudnak építeni, de utána menteni, frissíteni és figyelni is kell valakinek. Ezt a részét vállalom át.</p>
<p>Ha írsz, én válaszolok, és nem ígérek olyat, amit a doboz ma nem tud.</p>
</div>
</div>
</div>
</section>
<section class="content-section alt-bg" id="hogyan-mukodik">
<div class="container">
<div class="sec-head">
<h2>Hogyan <span>működik?</span></h2>
<p>Az első beszélgetéstől a működő rendszerig.</p>
</div>
<div class="flow">
<div class="flow-step">
<h3>Egyeztetés</h3>
<p>Megbeszéljük az igényeidet: milyen alkalmazásokra van szükséged, és mekkora tárhelyet szeretnél.</p>
</div>
<div class="flow-step">
<h3>Hardver kiválasztás</h3>
<p>Segítünk megtalálni a legjobb ár-érték arányú gépet, ami az igényeidnek megfelel.</p>
</div>
<div class="flow-step">
<h3>Telepítés</h3>
<p>Feltelepítjük és bekonfiguráljuk az alkalmazásokat, a mentéseket, és a monitoringot.</p>
</div>
<div class="flow-step">
<h3>Átadás</h3>
<p>Bemutatjuk a rendszert, segítünk áthozni a meglévő adataidat, és válaszolunk minden kérdésedre.</p>
</div>
<div class="flow-step">
<h3>Üzemeltetés</h3>
<p>Figyeljük a rendszert, frissítünk, mentéseket ellenőrzünk. Te csak használod.</p>
</div>
</div>
</div>
</section>
<section class="content-section" id="mentesek">
<div class="container">
<div class="backup-content">
<div class="backup-text">
<h2>Adataid <span>biztonságban</span></h2>
<p>A nagy felhőszolgáltatók milliókat költenek arra, hogy az adataid ne vesszenek el. De tudtad, hogy ugyanezt az otthoni szerveredről is elérheted?</p>
<p>A 3-2-1 mentési szabályt követve professzionális szintű adatbiztonságot építünk fel – egy katasztrófa után is marad egy titkosított másolat, távol az otthonodtól.</p>
<a href="/biztonsagimentes" class="cta-button-secondary">
Mentési stratégia részletei →
</a>
</div>
<div class="backup-visual">
<div class="backup-rule-mini">
<span class="rule-num">3</span>
<div class="rule-text">
<h4>Három másolat</h4>
<p>Eredeti + két biztonsági mentés</p>
</div>
</div>
<div class="backup-rule-mini">
<span class="rule-num">2</span>
<div class="rule-text">
<h4>Két tárolótípus</h4>
<p>Különböző eszközökön tárolva</p>
</div>
</div>
<div class="backup-rule-mini">
<span class="rule-num">1</span>
<div class="rule-text">
<h4>Egy távoli helyen</h4>
<p>Offsite backup a biztonság érdekében</p>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="content-section alt-bg" id="miert">
<div class="container">
<div class="sec-head">
<h2>Miért a <span>sajátod?</span></h2>
<p>Ugyanaz a kényelem, más feltételekkel.</p>
</div>
<div class="vs">
<div class="vs-head">
<div>Felhőszolgáltatónál</div>
<div>Saját dobozon</div>
</div>
<div class="vs-row">
<div>Havonta fizetsz a tárhelyért és a prémium funkciókért, és az árak csak nőnek idővel.</div>
<div><strong>A gép a tiéd, örökre.</strong> Nincs tárhely-előfizetés, ami évről évre drágul: az áramot fizeted, és ha kéred, az üzemeltetést.</div>
</div>
<div class="vs-row">
<div>A fotóid, dokumentumaid, személyes adataid idegen szervereken vannak, idegen kezekben.</div>
<div><strong>Az adataid az otthonodban maradnak</strong>, nem a Google vagy a Microsoft szerverein. A távoli mentésbe csak titkosítva kerülnek.</div>
</div>
<div class="vs-row">
<div>A tárhely fogy, és ha betelt, megint fizetsz.</div>
<div><strong>Nincs 15GB-os limit.</strong> Bővítheted ahogy nőnek az igényeid, TB-okkal, ha kell.</div>
</div>
<div class="vs-row">
<div>Nem te döntöd el, milyen szolgáltatásokat használsz, és mikor szűnnek meg.</div>
<div><strong>Te döntöd el, milyen szolgáltatásokat futtatsz.</strong> Te vagy a főnök, nem a szolgáltató.</div>
</div>
</div>
</div>
</section>
<section class="content-section" id="szolgaltatasok">
<div class="container">
<div class="band">
<div class="band-item" id="alkalmazasok">
<h3>Amit telepíthetsz</h3>
<p>Fájlkezelés, fotók és média, dokumentumok, jelszókezelés, okosotthon, fejlesztői eszközök. Nextcloud, Immich, Jellyfin, Paperless-ngx, Vaultwarden, Home Assistant és még 52 másik: <strong>58 alkalmazás</strong>, szinte mind nyílt forráskódú.</p>
<a href="/alkalmazasok" class="cta-button-secondary">Összes alkalmazás megtekintése →</a>
</div>
<div class="band-item" id="technologiak">
<h3>Ami alatta fut</h3>
<p>Docker konténerek egy Proxmox alapon, háromszintű mentés, titkosított alagút nyitott port nélkül, magyar vagy angol vezérlőpult. Az igényeidhez igazítjuk, a <strong>legegyszerűbbtől a legkomolyabbig</strong>.</p>
<a href="/technologiak" class="cta-button-secondary">Technológiákról bővebben →</a>
</div>
</div>
</div>
</section>
<section class="content-section alt-bg" id="zart-teszt">
<div class="container">
<div class="sec-head">
<h2>Zárt <span>teszt</span></h2>
<p>Néhány magyar háztartással most kezdjük el élesben használni a rendszert.</p>
</div>
<div class="test-grid">
<div class="test-note">
<h3>Valódi használat</h3>
<p>Nem demó: a doboz nálad marad, és az igazi fényképeidet, dokumentumaidat teszed rá. Segítünk a telepítésben és az átállásban, utána te használod a mindennapokban.</p>
</div>
<div class="test-note">
<h3>Visszajelzés</h3>
<p>Cserébe azt kérjük, hogy mondd el, mi zavaró, mi érthetetlen, mi nem működik. Egy „ezt a gombot nem találtam" ér nekünk a legtöbbet: abból tudjuk, mit kell kijavítani.</p>
</div>
</div>
<div class="limits">
<h3>Ismert korlátok, őszintén</h3>
<p>A vezérlőpulthoz jelenleg <strong>egy közös háztartási jelszó</strong> tartozik, külön családtagi fiókok még nincsenek (az egyes alkalmazásoknak viszont saját felhasználóik lehetnek). A <strong>TV-re streamelés (DLNA)</strong> még nincs: egyelőre böngészőből és mobil appból megy a médiatár. És mivel ez teszt, számíts arra, hogy találsz hibát: ez a lényege.</p>
</div>
<div class="close-cta">
<p>Ha ez érdekel, írj. <strong>Nem kötelez semmire</strong>, először csak beszélgetünk.</p>
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
</div>
</div>
</section>
<section class="contact" id="kapcsolat">
<div class="container">
<div class="contact-box">
<h2>Érdekel? <span>Beszéljünk!</span></h2>
<div class="contact-methods">
<a href="/kapcsolat" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-message-square"/></svg> Kapcsolatfelvételi űrlap</a>
<a href="mailto:info@felhom.eu" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-mail"/></svg> info@felhom.eu</a>
</div>
</div>
</div>
</section>
<footer>
<div class="container">
<p>© 2026 felhom.eu — Saját felhőd, saját szabályaid</p>
<p class="footer-legal">Üzemeltető: Nagyfenyvesi Viktor · <a href="mailto:info@felhom.eu">info@felhom.eu</a> · <a href="/adatkezeles">Adatkezelési tájékoztató</a> · <a href="/feltetelek">Feltételek</a></p>
</div>
</footer>
<script>
(function() {
const hamburger = document.getElementById('hamburger');
const navLinks = document.querySelector('.nav-links');
const overlay = document.getElementById('mobileOverlay');
const body = document.body;
if (!hamburger || !navLinks || !overlay) {
console.warn('[mobile-menu] Missing elements:', {
hamburger: !!hamburger,
navLinks: !!navLinks,
overlay: !!overlay
});
return;
}
function openMenu() {
hamburger.classList.add('is-active');
navLinks.classList.add('is-open');
overlay.classList.add('is-visible');
body.classList.add('menu-open');
hamburger.setAttribute('aria-expanded', 'true');
hamburger.setAttribute('aria-label', 'Menü bezárása');
}
function closeMenu() {
hamburger.classList.remove('is-active');
navLinks.classList.remove('is-open');
overlay.classList.remove('is-visible');
body.classList.remove('menu-open');
hamburger.setAttribute('aria-expanded', 'false');
hamburger.setAttribute('aria-label', 'Menü megnyitása');
}
hamburger.addEventListener('click', function() {
if (navLinks.classList.contains('is-open')) {
closeMenu();
} else {
openMenu();
}
});
// Close on overlay click
overlay.addEventListener('click', closeMenu);
// Close on nav link click
navLinks.querySelectorAll('a').forEach(function(link) {
link.addEventListener('click', closeMenu);
});
// Close on Escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && navLinks.classList.contains('is-open')) {
closeMenu();
}
});
// Close on resize if open (e.g., rotating device)
window.addEventListener('resize', function() {
if (window.innerWidth > 900 && navLinks.classList.contains('is-open')) {
closeMenu();
}
});
})();
</script>
</body>
</html>