<script type="module">
  import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.176.0/build/three.module.js';
  import { GLTFLoader } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/loaders/GLTFLoader.js';
  import { RGBELoader } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/loaders/RGBELoader.js';
  import { EffectComposer } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/postprocessing/EffectComposer.js';
  import { RenderPass } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/postprocessing/RenderPass.js';
  import { UnrealBloomPass } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/postprocessing/UnrealBloomPass.js';
  import { FilmPass } from 'https://cdn.jsdelivr.net/npm/three@0.176.0/examples/jsm/postprocessing/FilmPass.js';

  // ── Scene & Camera ──────────────────────────────────────────────
  const scene = new THREE.Scene();
  const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
  // Initialposition definieren
	const initialCamera = { x: 0, y: 0, z: 5 };
	camera.position.set(initialCamera.x, initialCamera.y, initialCamera.z);

  // ── Renderer ────────────────────────────────────────────────────
  const renderer = new THREE.WebGLRenderer({
    canvas: document.querySelector('#canvas_3D'),
    antialias: true,
  });
  renderer.setPixelRatio(window.devicePixelRatio);
  renderer.setSize(window.innerWidth, window.innerHeight);
  renderer.toneMapping = THREE.CineonToneMapping;
  renderer.toneMappingExposure = 0.85;
  renderer.outputColorSpace = THREE.SRGBColorSpace;

  // ── Post-Processing ─────────────────────────────────────────────
  const composer = new EffectComposer(renderer);
  composer.addPass(new RenderPass(scene, camera));

  const bloomPass = new UnrealBloomPass(
    new THREE.Vector2(window.innerWidth, window.innerHeight),
    0.35,   // Stärke  – anpassen nach Geschmack
    0.5,   // Radius
    0.85   // Schwellenwert (je niedriger, desto mehr leuchtet)
  );
  composer.addPass(bloomPass);

  const filmPass = new FilmPass(
    0.25,  // Grain-Stärke – anpassen nach Geschmack
    false  // Scanlines
  );
  composer.addPass(filmPass);

  // ── Resize ──────────────────────────────────────────────────────
  // Initiale Größe merken
	let canvasWidth = window.innerWidth;
	let canvasHeight = window.innerHeight;

	window.addEventListener('resize', () => {
  // Nur reagieren wenn sich die Breite ändert
  // oder die Höhe sich signifikant ändert (>100px = echtes Resize, nicht Browser-UI)
  	const widthChanged = window.innerWidth !== canvasWidth;
  	const heightChanged = Math.abs(window.innerHeight - canvasHeight) > 100;

  	if (!widthChanged && !heightChanged) return; // Browser-UI Änderung → ignorieren

  	// Neue Werte speichern
  	canvasWidth = window.innerWidth;
  	canvasHeight = window.innerHeight;

  	camera.aspect = canvasWidth / canvasHeight;
  	camera.updateProjectionMatrix();
  	renderer.setSize(canvasWidth, canvasHeight);
  	composer.setSize(canvasWidth, canvasHeight);
	});

  // ── HDRI Environment ────────────────────────────────────────────
  //Scene muss vor RGBELoader existieren
  const rgbeLoader = new RGBELoader();
  rgbeLoader.load(
    '/wp-content/uploads/2026/04/sundowner_overlook_1k.hdr',
    function (hdrTexture) {
      hdrTexture.mapping = THREE.EquirectangularReflectionMapping;
      scene.environment = hdrTexture;
    }
  );

  // ── Hintergrund ─────────────────────────────────────────────────
  const texture = new THREE.TextureLoader().load('/wp-content/uploads/2026/04/0d99a8372539a08ad0b509656ced9fb33590cbd4.png');
  scene.background = texture;

  // ── Licht ───────────────────────────────────────────────────────
  const ambientLight = new THREE.AmbientLight(0xffffff);
  const pointLight = new THREE.PointLight(0xffffff, 2);
  pointLight.position.set(-0.5, 1.5, 3);
  scene.add(ambientLight, pointLight);
	const pointLightHelper = new THREE.PointLightHelper(pointLight, 1); 
	//scene.add(pointLightHelper);
	

  // ── Modell ──────────────────────────────────────────────────────
  let model = null;
  const loader = new GLTFLoader();
  loader.load(
    '/wp-content/uploads/2026/04/LT_logo_glass.glb',
    function (gltf) {
      model = gltf.scene;
      /*
      model.traverse((child) => {
        if (child.isMesh) {
          child.material = new THREE.MeshPhysicalMaterial({
            color: 0xffffff,
            metalness: 0.1,
            roughness: 0.05,
            transmission: 0.95,
            thickness: 2.0,
            ior: 1.5,
            reflectivity: 0.9,
            transparent: true,
            envMapIntensity: 1.5,
          });
        }
      });
      */
      model.scale.set(0.1, 0.1, 0.1);
      model.position.set(-0.1, 1, 0);
      scene.add(model);
    },
    (xhr) => console.log((xhr.loaded / xhr.total * 100) + '% geladen'),
    (error) => console.error('Fehler:', error)
  );

  // ── Animate ─────────────────────────────────────────────────────



