John2121 commited on
Commit
9859de1
·
verified ·
1 Parent(s): f2be9fe

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +393 -280
index.html CHANGED
@@ -2,328 +2,441 @@
2
  <html lang="en">
3
 
4
  <head>
5
- <!-- Swiper.js for dynamic card carousel -->
6
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
7
  <meta charset="UTF-8">
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
- <title>Hooper Auto - Automotive Service & Repair</title>
10
- <link rel="preconnect" href="https://fonts.googleapis.com">
11
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
13
- <script src="https://cdn.tailwindcss.com"></script>
14
- <script src="https://unpkg.com/feather-icons"></script>
15
- <script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
16
- <script>
17
- tailwind.config = {
18
- theme: {
19
- extend: {
20
- colors: {
21
- automotive: {
22
- 50: '#f3f4f6', // light silver
23
- 100: '#e5e7eb',
24
- 200: '#d1d5db',
25
- 300: '#9ca3af',
26
- 400: '#6b7280', // steel gray
27
- 500: '#374151', // dark steel
28
- 600: '#1f2937', // near-black
29
- 700: '#111827', // black
30
- 800: '#18181b', // deep black
31
- 900: '#0f0f10',
32
- },
33
- accent: {
34
- red: '#e11d48', // automotive red
35
- yellow: '#fbbf24', // accent yellow
36
- }
37
- },
38
- fontFamily: {
39
- 'body': ['Inter', 'Arial', 'sans-serif'],
40
- }
41
- }
42
- }
43
- }
44
- </script>
45
  <style>
46
- .portfolio-grid {
47
- display: grid;
48
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
49
- gap: 1rem;
50
- padding: 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
 
53
- .portfolio-item {
54
- position: relative;
55
- overflow: hidden;
56
- border-radius: 1.5rem;
57
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3);
58
- transition: box-shadow 0.3s, transform 0.3s;
59
  }
60
 
61
- .portfolio-item:hover {
62
- box-shadow: 0 20px 40px -10px #4ade80cc;
63
- transform: scale(1.03);
64
  }
65
 
66
- .portfolio-item img {
67
- width: 100%;
68
- height: 300px;
69
- object-fit: cover;
70
- transition: transform 0.3s ease;
71
  }
72
 
73
- .portfolio-item:hover img {
74
- transform: scale(1.07);
75
  }
76
 
77
- .portfolio-overlay {
78
- position: absolute;
79
- bottom: 0;
80
- left: 0;
81
- right: 0;
82
- background: linear-gradient(transparent, rgba(21, 128, 61, 0.9));
83
- padding: 1rem;
84
- color: white;
85
- transform: translateY(100%);
86
- transition: transform 0.3s ease;
87
  }
88
 
89
- .portfolio-item:hover .portfolio-overlay {
90
- transform: translateY(0);
91
  }
92
 
93
- /* Fluid dynamic heading for hero */
94
- .dynamic-title {
95
- font-size: clamp(2.2rem, 5vw + 1rem, 4.5rem);
96
- font-weight: bold;
97
- line-height: 1.08;
98
- letter-spacing: -0.02em;
99
- text-shadow: 0 4px 24px #000a, 0 1px 0 #4ade80;
100
  }
101
 
102
- /* Swiper active/centered slide scaling */
103
- .swiper-slide .portfolio-slide {
104
- transform: scale(0.85);
105
- opacity: 0.7;
106
- transition: transform 0.35s cubic-bezier(.4, 2, .6, 1), opacity 0.35s;
107
  }
108
 
109
- .swiper-slide-active .portfolio-slide {
110
- transform: scale(1.08);
111
- opacity: 1;
112
- z-index: 2;
113
- box-shadow: 0 24px 60px -10px #4ade80cc, 0 2px 16px #000a;
114
  }
115
 
116
- .swiper-slide-next .portfolio-slide,
117
- .swiper-slide-prev .portfolio-slide {
118
- transform: scale(0.95);
119
- opacity: 0.85;
120
  }
121
  </style>
122
  </head>
123
 
