@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Montserrat:wght@500;700;800&display=swap');
.hs-section {
--gold: #C9A860;
--grey: #d6d6d6;
position: relative;
height: 100vh;
height: 100svh;
overflow: hidden;
background: #f6f4ee;
font-family: 'Inter', sans-serif;
}
.hs-section * { box-sizing: border-box; }
.hs-track {
position: relative;
display: flex;
align-items: center;
height: 100%;
width: max-content;
padding: 0 10vw;
will-change: transform;
}
.hs-item {
--fill: 0;
position: relative;
flex-shrink: 0;
width: clamp(300px, 28vw, 440px);
padding: 0 30px;
text-align: center;
}
.hs-year {
margin: 0 0 10px;
font-family: 'Montserrat', sans-serif;
font-size: clamp(48px, 9vh, 76px);
font-weight: 800;
line-height: 1;
color: var(--gold);
}
.hs-img {
width: 100%;
height: clamp(130px, 25vh, 230px);
margin: 0 auto clamp(20px, 4vh, 40px);
background-repeat: no-repeat;
background-position: center bottom;
background-size: contain;
filter: drop-shadow(0 22px 16px rgba(0,0,0,.22));
}
/* Divider: grey base + gold fill */
.hs-dotrow {
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 40px;
margin: 0 -31px clamp(18px, 3vh, 30px);
}
.hs-line,
.hs-line-fill {
position: absolute;
left: 0; right: 0;
top: 50%;
height: 2px;
margin-top: -1px;
}
.hs-line { background: var(--grey); }
.hs-line-fill {
background: var(--gold);
transform: scaleX(var(--fill));
transform-origin: left center;
}
.hs-dot {
position: relative;
z-index: 2;
width: 40px; height: 40px;
border-radius: 50%;
background: var(--grey);
transition: background .4s ease, transform .4s ease;
}
.hs-item.is-active .hs-dot {
background: var(--gold);
transform: scale(1.1);
}
/* Description: FIXED height (6 lines) = hamesha align rahega */
.hs-item p {
margin: 0;
font-family: 'Inter', sans-serif;
font-size: clamp(14px, 1.1vw, 16px);
line-height: 1.7;
color: #555;
height: calc(1.7em * 6);
}
/* Quote circle (divider line ke upar center) */
.hs-cta { width: clamp(260px, 22vw, 340px); }
.hs-cta .hs-year,
.hs-cta .hs-img,
.hs-cta p { visibility: hidden; }
.hs-cta .hs-line,
.hs-cta .hs-line-fill { right: 50%; }
.hs-quote {
position: absolute;
z-index: 3;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
justify-content: center;
width: 170px; height: 170px;
padding: 16px;
border-radius: 50%;
background: var(--gold);
color: #1b1b1b;
font-family: 'Montserrat', sans-serif;
font-size: 16px;
font-weight: 700;
line-height: 1.3;
text-align: center;
text-decoration: none;
transition: transform .3s ease;
}
.hs-quote:hover { transform: translate(-50%, -50%) scale(1.08); }
/* Mobile: vertical timeline */
@media (max-width: 767px) {
.hs-section { height: auto; overflow: visible; padding: 60px 0; }
.hs-track {
display: block;
width: auto; height: auto;
padding: 0 20px;
transform: none !important;
}
.hs-item {
width: auto;
padding: 0 0 50px 64px;
text-align: left;
}
.hs-year { font-size: 44px; }
.hs-img {
height: 170px;
background-position: left bottom;
}
.hs-item p { height: auto; font-size: 15px; }
.hs-dotrow {
position: absolute;
left: 0; top: 0; bottom: 0;
width: 40px; height: auto;
margin: 0;
display: block;
}
.hs-line, .hs-line-fill {
left: 19px; right: auto;
top: 0; bottom: 0;
width: 2px; height: auto;
margin-top: 0;
}
.hs-line-fill {
transform: scaleY(var(--fill));
transform-origin: top center;
}
.hs-dot { position: absolute; top: 4px; left: 0; }
.hs-cta { width: auto; padding: 10px 0 0; text-align: center; }
.hs-cta .hs-year, .hs-cta .hs-img, .hs-cta p,
.hs-cta .hs-dotrow { display: none; }
.hs-quote { position: static; transform: none; margin: 0 auto; }
.hs-quote:hover { transform: scale(1.08); }
}
1983
Gründung des Unternehmens und erste Wohnbauprojekte mit Fokus auf solide Bauqualität und langfristigen Werterhalt für private Investoren.
1996
Ausbau des Immobilienportfolios um Mehrfamilienhäuser in gefragten Lagen und Aufbau eines starken Netzwerks aus Planern und Bauunternehmen.
2005
Einführung maßgeschneiderter Investmentmodelle für Kapitalanleger mit transparenter Renditeplanung und stabilen Mieteinnahmen.
2013
Realisierung nachhaltiger Neubauprojekte mit modernen Energiekonzepten, die Betriebskosten senken und den Immobilienwert steigern.
(function () {
function loadScript(src, cb) {
var s = document.createElement("script");
s.src = src;
s.onload = cb;
document.head.appendChild(s);
}
function init() {
gsap.registerPlugin(ScrollTrigger);
var section = document.querySelector(".hs-section");
var track = document.querySelector(".hs-track");
if (!section || !track) return;
var items = Array.prototype.slice.call(track.querySelectorAll(".hs-item[data-step]"));
var mm = gsap.matchMedia();
/* DESKTOP + TABLET: horizontal scroll */
mm.add("(min-width: 768px)", function () {
var distance = function () {
return Math.max(0, track.scrollWidth - window.innerWidth);
};
function update(progress) {
var vw = window.innerWidth;
var p = distance() * progress + vw * (0.15 + 0.85 * progress);
items.forEach(function (it) {
var l = it.offsetLeft, w = it.offsetWidth;
var f = Math.min(1, Math.max(0, (p - l) / w));
it.style.setProperty("--fill", f);
it.classList.toggle("is-active", p >= l + w / 2);
});
}
gsap.to(track, {
x: function () { return -distance(); },
ease: "none",
scrollTrigger: {
trigger: section,
start: "top top",
end: function () { return "+=" + distance(); },
pin: true,
scrub: 1,
anticipatePin: 1,
invalidateOnRefresh: true,
onUpdate: function (self) { update(self.progress); },
onRefresh: function (self) { update(self.progress); }
}
});
return function () {
items.forEach(function (it) {
it.style.removeProperty("--fill");
it.classList.remove("is-active");
});
};
});
/* MOBILE: vertical timeline */
mm.add("(max-width: 767px)", function () {
function update() {
var line = window.innerHeight * 0.6;
items.forEach(function (it) {
var r = it.getBoundingClientRect();
var f = Math.min(1, Math.max(0, (line - r.top) / r.height));
it.style.setProperty("--fill", f);
it.classList.toggle("is-active", r.top < line);
});
}
var st = ScrollTrigger.create({
trigger: section,
start: "top bottom",
end: "bottom top",
onUpdate: update,
onRefresh: update
});
update();
return function () {
st.kill();
items.forEach(function (it) {
it.style.removeProperty("--fill");
it.classList.remove("is-active");
});
};
});
window.addEventListener("load", function () { ScrollTrigger.refresh(); });
if (document.fonts && document.fonts.ready) {
document.fonts.ready.then(function () { ScrollTrigger.refresh(); });
}
}
function start() {
if (window.gsap && window.ScrollTrigger) return init();
loadScript("https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js", function () {
loadScript("https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js", init);
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", start);
} else {
start();
}
})();