diff --git a/.env.example b/.env.example
index 7bad6c7..d85c86d 100644
--- a/.env.example
+++ b/.env.example
@@ -1,11 +1,16 @@
# Public URL of the website
PUBLIC_SITE_URL=https://www.fuz.dariuszm.eu
-
-# Google Maps
-PUBLIC_GOOGLE_MAPS_KEY=
+PUBLIC_GOOGLE_MAPS_KEY=AIzaSyDbUU6gvHCQilHyBEWL31FIM4D9-HuvgQw
+PUBLIC_RECAPTCHA_SITE_KEY=6Ld0ixIsAAAAAJdeOdzRy0Wd1TR-Xg6n7GMFxe4x
# Contact form API
FORMS_ENDPOINT=TEST
# Astro SSR
NODE_ENV=production
+
+# Smtp
+SMTP_HOST=smtp.webio.pl
+SMTP_PORT=465
+SMTP_USER=admin@fuz.hostingasp.pl
+SMTP_PASS=Janeczek@12
\ No newline at end of file
diff --git a/src/components/layout/Header.astro b/src/components/layout/Header.astro
index ae18767..7161ced 100644
--- a/src/components/layout/Header.astro
+++ b/src/components/layout/Header.astro
@@ -8,7 +8,7 @@ const links = [
{ name: "INTERNET RADIOWY", href: "/internet-radiowy" },
{ name: "TELEFON", href: "/telefon" },
{ name: "ZASIĘG SIECI", href: "/mapa-zasiegu" },
- { name: "KONTAKT", href: "/kontakt" }
+ { name: "KONTAKT", href: "/#contact" }
];
---
diff --git a/src/components/maps/MapGoogle.astro b/src/components/maps/MapGoogle.astro
new file mode 100644
index 0000000..eaed2ec
--- /dev/null
+++ b/src/components/maps/MapGoogle.astro
@@ -0,0 +1,79 @@
+---
+const {
+ apiKey,
+ lat,
+ lon,
+ zoom = 15,
+ title = "",
+ description = "",
+} = Astro.props;
+import "../../styles/map-google.css";
+---
+
+
+
+
+
+
diff --git a/src/components/sections/SectionContact.astro b/src/components/sections/SectionContact.astro
new file mode 100644
index 0000000..d9b255f
--- /dev/null
+++ b/src/components/sections/SectionContact.astro
@@ -0,0 +1,173 @@
+---
+import yaml from "js-yaml";
+import fs from "fs";
+import MapGoogle from "../maps/MapGoogle.astro";
+import "../../styles/contact.css";
+
+const data = yaml.load(
+ fs.readFileSync("./src/content/contact/contact.yaml", "utf8"),
+);
+const apiKey = import.meta.env.PUBLIC_GOOGLE_MAPS_KEY;
+---
+
+
+
+
+
+
+
+
diff --git a/src/content/contact/contact.yaml b/src/content/contact/contact.yaml
new file mode 100644
index 0000000..d4ea442
--- /dev/null
+++ b/src/content/contact/contact.yaml
@@ -0,0 +1,19 @@
+title: SKONTAKTUJ SIĘ Z NAMI
+description: |
+ FUZ ADAM ROJEK
+ ul. Świętojańska 46 07-200 Wyszków
+ ✆ +48 606 369 650
+ ☏ (29) 643 80 55
+ ✉ biuro@fuz.pl
+
+
+ Zapraszamy do naszego biura ! Na miejscu udzielimy niezbędnych informacji oraz pomożemy Ci wybrać ofertę najlepiej dopasowaną do Twoich potrzeb i możliwości. W przypadku jakichkolwiek wątpliwości służymy pomocą i rzetelną informacją.
+ Możesz skontaktować się z nami również telefonicznie czy mailowo - odpowiemy najszybciej jak to możliwe.
+ Biuro jest czynne od poniedziałku do piątku w godzinach 9:00-17:00
+
+
+lat: 52.597388
+lng: 21.456797
+markerTitle: "FUZ Adam Rojek"
+markerAddress: ul. Świętojańska 4607-200 Wyszków
+contactFormTitle: Pisząc wiadomość ...
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 7939d6e..f41b563 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -2,6 +2,7 @@
import DefaultLayout from "../layouts/DefaultLayout.astro";
import Hero from "../components/hero/Hero.astro";
import SectionRenderer from "../components/sections/SectionRenderer.astro"
+import SectionContact from "../components/sections/SectionContact.astro";
import yaml from "js-yaml";
import fs from "fs";
@@ -13,4 +14,5 @@ const hero = yaml.load(fs.readFileSync("./src/content/home/hero.yaml", "utf8"));
+
diff --git a/src/styles/base.css b/src/styles/base.css
index dffbbb5..aca3697 100644
--- a/src/styles/base.css
+++ b/src/styles/base.css
@@ -4,4 +4,8 @@
@import "./hero.css";
@import "./buttons.css";
@import "./sections.css";
-@import "./markdown.css";
\ No newline at end of file
+@import "./markdown.css";
+
+.grecaptcha-badge {
+ display: none !important;
+}
\ No newline at end of file
diff --git a/src/styles/buttons.css b/src/styles/buttons.css
index 9bf71c5..b73f6e5 100644
--- a/src/styles/buttons.css
+++ b/src/styles/buttons.css
@@ -36,3 +36,54 @@
.btn-ghost:hover {
background-color: var(--btn-ghost-hover-bg);
}
+
+.fuz-input {
+ width: 100%;
+ padding: 0.75rem 1rem; /* bardziej eleganckie */
+ border-radius: 0.75rem;
+
+ /* Kolory z theme.css */
+ background-color: var(--fuz-bg);
+ color: var(--fuz-text);
+ border: 1px solid var(--fuz-border, #d1d5db); /* fallback dla bezpieczeństwa */
+
+ box-shadow: 0 1px 2px rgba(0,0,0,0.06);
+
+ transition: all 0.2s ease;
+}
+
+/* Hover odcien zależny od border, nie od Tailwind */
+.fuz-input:hover {
+ border-color: var(--fuz-text);
+ opacity: 0.9;
+}
+
+/* Placeholder — używa fuz-text ale jaśniejszy */
+.fuz-input::placeholder {
+ color: color-mix(in srgb, var(--fuz-text) 40%, transparent);
+}
+
+/* Focus — używa accent */
+.fuz-input:focus {
+ outline: none;
+ border-color: var(--fuz-accent);
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--fuz-accent) 40%, transparent);
+}
+
+/* Error */
+.fuz-input-error {
+ border-color: #ff4d4f !important;
+ box-shadow: 0 0 0 3px rgba(255, 77, 79, 0.3) !important;
+}
+
+/* Disabled */
+.fuz-input:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+ background-color: color-mix(in srgb, var(--fuz-bg) 80%, #888);
+}
+
+/* Textarea */
+textarea.fuz-input {
+ resize: none;
+}
diff --git a/src/styles/contact.css b/src/styles/contact.css
new file mode 100644
index 0000000..0f2fe94
--- /dev/null
+++ b/src/styles/contact.css
@@ -0,0 +1,55 @@
+.fuz-contact-grid {
+ @apply grid md:grid-cols-2 gap-10 items-start max-w-7xl mx-auto;
+}
+
+.fuz-contact-box {
+
+ background-color: var(--fuz-bg);
+ color: var(--fuz-text);
+}
+
+.fuz-contact-description h3 {
+ @apply text-xl font-semibold mb-2;
+ color: var(--fuz-text);
+}
+
+.fuz-contact-description h4 {
+ @apply text-xl font-semibold mb-1;
+ color: var(--fuz-text);
+}
+
+.fuz-contact-description p {
+ @apply text-xl mt-4;
+ color: var(--fuz-text);
+}
+
+.fuz-contact-form {
+ @apply space-y-2;
+}
+
+/* --- RODO --- */
+.fuz-rodo {
+ @apply flex items-start gap-3 text-sm;
+ color: var(--fuz-text);
+}
+
+/* --- TOAST --- */
+
+.fuz-toast {
+ @apply fixed top-5 right-5 z-[9999];
+}
+
+.fuz-toast-msg {
+ @apply px-5 py-3 rounded-xl shadow-lg;
+ color: var(--fuz-accent-text);
+}
+
+/* SUKCES = accent */
+.fuz-toast-msg.success {
+ background-color: var(--fuz-accent);
+}
+
+/* ERROR — czerwony zostaje, bo to wyjątek */
+.fuz-toast-msg.error {
+ background-color: #ff4d4f;
+}
diff --git a/src/styles/map-google.css b/src/styles/map-google.css
new file mode 100644
index 0000000..413b75a
--- /dev/null
+++ b/src/styles/map-google.css
@@ -0,0 +1,55 @@
+.fuz-map-wrapper {
+ @apply max-w-7xl mx-auto mt-16;
+}
+
+.fuz-map-container {
+ @apply w-full h-[400px] rounded-xl shadow-lg;
+}
+
+.fuz-map-google {
+ @apply w-full h-[450px] rounded-xl overflow-hidden relative;
+ background: linear-gradient(90deg, #e0e0e0 0px, #f5f5f5 40px, #e0e0e0 80px);
+ background-size: 200% 100%;
+ animation: mapSkeleton 1.5s infinite;
+ opacity: 0;
+ transition: opacity 0.6s ease;
+}
+
+@keyframes mapSkeleton {
+ from {
+ background-position: 200% 0;
+ }
+
+ to {
+ background-position: -200% 0;
+ }
+}
+
+.fuz-map-google.loaded {
+ animation: none;
+ background: transparent;
+ opacity: 1;
+}
+
+@media (max-width: 768px) {
+ .fuz-map-google {
+ @apply h-[300px];
+ }
+}
+
+.fuz-map-infowindow {
+ /* background: var(--fuz-bg); */
+ color: var(--fuz-text);
+ @apply ml-1 mr-6 text-lg leading-snug ;
+ border-radius: 10px;
+}
+
+.gm-style-iw-d {
+ padding-top: 2px !important;
+ padding-bottom: 6px !important;
+}
+
+.gm-style-iw-c {
+ padding-top: 2px !important;
+ padding-bottom: 2px !important;
+}
\ No newline at end of file