2 Commits

Author SHA1 Message Date
409b82e8ab Merge version_2_1781386924104 into main
Merge version_2_1781386924104 into main
2026-06-13 21:43:10 +00:00
kudinDmitriyUp
b03a42323c Bob AI: Increased global text sizing to large for better readability 2026-06-13 21:42:31 +00:00
9 changed files with 327 additions and 238 deletions

View File

@@ -32,21 +32,21 @@
--width-carousel-item-3: calc(var(--width-content-width) / 3 - var(--vw-1_5) / 3 * 2);
--width-carousel-item-4: calc(var(--width-content-width) / 4 - var(--vw-1_5) / 4 * 3);
/* @typography/text-sizing/medium */
--text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
--text-xs: clamp(0.54rem, 0.72vw, 0.72rem);
--text-sm: clamp(0.615rem, 0.82vw, 0.82rem);
--text-base: clamp(0.69rem, 0.92vw, 0.92rem);
--text-lg: clamp(0.75rem, 1vw, 1rem);
--text-xl: clamp(0.825rem, 1.1vw, 1.1rem);
--text-2xl: clamp(0.975rem, 1.3vw, 1.3rem);
--text-3xl: clamp(1.2rem, 1.6vw, 1.6rem);
--text-4xl: clamp(1.5rem, 2vw, 2rem);
--text-5xl: clamp(2.025rem, 2.75vw, 2.75rem);
--text-6xl: clamp(2.475rem, 3.3vw, 3.3rem);
--text-7xl: clamp(3rem, 4vw, 4rem);
--text-8xl: clamp(3.5rem, 4.5vw, 4.5rem);
--text-9xl: clamp(5.25rem, 7vw, 7rem);
/* @typography/text-sizing/large */
--text-2xs: clamp(0.525rem, 0.7vw, 0.7rem);
--text-xs: clamp(0.6rem, 0.8vw, 0.8rem);
--text-sm: clamp(0.675rem, 0.9vw, 0.9rem);
--text-base: clamp(0.75rem, 1vw, 1rem);
--text-lg: clamp(0.825rem, 1.1vw, 1.1rem);
--text-xl: clamp(0.9rem, 1.2vw, 1.2rem);
--text-2xl: clamp(1.05rem, 1.4vw, 1.4rem);
--text-3xl: clamp(1.35rem, 1.8vw, 1.8rem);
--text-4xl: clamp(1.65rem, 2.2vw, 2.2rem);
--text-5xl: clamp(2.25rem, 3vw, 3rem);
--text-6xl: clamp(2.7rem, 3.6vw, 3.6rem);
--text-7xl: clamp(3.375rem, 4.5vw, 4.5rem);
--text-8xl: clamp(4.125rem, 5.5vw, 5.5rem);
--text-9xl: clamp(6rem, 8vw, 8rem);
}
/* @typography/text-sizing/medium (mobile) */

View File