124
- <body class="font-body bg-automotive-800 text-automotive-50 min-h-screen">
125
- <!-- Header -->
126
- <header
127
- class="bg-gradient-to-r from-automotive-700 via-automotive-600 to-automotive-900 shadow-xl border-b-4 border-accent-red sticky top-0 z-50">
128
- <div class="container mx-auto px-4 py-4 flex justify-between items-center">
129
- <div class="flex items-center gap-4">
130
- <svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
131
- <circle cx="19" cy="19" r="19" fill="#e11d48" />
132
- <rect x="8" y="16" width="22" height="6" rx="3" fill="#fbbf24" />
133
- <rect x="13" y="10" width="12" height="4" rx="2" fill="#f3f4f6" />
134
- <rect x="13" y="24" width="12" height="4" rx="2" fill="#f3f4f6" />
135
- </svg>
136
- <h1 class="text-3xl font-extrabold text-accent-red tracking-tight drop-shadow">Hooper Automotive LLC
137
- </h1>
138
- </div>
139
- <div class="flex gap-4">
140
- <a href="tel:+17154219792"
141
- class="bg-accent-red text-white px-6 py-3 rounded-lg font-bold hover:bg-accent-yellow hover:text-automotive-700 transition-colors flex items-center gap-2 shadow-lg">
142
- <i data-feather="phone"></i>
143
- Call
144
- </a>
145
- <a href="mailto:hooperautorepair70@gmail.com"
146
- class="border-2 border-accent-yellow text-accent-yellow px-6 py-3 rounded-lg font-bold hover:bg-accent-yellow hover:text-automotive-700 transition-colors flex items-center gap-2 shadow-lg">
147
- <i data-feather="mail"></i>
148
- Email
149
- </a>
150
- </div>
151
- </div>
152
- </header>
153
  <!-- Consistent Call/Text Contact Block -->
154
  <div class="w-full flex flex-col items-center mb-6">
155
- <a href="tel:+17154219792"
156
- class="text-2xl font-extrabold text-accent-yellow hover:text-accent-red transition-colors tracking-wide drop-shadow">Call
157
- Hooper Automotive: (715) 421-9792</a>
158
- <span class="text-automotive-200 text-sm mt-1">2020 4th Street South, Wisconsin Rapids, WI 54494 &bull; Wood
159
- County</span>
160
  </div>
161
- <!-- Hero Section -->
162
- <section
163
- class="bg-gradient-to-br from-automotive-900 via-automotive-700 to-automotive-600 py-16 relative overflow-hidden">
164
- <div class="container mx-auto px-4 text-center relative z-10">
165
- <h2 class="dynamic-title mb-6 text-accent-red drop-shadow-lg">Wisconsin Rapids' Most Advanced Auto Service
166
- </h2>
167
- <p
168
- class="text-xl md:text-2xl lg:text-3xl text-automotive-100 mb-8 tracking-wide drop-shadow-lg font-semibold">
169
- Professional, AI-powered automotive repair & maintenance for Central Wisconsin</p>
170
- <a href="quote-calculator.html"
171
- class="inline-block bg-accent-red text-white px-10 py-5 rounded-2xl font-extrabold text-xl md:text-2xl hover:bg-accent-yellow hover:text-automotive-700 transition-all duration-200 shadow-2xl mr-2 focus:outline-none focus:ring-2 focus:ring-accent-yellow focus:ring-offset-2 uppercase tracking-wider">
172
- Get Instant Quote
173
- </a>
174
- </div>
175
- <svg class="absolute right-0 top-0 w-1/2 h-full opacity-20 z-0" viewBox="0 0 400 400" fill="none">
176
- <ellipse cx="200" cy="200" rx="200" ry="200" fill="#e11d48" />
177
- <ellipse cx="200" cy="200" rx="120" ry="120" fill="#fbbf24" />
178
- <ellipse cx="200" cy="200" rx="60" ry="60" fill="#374151" />
179
- </svg>
180
- </section>
181
- <!-- Portfolio Grid (larger, more visual) -->
182
- <section class="py-12 md:py-20 bg-gradient-to-br from-automotive-900 via-automotive-700 to-automotive-600/90">
183
- <div class="container mx-auto px-2 md:px-4">
184
- <div class="swiper mySwiper max-w-4xl mx-auto">
185
- <div class="swiper-wrapper">
186
- <!-- Automotive Showroom Cards -->
187
- <div class="swiper-slide flex justify-center">
188
- <div
189
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-red transition-transform">
190
- <img src="https://images.unsplash.com/photo-1486262715619-67b85e0b08d3?w=700&h=420&fit=crop&crop=center"
191
- alt="Auto Service 1"
192
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
193
- loading="lazy" />
194
- </div>
195
- </div>
196
- <div class="swiper-slide flex justify-center">
197
- <div
198
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-yellow transition-transform">
199
- <img src="https://images.unsplash.com/photo-1632823469850-f4b0ce1f4262?w=700&h=420&fit=crop&crop=center"
200
- alt="Auto Service 2"
201
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
202
- loading="lazy" />
203
- </div>
204
  </div>
