caarleexx commited on
Commit
4984dfa
·
verified ·
1 Parent(s): 0655b5f

Upload 11 files

Browse files
Files changed (11) hide show
  1. .env.local +1 -0
  2. .gitignore +24 -0
  3. App.tsx +275 -0
  4. constants.ts +51 -0
  5. index.html +63 -338
  6. index.tsx +15 -0
  7. metadata.json +5 -0
  8. package.json +22 -0
  9. tsconfig.json +29 -0
  10. types.ts +22 -0
  11. vite.config.ts +23 -0
.env.local ADDED
@@ -0,0 +1 @@
 
 
1
+ GEMINI_API_KEY=PLACEHOLDER_API_KEY
.gitignore ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
App.tsx ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useEffect, useState } from 'react';
2
+ import { PROPERTIES, NAV_LINKS } from './constants';
3
+ import PropertyCard from './components/PropertyCard';
4
+ import AIChat from './components/AIChat';
5
+ import { MenuIcon, ArrowRightIcon } from './components/Icons';
6
+
7
+ const App: React.FC = () => {
8
+ const [scrolled, setScrolled] = useState(false);
9
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
10
+
11
+ useEffect(() => {
12
+ const handleScroll = () => {
13
+ setScrolled(window.scrollY > 50);
14
+ };
15
+ window.addEventListener('scroll', handleScroll);
16
+ return () => window.removeEventListener('scroll', handleScroll);
17
+ }, []);
18
+
19
+ return (
20
+ <div className="min-h-screen bg-sk-light text-sk-dark selection:bg-sk-accent selection:text-white font-sans">
21
+ {/* Decorative vertical lines for "depth" */}
22
+ <div className="fixed inset-0 pointer-events-none z-0 flex justify-between px-6 md:px-24 opacity-5">
23
+ <div className="w-px h-full bg-sk-dark"></div>
24
+ <div className="w-px h-full bg-sk-dark hidden md:block"></div>
25
+ <div className="w-px h-full bg-sk-dark hidden lg:block"></div>
26
+ <div className="w-px h-full bg-sk-dark"></div>
27
+ </div>
28
+
29
+ {/* Navbar */}
30
+ <nav
31
+ className={`fixed top-0 w-full z-40 transition-all duration-500 border-b ${
32
+ scrolled ? 'bg-white/95 backdrop-blur-md py-4 border-gray-200 shadow-sm' : 'bg-transparent py-8 border-transparent'
33
+ }`}
34
+ >
35
+ <div className="max-w-[1400px] mx-auto px-6 md:px-12 flex justify-between items-center">
36
+ <div className="text-2xl md:text-3xl font-serif font-bold tracking-tight z-50 relative text-sk-dark">
37
+ SK<span className="text-sk-accent">.</span>
38
+ </div>
39
+
40
+ {/* Desktop Nav */}
41
+ <div className="hidden md:flex space-x-12">
42
+ {NAV_LINKS.map(link => (
43
+ <a
44
+ key={link.label}
45
+ href={link.href}
46
+ className={`text-xs font-bold uppercase tracking-[0.15em] hover:text-sk-accent transition-colors relative group ${scrolled ? 'text-sk-dark' : 'text-sk-dark md:text-white md:mix-blend-difference'}`}
47
+ >
48
+ {link.label}
49
+ <span className="absolute -bottom-2 left-0 w-0 h-0.5 bg-sk-accent transition-all duration-300 group-hover:w-full"></span>
50
+ </a>
51
+ ))}
52
+ </div>
53
+
54
+ {/* Mobile Menu Button */}
55
+ <button
56
+ className={`md:hidden z-50 ${mobileMenuOpen ? 'text-sk-dark' : (scrolled ? 'text-sk-dark' : 'text-white drop-shadow-md')}`}
57
+ onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
58
+ >
59
+ <MenuIcon />
60
+ </button>
61
+ </div>
62
+
63
+ {/* Mobile Menu Overlay */}
64
+ {mobileMenuOpen && (
65
+ <div className="fixed inset-0 bg-sk-light z-40 flex flex-col justify-center items-center space-y-8 md:hidden animate-fade-in">
66
+ {NAV_LINKS.map(link => (
67
+ <a
68
+ key={link.label}
69
+ href={link.href}
70
+ onClick={() => setMobileMenuOpen(false)}
71
+ className="text-2xl font-serif text-sk-dark hover:text-sk-accent transition-colors"
72
+ >
73
+ {link.label}
74
+ </a>
75
+ ))}
76
+ </div>
77
+ )}
78
+ </nav>
79
+
80
+ {/* Hero Section */}
81
+ <header className="relative min-h-screen flex items-center pt-20 overflow-hidden">
82
+ {/* Hero Background Image */}
83
+ <div className="absolute top-0 right-0 w-full h-full z-0">
84
+ <img
85
+ src="https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&q=80&w=1600"
86
+ alt="Matinhos Sunset"
87
+ className="w-full h-full object-cover"
88
+ />
89
+ <div className="absolute inset-0 bg-black/30 md:bg-black/20"></div>
90
+ {/* Gradient Overlay for Text Readability */}
91
+ <div className="absolute inset-0 bg-gradient-to-r from-black/60 via-black/30 to-transparent"></div>
92
+ </div>
93
+
94
+ <div className="relative z-10 max-w-[1400px] mx-auto px-6 md:px-12 w-full mt-16 md:mt-0">
95
+ <div className="max-w-2xl text-white">
96
+ <div className="inline-block border-l-4 border-sk-accent pl-6 mb-8">
97
+ <p className="text-xs font-bold uppercase tracking-[0.3em] text-sk-accent mb-2">Matinhos — Paraná</p>
98
+ <p className="text-sm font-light tracking-wide text-white/90">Av. Paranaguá, 803</p>
99
+ </div>
100
+
101
+ <h1 className="text-5xl md:text-7xl font-serif leading-[1.1] mb-8 text-shadow">
102
+ Horizonte <br/>
103
+ <span className="italic font-light text-sk-gold">Infinito</span>
104
+ </h1>
105
+
106
+ <p className="text-white/80 font-light text-lg mb-10 leading-relaxed max-w-md border-l border-white/20 pl-6">
107
+ A SK Imobiliária conecta você ao melhor do litoral. Imóveis de alto padrão onde o luxo encontra a natureza.
108
+ </p>
109
+
110
+ <a href="#collection" className="inline-flex items-center space-x-4 text-xs font-bold uppercase tracking-widest bg-sk-accent text-white px-10 py-5 hover:bg-white hover:text-sk-dark transition-all duration-300 shadow-2xl shadow-sk-accent/30">
111
+ <span>Descobrir Imóveis</span>
112
+ <ArrowRightIcon className="w-4 h-4" />
113
+ </a>
114
+ </div>
115
+ </div>
116
+
117
+ {/* Scroll Indicator */}
118
+ <div className="absolute bottom-10 left-6 md:left-12 flex items-center gap-4 z-20">
119
+ <span className="text-[10px] uppercase tracking-widest text-white/80">Explore</span>
120
+ <div className="w-12 h-px bg-sk-gold"></div>
121
+ </div>
122
+ </header>
123
+
124
+ {/* Philosophy Section */}
125
+ <section id="about" className="py-24 md:py-32 relative z-10 bg-sk-dark text-white">
126
+ <div className="max-w-[1400px] mx-auto px-6 md:px-12 grid grid-cols-1 md:grid-cols-2 gap-20 items-center">
127
+ <div>
128
+ <span className="text-sk-accent text-xs font-bold uppercase tracking-widest mb-4 block">Sobre a SK</span>
129
+ <h2 className="text-3xl md:text-5xl font-serif mb-8 leading-tight">
130
+ Elegância em <br/><span className="text-sk-gold italic">Cada Camada</span>
131
+ </h2>
132
+ <div className="space-y-6 text-white/60 font-light text-lg leading-relaxed">
133
+ <p>
134
+ Localizada estrategicamente na Av. Paranaguá, 803, a SK Imobiliária não vende apenas metros quadrados; curamos estilos de vida à beira-mar.
135
+ </p>
136
+ <p>
137
+ Nossa paleta reflete nossa essência: o preto da profundidade e seriedade dos negócios, o dourado da valorização do seu patrimônio, e o laranja vibrante do pôr do sol de Matinhos.
138
+ </p>
139
+ </div>
140
+
141
+ <div className="mt-12 flex gap-12">
142
+ <div>
143
+ <span className="block text-3xl font-serif text-sk-gold">15+</span>
144
+ <span className="text-xs uppercase tracking-widest text-white/50">Anos de Litoral</span>
145
+ </div>
146
+ <div>
147
+ <span className="block text-3xl font-serif text-sk-gold">803</span>
148
+ <span className="text-xs uppercase tracking-widest text-white/50">Av. Paranaguá</span>
149
+ </div>
150
+ </div>
151
+ </div>
152
+
153
+ <div className="relative group">
154
+ <div className="aspect-[4/5] bg-gray-800 overflow-hidden relative z-10 border border-white/10">
155
+ <img src="https://images.unsplash.com/photo-1613490493576-7fde63acd811?auto=format&fit=crop&q=80&w=800" alt="Interior Design" className="w-full h-full object-cover transition-transform duration-1000 group-hover:scale-105 opacity-80 group-hover:opacity-100"/>
156
+ </div>
157
+ {/* Decorative Layers */}
158
+ <div className="absolute -bottom-6 -right-6 w-full h-full border border-sk-gold/30 z-0 transition-transform duration-500 group-hover:translate-x-4 group-hover:translate-y-4"></div>
159
+ <div className="absolute -top-6 -left-6 w-32 h-32 bg-sk-accent/20 z-0 blur-2xl"></div>
160
+ </div>
161
+ </div>
162
+ </section>
163
+
164
+ {/* Collection Grid */}
165
+ <section id="collection" className="py-24 bg-sk-light relative z-10">
166
+ <div className="max-w-[1400px] mx-auto px-6 md:px-12">
167
+ <div className="flex flex-col md:flex-row justify-between items-end mb-20 border-b border-gray-200 pb-8">
168
+ <div>
169
+ <p className="text-xs uppercase tracking-[0.3em] text-sk-accent mb-2">Portfólio</p>
170
+ <h2 className="text-4xl md:text-5xl font-serif text-sk-dark">Seleção Exclusiva</h2>
171
+ </div>
172
+ <a href="#" className="hidden md:flex items-center gap-2 text-xs uppercase tracking-widest text-sk-dark hover:text-sk-accent transition-colors mt-6 md:mt-0">
173
+ <span>Ver Todos os Imóveis</span>
174
+ <ArrowRightIcon className="w-4 h-4" />
175
+ </a>
176
+ </div>
177
+
178
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-16">
179
+ {PROPERTIES.map((prop) => (
180
+ <PropertyCard key={prop.id} property={prop} />
181
+ ))}
182
+ </div>
183
+
184
+ <div className="mt-16 text-center md:hidden">
185
+ <a href="#" className="inline-block bg-sk-dark text-white px-8 py-4 text-xs uppercase tracking-widest hover:bg-sk-accent transition-colors">Ver Todos</a>
186
+ </div>
187
+ </div>
188
+ </section>
189
+
190
+ {/* CTA Section */}
191
+ <section id="services" className="py-32 bg-sk-accent text-white relative overflow-hidden">
192
+ <div className="absolute inset-0 bg-[url('https://www.transparenttextures.com/patterns/cubes.png')] opacity-10"></div>
193
+ <div className="absolute top-0 right-0 w-full h-full bg-gradient-to-l from-black/20 to-transparent"></div>
194
+
195
+ <div className="max-w-4xl mx-auto px-6 text-center relative z-10">
196
+ <h2 className="text-3xl md:text-5xl font-serif mb-8">Viva o Sonho em Matinhos</h2>
197
+ <p className="text-white/90 font-light text-lg mb-12 max-w-2xl mx-auto">
198
+ Seja para investir ou morar, temos a chave para o seu novo horizonte.
199
+ Visite-nos na Av. Paranaguá, 803.
200
+ </p>
201
+ <div className="flex flex-col md:flex-row justify-center gap-6">
202
+ <button className="bg-sk-dark text-white border border-sk-dark px-10 py-4 text-xs font-bold uppercase tracking-[0.2em] hover:bg-white hover:text-sk-dark transition-all duration-300">
203
+ Agendar Visita
204
+ </button>
205
+ <button className="bg-transparent text-white border border-white px-10 py-4 text-xs font-bold uppercase tracking-[0.2em] hover:bg-white hover:text-sk-accent transition-all duration-300">
206
+ Falar no WhatsApp
207
+ </button>
208
+ </div>
209
+ </div>
210
+ </section>
211
+
212
+ {/* Footer */}
213
+ <footer id="contact" className="bg-sk-dark text-white pt-24 pb-12 border-t border-white/5">
214
+ <div className="max-w-[1400px] mx-auto px-6 md:px-12">
215
+ <div className="grid grid-cols-1 md:grid-cols-12 gap-16 md:gap-8">
216
+ <div className="md:col-span-5 space-y-8">
217
+ <div className="text-3xl font-serif font-bold tracking-tight text-white">SK<span className="text-sk-accent">.</span></div>
218
+ <p className="text-sm font-light text-white/60 max-w-sm leading-relaxed">
219
+ Referência em imobiliária de alto padrão em Matinhos.
220
+ Combinamos tradição e modernidade para oferecer as melhores oportunidades do litoral paranaense.
221
+ </p>
222
+ <div className="flex gap-4">
223
+ <div className="w-10 h-10 border border-white/20 flex items-center justify-center hover:bg-sk-accent hover:border-sk-accent cursor-pointer transition-all duration-300">
224
+ <span className="text-xs font-bold">IG</span>
225
+ </div>
226
+ <div className="w-10 h-10 border border-white/20 flex items-center justify-center hover:bg-sk-accent hover:border-sk-accent cursor-pointer transition-all duration-300">
227
+ <span className="text-xs font-bold">FB</span>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <div className="md:col-span-3">
233
+ <h4 className="text-xs uppercase tracking-widest font-bold text-sk-gold mb-8">Endereço</h4>
234
+ <address className="not-italic text-sm font-light text-white/70 space-y-4 border-l border-white/10 pl-6">
235
+ <p className="flex flex-col">
236
+ <span className="font-medium text-white">Sede SK</span>
237
+ <span>Av. Paranaguá, 803</span>
238
+ </p>
239
+ <p>Matinhos - PR</p>
240
+ <p>CEP 83260-000</p>
241
+ </address>
242
+ </div>
243
+
244
+ <div className="md:col-span-4">
245
+ <h4 className="text-xs uppercase tracking-widest font-bold text-sk-gold mb-8">Contato</h4>
246
+ <ul className="space-y-4 text-sm font-light text-white/70 border-l border-white/10 pl-6">
247
+ <li className="flex flex-col gap-1">
248
+ <span className="text-[10px] uppercase tracking-wider opacity-50">Telefone</span>
249
+ <span className="text-white text-lg">(41) 3453-0000</span>
250
+ </li>
251
+ <li className="flex flex-col gap-1">
252
+ <span className="text-[10px] uppercase tracking-wider opacity-50">Email</span>
253
+ <span className="text-white">contato@skimobiliaria.com.br</span>
254
+ </li>
255
+ </ul>
256
+ </div>
257
+ </div>
258
+
259
+ <div className="border-t border-white/5 mt-20 pt-8 flex flex-col md:flex-row justify-between items-center text-xs text-white/40 font-light">
260
+ <p>&copy; 2024 SK Imobiliária. Matinhos - PR.</p>
261
+ <div className="flex space-x-6 mt-4 md:mt-0">
262
+ <a href="#" className="hover:text-sk-accent transition-colors">Privacidade</a>
263
+ <a href="#" className="hover:text-sk-accent transition-colors">Termos</a>
264
+ </div>
265
+ </div>
266
+ </div>
267
+ </footer>
268
+
269
+ {/* AI Assistant Widget */}
270
+ <AIChat />
271
+ </div>
272
+ );
273
+ };
274
+
275
+ export default App;
constants.ts ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Property } from './types';
2
+
3
+ export const PROPERTIES: Property[] = [
4
+ {
5
+ id: '1',
6
+ title: 'Cobertura Duplex Caiobá',
7
+ location: 'Caiobá, Matinhos',
8
+ price: 'R$ 4.500.000',
9
+ details: '4 Suítes | 320m²',
10
+ image: 'https://images.unsplash.com/photo-1512917774080-9991f1c4c750?auto=format&fit=crop&q=80&w=800',
11
+ category: 'Venda',
12
+ description: 'Vista panorâmica para o mar. Terraço privativo com piscina aquecida, acabamentos em mármore e área gourmet integrada. Exclusividade na melhor localização de Caiobá.'
13
+ },
14
+ {
15
+ id: '2',
16
+ title: 'Residência Beira-Mar',
17
+ location: 'Praia Mansa, Matinhos',
18
+ price: 'R$ 3.200.000',
19
+ details: '5 Quartos | 450m²',
20
+ image: 'https://images.unsplash.com/photo-1600596542815-2004cb539ca9?auto=format&fit=crop&q=80&w=800',
21
+ category: 'Venda',
22
+ description: 'Arquitetura contemporânea pé na areia. Jardim tropical, amplas salas de estar e sistema de segurança monitorada. O pôr do sol mais bonito da região.'
23
+ },
24
+ {
25
+ id: '3',
26
+ title: 'Apartamento Garden Alto Padrão',
27
+ location: 'Centro, Matinhos',
28
+ price: 'R$ 1.450.000',
29
+ details: '3 Suítes | 200m²',
30
+ image: 'https://images.unsplash.com/photo-1545324418-cc1a3fa10c00?auto=format&fit=crop&q=80&w=800',
31
+ category: 'Venda',
32
+ description: 'O conforto de uma casa com a segurança de um edifício. Amplo terraço garden, churrasqueira privativa e acabamentos quentes em madeira.'
33
+ },
34
+ {
35
+ id: '4',
36
+ title: 'Edifício Golden Sun (Lançamento)',
37
+ location: 'Caiobá, Matinhos',
38
+ price: 'Sob Consulta',
39
+ details: '3 a 4 Quartos | 150-280m²',
40
+ image: 'https://images.unsplash.com/photo-1574362848149-11496d93a7c7?auto=format&fit=crop&q=80&w=800',
41
+ category: 'Venda',
42
+ description: 'O novo ícone do litoral paranaense. Design biofílico, áreas comuns sofisticadas e vista definitiva para o oceano Atlântico.'
43
+ }
44
+ ];
45
+
46
+ export const NAV_LINKS = [
47
+ { label: 'Imóveis', href: '#collection' },
48
+ { label: 'A SK', href: '#about' },
49
+ { label: 'Investimentos', href: '#services' },
50
+ { label: 'Contato', href: '#contact' },
51
+ ];
index.html CHANGED
@@ -1,346 +1,71 @@
1
  <!DOCTYPE html>