let scrollY = 0;
let targetCameraY = initialCamera.y;
let targetCameraZ = initialCamera.z;

window.addEventListener('scroll', () => {
  scrollY = document.body.getBoundingClientRect().top;
  targetCameraZ = initialCamera.z - scrollY * -0.005;
  targetCameraY = initialCamera.y + scrollY * -0.0025;
}, { passive: true });

/*
document.body.onscroll = moveCamera;
moveCamera();
*/
	
	
  const clock = new THREE.Clock(); 

	function animate() {
  	requestAnimationFrame(animate);
    camera.position.z += (targetCameraZ - camera.position.z) * 0.15;
  	camera.position.y += (targetCameraY - camera.position.y) * 0.15;
 
  
  if (model) {
    const t = clock.getElapsedTime(); 
    
      
    model.rotation.y = Math.sin(t * 0.5) * 0.15; // ±0.15 rad (~8°)
    model.rotation.x = Math.sin(t * 0.3) * 0.08; // ±0.08 rad (~4°)

    
  }

  composer.render();
}
animate();
</script>

Wir arbeiten nicht, 
wir leben
was wir lieben.

LiberFam

LiberTec entstand aus der Überzeugung, dass Leidenschaft die besten Ergebnisse schafft. 
Deshalb nehmen wir uns die Freiheit, uns niemals mit Durchschnitt zufrieden zu geben — umgeben von Menschen, 
die diesen Ehrgeiz nicht nur teilen, sondern leben. 
Gemeinsam glauben wir an kompromisslose Qualität, schnelle Umsetzung und echte Ergebnisse. 
So nutzen wir unsere Leidenschaft, um unseren Kunden das zu geben, was sie verdienen — das Beste. 
Denn wer liebt, was er tut, gibt sich niemals mit Mittelmaß zufrieden.

Wir glauben, dass Leidenschaft der Motor ist, der Qualität möglich macht.
Wir glauben, dass Ehrlichkeit  wertvoller ist als große Versprechen.
Wir glauben, dass Geschwindigkeit und Qualität sich nicht ausschließen, sondern bedingen.
Wir glauben, dass Marketing nur dann Sinn hat, wenn es wirkt.
Wir glauben, dass Perfektion nicht möglich ist, aber ersterbenswert.

Unsere Philosophie