205
- <div class="swiper-slide flex justify-center">
206
- <div
207
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-red transition-transform">
208
- <img src="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?w=700&h=420&fit=crop&crop=center"
209
- alt="Auto Service 3"
210
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
211
- loading="lazy" />
212
- </div>
 
 
 
213
  </div>
214
- <div class="swiper-slide flex justify-center">
215
- <div
216
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-yellow transition-transform">
217
- <img src="https://images.unsplash.com/photo-1581291518633-83b4ebd1d83e?w=700&h=420&fit=crop&crop=center"
218
- alt="Auto Service 4"
219
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
220
- loading="lazy" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  </div>
222
- </div>
223
- <div class="swiper-slide flex justify-center">
224
- <div
225
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-red transition-transform">
226
- <img src="https://images.unsplash.com/photo-1625047509168-a7026f36de04?w=700&h=420&fit=crop&crop=center"
227
- alt="Auto Service 5"
228
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
229
- loading="lazy" />
 
 
 
 
 
 
230
  </div>
231
- </div>
232
- <div class="swiper-slide flex justify-center">
233
- <div
234
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-yellow transition-transform">
235
- <img src="https://images.unsplash.com/photo-1629810070755-751ac1db18b5?w=700&h=420&fit=crop&crop=center"
236
- alt="Auto Service 6"
237
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
238
- loading="lazy" />
 
 
 
 
 
 
 
 
239
  </div>
240
- </div>
241
- <div class="swiper-slide flex justify-center">
242
- <div
243
- class="portfolio-slide bg-automotive-600/90 rounded-3xl shadow-2xl p-6 flex flex-col items-center w-full max-w-[700px] border-4 border-accent-red transition-transform">
244
- <img src="https://images.unsplash.com/photo-1606577924081-3b002c5e4d99?w=700&h=420&fit=crop&crop=center"
245
- alt="Auto Service 7"
246
- class="rounded-2xl w-full h-[420px] object-cover mb-2 transition-transform duration-300"
247
- loading="lazy" />
248
  </div>
249
- </div>
 
 
 
 
 
250
  </div>
251
- <!-- Swiper Pagination and Navigation -->
252
- <div class="swiper-pagination"></div>
253
- <div class="swiper-button-next"></div>
254
- <div class="swiper-button-prev"></div>
255
- </div>
256
- </div>
257
- </section>
258
- <!-- Contact & Map Section (moved below images) -->
259
- <section class="py-10 text-center">
260
- <div
261
- class="max-w-xl mx-auto bg-automotive-700/90 rounded-2xl shadow-2xl p-6 mb-4 border-4 border-accent-yellow">
262
- <h3 class="text-2xl font-extrabold text-accent-yellow mb-2 tracking-wide">Contact & Location</h3>
263
- <div class="text-automotive-100 mb-2">
264
- <div><strong>Address:</strong> 2020 4th Street South, Wisconsin Rapids, WI, United States, 54494</div>
265
- <div><strong>County:</strong> Wood County, WI</div>
266
- <div><strong>Phone:</strong> <a href="tel:+17154219792" class="underline text-accent-red">+1
267
- 715-421-9792</a></div>
268
- <div><strong>Email:</strong> <a href="mailto:hooperautorepair70@gmail.com"
269
- class="underline text-accent-yellow">hooperautorepair70@gmail.com</a></div>
270
- </div>
271
- <div class="rounded-xl overflow-hidden border-2 border-accent-red shadow-lg mt-4">
272
- <iframe width="100%" height="250" style="border:0" loading="lazy" allowfullscreen
273
- src="https://www.openstreetmap.org/export/embed.html?bbox=-89.858,44.350,-89.758,44.450&amp;layer=mapnik&amp;marker=44.400,-89.808"></iframe>
274
- <div class="text-xs text-accent-yellow bg-automotive-800/90 p-1">Location: Wisconsin Rapids, WI, United
275
- States, 54494</div>
276
  </div>
 
 
 
 
 
 
 
 
 
 
 
277
  </div>
278
- </section>
279
- <!-- Swiper.js initialization for dynamic card carousel -->
 
 
 
 
280
  <script>