@@ -1,234 +1,33 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import AboutSection from './HomePage/sections/About';
import FeaturesSection from './HomePage/sections/Features';
import MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Vienna's Reliable Plumbing & Heating"
title="Professional Emergency Repair Services"
description="Speed, reliability, and competence at your doorstep in 1060 Wien. 24/7 support for all your plumbing and heating emergencies."
primaryButton={{
text: "Call Now",
href: "tel:+4366499501072",
}}
secondaryButton={{
text: "Book Appointment",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-man-working-as-plumber_23-2150746421.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/electrician-working-air-conditioner_482257-96273.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-composition-tools_23-2148138066.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/man-electrical-technician-working-switchboard-with-fuses-uses-tablet_169016-23926.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/high-voltage-infrastructure_1127-2074.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-wash-zone-black-faucet-scandinavian-style_169016-69045.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Aqua"
title="Precision Work, Reliable Results"
description="Located at Gumpendorfer Str. 41, 1060 Wien, we pride ourselves on transparent pricing and impeccable service. From burst pipes to complete boiler installations, we handle your home with care and professionalism."
imageSrc="http://img.b2bpic.net/free-photo/coveralls-digitally-generated-car-cardboard-box-pointing_1134-941.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedCards
tag="Our Expertise"
title="Comprehensive Plumbing & Heating Solutions"
description="We offer a wide range of expert services to ensure your home systems run flawlessly."
items={[
{
title: "Heating Systems",
description: "Expert renovation, installation, and repair for your boiler and heating systems.",
tags: [
"Heating",
"Energy Efficiency",
],
imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334230.jpg",
},
{
title: "Burst Pipe Repair",
description: "Rapid response to mitigate water damage. We find the source and repair it fast.",
tags: [
"Emergency",
"Plumbing",
],
imageSrc: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990681.jpg",
},
{
title: "System Maintenance",
description: "Comprehensive check-ups to prevent breakdowns and prolong the life of your equipment.",
tags: [
"Maintenance",
"Support",
],
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-service_23-2150171258.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Why Choose Aqua"
title="Proven Excellence in Vienna"
description="We deliver consistent, high-quality results backed by our reputation."
metrics={[
{
value: "100+",
title: "Happy Clients",
description: "Trusted by homes across Vienna.",
imageSrc: "http://img.b2bpic.net/free-photo/we-are-finally-our-new-home_637285-12396.jpg",
},
{
value: "24/7",
title: "Emergency Response",
description: "We are available whenever disaster strikes.",
imageSrc: "http://img.b2bpic.net/free-photo/yellow-pedestal-outdoor-post-against-wall_181624-3809.jpg",
},
{
value: "10",
title: "Years Experience",
description: "A decade of industry knowledge.",
imageSrc: "http://img.b2bpic.net/free-photo/business-people-meeting_53876-13582.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Trusted by Locals"
title="Client Success Stories"
description="See why our neighbors recommend Aqua for professional plumbing services."
testimonials={[
{
name: "Franziska Metzger",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-american-woman-cafe_273609-5292.jpg",
},
{
name: "Viktoria Kuhn",
role: "Homeowner",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-banner-concept-with-copy-space_23-2149601533.jpg",
},
{
name: "Nora Hofstetter",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/person-drinking-beverage-while-break-time_23-2149256900.jpg",
},
{
name: "Julian Schreiber",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-wearing-yellow-bandana_273609-13337.jpg",
},
{
name: "Paul Schenk",
role: "Homeowner",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mature-blonde-business-woman-work_23-2149100291.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Common Questions"
title="Need Help? Find Answers."
description="Everything you need to know about our services and booking process."
categories={[
{
name: "Emergency",
items: [
{
question: "What counts as an emergency?",
answer: "Burst pipes, total heating failure, or severe leaks.",
},
{
question: "Do you come out the same day?",
answer: "Yes, we strive to prioritize emergencies as quickly as possible.",
},
],
},
{
name: "Services",
items: [
{
question: "Do you offer quotes?",
answer: "We provide transparent, upfront pricing before starting any work.",
},
{
question: "What locations do you serve?",
answer: "We specialize in Vienna, specifically 1060 and surrounding districts.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Ready to Start?"
text="Call us at +43 664 995 01 072 or visit our office at Gumpendorfer Str. 41."
primaryButton={{
text: "Call Us Now",
href: "tel:+4366499501072",
}}
secondaryButton={{
text: "Get Directions",
href: "https://maps.google.com/?q=59X4+8R+Vienna,+Austria",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "about" section.
import React from 'react';
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="About Aqua"
title="Precision Work, Reliable Results"
description="Located at Gumpendorfer Str. 41, 1060 Wien, we pride ourselves on transparent pricing and impeccable service. From burst pipes to complete boiler installations, we handle your home with care and professionalism."
imageSrc="http://img.b2bpic.net/free-photo/coveralls-digitally-generated-car-cardboard-box-pointing_1134-941.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Ready to Start?"
text="Call us at +43 664 995 01 072 or visit our office at Gumpendorfer Str. 41."
primaryButton={{
text: "Call Us Now",
href: "tel:+4366499501072",
}}
secondaryButton={{
text: "Get Directions",
href: "https://maps.google.com/?q=59X4+8R+Vienna,+Austria",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Common Questions"
title="Need Help? Find Answers."
description="Everything you need to know about our services and booking process."
categories={[
{
name: "Emergency",
items: [
{
question: "What counts as an emergency?",
answer: "Burst pipes, total heating failure, or severe leaks.",
},
{
question: "Do you come out the same day?",
answer: "Yes, we strive to prioritize emergencies as quickly as possible.",
},
],
},
{
name: "Services",
items: [
{
question: "Do you offer quotes?",
answer: "We provide transparent, upfront pricing before starting any work.",
},
{
question: "What locations do you serve?",
answer: "We specialize in Vienna, specifically 1060 and surrounding districts.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,49 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "features" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedCards
tag="Our Expertise"
title="Comprehensive Plumbing & Heating Solutions"
description="We offer a wide range of expert services to ensure your home systems run flawlessly."
items={[
{
title: "Heating Systems",
description: "Expert renovation, installation, and repair for your boiler and heating systems.",
tags: [
"Heating",
"Energy Efficiency",
],
imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334230.jpg",
},
{
title: "Burst Pipe Repair",
description: "Rapid response to mitigate water damage. We find the source and repair it fast.",
tags: [
"Emergency",
"Plumbing",
],
imageSrc: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990681.jpg",
},
{
title: "System Maintenance",
description: "Comprehensive check-ups to prevent breakdowns and prolong the life of your equipment.",
tags: [
"Maintenance",
"Support",
],
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-service_23-2150171258.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Vienna's Reliable Plumbing & Heating"
title="Professional Emergency Repair Services"
description="Speed, reliability, and competence at your doorstep in 1060 Wien. 24/7 support for all your plumbing and heating emergencies."
primaryButton={{
text: "Call Now",
href: "tel:+4366499501072",
}}
secondaryButton={{
text: "Book Appointment",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-man-working-as-plumber_23-2150746421.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/electrician-working-air-conditioner_482257-96273.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-composition-tools_23-2148138066.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/man-electrical-technician-working-switchboard-with-fuses-uses-tablet_169016-23926.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/high-voltage-infrastructure_1127-2074.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-wash-zone-black-faucet-scandinavian-style_169016-69045.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,40 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Why Choose Aqua"
title="Proven Excellence in Vienna"
description="We deliver consistent, high-quality results backed by our reputation."
metrics={[
{
value: "100+",
title: "Happy Clients",
description: "Trusted by homes across Vienna.",
imageSrc: "http://img.b2bpic.net/free-photo/we-are-finally-our-new-home_637285-12396.jpg",
},
{
value: "24/7",
title: "Emergency Response",
description: "We are available whenever disaster strikes.",
imageSrc: "http://img.b2bpic.net/free-photo/yellow-pedestal-outdoor-post-against-wall_181624-3809.jpg",
},
{
value: "10",
title: "Years Experience",
description: "A decade of industry knowledge.",
imageSrc: "http://img.b2bpic.net/free-photo/business-people-meeting_53876-13582.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "testimonials" section.
import React from 'react';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Trusted by Locals"
title="Client Success Stories"
description="See why our neighbors recommend Aqua for professional plumbing services."
testimonials={[
{
name: "Franziska Metzger",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-american-woman-cafe_273609-5292.jpg",
},
{
name: "Viktoria Kuhn",
role: "Homeowner",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-banner-concept-with-copy-space_23-2149601533.jpg",
},
{
name: "Nora Hofstetter",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/person-drinking-beverage-while-break-time_23-2149256900.jpg",
},
{
name: "Julian Schreiber",
role: "Local Guide",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-wearing-yellow-bandana_273609-13337.jpg",
},
{
name: "Paul Schenk",
role: "Homeowner",
company: "Reviewer",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mature-blonde-business-woman-work_23-2149100291.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}