2
  <html lang="pt-BR">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>SK Imobiliária</title>
7
- <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@600&family=Inter:wght@400&display=swap" rel="stylesheet">
8
- <style>
9
- :root {
10
- --cor-quente-principal: #C06C41;
11
- --cor-fundo-quente: #F5F0E8;
12
- --cor-texto-contraste: #2C2A2A;
13
- }
14
- body {
15
- font-family: 'Inter', sans-serif;
16
- color: var(--cor-texto-contraste);
17
- background-color: var(--cor-fundo-quente);
18
- margin: 0;
19
- padding: 0;
20
- line-height: 1.7;
21
- }
22
- header {
23
- background-color: var(--cor-quente-principal);
24
- color: white;
25
- padding: 20px 0;
26
- text-align: center;
27
- }
28
- nav {
29
- background-color: var(--cor-fundo-quente);
30
- display: flex;
31
- justify-content: center;
32
- padding: 10px 0;
33
- }
34
- nav a {
35
- color: var(--cor-quente-principal);
36
- padding: 14px 20px;
37
- text-decoration: none;
38
- transition: all 0.3s ease;
39
- }
40
- nav a:hover {
41
- background-color: var(--cor-quente-principal);
42
- color: white;
43
- text-decoration: underline;
44
- }
45
- .container {
46
- padding: 0 20px;
47
- }
48
- @media (min-width: 768px) {
49
- .container {
50
- max-width: 1100px;
51
- margin: 0 auto;
52
- }
53
- }
54
- .search-bar {
55
- display: flex;
56
- flex-direction: column;
57
- align-items: center;
58
- margin-bottom: 80px;
59
- }
60
- @media (min-width: 768px) {
61
- .search-bar {
62
- flex-direction: row;
63
- }
64
- }
65
- .search-bar input[type="text"],
66
- .search-bar select {
67
- padding: 10px;
68
- margin-right: 10px;
69
- border: 1px solid var(--cor-quente-principal);
70
- border-radius: 8px;
71
- margin-bottom: 10px;
72
- }
73
- @media (min-width: 768px) {
74
- .search-bar input[type="text"],
75
- .search-bar select {
76
- margin-bottom: 0;
77
- }
78
- }
79
- .search-bar button {
80
- padding: 14px 28px;
81
- background-color: var(--cor-quente-principal);
82
- color: white;
83
- border: none;
84
- border-radius: 8px;
85
- font-weight: 600;
86
- text-transform: uppercase;
87
- letter-spacing: 0.5px;
88
- cursor: pointer;
89
- transition: all 0.3s ease;
90
- }
91
- .search-bar button:hover {
92
- filter: brightness(1.1);
93
- }
94
- .featured-properties {
95
- display: grid;
96
- grid-template-columns: 1fr;
97
- gap: 20px;
98
- margin-bottom: 80px;
99
- }
100
- @media (min-width: 768px) {
101
- .featured-properties {
102
- grid-template-columns: repeat(2, 1fr);
103
- }
104
- }
105
- @media (min-width: 1024px) {
106
- .featured-properties {
107
- grid-template-columns: repeat(3, 1fr);
108
- }
109
- }
110
- .imovel-card {
111
- background-color: #FFFFFF;
112
- border-radius: 12px;
113
- box-shadow: 0px 8px 24px rgba(44, 42, 42, 0.1);
114
- overflow: hidden;
115
- transition: transform 0.3s ease, box-shadow 0.3s ease;
116
- }
117
- .imovel-card:hover {
118
- transform: translateY(-5px);
119
- box-shadow: 0px 12px 30px rgba(44, 42, 42, 0.15);
120
- }
121
- .imovel-card img {
122
- width: 100%;
123
- height: auto;
124
- }
125
- .imovel-card .details {
126
- padding: 20px;
127
- }
128
- .imovel-card h3 {
129
- font-family: 'Poppins', sans-serif;
130
- font-weight: 600;
131
- margin-bottom: 10px;
132
- }
133
- .imovel-card p {
134
- margin-bottom: 10px;
135
- }
136
- .imovel-card .price {
137
- font-size: 1.2em;
138
- color: var(--cor-quente-principal);
139
- margin-bottom: 10px;
140
- }
141
- .imovel-card .btn {
142
- background-color: var(--cor-quente-principal);
143
- color: white;
144
- padding: 14px 28px;
145
- border: none;
146
- border-radius: 8px;
147
- font-weight: 600;
148
- text-transform: uppercase;
149
- letter-spacing: 0.5px;
150
- cursor: pointer;
151
- transition: all 0.3s ease;
152
- }
153
- .imovel-card .btn:hover {
154
- filter: brightness(1.1);
155
- }
156
- .contact-form {
157
- margin-top: 40px;
158
- }
159
- .contact-form label {
160
- display: block;
161
- margin-bottom: 5px;
162
- }
163
- .contact-form input[type="text"],
164
- .contact-form input[type="email"],
165
- .contact-form textarea {
166
- width: 100%;
167
- padding: 10px;
168
- margin-bottom: 10px;
169
- border: 1px solid var(--cor-quente-principal);
170
- border-radius: 8px;
171
- }
172
- .contact-form button {
173
- padding: 14px 28px;
174
- background-color: var(--cor-quente-principal);
175
- color: white;
176
- border: none;
177
- border-radius: 8px;
178
- font-weight: 600;
179
- text-transform: uppercase;
180
- letter-spacing: 0.5px;
181
- cursor: pointer;
182
- transition: all 0.3s ease;
183
- }
184
- .contact-form button:hover {
185
- filter: brightness(1.1);
186
- }
187
- footer {
188
- background-color: var(--cor-quente-principal);
189
- color: white;
190
- text-align: center;
191
- padding: 20px 0;
192
- position: fixed;
193
- width: 100%;
194
- bottom: 0;
195
- }
196
- footer a {
197
- color: white;
198
- margin: 0 10px;
199
- text-decoration: none;
200
- transition: all 0.3s ease;
201
- }
202
- footer a:hover {
203
- text-decoration: underline;
204
- }
205
- section {
206
- padding-top: 80px;
207
- padding-bottom: 80px;
208
- }
209
- .about-content {
210
- display: flex;
211
- flex-direction: column;
212
- align-items: center;
213
- }
214
- @media (min-width: 768px) {
215
- .about-content {
216
- flex-direction: row;
217
- justify-content: space-between;
218
- }
219
- }
220
- .about-content img {
221
- max-width: 100%;
222
- border-radius: 12px;
223
- margin-bottom: 20px;
224
- }
225
- @media (min-width: 768px) {
226
- .about-content img {
227
- max-width: 48%;
228
- margin-bottom: 0;
229
- }
230
- }
231
- .about-content p {
232
- max-width: 100%;
233
- }
234
- @media (min-width: 768px) {
235
- .about-content p {
236
- max-width: 48%;
237
  }
 
238
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  </style>
 
 
 
 
 
 
 
 
 
 
 
240
  </head>
241
- <body>
242
- <header>
243
- <h1>SK Imobiliária</h1>
244
- <p>Av. Paranaguá, 803, Matinhos - PR</p>
245
- </header>
246
- <nav>
247
- <a href="#home">Home</a>
248
- <a href="#properties">Imóveis</a>
249
- <a href="#about">Sobre Nós</a>
250
- <a href="#contact">Contato</a>
251
- </nav>
252
- <div class="container">
253
- <section id="home">
254
- <div class="search-bar">
255
- <input type="text" placeholder="Buscar...">
256
- <select>
257
- <option value="comprar">Comprar</option>
258
- <option value="alugar">Alugar</option>
259
- </select>
260
- <select>
261
- <option value="cidade">Cidade</option>
262
- <option value="bairro">Bairro</option>
263
- </select>
264
- <select>
265
- <option value="casa">Casa</option>
266
- <option value="apartamento">Apartamento</option>
267
- </select>
268
- <select>
269
- <option value="preco">Faixa de Preço</option>
270
- </select>
271
- <select>
272
- <option value="quartos">Número de Quartos</option>
273
- </select>
274
- <button>Pesquisar</button>
275
- </div>
276
- <section class="featured-properties">
277
- <div class="imovel-card">
278
- <img src="https://via.placeholder.com/300x200" alt="Imóvel 1">
279
- <div class="details">
280
- <h3>Imóvel 1</h3>
281
- <p class="price">R$ 500.000</p>
282
- <p>Casa, 3 quartos, 2 banheiros</p>
283
- <button class="btn" onclick="showPropertyDetails()">Ver detalhes</button>
284
- </div>
285
- </div>
286
- <div class="imovel-card">
287
- <img src="https://via.placeholder.com/300x200" alt="Imóvel 2">
288
- <div class="details">
289
- <h3>Imóvel 2</h3>
290
- <p class="price">R$ 350.000</p>
291
- <p>Apartamento, 2 quartos, 1 banheiro</p>
292
- <button class="btn" onclick="showPropertyDetails()">Ver detalhes</button>
293
- </div>
294
- </div>
295
- <div class="imovel-card">
296
- <img src="https://via.placeholder.com/300x200" alt="Imóvel 3">
297
- <div class="details">
298
- <h3>Imóvel 3</h3>
299
- <p class="price">R$ 700.000</p>
300
- <p>Casa, 4 quartos, 3 banheiros</p>
301
- <button class="btn" onclick="showPropertyDetails()">Ver detalhes</button>
302
- </div>
303
- </div>
304
- </section>
305
- </section>
306
- <section id="properties">
307
- <h2>Resultados da Busca</h2>
308
- <!-- Aqui viriam os resultados da busca -->
309
- </section>
310
- <section id="about">
311
- <h2>Sobre Nós</h2>
312
- <div class="about-content">
313
- <img src="https://via.placeholder.com/500x300" alt="Sobre Nós">
314
- <p>Bem-vindo à SK Imobiliária, sua parceira confiável no mercado imobiliário. Fundada com o objetivo de fornecer soluções imobiliárias de qualidade, nossa equipe especializada está pronta para ajudar você a encontrar seu próximo lar ou investimento ideal.</p>
315
- </div>
316
- </section>
317
- <section id="contact">
318
- <h2>Contato</h2>
319
- <p>Telefone: (41) 99999-9999</p>
320
- <p>E-mail: contato@skimobiliaria.com</p>
321
- <p>Endereço: Av. Paranaguá, 803, Matinhos - PR</p>
322
- <div class="contact-form">
323
- <form>
324
- <label for="name">Nome:</label>
325
- <input type="text" id="name" name="name" required>
326
- <label for="email">E-mail:</label>
327
- <input type="email" id="email" name="email" required>
328
- <label for="message">Mensagem:</label>
329
- <textarea id="message" name="message" rows="4" required></textarea>
330
- <button type="submit">Enviar</button>
331
- </form>
332
- </div>
333
- </section>
334
- </div>
335
- <footer>
336
- <p>&copy; 2023 SK Imobiliária. Todos os direitos reservados.</p>
337
- <p><a href="#home">Home</a> | <a href="#properties">Imóveis</a> | <a href="#about">Sobre Nós</a> | <a href="#contact">Contato</a></p>
338
- </footer>
339
- <script>
340
- function showPropertyDetails() {
341
- alert('Detalhes do imóvel');
342
- // Aqui seria o código para abrir a página de detalhes do imóvel
343
- }
344
- </script>
345
  </body>
346
  </html>
 
1
  <!DOCTYPE html>
2
  <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>SK Imobiliária | Matinhos - PR</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script>
9
+ tailwind.config = {
10
+ theme: {
11
+ extend: {
12
+ fontFamily: {
13
+ sans: ['Inter', 'sans-serif'],
14
+ serif: ['Playfair Display', 'serif'],
15
+ },
16
+ colors: {
17
+ sk: {
18
+ dark: '#0F0F0F', /* Pure Black/Charcoal - Profundidade */
19
+ gold: '#D4AF37', /* Metallic Gold - Luxo */
20
+ light: '#FFFCF8', /* Warm White - Leveza */
21
+ accent: '#E65100', /* Burnt Orange - Calor/Destaque */
22
+ gray: '#52525B', /* Zinc Gray - Texto Secundário */
23
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
25
+ }
26
  }
27
+ }
28
+ </script>
29
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&family=Playfair+Display:ital,wght@0,400;0,600;1,400&display=swap" rel="stylesheet">
30
+ <style>
31
+ body {
32
+ background-color: #FFFCF8; /* sk-light */
33
+ color: #0F0F0F; /* sk-dark */
34
+ }
35
+ .glass {
36
+ background: rgba(255, 255, 255, 0.9);
37
+ backdrop-filter: blur(12px);
38
+ -webkit-backdrop-filter: blur(12px);
39
+ }
40
+ /* Custom scrollbar */
41
+ ::-webkit-scrollbar {
42
+ width: 6px;
43
+ }
44
+ ::-webkit-scrollbar-track {
45
+ background: transparent;
46
+ }
47
+ ::-webkit-scrollbar-thumb {
48
+ background: #E65100;
49
+ border-radius: 3px;
50
+ }
51
+ .text-shadow {
52
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
53
+ }
54
  </style>
55
+ <script type="importmap">
56
+ {
57
+ "imports": {
58
+ "@google/genai": "https://aistudiocdn.com/@google/genai@^1.30.0",
59
+ "react/": "https://aistudiocdn.com/react@^19.2.0/",
60
+ "react": "https://aistudiocdn.com/react@^19.2.0",
61
+ "react-dom/": "https://aistudiocdn.com/react-dom@^19.2.0/"
62
+ }
63
+ }
64
+ </script>
65
+ <link rel="stylesheet" href="/index.css">
66
  </head>
67
+ <body>
68
+ <div id="root"></div>
69
+ <script type="module" src="/index.tsx"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  </body>
71
  </html>
index.tsx ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import App from './App';
4
+
5
+ const rootElement = document.getElementById('root');
6
+ if (!rootElement) {
7
+ throw new Error("Could not find root element to mount to");
8
+ }
9
+
10
+ const root = ReactDOM.createRoot(rootElement);
11
+ root.render(
12
+ <React.StrictMode>
13
+ <App />
14
+ </React.StrictMode>
15
+ );
metadata.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "name": "Copy of SK Imobiliária",
3
+ "description": "Imóveis exclusivos e atendimento de excelência em Matinhos, PR.",
4
+ "requestFramePermissions": []
5
+ }
package.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "copy-of-sk-imobiliária",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "@google/genai": "^1.30.0",
13
+ "react": "^19.2.0",
14
+ "react-dom": "^19.2.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.14.0",
18
+ "@vitejs/plugin-react": "^5.0.0",
19
+ "typescript": "~5.8.2",
20
+ "vite": "^6.2.0"
21
+ }
22
+ }
tsconfig.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "experimentalDecorators": true,
5
+ "useDefineForClassFields": false,
6
+ "module": "ESNext",
7
+ "lib": [
8
+ "ES2022",
9
+ "DOM",
10
+ "DOM.Iterable"
11
+ ],
12
+ "skipLibCheck": true,
13
+ "types": [
14
+ "node"
15
+ ],
16
+ "moduleResolution": "bundler",
17
+ "isolatedModules": true,
18
+ "moduleDetection": "force",
19
+ "allowJs": true,
20
+ "jsx": "react-jsx",
21
+ "paths": {
22
+ "@/*": [
23
+ "./*"
24
+ ]
25
+ },
26
+ "allowImportingTsExtensions": true,
27
+ "noEmit": true
28
+ }
29
+ }
types.ts ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export interface Property {
2
+ id: string;
3
+ title: string;
4
+ location: string;
5
+ price: string;
6
+ details: string; // e.g., "4 Quartos | 350m²"
7
+ image: string;
8
+ category: 'Venda' | 'Aluguel';
9
+ description: string;
10
+ }
11
+
12
+ export interface ChatMessage {
13
+ role: 'user' | 'model';
14
+ text: string;
15
+ timestamp: Date;
16
+ }
17
+
18
+ export enum ViewState {
19
+ HOME = 'HOME',
20
+ PROPERTIES = 'PROPERTIES',
21
+ DETAILS = 'DETAILS'
22
+ }
vite.config.ts ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import path from 'path';
2
+ import { defineConfig, loadEnv } from 'vite';
3
+ import react from '@vitejs/plugin-react';
4
+
5
+ export default defineConfig(({ mode }) => {
6
+ const env = loadEnv(mode, '.', '');
7
+ return {
8
+ server: {
9
+ port: 3000,
10
+ host: '0.0.0.0',
11
+ },
12
+ plugins: [react()],
13
+ define: {
14
+ 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15
+ 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16
+ },
17
+ resolve: {
18
+ alias: {
19
+ '@': path.resolve(__dirname, '.'),
20
+ }
21
+ }
22
+ };
23
+ });