feat: Add initial Next.js website for TelenetSystems, including core pages, components, and assets.
BIN
assets/sonstiges/david-20mu-cc-88ller-da85dab8-046e19ba.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
assets/sonstiges/firma1-8a863d8b.jpg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
assets/sonstiges/firmenkunden-96736712-5fa99704.jpg
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
assets/sonstiges/franz-8b76ccff-320f42cb.jpg
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
assets/sonstiges/furkan-demirel-4112a488-f6dfc223.jpg
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
assets/sonstiges/internet-7b594a2d-793cefee.jpg
Normal file
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 87 KiB |
BIN
assets/sonstiges/julia-20besler-f4fe1bff-fb0f3af2.jpg
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
assets/sonstiges/lorena-c31636eb-2f817bb4.jpg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
assets/sonstiges/lukas-20schennach-0f7160e5-e8152f4f.jpg
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
assets/sonstiges/lwl1-c8928579-d408002b.jpg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
assets/sonstiges/mario-20kien-f5e3602f-ddda3b58.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
assets/sonstiges/martin-20m-c3-bcller-4422f545-ddb853b7.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
assets/sonstiges/privatkunden-a54cf4d8-0018c3fa.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
assets/sonstiges/serverraum-7225cb6a.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
assets/sonstiges/telefon-fa5e8c21-271d2135.jpg
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
assets/sonstiges/telefonie1-ad7595f9.jpg
Normal file
|
After Width: | Height: | Size: 239 KiB |
BIN
assets/sonstiges/timo-224648e7-f0782cdb.jpg
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
assets/sonstiges/tv-business-c3bdfb94-23310090.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
assets/sonstiges/tv-paytv-6cbac6e4-d140e2e4.jpg
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
assets/sonstiges/tv-privat-76f60c7a-88eafcfb.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
assets/sonstiges/wolfgang-20schwaiger-3fd3136b-19e15245.jpg
Normal file
|
After Width: | Height: | Size: 127 KiB |
41
website/.gitignore
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
/.pnp
|
||||||
|
.pnp.*
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/patches
|
||||||
|
!.yarn/plugins
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/versions
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# next.js
|
||||||
|
/.next/
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
*.pem
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# env files (can opt-in for committing if needed)
|
||||||
|
.env*
|
||||||
|
|
||||||
|
# vercel
|
||||||
|
.vercel
|
||||||
|
|
||||||
|
# typescript
|
||||||
|
*.tsbuildinfo
|
||||||
|
next-env.d.ts
|
||||||
36
website/README.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
First, run the development server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev
|
||||||
|
# or
|
||||||
|
yarn dev
|
||||||
|
# or
|
||||||
|
pnpm dev
|
||||||
|
# or
|
||||||
|
bun dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||||
|
|
||||||
|
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
||||||
|
|
||||||
|
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
||||||
|
|
||||||
|
## Learn More
|
||||||
|
|
||||||
|
To learn more about Next.js, take a look at the following resources:
|
||||||
|
|
||||||
|
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||||
|
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||||
|
|
||||||
|
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
||||||
|
|
||||||
|
## Deploy on Vercel
|
||||||
|
|
||||||
|
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||||
|
|
||||||
|
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
||||||
18
website/eslint.config.mjs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { defineConfig, globalIgnores } from "eslint/config";
|
||||||
|
import nextVitals from "eslint-config-next/core-web-vitals";
|
||||||
|
import nextTs from "eslint-config-next/typescript";
|
||||||
|
|
||||||
|
const eslintConfig = defineConfig([
|
||||||
|
...nextVitals,
|
||||||
|
...nextTs,
|
||||||
|
// Override default ignores of eslint-config-next.
|
||||||
|
globalIgnores([
|
||||||
|
// Default ignores of eslint-config-next:
|
||||||
|
".next/**",
|
||||||
|
"out/**",
|
||||||
|
"build/**",
|
||||||
|
"next-env.d.ts",
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
export default eslintConfig;
|
||||||
7
website/next.config.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
|
const nextConfig: NextConfig = {
|
||||||
|
/* config options here */
|
||||||
|
};
|
||||||
|
|
||||||
|
export default nextConfig;
|
||||||
6603
website/package-lock.json
generated
Normal file
28
website/package.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "website",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "next dev",
|
||||||
|
"build": "next build",
|
||||||
|
"start": "next start",
|
||||||
|
"lint": "eslint"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"framer-motion": "^12.31.1",
|
||||||
|
"lucide-react": "^0.563.0",
|
||||||
|
"next": "16.1.6",
|
||||||
|
"react": "19.2.3",
|
||||||
|
"react-dom": "19.2.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@tailwindcss/postcss": "^4",
|
||||||
|
"@types/node": "^20",
|
||||||
|
"@types/react": "^19",
|
||||||
|
"@types/react-dom": "^19",
|
||||||
|
"eslint": "^9",
|
||||||
|
"eslint-config-next": "16.1.6",
|
||||||
|
"tailwindcss": "^4",
|
||||||
|
"typescript": "^5"
|
||||||
|
}
|
||||||
|
}
|
||||||
7
website/postcss.config.mjs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
const config = {
|
||||||
|
plugins: {
|
||||||
|
"@tailwindcss/postcss": {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
1
website/public/file.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
||||||
|
After Width: | Height: | Size: 391 B |
1
website/public/globe.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
BIN
website/public/images/hero/firma.jpg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
website/public/images/hero/internet-header.jpg
Normal file
|
After Width: | Height: | Size: 253 KiB |
BIN
website/public/images/hero/tv-header.jpg
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
website/public/images/logo/logo-white.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
website/public/images/logo/logo.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
website/public/images/services/firmenkunden.jpg
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
website/public/images/services/internet.jpg
Normal file
|
After Width: | Height: | Size: 157 KiB |
BIN
website/public/images/services/privatkunden.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
website/public/images/services/serverraum.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
website/public/images/services/telefonie.jpg
Normal file
|
After Width: | Height: | Size: 239 KiB |
BIN
website/public/images/services/tv.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
website/public/images/team/team.jpg
Normal file
|
After Width: | Height: | Size: 274 KiB |
1
website/public/next.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
website/public/vercel.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
||||||
|
After Width: | Height: | Size: 128 B |
1
website/public/window.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
||||||
|
After Width: | Height: | Size: 385 B |
209
website/src/app/datenschutz/page.tsx
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Datenschutz",
|
||||||
|
description: "Datenschutzerklärung von TeleNetSystems gemäß DSGVO.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function DatenschutzPage() {
|
||||||
|
return (
|
||||||
|
<div className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-3xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<h1 className="text-3xl sm:text-4xl font-bold text-foreground mb-8">
|
||||||
|
Datenschutzerklärung
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div className="prose prose-lg max-w-none text-muted-foreground">
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
1. Datenschutz auf einen Blick
|
||||||
|
</h2>
|
||||||
|
<h3 className="text-lg font-medium text-foreground mt-6 mb-3">
|
||||||
|
Allgemeine Hinweise
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
Die folgenden Hinweise geben einen einfachen Überblick darüber, was mit
|
||||||
|
Ihren personenbezogenen Daten passiert, wenn Sie diese Website besuchen.
|
||||||
|
Personenbezogene Daten sind alle Daten, mit denen Sie persönlich
|
||||||
|
identifiziert werden können.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
2. Verantwortliche Stelle
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
TeleNetSystems GmbH<br />
|
||||||
|
Musterstraße 1<br />
|
||||||
|
6600 Reutte<br />
|
||||||
|
Österreich
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Telefon: +43 5672 2000<br />
|
||||||
|
E-Mail: info@telenetsystems.at
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Verantwortliche Stelle ist die natürliche oder juristische Person, die
|
||||||
|
allein oder gemeinsam mit anderen über die Zwecke und Mittel der
|
||||||
|
Verarbeitung von personenbezogenen Daten entscheidet.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
3. Datenerfassung auf dieser Website
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<h3 className="text-lg font-medium text-foreground mt-6 mb-3">
|
||||||
|
Server-Log-Dateien
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
Der Provider dieser Website erhebt und speichert automatisch
|
||||||
|
Informationen in so genannten Server-Log-Dateien, die Ihr Browser
|
||||||
|
automatisch an uns übermittelt. Dies sind:
|
||||||
|
</p>
|
||||||
|
<ul className="list-disc pl-6 mt-2 space-y-1">
|
||||||
|
<li>Browsertyp und Browserversion</li>
|
||||||
|
<li>Verwendetes Betriebssystem</li>
|
||||||
|
<li>Referrer URL</li>
|
||||||
|
<li>Hostname des zugreifenden Rechners</li>
|
||||||
|
<li>Uhrzeit der Serveranfrage</li>
|
||||||
|
<li>IP-Adresse</li>
|
||||||
|
</ul>
|
||||||
|
<p className="mt-4">
|
||||||
|
Eine Zusammenführung dieser Daten mit anderen Datenquellen wird nicht
|
||||||
|
vorgenommen. Die Erfassung dieser Daten erfolgt auf Grundlage von Art. 6
|
||||||
|
Abs. 1 lit. f DSGVO.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 className="text-lg font-medium text-foreground mt-6 mb-3">
|
||||||
|
Kontaktformular
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre
|
||||||
|
Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen
|
||||||
|
Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von
|
||||||
|
Anschlussfragen bei uns gespeichert.
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1
|
||||||
|
lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines Vertrags
|
||||||
|
zusammenhängt oder zur Durchführung vorvertraglicher Maßnahmen
|
||||||
|
erforderlich ist.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
4. Ihre Rechte
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Sie haben jederzeit das Recht, unentgeltlich Auskunft über Herkunft,
|
||||||
|
Empfänger und Zweck Ihrer gespeicherten personenbezogenen Daten zu
|
||||||
|
erhalten. Sie haben außerdem ein Recht, die Berichtigung oder Löschung
|
||||||
|
dieser Daten zu verlangen.
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">Ihnen stehen folgende Rechte zu:</p>
|
||||||
|
<ul className="list-disc pl-6 mt-2 space-y-1">
|
||||||
|
<li>
|
||||||
|
<strong>Auskunftsrecht (Art. 15 DSGVO):</strong> Sie können Auskunft
|
||||||
|
über Ihre von uns verarbeiteten personenbezogenen Daten verlangen.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Recht auf Berichtigung (Art. 16 DSGVO):</strong> Sie können
|
||||||
|
die Berichtigung unrichtiger oder die Vervollständigung Ihrer bei uns
|
||||||
|
gespeicherten personenbezogenen Daten verlangen.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Recht auf Löschung (Art. 17 DSGVO):</strong> Sie können die
|
||||||
|
Löschung Ihrer bei uns gespeicherten personenbezogenen Daten
|
||||||
|
verlangen.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Recht auf Einschränkung (Art. 18 DSGVO):</strong> Sie können
|
||||||
|
die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten
|
||||||
|
verlangen.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Recht auf Datenübertragbarkeit (Art. 20 DSGVO):</strong> Sie
|
||||||
|
können verlangen, Ihre personenbezogenen Daten in einem
|
||||||
|
maschinenlesbaren Format zu erhalten.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Widerspruchsrecht (Art. 21 DSGVO):</strong> Sie können
|
||||||
|
jederzeit gegen die Verarbeitung Ihrer personenbezogenen Daten
|
||||||
|
Widerspruch einlegen.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
5. Keine Verwendung von Tracking-Tools
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Diese Website verwendet keine Tracking-Tools, Analyse-Dienste oder
|
||||||
|
Cookies zu Werbezwecken. Wir verzichten bewusst auf die Erfassung Ihres
|
||||||
|
Nutzungsverhaltens über solche Dienste.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
6. SSL-/TLS-Verschlüsselung
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der Übertragung
|
||||||
|
vertraulicher Inhalte eine SSL-/TLS-Verschlüsselung. Eine verschlüsselte
|
||||||
|
Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von
|
||||||
|
"http://" auf "https://" wechselt und an dem Schloss-Symbol in Ihrer
|
||||||
|
Browserzeile.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
7. Beschwerderecht bei der Aufsichtsbehörde
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Wenn Sie der Ansicht sind, dass die Verarbeitung Ihrer personenbezogenen
|
||||||
|
Daten gegen die DSGVO verstößt, haben Sie das Recht, bei einer
|
||||||
|
Aufsichtsbehörde Beschwerde einzulegen.
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Zuständige Aufsichtsbehörde in Österreich:<br />
|
||||||
|
Österreichische Datenschutzbehörde<br />
|
||||||
|
Barichgasse 40-42<br />
|
||||||
|
1030 Wien<br />
|
||||||
|
<a
|
||||||
|
href="https://www.dsb.gv.at"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="text-primary hover:underline"
|
||||||
|
>
|
||||||
|
www.dsb.gv.at
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
8. Änderungen dieser Datenschutzerklärung
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Wir behalten uns vor, diese Datenschutzerklärung anzupassen, damit sie
|
||||||
|
stets den aktuellen rechtlichen Anforderungen entspricht oder um
|
||||||
|
Änderungen unserer Leistungen umzusetzen. Für Ihren erneuten Besuch gilt
|
||||||
|
dann die neue Datenschutzerklärung.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-sm text-muted-foreground mt-12">
|
||||||
|
Stand: Februar 2026
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
BIN
website/src/app/favicon.ico
Normal file
|
After Width: | Height: | Size: 25 KiB |
15
website/src/app/fernsehen/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Fernsehen",
|
||||||
|
description:
|
||||||
|
"Erleben Sie kristallklares TV-Vergnügen mit TeleNetSystems. Große Senderauswahl, HD-Qualität und regionale Programme in Tirol.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function FernsehenLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
360
website/src/app/fernsehen/page.tsx
Normal file
@@ -0,0 +1,360 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Tv,
|
||||||
|
Check,
|
||||||
|
ChevronRight,
|
||||||
|
Play,
|
||||||
|
Monitor,
|
||||||
|
Film,
|
||||||
|
Sparkles,
|
||||||
|
Users,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
icon: Monitor,
|
||||||
|
title: "HD-Qualität",
|
||||||
|
description: "Gestochen scharfes Bild auf allen Sendern in HD-Auflösung.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Film,
|
||||||
|
title: "Große Senderauswahl",
|
||||||
|
description: "Über 100 Sender aus Österreich, Deutschland und international.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Play,
|
||||||
|
title: "Mediatheken",
|
||||||
|
description: "Zugriff auf Mediatheken für zeitversetztes Fernsehen.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Sparkles,
|
||||||
|
title: "Regionale Sender",
|
||||||
|
description: "Lokale Tiroler Sender für Nachrichten aus der Region.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const packages = [
|
||||||
|
{
|
||||||
|
name: "Basis",
|
||||||
|
description: "Das Wesentliche für den täglichen TV-Genuss",
|
||||||
|
channels: "60+",
|
||||||
|
highlights: [
|
||||||
|
"Alle österreichischen Hauptsender",
|
||||||
|
"Deutsche Free-TV-Sender",
|
||||||
|
"SD & HD-Qualität",
|
||||||
|
"Elektronische Programmzeitschrift",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Komfort",
|
||||||
|
description: "Mehr Auswahl für die ganze Familie",
|
||||||
|
channels: "100+",
|
||||||
|
highlights: [
|
||||||
|
"Alle Basis-Sender",
|
||||||
|
"Zusätzliche Spartensender",
|
||||||
|
"Internationale Sender",
|
||||||
|
"Aufnahmefunktion",
|
||||||
|
],
|
||||||
|
popular: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Premium",
|
||||||
|
description: "Das volle Programm für Vielseher",
|
||||||
|
channels: "150+",
|
||||||
|
highlights: [
|
||||||
|
"Alle Komfort-Sender",
|
||||||
|
"Pay-TV-Pakete inklusive",
|
||||||
|
"Sport & Film Channels",
|
||||||
|
"4K-Inhalte verfügbar",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function FernsehenPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
animate={{ opacity: 1, x: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-2 mb-6">
|
||||||
|
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<Tv className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<span className="text-sm font-medium text-muted-foreground">
|
||||||
|
TV-Dienste
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h1 className="text-4xl sm:text-5xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
Fernsehen in{" "}
|
||||||
|
<span className="text-primary">bester Qualität</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
Erleben Sie kristallklares TV-Vergnügen mit einer großen Auswahl an
|
||||||
|
Sendern. Von regionalen Tiroler Programmen bis hin zu internationalen
|
||||||
|
Channels – alles in HD-Qualität.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<Link
|
||||||
|
href="#pakete"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Pakete ansehen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-foreground/10 px-6 py-3.5 text-base font-medium text-foreground hover:border-primary hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
Beratung anfragen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
transition={{ duration: 0.6, delay: 0.2 }}
|
||||||
|
className="relative hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="relative aspect-[4/3] rounded-3xl overflow-hidden shadow-2xl">
|
||||||
|
<Image
|
||||||
|
src="/images/hero/tv-header.jpg"
|
||||||
|
alt="Familie genießt TV-Unterhaltung"
|
||||||
|
fill
|
||||||
|
className="object-cover"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-foreground/30 to-transparent" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Features Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
TV-Erlebnis der Extraklasse
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Modernste Technik für ungetrübten Fernsehgenuss – einfach anschließen und
|
||||||
|
loslegen.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
{features.map((feature, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={feature.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center p-6"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mx-auto mb-5">
|
||||||
|
<feature.icon className="w-7 h-7 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{feature.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{feature.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Packages Section */}
|
||||||
|
<section id="pakete" className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Unsere TV-Pakete
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Wählen Sie das Paket, das zu Ihren Sehgewohnheiten passt. Alle Pakete
|
||||||
|
ohne versteckte Kosten.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{packages.map((pkg, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={pkg.name}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className={`relative rounded-2xl p-8 ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-foreground text-white"
|
||||||
|
: "bg-white border border-border"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.popular && (
|
||||||
|
<span className="absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 bg-primary text-white text-xs font-medium rounded-full">
|
||||||
|
Beliebt
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
<h3
|
||||||
|
className={`text-xl font-bold mb-2 ${
|
||||||
|
pkg.popular ? "text-white" : "text-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.name}
|
||||||
|
</h3>
|
||||||
|
<p
|
||||||
|
className={`text-sm mb-6 ${
|
||||||
|
pkg.popular ? "text-white/70" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.description}
|
||||||
|
</p>
|
||||||
|
<div className="mb-6">
|
||||||
|
<span
|
||||||
|
className={`text-4xl font-bold ${
|
||||||
|
pkg.popular ? "text-primary" : "text-primary"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.channels}
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
className={`text-sm ml-2 ${
|
||||||
|
pkg.popular ? "text-white/70" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Sender
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<ul className="space-y-3 mb-8">
|
||||||
|
{pkg.highlights.map((highlight) => (
|
||||||
|
<li key={highlight} className="flex items-start gap-3">
|
||||||
|
<Check
|
||||||
|
className={`w-5 h-5 flex-shrink-0 ${
|
||||||
|
pkg.popular ? "text-primary" : "text-primary"
|
||||||
|
}`}
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
className={`text-sm ${
|
||||||
|
pkg.popular ? "text-white/90" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{highlight}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className={`block w-full text-center rounded-lg px-6 py-3 text-sm font-medium transition-colors ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-primary text-white hover:bg-primary-dark"
|
||||||
|
: "bg-foreground text-white hover:bg-foreground/90"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Jetzt anfragen
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-center text-sm text-muted-foreground mt-8">
|
||||||
|
Preise auf Anfrage. Wir beraten Sie gerne zu dem für Sie passenden Paket.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Testimonial Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="max-w-3xl mx-auto text-center"
|
||||||
|
>
|
||||||
|
<div className="w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-6">
|
||||||
|
<Users className="w-8 h-8 text-primary" />
|
||||||
|
</div>
|
||||||
|
<blockquote className="text-xl sm:text-2xl text-foreground leading-relaxed mb-6">
|
||||||
|
“Seit wir zu TeleNetSystems gewechselt haben, ist das Fernsehbild
|
||||||
|
endlich stabil und scharf. Besonders die regionalen Sender gefallen uns
|
||||||
|
sehr gut.”
|
||||||
|
</blockquote>
|
||||||
|
<p className="font-semibold text-foreground">Familie Hofer</p>
|
||||||
|
<p className="text-sm text-muted-foreground">Reutte</p>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* CTA Section */}
|
||||||
|
<section id="kontakt" className="py-20 bg-primary">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 text-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-white mb-4">
|
||||||
|
Interesse geweckt?
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-white/80 max-w-2xl mx-auto mb-8">
|
||||||
|
Lassen Sie sich unverbindlich beraten. Wir finden das passende TV-Paket
|
||||||
|
für Ihre Bedürfnisse.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-white px-6 py-3.5 text-base font-medium text-primary hover:bg-white/90 transition-colors"
|
||||||
|
>
|
||||||
|
Kontakt aufnehmen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-white/30 px-6 py-3.5 text-base font-medium text-white hover:bg-white/10 transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
50
website/src/app/globals.css
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
@import "tailwindcss";
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--background: #ffffff;
|
||||||
|
--foreground: #1a1a1a;
|
||||||
|
--primary: #f39210;
|
||||||
|
--primary-dark: #d97d06;
|
||||||
|
--secondary: #e95b24;
|
||||||
|
--accent: #f59e0b;
|
||||||
|
--muted: #f5f5f5;
|
||||||
|
--muted-foreground: #737373;
|
||||||
|
--border: #e5e5e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
@theme inline {
|
||||||
|
--color-background: var(--background);
|
||||||
|
--color-foreground: var(--foreground);
|
||||||
|
--color-primary: var(--primary);
|
||||||
|
--color-primary-dark: var(--primary-dark);
|
||||||
|
--color-secondary: var(--secondary);
|
||||||
|
--color-accent: var(--accent);
|
||||||
|
--color-muted: var(--muted);
|
||||||
|
--color-muted-foreground: var(--muted-foreground);
|
||||||
|
--color-border: var(--border);
|
||||||
|
--font-sans: var(--font-geist-sans);
|
||||||
|
--font-mono: var(--font-geist-mono);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: var(--background);
|
||||||
|
color: var(--foreground);
|
||||||
|
font-family: var(--font-sans), system-ui, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Smooth scrolling */
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus styles for accessibility */
|
||||||
|
*:focus-visible {
|
||||||
|
outline: 2px solid var(--primary);
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selection styling */
|
||||||
|
::selection {
|
||||||
|
background-color: var(--primary);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
167
website/src/app/impressum/page.tsx
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Impressum",
|
||||||
|
description: "Impressum und rechtliche Informationen zu TeleNetSystems.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ImpressumPage() {
|
||||||
|
return (
|
||||||
|
<div className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-3xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<h1 className="text-3xl sm:text-4xl font-bold text-foreground mb-8">
|
||||||
|
Impressum
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div className="prose prose-lg max-w-none text-muted-foreground">
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Angaben gemäß § 5 ECG
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
TeleNetSystems GmbH<br />
|
||||||
|
Musterstraße 1<br />
|
||||||
|
6600 Reutte<br />
|
||||||
|
Österreich
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">Kontakt</h2>
|
||||||
|
<p>
|
||||||
|
Telefon: +43 5672 2000<br />
|
||||||
|
E-Mail: info@telenetsystems.at
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Unternehmensgegenstand
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
IT- und Telekommunikationsdienstleistungen, Bereitstellung von TV-,
|
||||||
|
Internet- und Telefoniediensten.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Firmenbuchnummer
|
||||||
|
</h2>
|
||||||
|
<p>FN XXXXXX (Landesgericht Innsbruck)</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
UID-Nummer
|
||||||
|
</h2>
|
||||||
|
<p>ATU XXXXXXXX</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Geschäftsführung
|
||||||
|
</h2>
|
||||||
|
<p>[Name der Geschäftsführung]</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Aufsichtsbehörde
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Bezirkshauptmannschaft Reutte<br />
|
||||||
|
Rundfunk und Telekom Regulierungs-GmbH (RTR)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Berufsbezeichnung und berufsrechtliche Regelungen
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Gewerbeordnung (GewO)<br />
|
||||||
|
Telekommunikationsgesetz (TKG 2021)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Streitschlichtung
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Die Europäische Kommission stellt eine Plattform zur
|
||||||
|
Online-Streitbeilegung (OS) bereit:{" "}
|
||||||
|
<a
|
||||||
|
href="https://ec.europa.eu/consumers/odr"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="text-primary hover:underline"
|
||||||
|
>
|
||||||
|
https://ec.europa.eu/consumers/odr
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren
|
||||||
|
vor einer Verbraucherschlichtungsstelle teilzunehmen.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Haftung für Inhalte
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Als Diensteanbieter sind wir für eigene Inhalte auf diesen Seiten nach
|
||||||
|
den allgemeinen Gesetzen verantwortlich. Wir sind jedoch nicht
|
||||||
|
verpflichtet, übermittelte oder gespeicherte fremde Informationen zu
|
||||||
|
überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige
|
||||||
|
Tätigkeit hinweisen.
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Verpflichtungen zur Entfernung oder Sperrung der Nutzung von
|
||||||
|
Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt.
|
||||||
|
Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der
|
||||||
|
Kenntnis einer konkreten Rechtsverletzung möglich.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Haftung für Links
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Unser Angebot enthält Links zu externen Websites Dritter, auf deren
|
||||||
|
Inhalte wir keinen Einfluss haben. Für die Inhalte der verlinkten
|
||||||
|
Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten
|
||||||
|
verantwortlich.
|
||||||
|
</p>
|
||||||
|
<p className="mt-4">
|
||||||
|
Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch
|
||||||
|
ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei
|
||||||
|
Bekanntwerden von Rechtsverletzungen werden wir derartige Links
|
||||||
|
umgehend entfernen.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="mb-8">
|
||||||
|
<h2 className="text-xl font-semibold text-foreground mb-4">
|
||||||
|
Urheberrecht
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen
|
||||||
|
Seiten unterliegen dem österreichischen Urheberrecht. Die
|
||||||
|
Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung
|
||||||
|
außerhalb der Grenzen des Urheberrechts bedürfen der schriftlichen
|
||||||
|
Zustimmung des jeweiligen Autors bzw. Erstellers.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-sm text-muted-foreground mt-12">
|
||||||
|
Stand: Februar 2026
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
15
website/src/app/internet/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Internet",
|
||||||
|
description:
|
||||||
|
"Schnelles und stabiles Internet von TeleNetSystems. Zuverlässige Verbindungen für Privat- und Geschäftskunden in Tirol.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function InternetLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
419
website/src/app/internet/page.tsx
Normal file
@@ -0,0 +1,419 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Wifi,
|
||||||
|
Check,
|
||||||
|
ChevronRight,
|
||||||
|
Zap,
|
||||||
|
Shield,
|
||||||
|
Clock,
|
||||||
|
Home,
|
||||||
|
Building2,
|
||||||
|
Users,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
icon: Zap,
|
||||||
|
title: "Schnelle Verbindung",
|
||||||
|
description: "Hohe Bandbreiten für Streaming, Gaming und Arbeiten von zu Hause.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Shield,
|
||||||
|
title: "Stabile Leitung",
|
||||||
|
description: "Zuverlässige Infrastruktur für unterbrechungsfreies Surfen.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Clock,
|
||||||
|
title: "Schneller Support",
|
||||||
|
description: "Bei Problemen sind wir schnell für Sie da – regional vor Ort.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Home,
|
||||||
|
title: "Einfache Installation",
|
||||||
|
description: "Unkomplizierte Einrichtung durch unsere Techniker.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const packages = [
|
||||||
|
{
|
||||||
|
name: "Starter",
|
||||||
|
description: "Ideal für Einsteiger und gelegentliche Nutzung",
|
||||||
|
speed: "50",
|
||||||
|
highlights: [
|
||||||
|
"Bis zu 50 Mbit/s Download",
|
||||||
|
"Ideal für E-Mail & Surfen",
|
||||||
|
"Stabiler Anschluss",
|
||||||
|
"WLAN-Router inklusive",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Komfort",
|
||||||
|
description: "Perfekt für Familien und Home-Office",
|
||||||
|
speed: "100",
|
||||||
|
highlights: [
|
||||||
|
"Bis zu 100 Mbit/s Download",
|
||||||
|
"HD-Streaming ohne Ruckeln",
|
||||||
|
"Mehrere Geräte gleichzeitig",
|
||||||
|
"WLAN-Router inklusive",
|
||||||
|
],
|
||||||
|
popular: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Power",
|
||||||
|
description: "Maximale Leistung für höchste Ansprüche",
|
||||||
|
speed: "200",
|
||||||
|
highlights: [
|
||||||
|
"Bis zu 200 Mbit/s Download",
|
||||||
|
"4K-Streaming & Gaming",
|
||||||
|
"Home-Office ohne Grenzen",
|
||||||
|
"Premium WLAN-Router",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const businessFeatures = [
|
||||||
|
"Dedizierte Geschäftsleitungen",
|
||||||
|
"Service Level Agreements (SLA)",
|
||||||
|
"Persönlicher Ansprechpartner",
|
||||||
|
"Priorisierter Support",
|
||||||
|
"Statische IP-Adressen",
|
||||||
|
"Individuelle Bandbreiten",
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function InternetPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
animate={{ opacity: 1, x: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-2 mb-6">
|
||||||
|
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<Wifi className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<span className="text-sm font-medium text-muted-foreground">
|
||||||
|
Internet-Dienste
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h1 className="text-4xl sm:text-5xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
Schnelles Internet{" "}
|
||||||
|
<span className="text-primary">aus der Region</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
Zuverlässige Internetverbindungen für Ihr Zuhause oder Ihr Unternehmen.
|
||||||
|
Mit TeleNetSystems surfen Sie stabil und schnell – unterstützt durch
|
||||||
|
lokalen Service vor Ort.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<Link
|
||||||
|
href="#pakete"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Tarife ansehen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-foreground/10 px-6 py-3.5 text-base font-medium text-foreground hover:border-primary hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
Verfügbarkeit prüfen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
transition={{ duration: 0.6, delay: 0.2 }}
|
||||||
|
className="relative hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="relative aspect-[4/3] rounded-3xl overflow-hidden shadow-2xl">
|
||||||
|
<Image
|
||||||
|
src="/images/hero/internet-header.jpg"
|
||||||
|
alt="Schnelles Internet für Ihr Zuhause"
|
||||||
|
fill
|
||||||
|
className="object-cover"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-foreground/30 to-transparent" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Features Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Internet, auf das Sie sich verlassen können
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Stabile Verbindungen, transparente Tarife und persönlicher Service – das
|
||||||
|
zeichnet uns aus.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
{features.map((feature, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={feature.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center p-6"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mx-auto mb-5">
|
||||||
|
<feature.icon className="w-7 h-7 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{feature.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{feature.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Packages Section */}
|
||||||
|
<section id="pakete" className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<div className="flex items-center justify-center gap-2 mb-4">
|
||||||
|
<Home className="w-5 h-5 text-primary" />
|
||||||
|
<span className="text-sm font-medium text-primary">Für Privatkunden</span>
|
||||||
|
</div>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Internet-Tarife für zu Hause
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Wählen Sie die Geschwindigkeit, die zu Ihrem Nutzungsverhalten passt.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{packages.map((pkg, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={pkg.name}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className={`relative rounded-2xl p-8 ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-foreground text-white"
|
||||||
|
: "bg-white border border-border"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.popular && (
|
||||||
|
<span className="absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 bg-primary text-white text-xs font-medium rounded-full">
|
||||||
|
Empfohlen
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
<h3
|
||||||
|
className={`text-xl font-bold mb-2 ${
|
||||||
|
pkg.popular ? "text-white" : "text-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.name}
|
||||||
|
</h3>
|
||||||
|
<p
|
||||||
|
className={`text-sm mb-6 ${
|
||||||
|
pkg.popular ? "text-white/70" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.description}
|
||||||
|
</p>
|
||||||
|
<div className="mb-6">
|
||||||
|
<span className="text-4xl font-bold text-primary">{pkg.speed}</span>
|
||||||
|
<span
|
||||||
|
className={`text-sm ml-2 ${
|
||||||
|
pkg.popular ? "text-white/70" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Mbit/s
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<ul className="space-y-3 mb-8">
|
||||||
|
{pkg.highlights.map((highlight) => (
|
||||||
|
<li key={highlight} className="flex items-start gap-3">
|
||||||
|
<Check className="w-5 h-5 flex-shrink-0 text-primary" />
|
||||||
|
<span
|
||||||
|
className={`text-sm ${
|
||||||
|
pkg.popular ? "text-white/90" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{highlight}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className={`block w-full text-center rounded-lg px-6 py-3 text-sm font-medium transition-colors ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-primary text-white hover:bg-primary-dark"
|
||||||
|
: "bg-foreground text-white hover:bg-foreground/90"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Jetzt anfragen
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-center text-sm text-muted-foreground mt-8">
|
||||||
|
Verfügbarkeit und Geschwindigkeit abhängig vom Standort. Wir beraten Sie
|
||||||
|
gerne.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Business Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-2 mb-4">
|
||||||
|
<Building2 className="w-5 h-5 text-primary" />
|
||||||
|
<span className="text-sm font-medium text-primary">
|
||||||
|
Für Geschäftskunden
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-6">
|
||||||
|
Business-Internet für Ihr Unternehmen
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
Professionelle Internetlösungen für Unternehmen in Tirol. Wir bieten
|
||||||
|
maßgeschneiderte Pakete mit garantierter Verfügbarkeit und
|
||||||
|
persönlichem Service.
|
||||||
|
</p>
|
||||||
|
<ul className="grid sm:grid-cols-2 gap-4 mb-8">
|
||||||
|
{businessFeatures.map((feature) => (
|
||||||
|
<li key={feature} className="flex items-center gap-3">
|
||||||
|
<Check className="w-5 h-5 text-primary flex-shrink-0" />
|
||||||
|
<span className="text-sm text-muted-foreground">{feature}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Business-Beratung anfragen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="relative hidden lg:flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<div className="w-full max-w-md aspect-square rounded-3xl bg-gradient-to-br from-primary/10 to-secondary/10 p-8 flex items-center justify-center">
|
||||||
|
<Building2 className="w-32 h-32 text-primary/50" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Testimonial Section */}
|
||||||
|
<section className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="max-w-3xl mx-auto text-center"
|
||||||
|
>
|
||||||
|
<div className="w-16 h-16 rounded-full bg-white flex items-center justify-center mx-auto mb-6 shadow-md">
|
||||||
|
<Users className="w-8 h-8 text-primary" />
|
||||||
|
</div>
|
||||||
|
<blockquote className="text-xl sm:text-2xl text-foreground leading-relaxed mb-6">
|
||||||
|
“Für unser Büro brauchen wir zuverlässiges Internet.
|
||||||
|
TeleNetSystems liefert genau das – und bei Fragen ist immer jemand
|
||||||
|
erreichbar.”
|
||||||
|
</blockquote>
|
||||||
|
<p className="font-semibold text-foreground">Steuerberatung Mair</p>
|
||||||
|
<p className="text-sm text-muted-foreground">Reutte</p>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* CTA Section */}
|
||||||
|
<section id="kontakt" className="py-20 bg-primary">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 text-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-white mb-4">
|
||||||
|
Verfügbarkeit prüfen
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-white/80 max-w-2xl mx-auto mb-8">
|
||||||
|
Kontaktieren Sie uns für eine unverbindliche Beratung. Wir prüfen die
|
||||||
|
Verfügbarkeit an Ihrem Standort und finden den passenden Tarif.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-white px-6 py-3.5 text-base font-medium text-primary hover:bg-white/90 transition-colors"
|
||||||
|
>
|
||||||
|
Kontakt aufnehmen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-white/30 px-6 py-3.5 text-base font-medium text-white hover:bg-white/10 transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
52
website/src/app/layout.tsx
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
import { Geist } from "next/font/google";
|
||||||
|
import "./globals.css";
|
||||||
|
import Header from "@/components/Header";
|
||||||
|
import Footer from "@/components/Footer";
|
||||||
|
|
||||||
|
const geistSans = Geist({
|
||||||
|
variable: "--font-geist-sans",
|
||||||
|
subsets: ["latin"],
|
||||||
|
});
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: {
|
||||||
|
default: "TeleNetSystems - TV, Internet & Telefonie in Tirol",
|
||||||
|
template: "%s | TeleNetSystems",
|
||||||
|
},
|
||||||
|
description:
|
||||||
|
"TeleNetSystems ist Ihr regionaler Partner für TV, Internet und Telefonie in Reutte, Tirol. Persönlicher Service, zuverlässige Technik und faire Preise.",
|
||||||
|
keywords: [
|
||||||
|
"Internet Tirol",
|
||||||
|
"TV Reutte",
|
||||||
|
"Telefonie Tirol",
|
||||||
|
"Telekommunikation Reutte",
|
||||||
|
"IT-Dienstleistungen Tirol",
|
||||||
|
"TeleNetSystems",
|
||||||
|
],
|
||||||
|
authors: [{ name: "TeleNetSystems" }],
|
||||||
|
openGraph: {
|
||||||
|
type: "website",
|
||||||
|
locale: "de_AT",
|
||||||
|
siteName: "TeleNetSystems",
|
||||||
|
title: "TeleNetSystems - TV, Internet & Telefonie in Tirol",
|
||||||
|
description:
|
||||||
|
"Ihr regionaler Partner für TV, Internet und Telefonie in Reutte, Tirol. Persönlicher Service und zuverlässige Technik.",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function RootLayout({
|
||||||
|
children,
|
||||||
|
}: Readonly<{
|
||||||
|
children: React.ReactNode;
|
||||||
|
}>) {
|
||||||
|
return (
|
||||||
|
<html lang="de">
|
||||||
|
<body className={`${geistSans.variable} antialiased`}>
|
||||||
|
<Header />
|
||||||
|
<main>{children}</main>
|
||||||
|
<Footer />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
||||||
15
website/src/app/leistungen/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Leistungen",
|
||||||
|
description:
|
||||||
|
"Alle Leistungen von TeleNetSystems im Überblick. TV, Internet und Telefonie für Privat- und Geschäftskunden in Tirol.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function LeistungenLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
351
website/src/app/leistungen/page.tsx
Normal file
@@ -0,0 +1,351 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Tv,
|
||||||
|
Wifi,
|
||||||
|
Phone,
|
||||||
|
Home,
|
||||||
|
Building2,
|
||||||
|
ChevronRight,
|
||||||
|
Check,
|
||||||
|
Wrench,
|
||||||
|
HeadphonesIcon,
|
||||||
|
Shield,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const privateServices = [
|
||||||
|
{
|
||||||
|
icon: Tv,
|
||||||
|
title: "Fernsehen",
|
||||||
|
description:
|
||||||
|
"HD-Fernsehen mit großer Senderauswahl. Regionale und internationale Programme für die ganze Familie.",
|
||||||
|
href: "/fernsehen",
|
||||||
|
features: ["60-150+ Sender", "HD-Qualität", "Regionale Sender", "Mediatheken"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Wifi,
|
||||||
|
title: "Internet",
|
||||||
|
description:
|
||||||
|
"Schnelles und stabiles Internet für Ihr Zuhause. Streaming, Home-Office und mehr – ohne Unterbrechungen.",
|
||||||
|
href: "/internet",
|
||||||
|
features: ["Bis zu 200 Mbit/s", "WLAN-Router inklusive", "Stabile Verbindung", "Faire Tarife"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Phone,
|
||||||
|
title: "Telefonie",
|
||||||
|
description:
|
||||||
|
"Günstig telefonieren mit bester Sprachqualität. Festnetz und VoIP für jeden Bedarf.",
|
||||||
|
href: "/telefonie",
|
||||||
|
features: ["Kristallklare Qualität", "Günstige Tarife", "Rufnummernmitnahme", "Flatrate-Optionen"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const businessServices = [
|
||||||
|
{
|
||||||
|
icon: Wifi,
|
||||||
|
title: "Business-Internet",
|
||||||
|
description:
|
||||||
|
"Professionelle Internetlösungen mit garantierter Verfügbarkeit und Service Level Agreements.",
|
||||||
|
features: ["Dedizierte Leitungen", "Statische IP-Adressen", "SLA-Garantie", "Priorisierter Support"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Phone,
|
||||||
|
title: "Cloud-Telefonanlage",
|
||||||
|
description:
|
||||||
|
"Moderne VoIP-Telefonanlagen ohne Hardware-Investition. Flexibel und skalierbar für Ihr Unternehmen.",
|
||||||
|
features: ["Virtuelle PBX", "Mehrere Nebenstellen", "Konferenzschaltungen", "Integration"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Wrench,
|
||||||
|
title: "IT-Service",
|
||||||
|
description:
|
||||||
|
"Beratung, Installation und Support für Ihre IT-Infrastruktur. Vor Ort in Tirol.",
|
||||||
|
features: ["Netzwerk-Setup", "Hardware-Beratung", "Wartung & Support", "Schulungen"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const additionalServices = [
|
||||||
|
{
|
||||||
|
icon: Wrench,
|
||||||
|
title: "Installation & Einrichtung",
|
||||||
|
description: "Professionelle Installation aller Dienste durch unsere Techniker.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: HeadphonesIcon,
|
||||||
|
title: "Support & Hotline",
|
||||||
|
description: "Schnelle Hilfe bei Fragen und Problemen – telefonisch oder vor Ort.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Shield,
|
||||||
|
title: "Störungsbehebung",
|
||||||
|
description: "Rasche Problemlösung durch unser regionales Service-Team.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function LeistungenPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="text-center max-w-3xl mx-auto"
|
||||||
|
>
|
||||||
|
<h1 className="text-4xl sm:text-5xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
Unsere <span className="text-primary">Leistungen</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed">
|
||||||
|
Von TV über Internet bis Telefonie – TeleNetSystems bietet Ihnen alles
|
||||||
|
aus einer Hand. Für Privathaushalte und Unternehmen in Tirol.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Private Services Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="mb-16"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-3 mb-4">
|
||||||
|
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<Home className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h2 className="text-2xl font-bold text-foreground">Für Privatkunden</h2>
|
||||||
|
</div>
|
||||||
|
<p className="text-muted-foreground max-w-2xl">
|
||||||
|
Zuverlässige Telekommunikation für Ihr Zuhause. Einfach, verständlich und
|
||||||
|
zu fairen Preisen.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid lg:grid-cols-3 gap-8">
|
||||||
|
{privateServices.map((service, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={service.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
href={service.href}
|
||||||
|
className="group block h-full p-8 rounded-2xl border border-border bg-white hover:border-primary/30 hover:shadow-lg transition-all duration-300"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mb-6 group-hover:bg-primary group-hover:scale-110 transition-all duration-300">
|
||||||
|
<service.icon className="w-7 h-7 text-primary group-hover:text-white transition-colors" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-semibold text-foreground mb-3 group-hover:text-primary transition-colors">
|
||||||
|
{service.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-muted-foreground leading-relaxed mb-6">
|
||||||
|
{service.description}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-2 mb-6">
|
||||||
|
{service.features.map((feature) => (
|
||||||
|
<li key={feature} className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||||
|
<Check className="w-4 h-4 text-primary flex-shrink-0" />
|
||||||
|
{feature}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<span className="inline-flex items-center gap-1 text-sm font-medium text-primary">
|
||||||
|
Mehr erfahren
|
||||||
|
<ChevronRight className="w-4 h-4 group-hover:translate-x-1 transition-transform" />
|
||||||
|
</span>
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Business Services Section */}
|
||||||
|
<section className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="mb-16"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-3 mb-4">
|
||||||
|
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<Building2 className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h2 className="text-2xl font-bold text-foreground">Für Geschäftskunden</h2>
|
||||||
|
</div>
|
||||||
|
<p className="text-muted-foreground max-w-2xl">
|
||||||
|
Professionelle Lösungen für Unternehmen. Mit persönlicher Betreuung und
|
||||||
|
Service vor Ort.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid lg:grid-cols-3 gap-8">
|
||||||
|
{businessServices.map((service, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={service.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="p-8 rounded-2xl bg-white border border-border"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mb-6">
|
||||||
|
<service.icon className="w-7 h-7 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-semibold text-foreground mb-3">
|
||||||
|
{service.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-muted-foreground leading-relaxed mb-6">
|
||||||
|
{service.description}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
{service.features.map((feature) => (
|
||||||
|
<li key={feature} className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||||
|
<Check className="w-4 h-4 text-primary flex-shrink-0" />
|
||||||
|
{feature}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="mt-12 text-center"
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Business-Beratung anfragen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Additional Services Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Service & Support
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Bei uns bekommen Sie mehr als nur Technik. Persönlicher Service ist für
|
||||||
|
uns selbstverständlich.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{additionalServices.map((service, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={service.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center p-8"
|
||||||
|
>
|
||||||
|
<div className="w-16 h-16 rounded-2xl bg-muted flex items-center justify-center mx-auto mb-5">
|
||||||
|
<service.icon className="w-8 h-8 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{service.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{service.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* CTA Section */}
|
||||||
|
<section className="py-20 bg-foreground text-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold mb-6">
|
||||||
|
Welches Paket passt zu Ihnen?
|
||||||
|
</h2>
|
||||||
|
<p className="text-white/70 text-lg leading-relaxed mb-8">
|
||||||
|
Lassen Sie sich unverbindlich beraten. Wir analysieren Ihren Bedarf und
|
||||||
|
finden die passende Lösung – für Privat oder Business.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Beratung anfragen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-white/20 px-6 py-3.5 text-base font-medium text-white hover:bg-white/10 transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="grid grid-cols-2 gap-4">
|
||||||
|
{[Tv, Wifi, Phone, Wrench].map((Icon, index) => (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
className="aspect-square rounded-2xl bg-white/5 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<Icon className="w-12 h-12 text-primary" />
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
468
website/src/app/page.tsx
Normal file
@@ -0,0 +1,468 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Tv,
|
||||||
|
Wifi,
|
||||||
|
Phone,
|
||||||
|
Users,
|
||||||
|
Shield,
|
||||||
|
HeadphonesIcon,
|
||||||
|
MapPin,
|
||||||
|
Clock,
|
||||||
|
ChevronRight,
|
||||||
|
Mail,
|
||||||
|
CheckCircle2,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const services = [
|
||||||
|
{
|
||||||
|
icon: Tv,
|
||||||
|
title: "Fernsehen",
|
||||||
|
description:
|
||||||
|
"Erleben Sie kristallklares TV-Vergnügen mit einer großen Auswahl an Sendern und HD-Qualität.",
|
||||||
|
href: "/fernsehen",
|
||||||
|
image: "/images/services/tv.jpg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Wifi,
|
||||||
|
title: "Internet",
|
||||||
|
description:
|
||||||
|
"Schnelles und stabiles Internet für Ihr Zuhause oder Unternehmen. Zuverlässig und fair.",
|
||||||
|
href: "/internet",
|
||||||
|
image: "/images/services/internet.jpg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Phone,
|
||||||
|
title: "Telefonie",
|
||||||
|
description:
|
||||||
|
"Günstige Telefontarife mit bester Sprachqualität. Festnetz und VoIP-Lösungen.",
|
||||||
|
href: "/telefonie",
|
||||||
|
image: "/images/services/telefonie.jpg",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const benefits = [
|
||||||
|
{
|
||||||
|
icon: MapPin,
|
||||||
|
title: "Regional vor Ort",
|
||||||
|
description: "Persönliche Betreuung durch unser Team direkt in Reutte, Tirol.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Shield,
|
||||||
|
title: "Zuverlässig & Stabil",
|
||||||
|
description: "Robuste Infrastruktur für durchgehend beste Verbindungsqualität.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: HeadphonesIcon,
|
||||||
|
title: "Schneller Support",
|
||||||
|
description: "Bei Fragen und Problemen sind wir schnell für Sie erreichbar.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Clock,
|
||||||
|
title: "Faire Konditionen",
|
||||||
|
description: "Transparente Preise ohne versteckte Kosten oder komplizierte Klauseln.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const testimonials = [
|
||||||
|
{
|
||||||
|
quote:
|
||||||
|
"Endlich ein Anbieter, der hält was er verspricht. Stabile Verbindung und bei Fragen ist immer jemand erreichbar.",
|
||||||
|
author: "Familie Müller",
|
||||||
|
location: "Reutte",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
quote:
|
||||||
|
"Als Unternehmen brauchen wir zuverlässige Technik. TeleNetSystems liefert genau das – und der Service ist top.",
|
||||||
|
author: "Gasthaus Alpenblick",
|
||||||
|
location: "Tirol",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
quote:
|
||||||
|
"Unkomplizierte Abwicklung und faire Preise. So muss das sein!",
|
||||||
|
author: "Thomas K.",
|
||||||
|
location: "Außerfern",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-32">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
animate={{ opacity: 1, x: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<span className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-primary/10 text-primary text-sm font-medium mb-6">
|
||||||
|
<MapPin className="w-4 h-4" />
|
||||||
|
Ihr Partner in Tirol
|
||||||
|
</span>
|
||||||
|
<h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
TV, Internet & Telefonie{" "}
|
||||||
|
<span className="text-primary">aus der Region</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8 max-w-xl">
|
||||||
|
TeleNetSystems ist Ihr verlässlicher Partner für Telekommunikation in Reutte
|
||||||
|
und Umgebung. Persönlicher Service, stabile Technik und faire Preise – das ist
|
||||||
|
unser Versprechen.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<Link
|
||||||
|
href="#leistungen"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Leistungen entdecken
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-foreground/10 px-6 py-3.5 text-base font-medium text-foreground hover:border-primary hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
Beratung anfragen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
transition={{ duration: 0.6, delay: 0.2 }}
|
||||||
|
className="relative hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="relative aspect-[4/3] rounded-3xl overflow-hidden shadow-2xl">
|
||||||
|
<Image
|
||||||
|
src="/images/hero/firma.jpg"
|
||||||
|
alt="TeleNetSystems Firmengebäude in Reutte"
|
||||||
|
fill
|
||||||
|
className="object-cover"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-foreground/20 to-transparent" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Services Section */}
|
||||||
|
<section id="leistungen" className="py-20 lg:py-28 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Unsere Leistungen
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Von TV über Internet bis Telefonie – wir bieten Ihnen alles aus einer Hand.
|
||||||
|
Zuverlässig, verständlich und regional.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{services.map((service, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={service.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
href={service.href}
|
||||||
|
className="group block h-full rounded-2xl border border-border bg-white hover:border-primary/30 hover:shadow-lg transition-all duration-300 overflow-hidden"
|
||||||
|
>
|
||||||
|
<div className="relative h-48 overflow-hidden">
|
||||||
|
<Image
|
||||||
|
src={service.image}
|
||||||
|
alt={service.title}
|
||||||
|
fill
|
||||||
|
className="object-cover group-hover:scale-105 transition-transform duration-500"
|
||||||
|
/>
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-foreground/60 to-transparent" />
|
||||||
|
<div className="absolute bottom-4 left-4 w-12 h-12 rounded-xl bg-primary flex items-center justify-center">
|
||||||
|
<service.icon className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="p-6">
|
||||||
|
<h3 className="text-xl font-semibold text-foreground mb-3 group-hover:text-primary transition-colors">
|
||||||
|
{service.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-muted-foreground leading-relaxed mb-4">
|
||||||
|
{service.description}
|
||||||
|
</p>
|
||||||
|
<span className="inline-flex items-center gap-1 text-sm font-medium text-primary">
|
||||||
|
Mehr erfahren
|
||||||
|
<ChevronRight className="w-4 h-4 group-hover:translate-x-1 transition-transform" />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Benefits Section */}
|
||||||
|
<section className="py-20 lg:py-28 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Warum TeleNetSystems?
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Wir verbinden moderne Technik mit persönlichem Service. Das macht den
|
||||||
|
Unterschied.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
{benefits.map((benefit, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={benefit.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center"
|
||||||
|
>
|
||||||
|
<div className="w-16 h-16 rounded-2xl bg-white shadow-md flex items-center justify-center mx-auto mb-5">
|
||||||
|
<benefit.icon className="w-8 h-8 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{benefit.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{benefit.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Testimonials Section */}
|
||||||
|
<section className="py-20 lg:py-28 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Das sagen unsere Kunden
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Zufriedene Kunden sind unser bestes Kompliment. Hier einige Stimmen aus der
|
||||||
|
Region.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{testimonials.map((testimonial, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={index}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="p-8 rounded-2xl bg-muted"
|
||||||
|
>
|
||||||
|
<blockquote className="text-foreground leading-relaxed mb-6">
|
||||||
|
“{testimonial.quote}”
|
||||||
|
</blockquote>
|
||||||
|
<div className="flex items-center gap-3">
|
||||||
|
<div className="w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center">
|
||||||
|
<Users className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p className="font-semibold text-foreground text-sm">
|
||||||
|
{testimonial.author}
|
||||||
|
</p>
|
||||||
|
<p className="text-xs text-muted-foreground">{testimonial.location}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Contact Section */}
|
||||||
|
<section id="kontakt" className="py-20 lg:py-28 bg-foreground text-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 lg:gap-20">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold mb-6">
|
||||||
|
Wir sind für Sie da
|
||||||
|
</h2>
|
||||||
|
<p className="text-white/70 text-lg leading-relaxed mb-8">
|
||||||
|
Haben Sie Fragen zu unseren Leistungen oder benötigen Sie Unterstützung?
|
||||||
|
Kontaktieren Sie uns – wir helfen Ihnen gerne weiter.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="space-y-6">
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Phone className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Telefon</h3>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Mail className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">E-Mail</h3>
|
||||||
|
<a
|
||||||
|
href="mailto:info@telenetsystems.at"
|
||||||
|
className="text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
info@telenetsystems.at
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<MapPin className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Adresse</h3>
|
||||||
|
<p className="text-white/70">
|
||||||
|
Musterstraße 1<br />
|
||||||
|
6600 Reutte, Tirol
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Clock className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Öffnungszeiten</h3>
|
||||||
|
<p className="text-white/70">
|
||||||
|
Mo - Fr: 08:00 - 17:00 Uhr<br />
|
||||||
|
Sa: nach Vereinbarung
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<form className="bg-white rounded-2xl p-8 text-foreground">
|
||||||
|
<h3 className="text-xl font-semibold mb-6">Nachricht senden</h3>
|
||||||
|
<div className="space-y-5">
|
||||||
|
<div>
|
||||||
|
<label htmlFor="name" className="block text-sm font-medium mb-2">
|
||||||
|
Name
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="name"
|
||||||
|
name="name"
|
||||||
|
required
|
||||||
|
className="w-full px-4 py-3 rounded-lg border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all"
|
||||||
|
placeholder="Ihr Name"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label htmlFor="email" className="block text-sm font-medium mb-2">
|
||||||
|
E-Mail
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="email"
|
||||||
|
id="email"
|
||||||
|
name="email"
|
||||||
|
required
|
||||||
|
className="w-full px-4 py-3 rounded-lg border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all"
|
||||||
|
placeholder="ihre@email.at"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label htmlFor="phone" className="block text-sm font-medium mb-2">
|
||||||
|
Telefon (optional)
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="tel"
|
||||||
|
id="phone"
|
||||||
|
name="phone"
|
||||||
|
className="w-full px-4 py-3 rounded-lg border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all"
|
||||||
|
placeholder="+43 ..."
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label htmlFor="message" className="block text-sm font-medium mb-2">
|
||||||
|
Nachricht
|
||||||
|
</label>
|
||||||
|
<textarea
|
||||||
|
id="message"
|
||||||
|
name="message"
|
||||||
|
rows={4}
|
||||||
|
required
|
||||||
|
className="w-full px-4 py-3 rounded-lg border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all resize-none"
|
||||||
|
placeholder="Wie können wir Ihnen helfen?"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
className="w-full inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
<CheckCircle2 className="w-5 h-5" />
|
||||||
|
Nachricht senden
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
15
website/src/app/telefonie/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Telefonie",
|
||||||
|
description:
|
||||||
|
"Günstige Telefontarife mit bester Sprachqualität von TeleNetSystems. Festnetz und VoIP-Lösungen für Privat- und Geschäftskunden in Tirol.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function TelefonieLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
394
website/src/app/telefonie/page.tsx
Normal file
@@ -0,0 +1,394 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
Phone,
|
||||||
|
Check,
|
||||||
|
ChevronRight,
|
||||||
|
PhoneCall,
|
||||||
|
Globe,
|
||||||
|
Building2,
|
||||||
|
Users,
|
||||||
|
Headphones,
|
||||||
|
Shield,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
icon: PhoneCall,
|
||||||
|
title: "Kristallklare Qualität",
|
||||||
|
description: "Beste Sprachqualität durch moderne VoIP-Technologie.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Globe,
|
||||||
|
title: "Günstig telefonieren",
|
||||||
|
description: "Faire Tarife für Orts-, Fern- und Auslandsgespräche.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Headphones,
|
||||||
|
title: "Zuverlässiger Service",
|
||||||
|
description: "Persönlicher Support bei allen Fragen rund ums Telefon.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Shield,
|
||||||
|
title: "Stabile Verbindung",
|
||||||
|
description: "Zuverlässige Telefonie ohne Ausfälle oder Störungen.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const packages = [
|
||||||
|
{
|
||||||
|
name: "Festnetz Basis",
|
||||||
|
description: "Klassisches Festnetz für gelegentliche Telefonierer",
|
||||||
|
highlights: [
|
||||||
|
"Ortsgespräche inklusive",
|
||||||
|
"Günstige Ferngespräche",
|
||||||
|
"Rufnummernmitnahme möglich",
|
||||||
|
"Anrufbeantworter",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Festnetz Komfort",
|
||||||
|
description: "Für alle, die viel telefonieren",
|
||||||
|
highlights: [
|
||||||
|
"Flatrate ins österr. Festnetz",
|
||||||
|
"Günstige Mobilfunktarife",
|
||||||
|
"Mehrere Rufnummern möglich",
|
||||||
|
"Anklopfen & Makeln",
|
||||||
|
],
|
||||||
|
popular: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "VoIP Business",
|
||||||
|
description: "Professionelle Telefonanlage für Unternehmen",
|
||||||
|
highlights: [
|
||||||
|
"Virtuelle Telefonanlage",
|
||||||
|
"Mehrere Nebenstellen",
|
||||||
|
"Konferenzschaltungen",
|
||||||
|
"Integration mit IT-Systemen",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const businessFeatures = [
|
||||||
|
"Virtuelle Telefonanlagen (Cloud PBX)",
|
||||||
|
"Mehrere Nebenstellen und Durchwahlen",
|
||||||
|
"Professionelle Warteschleifen",
|
||||||
|
"Anrufweiterleitung & Zeitsteuerung",
|
||||||
|
"Integration mit bestehenden Systemen",
|
||||||
|
"Persönliche Einrichtung vor Ort",
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function TelefoniePage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
animate={{ opacity: 1, x: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-2 mb-6">
|
||||||
|
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<Phone className="w-5 h-5 text-primary" />
|
||||||
|
</div>
|
||||||
|
<span className="text-sm font-medium text-muted-foreground">
|
||||||
|
Telefonie-Dienste
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h1 className="text-4xl sm:text-5xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
Telefonie{" "}
|
||||||
|
<span className="text-primary">einfach & günstig</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
Günstige Telefontarife mit bester Sprachqualität. Ob klassisches
|
||||||
|
Festnetz oder moderne VoIP-Lösungen – wir haben das passende Angebot
|
||||||
|
für Sie.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<Link
|
||||||
|
href="#pakete"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Tarife ansehen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-foreground/10 px-6 py-3.5 text-base font-medium text-foreground hover:border-primary hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
Beratung anfragen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
transition={{ duration: 0.6, delay: 0.2 }}
|
||||||
|
className="relative hidden lg:flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<div className="w-80 h-80 rounded-full bg-gradient-to-br from-primary/20 to-secondary/20 flex items-center justify-center">
|
||||||
|
<div className="w-64 h-64 rounded-3xl bg-white shadow-2xl flex items-center justify-center">
|
||||||
|
<Phone className="w-24 h-24 text-primary" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Features Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Telefonie ohne Kompromisse
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Beste Sprachqualität, faire Tarife und zuverlässiger Service – das
|
||||||
|
bieten wir Ihnen.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
{features.map((feature, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={feature.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center p-6"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mx-auto mb-5">
|
||||||
|
<feature.icon className="w-7 h-7 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{feature.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{feature.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Packages Section */}
|
||||||
|
<section id="pakete" className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Unsere Telefonie-Tarife
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Vom klassischen Festnetz bis zur professionellen VoIP-Lösung – wir haben
|
||||||
|
für jeden das passende Angebot.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid md:grid-cols-3 gap-8">
|
||||||
|
{packages.map((pkg, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={pkg.name}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className={`relative rounded-2xl p-8 ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-foreground text-white"
|
||||||
|
: "bg-white border border-border"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.popular && (
|
||||||
|
<span className="absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 bg-primary text-white text-xs font-medium rounded-full">
|
||||||
|
Beliebt
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
<h3
|
||||||
|
className={`text-xl font-bold mb-2 ${
|
||||||
|
pkg.popular ? "text-white" : "text-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.name}
|
||||||
|
</h3>
|
||||||
|
<p
|
||||||
|
className={`text-sm mb-6 ${
|
||||||
|
pkg.popular ? "text-white/70" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{pkg.description}
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-3 mb-8">
|
||||||
|
{pkg.highlights.map((highlight) => (
|
||||||
|
<li key={highlight} className="flex items-start gap-3">
|
||||||
|
<Check className="w-5 h-5 flex-shrink-0 text-primary" />
|
||||||
|
<span
|
||||||
|
className={`text-sm ${
|
||||||
|
pkg.popular ? "text-white/90" : "text-muted-foreground"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{highlight}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className={`block w-full text-center rounded-lg px-6 py-3 text-sm font-medium transition-colors ${
|
||||||
|
pkg.popular
|
||||||
|
? "bg-primary text-white hover:bg-primary-dark"
|
||||||
|
: "bg-foreground text-white hover:bg-foreground/90"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Jetzt anfragen
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-center text-sm text-muted-foreground mt-8">
|
||||||
|
Preise auf Anfrage. Gerne beraten wir Sie zu Ihrem individuellen Bedarf.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Business Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-2 mb-4">
|
||||||
|
<Building2 className="w-5 h-5 text-primary" />
|
||||||
|
<span className="text-sm font-medium text-primary">
|
||||||
|
Für Geschäftskunden
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-6">
|
||||||
|
Professionelle Telefonanlagen
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
Moderne Cloud-Telefonanlagen für Ihr Unternehmen. Flexibel, skalierbar
|
||||||
|
und ohne teure Hardware-Investitionen. Wir richten alles für Sie ein.
|
||||||
|
</p>
|
||||||
|
<ul className="grid sm:grid-cols-2 gap-4 mb-8">
|
||||||
|
{businessFeatures.map((feature) => (
|
||||||
|
<li key={feature} className="flex items-center gap-3">
|
||||||
|
<Check className="w-5 h-5 text-primary flex-shrink-0" />
|
||||||
|
<span className="text-sm text-muted-foreground">{feature}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Business-Beratung anfragen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="relative hidden lg:flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<div className="w-full max-w-md aspect-square rounded-3xl bg-gradient-to-br from-primary/10 to-secondary/10 p-8 flex items-center justify-center">
|
||||||
|
<Building2 className="w-32 h-32 text-primary/50" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Testimonial Section */}
|
||||||
|
<section className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="max-w-3xl mx-auto text-center"
|
||||||
|
>
|
||||||
|
<div className="w-16 h-16 rounded-full bg-white flex items-center justify-center mx-auto mb-6 shadow-md">
|
||||||
|
<Users className="w-8 h-8 text-primary" />
|
||||||
|
</div>
|
||||||
|
<blockquote className="text-xl sm:text-2xl text-foreground leading-relaxed mb-6">
|
||||||
|
“Die neue VoIP-Anlage hat unsere Bürokommunikation komplett
|
||||||
|
vereinfacht. Installation und Einrichtung liefen reibungslos.”
|
||||||
|
</blockquote>
|
||||||
|
<p className="font-semibold text-foreground">Planungsbüro Tirol</p>
|
||||||
|
<p className="text-sm text-muted-foreground">Reutte</p>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* CTA Section */}
|
||||||
|
<section id="kontakt" className="py-20 bg-primary">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 text-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-white mb-4">
|
||||||
|
Fragen zur Telefonie?
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-white/80 max-w-2xl mx-auto mb-8">
|
||||||
|
Wir beraten Sie gerne zu unseren Telefonie-Lösungen. Ob Festnetz oder
|
||||||
|
VoIP – wir finden das Richtige für Sie.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-white px-6 py-3.5 text-base font-medium text-primary hover:bg-white/90 transition-colors"
|
||||||
|
>
|
||||||
|
Kontakt aufnehmen
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg border-2 border-white/30 px-6 py-3.5 text-base font-medium text-white hover:bg-white/10 transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
15
website/src/app/ueber-uns/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Über uns",
|
||||||
|
description:
|
||||||
|
"Lernen Sie TeleNetSystems kennen. Ihr regionaler Partner für TV, Internet und Telefonie in Reutte, Tirol.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function UeberUnsLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
384
website/src/app/ueber-uns/page.tsx
Normal file
@@ -0,0 +1,384 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
import {
|
||||||
|
MapPin,
|
||||||
|
Users,
|
||||||
|
Heart,
|
||||||
|
Shield,
|
||||||
|
Award,
|
||||||
|
ChevronRight,
|
||||||
|
Phone,
|
||||||
|
Mail,
|
||||||
|
Clock,
|
||||||
|
} from "lucide-react";
|
||||||
|
|
||||||
|
const values = [
|
||||||
|
{
|
||||||
|
icon: Heart,
|
||||||
|
title: "Persönlich & Nahbar",
|
||||||
|
description:
|
||||||
|
"Bei uns sind Sie keine Nummer. Wir kennen unsere Kunden und ihre Bedürfnisse.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Shield,
|
||||||
|
title: "Zuverlässig & Ehrlich",
|
||||||
|
description:
|
||||||
|
"Was wir versprechen, halten wir. Transparente Kommunikation ist für uns selbstverständlich.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: MapPin,
|
||||||
|
title: "Regional & Verwurzelt",
|
||||||
|
description:
|
||||||
|
"Als Unternehmen aus Reutte kennen wir die Region und sind schnell vor Ort.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Award,
|
||||||
|
title: "Kompetent & Modern",
|
||||||
|
description:
|
||||||
|
"Wir bilden uns kontinuierlich weiter und setzen auf bewährte, moderne Technologie.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const milestones = [
|
||||||
|
{
|
||||||
|
year: "Gründung",
|
||||||
|
title: "Start in Reutte",
|
||||||
|
description: "TeleNetSystems wird als regionaler Telekommunikationsanbieter gegründet.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "Ausbau",
|
||||||
|
title: "Netzwerk-Erweiterung",
|
||||||
|
description: "Kontinuierlicher Ausbau der Infrastruktur im Bezirk Reutte.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "Heute",
|
||||||
|
title: "Ihr Partner",
|
||||||
|
description: "Zuverlässiger Service für hunderte zufriedene Kunden in der Region.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const fadeInUp = {
|
||||||
|
initial: { opacity: 0, y: 20 },
|
||||||
|
animate: { opacity: 1, y: 0 },
|
||||||
|
transition: { duration: 0.5 },
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function UeberUnsPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Hero Section */}
|
||||||
|
<section className="relative bg-gradient-to-br from-muted to-white overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent" />
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-20 lg:py-28">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
animate={{ opacity: 1, x: 0 }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<h1 className="text-4xl sm:text-5xl font-bold text-foreground leading-tight mb-6">
|
||||||
|
Ihr <span className="text-primary">regionaler Partner</span> für
|
||||||
|
Telekommunikation
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg text-muted-foreground leading-relaxed mb-8">
|
||||||
|
TeleNetSystems ist ein IT- und Telekommunikationsunternehmen mit Sitz in
|
||||||
|
Reutte, Tirol. Wir versorgen Privat- und Geschäftskunden in der Region
|
||||||
|
mit TV, Internet und Telefonie – persönlich, zuverlässig und fair.
|
||||||
|
</p>
|
||||||
|
<div className="flex items-center gap-6">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<MapPin className="w-5 h-5 text-primary" />
|
||||||
|
<span className="text-sm text-muted-foreground">Reutte, Tirol</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Users className="w-5 h-5 text-primary" />
|
||||||
|
<span className="text-sm text-muted-foreground">Regionales Team</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
|
transition={{ duration: 0.6, delay: 0.2 }}
|
||||||
|
className="relative hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="relative aspect-[4/3] rounded-3xl overflow-hidden shadow-2xl">
|
||||||
|
<Image
|
||||||
|
src="/images/team/team.jpg"
|
||||||
|
alt="Das TeleNetSystems Team"
|
||||||
|
fill
|
||||||
|
className="object-cover"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-foreground/30 to-transparent" />
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Story Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-6">
|
||||||
|
Wer wir sind
|
||||||
|
</h2>
|
||||||
|
<div className="space-y-4 text-muted-foreground leading-relaxed">
|
||||||
|
<p>
|
||||||
|
TeleNetSystems ist aus der Überzeugung entstanden, dass
|
||||||
|
Telekommunikation auch persönlich sein kann. In einer Branche, die
|
||||||
|
oft von anonymen Hotlines und komplizierten Tarifen geprägt ist,
|
||||||
|
setzen wir auf Nähe und Verständlichkeit.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Als regionales Unternehmen kennen wir die Gegebenheiten vor Ort.
|
||||||
|
Unsere Techniker sind schnell bei Ihnen, und am Telefon sprechen Sie
|
||||||
|
mit Menschen, die sich auskennen – nicht mit Callcentern am anderen
|
||||||
|
Ende der Welt.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Wir glauben daran, dass Technik den Alltag erleichtern soll, nicht
|
||||||
|
komplizierter machen. Deshalb erklären wir unsere Angebote so, dass
|
||||||
|
Sie sie verstehen – ohne Fachjargon und ohne versteckte Klauseln.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="bg-muted rounded-2xl p-8"
|
||||||
|
>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-6">
|
||||||
|
Unser Weg
|
||||||
|
</h3>
|
||||||
|
<div className="space-y-6">
|
||||||
|
{milestones.map((milestone, index) => (
|
||||||
|
<div key={index} className="flex gap-4">
|
||||||
|
<div className="flex-shrink-0">
|
||||||
|
<div className="w-12 h-12 rounded-lg bg-primary/10 flex items-center justify-center">
|
||||||
|
<span className="text-xs font-bold text-primary">
|
||||||
|
{milestone.year}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="font-semibold text-foreground mb-1">
|
||||||
|
{milestone.title}
|
||||||
|
</h4>
|
||||||
|
<p className="text-sm text-muted-foreground">
|
||||||
|
{milestone.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Values Section */}
|
||||||
|
<section className="py-20 bg-muted">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Wofür wir stehen
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Unsere Werte sind keine Marketing-Phrasen, sondern gelebte Praxis.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
{values.map((value, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={value.title}
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="text-center p-6 bg-white rounded-2xl"
|
||||||
|
>
|
||||||
|
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center mx-auto mb-5">
|
||||||
|
<value.icon className="w-7 h-7 text-primary" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold text-foreground mb-2">
|
||||||
|
{value.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||||
|
{value.description}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Team Placeholder Section */}
|
||||||
|
<section className="py-20 bg-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<motion.div
|
||||||
|
initial="initial"
|
||||||
|
whileInView="animate"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
variants={fadeInUp}
|
||||||
|
className="text-center max-w-2xl mx-auto mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold text-foreground mb-4">
|
||||||
|
Unser Team
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-muted-foreground">
|
||||||
|
Hinter TeleNetSystems stehen echte Menschen aus der Region. Wir freuen
|
||||||
|
uns, Sie kennenzulernen.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="max-w-4xl mx-auto"
|
||||||
|
>
|
||||||
|
<div className="relative aspect-[16/9] rounded-2xl overflow-hidden shadow-xl mb-8">
|
||||||
|
<Image
|
||||||
|
src="/images/team/team.jpg"
|
||||||
|
alt="Das TeleNetSystems Team"
|
||||||
|
fill
|
||||||
|
className="object-cover"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="text-center">
|
||||||
|
<h3 className="text-xl font-semibold text-foreground mb-3">
|
||||||
|
Persönliche Betreuung garantiert
|
||||||
|
</h3>
|
||||||
|
<p className="text-muted-foreground leading-relaxed mb-6 max-w-2xl mx-auto">
|
||||||
|
Bei TeleNetSystems sind Sie keine anonyme Kundennummer. Unser Team kennt
|
||||||
|
Sie und Ihre Anforderungen. Ob telefonisch, per E-Mail oder persönlich
|
||||||
|
vor Ort – wir sind für Sie da.
|
||||||
|
</p>
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center gap-1 text-primary font-medium hover:underline"
|
||||||
|
>
|
||||||
|
Kontaktieren Sie uns
|
||||||
|
<ChevronRight className="w-4 h-4" />
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Contact Info Section */}
|
||||||
|
<section className="py-20 bg-foreground text-white">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="grid lg:grid-cols-2 gap-12 items-center">
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
>
|
||||||
|
<h2 className="text-3xl sm:text-4xl font-bold mb-6">
|
||||||
|
Sie haben Fragen?
|
||||||
|
</h2>
|
||||||
|
<p className="text-white/70 text-lg leading-relaxed mb-8">
|
||||||
|
Wir sind gerne für Sie da. Kontaktieren Sie uns telefonisch, per
|
||||||
|
E-Mail oder besuchen Sie uns in Reutte.
|
||||||
|
</p>
|
||||||
|
<Link
|
||||||
|
href="/#kontakt"
|
||||||
|
className="inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3.5 text-base font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Zum Kontaktformular
|
||||||
|
<ChevronRight className="w-5 h-5" />
|
||||||
|
</Link>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 20 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="space-y-6"
|
||||||
|
>
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Phone className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Telefon</h3>
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
+43 5672 2000
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Mail className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">E-Mail</h3>
|
||||||
|
<a
|
||||||
|
href="mailto:info@telenetsystems.at"
|
||||||
|
className="text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
info@telenetsystems.at
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<MapPin className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Adresse</h3>
|
||||||
|
<p className="text-white/70">
|
||||||
|
Musterstraße 1<br />
|
||||||
|
6600 Reutte, Tirol
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-primary flex items-center justify-center flex-shrink-0">
|
||||||
|
<Clock className="w-6 h-6 text-white" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="font-semibold mb-1">Öffnungszeiten</h3>
|
||||||
|
<p className="text-white/70">
|
||||||
|
Mo - Fr: 08:00 - 17:00 Uhr<br />
|
||||||
|
Sa: nach Vereinbarung
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
139
website/src/components/Footer.tsx
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { Phone, Mail, MapPin } from "lucide-react";
|
||||||
|
|
||||||
|
const footerLinks = {
|
||||||
|
services: [
|
||||||
|
{ href: "/fernsehen", label: "Fernsehen" },
|
||||||
|
{ href: "/internet", label: "Internet" },
|
||||||
|
{ href: "/telefonie", label: "Telefonie" },
|
||||||
|
{ href: "/leistungen", label: "Alle Leistungen" },
|
||||||
|
],
|
||||||
|
company: [
|
||||||
|
{ href: "/ueber-uns", label: "Über uns" },
|
||||||
|
{ href: "#kontakt", label: "Kontakt" },
|
||||||
|
],
|
||||||
|
legal: [
|
||||||
|
{ href: "/impressum", label: "Impressum" },
|
||||||
|
{ href: "/datenschutz", label: "Datenschutz" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function Footer() {
|
||||||
|
return (
|
||||||
|
<footer className="bg-foreground text-white" role="contentinfo">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-16">
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-10 lg:gap-8">
|
||||||
|
{/* Company Info */}
|
||||||
|
<div className="lg:col-span-1">
|
||||||
|
<Link href="/" className="inline-block mb-6">
|
||||||
|
<Image
|
||||||
|
src="/images/logo/logo-white.png"
|
||||||
|
alt="TeleNetSystems Logo"
|
||||||
|
width={160}
|
||||||
|
height={45}
|
||||||
|
className="h-10 w-auto"
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
<p className="text-white/70 text-sm leading-relaxed mb-6">
|
||||||
|
Ihr regionaler Partner für TV, Internet und Telefonie in Tirol.
|
||||||
|
Persönlicher Service und zuverlässige Technik seit Jahren.
|
||||||
|
</p>
|
||||||
|
<div className="space-y-3">
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="flex items-center gap-3 text-sm text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
<Phone className="w-4 h-4 text-primary" />
|
||||||
|
<span>+43 5672 2000</span>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="mailto:info@telenetsystems.at"
|
||||||
|
className="flex items-center gap-3 text-sm text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
<Mail className="w-4 h-4 text-primary" />
|
||||||
|
<span>info@telenetsystems.at</span>
|
||||||
|
</a>
|
||||||
|
<div className="flex items-start gap-3 text-sm text-white/70">
|
||||||
|
<MapPin className="w-4 h-4 text-primary mt-0.5" />
|
||||||
|
<span>
|
||||||
|
Musterstraße 1<br />
|
||||||
|
6600 Reutte, Tirol
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Services */}
|
||||||
|
<div>
|
||||||
|
<h3 className="text-sm font-semibold uppercase tracking-wider mb-4">
|
||||||
|
Leistungen
|
||||||
|
</h3>
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{footerLinks.services.map((link) => (
|
||||||
|
<li key={link.href}>
|
||||||
|
<Link
|
||||||
|
href={link.href}
|
||||||
|
className="text-sm text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Company */}
|
||||||
|
<div>
|
||||||
|
<h3 className="text-sm font-semibold uppercase tracking-wider mb-4">
|
||||||
|
Unternehmen
|
||||||
|
</h3>
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{footerLinks.company.map((link) => (
|
||||||
|
<li key={link.href}>
|
||||||
|
<Link
|
||||||
|
href={link.href}
|
||||||
|
className="text-sm text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Legal */}
|
||||||
|
<div>
|
||||||
|
<h3 className="text-sm font-semibold uppercase tracking-wider mb-4">
|
||||||
|
Rechtliches
|
||||||
|
</h3>
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{footerLinks.legal.map((link) => (
|
||||||
|
<li key={link.href}>
|
||||||
|
<Link
|
||||||
|
href={link.href}
|
||||||
|
className="text-sm text-white/70 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bottom Bar */}
|
||||||
|
<div className="mt-12 pt-8 border-t border-white/10">
|
||||||
|
<div className="flex flex-col md:flex-row justify-between items-center gap-4">
|
||||||
|
<p className="text-sm text-white/50">
|
||||||
|
© {new Date().getFullYear()} TeleNetSystems. Alle Rechte vorbehalten.
|
||||||
|
</p>
|
||||||
|
<p className="text-sm text-white/50">
|
||||||
|
Ihr Partner für Telekommunikation in Reutte, Tirol
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
122
website/src/components/Header.tsx
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { Menu, X, Phone } from "lucide-react";
|
||||||
|
import { motion, AnimatePresence } from "framer-motion";
|
||||||
|
|
||||||
|
const navLinks = [
|
||||||
|
{ href: "/", label: "Startseite" },
|
||||||
|
{ href: "/fernsehen", label: "Fernsehen" },
|
||||||
|
{ href: "/internet", label: "Internet" },
|
||||||
|
{ href: "/telefonie", label: "Telefonie" },
|
||||||
|
{ href: "/leistungen", label: "Leistungen" },
|
||||||
|
{ href: "/ueber-uns", label: "Über uns" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function Header() {
|
||||||
|
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<header className="sticky top-0 z-50 bg-white/95 backdrop-blur-sm border-b border-border">
|
||||||
|
<nav className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8" aria-label="Hauptnavigation">
|
||||||
|
<div className="flex h-20 items-center justify-between">
|
||||||
|
{/* Logo */}
|
||||||
|
<Link href="/" className="flex items-center group">
|
||||||
|
<Image
|
||||||
|
src="/images/logo/logo.png"
|
||||||
|
alt="TeleNetSystems Logo"
|
||||||
|
width={180}
|
||||||
|
height={50}
|
||||||
|
className="h-10 w-auto"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
|
||||||
|
{/* Desktop Navigation */}
|
||||||
|
<div className="hidden lg:flex lg:items-center lg:gap-8">
|
||||||
|
{navLinks.map((link) => (
|
||||||
|
<Link
|
||||||
|
key={link.href}
|
||||||
|
href={link.href}
|
||||||
|
className="text-sm font-medium text-muted-foreground hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* CTA Button */}
|
||||||
|
<div className="hidden lg:flex lg:items-center lg:gap-4">
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="flex items-center gap-2 text-sm font-medium text-muted-foreground hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
<Phone className="w-4 h-4" />
|
||||||
|
<span>+43 5672 2000</span>
|
||||||
|
</a>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
className="inline-flex items-center justify-center rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Kontakt aufnehmen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Mobile menu button */}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
|
||||||
|
className="lg:hidden p-2 text-muted-foreground hover:text-foreground"
|
||||||
|
aria-label={mobileMenuOpen ? "Menü schließen" : "Menü öffnen"}
|
||||||
|
aria-expanded={mobileMenuOpen}
|
||||||
|
>
|
||||||
|
{mobileMenuOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{/* Mobile Navigation */}
|
||||||
|
<AnimatePresence>
|
||||||
|
{mobileMenuOpen && (
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, height: 0 }}
|
||||||
|
animate={{ opacity: 1, height: "auto" }}
|
||||||
|
exit={{ opacity: 0, height: 0 }}
|
||||||
|
className="lg:hidden border-t border-border bg-white"
|
||||||
|
>
|
||||||
|
<div className="px-4 py-4 space-y-2">
|
||||||
|
{navLinks.map((link) => (
|
||||||
|
<Link
|
||||||
|
key={link.href}
|
||||||
|
href={link.href}
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
className="block px-4 py-3 text-base font-medium text-foreground hover:bg-muted rounded-lg transition-colors"
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
<div className="pt-4 border-t border-border space-y-3">
|
||||||
|
<a
|
||||||
|
href="tel:+4356722000"
|
||||||
|
className="flex items-center gap-2 px-4 py-2 text-sm text-muted-foreground"
|
||||||
|
>
|
||||||
|
<Phone className="w-4 h-4" />
|
||||||
|
<span>+43 5672 2000</span>
|
||||||
|
</a>
|
||||||
|
<Link
|
||||||
|
href="#kontakt"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
className="block w-full text-center rounded-lg bg-primary px-5 py-3 text-sm font-medium text-white hover:bg-primary-dark transition-colors"
|
||||||
|
>
|
||||||
|
Kontakt aufnehmen
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
)}
|
||||||
|
</AnimatePresence>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
}
|
||||||
34
website/tsconfig.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2017",
|
||||||
|
"lib": ["dom", "dom.iterable", "esnext"],
|
||||||
|
"allowJs": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"incremental": true,
|
||||||
|
"plugins": [
|
||||||
|
{
|
||||||
|
"name": "next"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts",
|
||||||
|
".next/dev/types/**/*.ts",
|
||||||
|
"**/*.mts"
|
||||||
|
],
|
||||||
|
"exclude": ["node_modules"]
|
||||||
|
}
|
||||||