281
- document.addEventListener('DOMContentLoaded', function () {
282
- feather.replace();
283
- new Swiper('.mySwiper', {
284
- loop: true,
285
- autoplay: { delay: 4000, disableOnInteraction: false },
286
- effect: 'coverflow',
287
- grabCursor: true,
288
- centeredSlides: true,
289
- slidesPerView: 1,
290
- coverflowEffect: {
291
- rotate: 30,
292
- stretch: 0,
293
- depth: 100,
294
- modifier: 1,
295
- slideShadows: true,
296
- },
297
- pagination: { el: '.swiper-pagination', clickable: true },
298
- navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev' },
299
- breakpoints: {
300
- 768: { slidesPerView: 1 },
301
- 1024: { slidesPerView: 2 },
302
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
303
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  });
305
- </script>
306
- <!-- Call to Action -->
307
- <section class="bg-gradient-to-br from-automotive-700 via-automotive-900 to-automotive-600 py-16">
308
- <div class="container mx-auto px-4 text-center">
309
- <h2 class="text-4xl md:text-6xl font-extrabold mb-6 text-accent-red drop-shadow">Serving Central Wisconsin
310
- Drivers</h2>
311
- <p class="text-xl text-automotive-100 mb-8 font-semibold">From Stevens Point to Wausau and throughout
312
- Central WI</p>
313
- <div class="flex flex-col sm:flex-row gap-4 justify-center">
314
- <a href="quote-calculator.html"
315
- class="bg-accent-yellow text-automotive-700 px-10 py-5 rounded-lg font-extrabold text-xl hover:bg-accent-red hover:text-white transition-colors shadow-xl uppercase tracking-wider">Get
316
- Service Estimate</a>
317
- <a href="tel:+17154219792"
318
- class="border-2 border-accent-yellow text-accent-yellow px-10 py-5 rounded-lg font-extrabold text-xl hover:bg-accent-red hover:text-white transition-colors shadow-xl uppercase tracking-wider">Call
319
- Now: (715) 421-9792</a>
320
- </div>
321
- </div>
322
- </section>
323
- <script>
324
- document.addEventListener('DOMContentLoaded', () => {
325
- feather.replace();
326
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  </script>
328
  </body>
329
 
 
2
  <html lang="en">
3
 
4
  <head>
 
 
5
  <meta charset="UTF-8">
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Contractor Project Quote & Planning</title>
8
+ <link rel="stylesheet" href="../llama-universal-netlify-proxy/style.css">
9
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tailwindcss@3.3.3/dist/tailwind.min.css">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  <style>
11
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
12
+
13
+ body {
14
+ font-family: 'Inter', Arial, sans-serif;
15
+ background: #0a0f0a;
16
+ color: #d1fae5;
17
+ }
18
+
19
+ .main-card,
20
+ .mobile-section {
21
+ background: #101d10 !important;
22
+ border: 4px solid #10b981 !important;
23
+ border-radius: 1.25rem !important;
24
+ box-shadow: 0 4px 32px 0 #000a, 0 1.5px 6px 0 #10b981;
25
+ padding: 2rem !important;
26
+ }
27
+
28
+ .form-group .form-toggle {
29
+ background: #134e13 !important;
30
+ color: #6ee7b7 !important;
31
+ border-radius: 0.5rem !important;
32
+ }
33
+
34
+ .form-group .form-content {
35
+ background: #0f1a0f !important;
36
+ border-radius: 0.5rem !important;
37
+ }
38
+
39
+ .form-group.open .form-content {
40
+ background: #18181b !important;
41
+ }
42
+
43
+ .apt-btn,
44
+ .mobile-btn,
45
+ .form-content button[type=submit] {
46
+ background: #10b981 !important;
47
+ color: #0a0f0a !important;
48
+ font-weight: 700;
49
+ border-radius: 0.5rem !important;
50
+ padding: 0.9rem 1.2rem !important;
51
+ border: none;
52
+ cursor: pointer;
53
+ transition: background 0.2s;
54
+ font-size: 1.15rem;
55
+ box-shadow: 0 2px 8px #10b98144;
56
+ text-transform: uppercase;
57
+ letter-spacing: 0.04em;
58
+ }
59
+
60
+ .apt-btn:hover,
61
+ .mobile-btn:hover,
62
+ .form-content button[type=submit]:hover {
63
+ background: #047857 !important;
64
+ color: #d1fae5 !important;
65
+ }
66
+
67
+ .form-group input,
68
+ .form-group select,
69
+ .form-group textarea {
70
+ background: #1a2b1a !important;
71
+ color: #d1fae5 !important;
72
+ border: 1.5px solid #10b981 !important;
73
+ border-radius: 0.5rem !important;
74
+ font-size: 1.05rem;
75
  }
76
 
77
+ .form-group input::placeholder,
78
+ .form-group textarea::placeholder {
79
+ color: #6ee7b7 !important;
 
 
 
80
  }
81
 
82
+ .form-group label {
83
+ color: #6ee7b7 !important;
84
+ font-weight: 600;
85
  }
86
 
87
+ .form-group {
88
+ border-radius: 0.5rem !important;
 
 
 
89
  }
90
 
91
+ .form-content {
92
+ border-radius: 0.5rem !important;
93
  }
94
 
95
+ .form-group.open .form-content {
96
+ border-radius: 0.5rem !important;
 
 
 
 
 
 
 
 
97
  }
98
 
99
+ .text-accent-green {
100
+ color: #10b981 !important;
101
  }
102
 
103
+ .bg-accent-green {
104
+ background: #10b981 !important;
 
 
 
 
 
105
  }
106
 
107
+ .text-dark {
108
+ color: #0a0f0a !important;
 
 
 
109
  }
110
 
111
+ .bg-dark {
112
+ background: #0a0f0a !important;
 
 
 
113
  }
114
 
115
+ .shadow-xl {
116
+ box-shadow: 0 4px 32px 0 #000a, 0 1.5px 6px 0 #10b981 !important;
 
 
117
  }
118
  </style>
119
  </head>
120
 
121
+ <body class="font-body bg-automotive-700 text-automotive-50 min-h-screen flex items-center justify-center py-8">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  <!-- Consistent Call/Text Contact Block -->
123
  <div class="w-full flex flex-col items-center mb-6">
 
 
 
 
 
124
  </div>
125
+ <!-- APT Step-by-Step Automotive Problem Calculator -->
126
+ <main class="w-full flex flex-col items-center justify-center min-h-screen bg-gray-900 text-white py-8">
127
+ <section class="w-full max-w-lg mobile-section bg-automotive-600/90 p-6 rounded-xl shadow-lg">
128
+ <h1 class="text-2xl font-bold text-accent-green mb-4 mobile-title">Project Quote & Planning Tool</h1>
129
+ <div id="apt-flow">
130
+ <!-- Llama AI Chat Integration -->
131
+ <div id="llama-chat-container" class="mt-8">
132
+ <h2 class="text-xl font-bold text-accent-green mb-2">Llama AI Chat</h2>
133
+ <div id="llama-messages"></div>
134
+ <div id="llama-input-row">
135
+ <input id="llama-user-input" type="text" placeholder="Type your message..." />
136
+ <button id="llama-send-btn">Send</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  </div>
138
+ </div>
139
+ <!-- Step 1: Select Problem Category -->
140
+ <div id="step1" class="mb-4">
141
+ <label class="block text-accent-green font-semibold mb-2">What type of project do you need?</label>
142
+ <div class="grid grid-cols-2 gap-2">
143
+ <button class="apt-btn" data-category="Remodeling">Remodeling</button>
144
+ <button class="apt-btn" data-category="New Construction">New Construction</button>
145
+ <button class="apt-btn" data-category="Exterior">Exterior</button>
146
+ <button class="apt-btn" data-category="Interior">Interior</button>
147
+ <button class="apt-btn" data-category="Plumbing/Electrical">Plumbing/Electrical</button>
148
+ <button class="apt-btn" data-category="Other">Other</button>
149
  </div>
150
+ </div>
151
+ <!-- Step 2: Select Symptom -->
152
+ <div id="step2" class="mb-4 hidden">
153
+ <label class="block text-accent-green font-semibold mb-2">What best describes your project?</label>
154
+ <div id="symptom-options" class="grid grid-cols-1 gap-2"></div>
155
+ </div>
156
+ <!-- Step 3: Vehicle Info -->
157
+ <div id="step3" class="mb-4 hidden">
158
+ <label class="block text-accent-green font-semibold mb-1">Project Address / Site Info</label>
159
+ <input type="text" id="site-info"
160
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-automotive-400 text-automotive-50 mb-2"
161
+ placeholder="e.g. 123 Main St, City, State">
162
+ <label class="block text-accent-green font-semibold mb-1">Project Details</label>
163
+ <textarea id="project-details" rows="3"
164
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-automotive-400 text-automotive-50 mb-2"
165
+ placeholder="Describe your project, timeline, or special needs..."></textarea>
166
+ <button id="step3-next" class="apt-btn w-full mt-2">Next</button>
167
+ </div>
168
+ <!-- Step 4: Output Recommendation -->
169
+ <div id="step4" class="mb-4 hidden">
170
+ <form id="apt-form" action="https://formspree.io/f/mjkaolga" method="POST"
171
+ class="bg-green-900/80 p-6 rounded-xl shadow-lg space-y-2 mobile-form overflow-visible">
172
+ <h1 class="text-2xl font-bold text-accent-green mb-2 mobile-title">Request a Project Quote</h1>
173
+ <p class="text-accent-green mb-2">Get a fast, friendly quote! Tell us about your construction
174
+ project and how we can help you.</p>
175
+ <div class="form-group open">
176
+ <div class="form-toggle" onclick="toggleGroup(this)">Contact Info <span
177
+ class="arrow">▶</span></div>
178
+ <div class="form-content">
179
+ <label for="user-name" class="block text-accent-green font-semibold mb-1">Name <span
180
+ aria-hidden="true" class="text-accent-green">*</span></label>
181
+ <input type="text" id="user-name" name="name" required autocomplete="name"
182
+ aria-required="true"
183
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition mb-2"
184
+ placeholder="Your Name">
185
+ <label for="user-email" class="block text-accent-green font-semibold mb-1">Email <span
186
+ aria-hidden="true" class="text-accent-green">*</span></label>
187
+ <input type="email" id="user-email" name="email" required autocomplete="email"
188
+ aria-required="true"
189
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition mb-2"
190
+ placeholder="you@email.com">
191
+ <label for="user-phone" class="block text-accent-green font-semibold mb-1">Phone</label>
192
+ <input type="tel" id="user-phone" name="phone" autocomplete="tel"
193
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition"
194
+ placeholder="(optional)">
195
+ </div>
196
  </div>
197
+ <div class="form-group">
198
+ <div class="form-toggle" onclick="toggleGroup(this)">Service & Price <span
199
+ class="arrow">▶</span></div>
200
+ <div class="form-content">
201
+ <label for="form-service" class="block text-accent-green font-semibold mb-1">Service
202
+ Requested <span aria-hidden="true" class="text-accent-green">*</span></label>
203
+ <input type="text" id="form-service" name="service" required
204
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition mb-2"
205
+ placeholder="Service">
206
+ <label for="form-price" class="block text-accent-green font-semibold mb-1">Price</label>
207
+ <input type="text" id="form-price" name="price"
208
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition mb-2"
209
+ placeholder="Price">
210
+ </div>
211
  </div>
212
+ <div class="form-group">
213
+ <div class="form-toggle" onclick="toggleGroup(this)">Project Details <span
214
+ class="arrow">▶</span></div>
215
+ <div class="form-content">
216
+ <label for="form-site" class="block text-accent-green font-semibold mb-1">Project
217
+ Address /
218
+ Site Info</label>
219
+ <input type="text" id="form-site" name="site"
220
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition mb-2"
221
+ placeholder="e.g. 123 Main St, City, State">
222
+ <label for="form-details" class="block text-accent-green font-semibold mb-1">Project
223
+ Details</label>
224
+ <textarea id="form-details" name="details" rows="3"
225
+ class="w-full px-4 py-2 rounded-lg bg-white/10 border border-green-700 text-white placeholder-green-200 focus:ring-2 focus:ring-green-400 focus:border-transparent transition"
226
+ placeholder="Describe your project, timeline, or special needs..."></textarea>
227
+ </div>
228
  </div>
229
+ <div class="form-group open">
230
+ <div class="form-content">
231
+ <button type="submit"
232
+ class="w-full bg-accent-green hover:bg-dark text-dark font-bold py-3 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-accent-green focus:ring-offset-2 mobile-btn">Send
233
+ Request</button>
234
+ </div>
 
 
235
  </div>
236
+ <div id="apt-success" class="hidden text-green-200 text-center font-semibold mt-2">Request sent!
237
+ Dondlinger General Contracting LLC will contact you soon.<br>Email: <a
238
+ href="mailto:dondlingergeneralcontracting@gmail.com"
239
+ class="underline">dondlingergeneralcontracting@gmail.com</a><br>Phone:
240
+ (715) 459-3050 (texts are best!)</div>
241
+ </form>
242
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  </div>
244
+ </section>
245
+ </main>
246
+ <!-- Header / Contact -->
247
+ <header class="w-full flex flex-col items-center py-6 bg-dark text-accent-green">
248
+ <h1 class="text-3xl font-extrabold tracking-tight mb-2">Dondlinger General Contracting LLC</h1>
249
+ <div class="flex flex-col items-center gap-1">
250
+ <a href="tel:+17154593050" class="text-lg font-semibold hover:underline">(715) 459-3050 <span
251
+ class="text-xs">(texts are best!)</span></a>
252
+ <a href="mailto:dondlingergeneralcontracting@gmail.com"
253
+ class="text-sm hover:underline">dondlingergeneralcontracting@gmail.com</a>
254
+ <span class="text-xs text-green-300">Wisconsin Rapids, WI</span>
255
  </div>
256
+ </header>
257
+ <!-- End APT Calculator -->
258
+ <!--
259
+ Previous form code commented out for reference
260
+ ...existing code...
261
+ -->
262
  <script>
263
+ // --- Llama AI Chat Only ---
264
+ (function () {
265
+ const messagesDiv = document.getElementById('llama-messages');
266
+ const userInput = document.getElementById('llama-user-input');
267
+ const sendBtn = document.getElementById('llama-send-btn');
268
+ const API_URL = "https://llama-universal-netlify-project.netlify.app/.netlify/functions/llama-proxy?path=/chat/completions";
269
+ function appendMessage(text, sender) {
270
+ const div = document.createElement('div');
271
+ div.className = 'msg ' + sender;
272
+ // Support markdown and preserve line breaks for AI output
273
+ if (sender === 'ai') {
274
+ // If text is markdown, render as HTML (basic)
275
+ div.innerHTML = text.replace(/\n/g, '<br>');
276
+ } else {
277
+ div.textContent = (sender === 'user' ? 'You: ' : 'AI: ') + text;
278
+ }
279
+ messagesDiv.appendChild(div);
280
+ messagesDiv.scrollTop = messagesDiv.scrollHeight;
281
+ }
282
+ async function sendMessage() {
283
+ const text = userInput.value.trim();
284
+ if (!text) return;
285
+ appendMessage(text, 'user');
286
+ userInput.value = '';
287
+ sendBtn.disabled = true;
288
+ try {
289
+ const body = {
290
+ model: "Llama-3.3-8B-Instruct",
291
+ messages: [
292
+ { role: 'system', content: "You are a helpful, friendly representative for Dondlinger General Contracting LLC. Greet the customer, ask clarifying questions about their construction or remodeling project, and provide expert advice on contracting, planning, and building services." },
293
+ { role: 'user', content: text }
294
+ ]
295
+ };
296
+ const res = await fetch(API_URL, {
297
+ method: 'POST',
298
+ headers: { 'Content-Type': 'application/json' },
299
+ body: JSON.stringify(body)
300
+ });
301
+ let data, aiMsg;
302
+ try {
303
+ data = await res.json();
304
+ } catch (jsonErr) {
305
+ appendMessage('Non-JSON response: ' + await res.text(), 'ai');
306
+ return;
307
+ }
308
+ // Industry-standard: handle OpenAI and HF-style, fallback to completion_message.content.text
309
+ if (data.choices?.[0]?.message?.content) {
310
+ aiMsg = data.choices[0].message.content;
311
+ } else if (data.completion_message?.content?.text) {
312
+ aiMsg = data.completion_message.content.text;
313
+ } else if (data.completion_message?.content) {
314
+ aiMsg = data.completion_message.content;
315
+ } else if (data.error) {
316
+ aiMsg = 'API error: ' + (data.error.message || JSON.stringify(data.error));
317
+ } else {
318
+ aiMsg = 'Raw response: ' + JSON.stringify(data);
319
+ }
320
+ appendMessage(aiMsg, 'ai');
321
+ } catch (e) {
322
+ appendMessage('Error: ' + e.message, 'ai');
323
+ } finally {
324
+ sendBtn.disabled = false;
325
+ }
326
+ }
327
+ sendBtn.onclick = sendMessage;
328
+ userInput.addEventListener('keydown', e => {
329
+ if (e.key === 'Enter') sendMessage();
330
  });
331
+ })();
332
+ // --- APT Step-by-Step Calculator ---
333
+ // Variables: x1=projectType, x2=projectDetail, r1=service/price, x3=site info, y1=output
334
+ // Pipeline: y1 = f(r1(x1, x2), x3)
335
+
336
+ // Construction project types and details
337
+ const aptSymptoms = {
338
+ "Remodeling": [
339
+ { sym: "Kitchen Remodel", svc: "Kitchen Renovation", price: "$10,000-$50,000" },
340
+ { sym: "Bathroom Remodel", svc: "Bathroom Renovation", price: "$7,000-$25,000" },
341
+ { sym: "Basement Finish", svc: "Basement Finishing", price: "$15,000-$40,000" },
342
+ { sym: "Room Addition", svc: "Room Addition", price: "$20,000-$80,000" }
343
+ ],
344
+ "New Construction": [
345
+ { sym: "Custom Home", svc: "Home Construction", price: "$150,000-$500,000+" },
346
+ { sym: "Garage Build", svc: "Garage Construction", price: "$15,000-$40,000" },
347
+ { sym: "Deck/Porch", svc: "Deck/Porch Build", price: "$5,000-$25,000" }
348
+ ],
349
+ "Exterior": [
350
+ { sym: "Roof Replacement", svc: "Roofing", price: "$8,000-$25,000" },
351
+ { sym: "Siding", svc: "Siding Installation", price: "$7,000-$30,000" },
352
+ { sym: "Window/Door", svc: "Window/Door Install", price: "$3,000-$20,000" }
353
+ ],
354
+ "Interior": [
355
+ { sym: "Flooring", svc: "Flooring Install", price: "$3,000-$15,000" },
356
+ { sym: "Painting", svc: "Interior Painting", price: "$2,000-$10,000" },
357
+ { sym: "Drywall", svc: "Drywall Install/Repair", price: "$1,500-$8,000" }
358
+ ],
359
+ "Plumbing/Electrical": [
360
+ { sym: "Plumbing Upgrade", svc: "Plumbing Work", price: "$2,000-$15,000" },
361
+ { sym: "Electrical Upgrade", svc: "Electrical Work", price: "$2,000-$12,000" }
362
+ ],
363
+ "Other": [
364
+ { sym: "General Consultation", svc: "Consultation", price: "$100-$500" },
365
+ { sym: "Site Inspection", svc: "Site Inspection", price: "$150-$400" }
366
+ ]
367
+ };
368
+
369
+ // Step state
370
+ let selectedCategory = null;
371
+ let selectedSymptom = null;
372
+ let selectedService = null;
373
+ let selectedPrice = null;
374
+
375
+ // Step 1: Category
376
+ document.querySelectorAll('.apt-btn[data-category]').forEach(btn => {
377
+ btn.onclick = function () {
378
+ selectedCategory = btn.getAttribute('data-category');
379
+ // Show project details for this category
380
+ const opts = aptSymptoms[selectedCategory] || [];
381
+ const so = document.getElementById('symptom-options');
382
+ so.innerHTML = '';
383
+ opts.forEach((o, i) => {
384
+ const b = document.createElement('button');
385
+ b.className = 'apt-btn';
386
+ b.textContent = o.sym;
387
+ b.onclick = function () {
388
+ selectedSymptom = o.sym;
389
+ selectedService = o.svc;
390
+ selectedPrice = o.price;
391
+ document.getElementById('step2').classList.add('hidden');
392
+ document.getElementById('step3').classList.remove('hidden');
393
+ };
394
+ so.appendChild(b);
395
+ });
396
+ document.getElementById('step1').classList.add('hidden');
397
+ document.getElementById('step2').classList.remove('hidden');
398
+ };
399
  });
400
+
401
+ // Step 3: Vehicle info
402
+ document.getElementById('step3-next').onclick = function (e) {
403
+ e.preventDefault();
404
+ // Collect site/project info
405
+ const siteInfo = document.getElementById('site-info').value;
406
+ const projectDetails = document.getElementById('project-details').value;
407
+ if (!siteInfo) {
408
+ alert('Please enter project/site details.');
409
+ return;
410
+ }
411
+ document.getElementById('step3').classList.add('hidden');
412
+ // Output recommendation
413
+ // Autofill form fields for Formspree
414
+ document.getElementById('form-service').value = selectedService || '';
415
+ document.getElementById('form-price').value = selectedPrice || '';
416
+ document.getElementById('form-site').value = siteInfo;
417
+ document.getElementById('form-details').value = projectDetails;
418
+ document.getElementById('step4').classList.remove('hidden');
419
+ };
420
+
421
+ // Collapsible form groups (BuckRub style)
422
+ function toggleGroup(el) {
423
+ const group = el.parentElement;
424
+ group.classList.toggle('open');
425
+ }
426
+ // Show success message after submit
427
+ const aptForm = document.getElementById('apt-form');
428
+ if (aptForm) {
429
+ aptForm.addEventListener('submit', function (e) {
430
+ setTimeout(() => {
431
+ document.getElementById('apt-success').classList.remove('hidden');
432
+ }, 500);
433
+ });
434
+ }
435
+
436
+ // Style for APT buttons
437
+ const style = document.createElement('style');
438
+ style.textContent = `.apt-btn { background: #e11d48; color: #fff; font-weight: 600; border-radius: 0.5rem; padding: 0.7rem 1rem; border: none; cursor: pointer; transition: background 0.2s; font-size: 1.1rem; } .apt-btn:hover { background: #fbbf24; color: #1f2937; }`;
439
+ document.head.appendChild(style);
440
  </script>
441
  </body>
442