LiberDNA

    ZufriedenheitsgarantieSie werden Keine unzufriedenen Kunden finden.

    In unserer gesamten Firmengeschichte gab es keinen einzigen. Das ist kein Zufall, sondern Prinzip: Wir arbeiten so lange an einem Projekt, bis es wirklich passt – ohne Zusatzkosten, ohne Diskussion. Dafür wurden wir 2024 mit dem Oberlausitzer Unternehmerpreis ausgezeichnet.

    QualitätGut ist nicht gut genug.

    Wir sind Perfektionisten. Lieber drehen wir eine Runde mehr, prüfen zweimal, feilen ein drittes Mal.
    Nicht, weil wir müssen – sondern weil wir nicht anders können.

    IndividualitätKeine Vorlagen. Keine Copy-Paste-Projekte.

    Jedes Unternehmen ist einzigartig. Wir hören zu, tauchen ein, lernen kennen – und entwickeln Lösungen, die zu Ihnen passen.
    Statt Vorlagen mit KI-Texten zu füllen.

    KommunikationKlartext statt Floskeln.

    Ehrlich, direkt, offen. Intern wie extern. Auch wenn es mal unbequem wird – nur so entsteht Vertrauen. Und nur so wachsen beide Seiten.

    EinfachheitZurücklehnen statt To-do-Liste.

    Wir wissen, wie voll Ihr Kopf schon ist. Darum nehmen wir Arbeit ab, statt welche draufzupacken.
    Sie konzentrieren sich auf Ihr Geschäft. Um den Rest kümmern wir uns.

    ZuverlässigkeitEin Wort ist ein Versprechen.

    Deadlines sind keine Richtwerte. Absprachen sind bindend. Auf uns ist Verlass – immer.

    ErgebnisorientierungErgebnisse statt Ausreden.

    Am Ende zählt nicht, warum etwas nicht ging. Sondern, was funktioniert.
    Wir liefern Lösungen, die wirken – und gehen dafür die Extrameile.

    GeschwindigkeitSchnell. Ohne Abstriche.

    Ihre Zeit ist wertvoll. Darum arbeiten wir zügig. Aber nie auf Kosten der Qualität.

    ErreichbarkeitImmer nah, immer da.

    Mail, Telefon, WhatsApp – wir passen uns an Ihre Kommunikation an. Auch nach Feierabend. Auch am Wochenende, wenn es brennt.

    LeidenschaftEmotionen ohne Ausnahme.

    Webseiten, Videos, Social Media – was heute unser Beruf ist, war damals unser Hobby.
    Die Begeisterung von damals haben wir uns bewahrt.

    VerantwortungWir geben weiter, was wir haben.

    Sponsorings, ehrenamtliche Projekte, Praktika für junge Menschen – wir glauben, dass sich Glück verdoppelt, wenn man es teilt.

    Mehr als ein JobWir lieben, was wir tun.

    Wir nehmen unsere Arbeit ernst, aber uns selbst nicht. Die meisten von uns kennen sich seit über zehn Jahren.
    Gute Arbeit entsteht nur dort, wo echte Verbindungen sind – und davon haben wir jede Menge.

Alles begann in einem Kinderzimmer…

Unsere Geschichte

...mit einem zu langsamen PC und der Frage: „Wie macht man eigentlich eine Webseite?“ Und kurz danach: „Wie schneidet man ein Video?“
Das war vor über fünfzehn Jahren.
2005
Olgierd vor seinem ersten PC
Heute sitzen wir nicht mehr im Kinderzimmer, sondern in einem Büro mit über 200 Quadratmetern. Die Rechner sind schneller geworden. Die Objektive größer. Und die Geschichten, die wir erzählen, bedeutender. 

Seit der Firmengründung im August 2021 durften wir die Geschichten von über 150 Kunden erzählen und wurden auf diesem Weg als Oberlausitzer Unternehmen des Jahres 2024 ausgezeichnet. 

Geblieben ist trotzdem das, was uns damals angetrieben hat: Echte Neugier. Ein Anspruch bis zur Schmerzgrenze. Und die Überzeugung, dass außergewöhnliche Arbeit nur entsteht, wenn man sie mit Herz macht. 
2024
Teil des Teams bei der Preisverleihung des Oberlausitzer Unternehmerpreises

Genau das bringen wir heute in jedes Unternehmen ein, das uns seine Geschichte anvertraut.

150+ Kunden vertrauen bereits auf uns.

Die LiberFam

Team

Olgierd Linke

Olgierd Linke

Paskal Müncheberg

Paskal Müncheberg

Hannes Exner

Hannes Exner

Johannes Eichler

Johannes Eichler

Anna Babiienko

Anna Babiienko

Szymon Staśkiewicz

Szymon Staśkiewicz

Moritz Weiss

Moritz Weiss

Franz Burkhardt

Franz Burkhardt

Davin Falk

Davin Falk

Filip Parkitny

Filip Parkitny

Julian Mauermann

Julian Mauermann

Anna Gemeinhardt

Anna Gemeinhardt

Wir glauben, dass Erfolg nur Sinn macht, wenn man ihn teilt.

Deshalb unterstützen wir Menschen und Projekte, die mit derselben Leidenschaft etwas bewegen wollen wie wir.
zu unseren Sponsorings

Sponsoring

Anfragen
kostenlos und unverbindlich

Projektanfrage

Erzählen Sie uns von Ihrem Projekt.