abeea commited on
Commit
0bc4655
·
verified ·
1 Parent(s): b7c1c8c

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +866 -252
index.html CHANGED
@@ -2,347 +2,961 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="UTF-8" />
5
- <title>Mini CodePen – Live Preview</title>
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
 
 
 
 
 
7
  <style>
8
  * {
9
- box-sizing: border-box;
10
  margin: 0;
11
  padding: 0;
12
- font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
14
 
15
  body {
16
- background: #0f172a;
17
- color: #e5e7eb;
18
  min-height: 100vh;
19
- display: flex;
20
- flex-direction: column;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
22
 
23
  header {
24
- padding: 12px 20px;
25
- border-bottom: 1px solid #1f2937;
26
  display: flex;
27
- align-items: center;
28
  justify-content: space-between;
29
- gap: 12px;
 
30
  }
31
 
32
- header h1 {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  font-size: 1.1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  font-weight: 600;
35
- color: #f9fafb;
36
  }
37
 
38
- header span {
39
- font-size: 0.8rem;
40
- color: #9ca3af;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
 
43
- .actions {
44
  display: flex;
45
- gap: 8px;
 
 
46
  }
47
 
48
- button {
49
- border: none;
50
- padding: 8px 14px;
51
  border-radius: 999px;
52
- font-size: 0.85rem;
 
 
53
  cursor: pointer;
54
- background: #22c55e;
55
- color: #022c22;
 
 
 
 
 
 
 
 
 
56
  font-weight: 600;
57
- transition: transform 0.1s ease, box-shadow 0.1s ease, background 0.15s ease;
58
  }
59
 
60
- button:hover {
61
  transform: translateY(-1px);
62
- box-shadow: 0 8px 20px rgba(34, 197, 94, 0.35);
63
  }
64
 
65
- button.secondary {
66
- background: #111827;
67
- color: #e5e7eb;
68
- border: 1px solid #374151;
69
- box-shadow: none;
 
70
  }
71
 
72
- button.secondary:hover {
73
- background: #020617;
 
 
74
  }
75
 
76
- main {
77
- flex: 1;
78
- display: grid;
79
- grid-template-columns: 1.1fr 1fr;
80
- min-height: 0;
81
  }
82
 
83
- @media (max-width: 900px) {
84
- main {
85
- grid-template-columns: 1fr;
86
- grid-template-rows: minmax(300px, 1fr) minmax(250px, 1fr);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
- .panes {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  display: grid;
92
- grid-template-rows: repeat(3, minmax(0, 1fr));
93
- border-right: 1px solid #1f2937;
94
- min-height: 0;
95
  }
96
 
97
- .editor {
98
  display: flex;
99
- flex-direction: column;
100
- border-bottom: 1px solid #1f2937;
101
- min-height: 0;
102
- background: #020617;
103
  }
104
 
105
- .editor-header {
106
  display: flex;
107
  align-items: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  justify-content: space-between;
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  padding: 6px 10px;
110
- font-size: 0.75rem;
111
- border-bottom: 1px solid #111827;
112
- background: linear-gradient(to right, #020617, #0f172a);
 
 
 
 
 
 
113
  }
114
 
115
- .editor-header span.label {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  text-transform: uppercase;
117
- letter-spacing: 0.08em;
118
- font-weight: 600;
 
 
119
  }
120
 
121
- .editor-header span.badge {
122
- font-size: 0.65rem;
123
- padding: 2px 8px;
124
- border-radius: 999px;
125
- background: #111827;
126
- border: 1px solid #1f2937;
127
- color: #9ca3af;
128
  }
129
 
130
- textarea {
131
- flex: 1;
132
- width: 100%;
133
- border: none;
134
- resize: none;
135
- padding: 10px 12px;
136
- font-family: "Fira Code", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  font-size: 0.8rem;
138
- line-height: 1.4;
139
- color: #e5e7eb;
140
- background: #020617;
141
- outline: none;
142
- overflow: auto;
143
  }
144
 
145
- textarea::placeholder {
146
- color: #4b5563;
 
 
 
147
  }
148
 
149
- .preview-pane {
150
  display: flex;
151
  flex-direction: column;
152
- min-height: 0;
153
- background: #020617;
154
  }
155
 
156
- .preview-header {
157
- padding: 6px 10px;
158
- font-size: 0.75rem;
159
- border-bottom: 1px solid #111827;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  display: flex;
161
- align-items: center;
162
  justify-content: space-between;
163
- background: linear-gradient(to right, #111827, #1f2937);
 
 
 
 
 
164
  }
165
 
166
- .preview-header span {
167
- text-transform: uppercase;
168
- letter-spacing: 0.08em;
169
- font-weight: 600;
170
  }
171
 
172
- iframe {
173
- flex: 1;
174
- border: none;
175
- background: white;
 
176
  }
177
 
178
- footer {
179
- font-size: 0.7rem;
180
- padding: 6px 12px;
181
- text-align: right;
182
- color: #6b7280;
183
- border-top: 1px solid #111827;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  }
185
  </style>
186
  </head>
187
  <body>
188
- <header>
189
- <div>
190
- <h1>Mini Code Preview</h1>
191
- <span>Paste HTML, CSS, JS and click “Run” to preview</span>
192
- </div>
193
- <div class="actions">
194
- <button id="run-btn">Run ▶</button>
195
- <button id="reset-btn" class="secondary">Reset</button>
196
- </div>
197
- </header>
198
-
199
- <main>
200
- <!-- Left: Editors -->
201
- <section class="panes">
202
- <div class="editor">
203
- <div class="editor-header">
204
- <span class="label">HTML</span>
205
- <span class="badge">Markup</span>
206
  </div>
207
- <textarea id="html-input" placeholder="&lt;h1&gt;Hello World&lt;/h1&gt;">
208
- <div class="card">
209
- <h1>Hello Mini CodePen 👋</h1>
210
- <p>Edit HTML, CSS, and JS, then press <strong>Run</strong>.</p>
211
- <button onclick="alert('JS is working!')">Click Me</button>
212
- </div>
213
- </textarea>
214
  </div>
215
-
216
- <div class="editor">
217
- <div class="editor-header">
218
- <span class="label">CSS</span>
219
- <span class="badge">Styles</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  </div>
221
- <textarea id="css-input" placeholder="body { font-family: sans-serif; }">
222
- body {
223
- display: flex;
224
- align-items: center;
225
- justify-content: center;
226
- min-height: 100vh;
227
- margin: 0;
228
- background: linear-gradient(135deg, #22c55e, #0ea5e9);
229
- font-family: system-ui, sans-serif;
230
- }
231
-
232
- .card {
233
- background: white;
234
- padding: 24px 28px;
235
- border-radius: 16px;
236
- box-shadow: 0 20px 50px rgba(15, 23, 42, 0.35);
237
- max-width: 360px;
238
- text-align: center;
239
- }
240
-
241
- .card h1 {
242
- margin-bottom: 10px;
243
- color: #111827;
244
- }
245
-
246
- .card p {
247
- margin-bottom: 16px;
248
- color: #4b5563;
249
- }
250
-
251
- .card button {
252
- border: none;
253
- background: #22c55e;
254
- color: #022c22;
255
- padding: 8px 18px;
256
- border-radius: 999px;
257
- font-weight: 600;
258
- cursor: pointer;
259
- }
260
- </textarea>
261
- </div>
262
 
263
- <div class="editor">
264
- <div class="editor-header">
265
- <span class="label">JavaScript</span>
266
- <span class="badge">Logic</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  </div>
268
- <textarea id="js-input" placeholder="console.log('Hello');">
269
- console.log("Mini CodePen ready!");
270
-
271
- </textarea>
272
- </div>
273
- </section>
274
 
275
- <!-- Right: Preview -->
276
- <section class="preview-pane">
277
- <div class="preview-header">
278
- <span>Preview</span>
279
- <small id="status-text">Idle</small>
280
- </div>
281
- <iframe id="preview-frame" title="Live Preview"></iframe>
282
- </section>
283
- </main>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
 
285
- <footer>
286
- Mini Code Preview Pure HTML + CSS + JavaScript
287
- </footer>
 
288
 
289
  <script>
290
- const htmlInput = document.getElementById("html-input");
291
- const cssInput = document.getElementById("css-input");
292
- const jsInput = document.getElementById("js-input");
293
- const previewFrame = document.getElementById("preview-frame");
294
- const runBtn = document.getElementById("run-btn");
295
- const resetBtn = document.getElementById("reset-btn");
296
- const statusText = document.getElementById("status-text");
297
-
298
- function runPreview() {
299
- const html = htmlInput.value || "";
300
- const css = cssInput.value || "";
301
- const js = jsInput.value || "";
302
-
303
- const finalCode = `
304
- <!DOCTYPE html>
305
- <html lang="en">
306
- <head>
307
- <meta charset="UTF-8">
308
- <style>
309
- ${css}
310
- </style>
311
- </head>
312
- <body>
313
- ${html}
314
- <script>
315
- ${js.replace(/<\/script>/gi, "<\\/script>")}
316
- </script>
317
- </body>
318
- </html>`;
319
-
320
- previewFrame.srcdoc = finalCode;
321
- statusText.textContent = "Last run: " + new Date().toLocaleTimeString();
322
- }
323
-
324
- function resetEditors() {
325
- htmlInput.value = "<h1>Hello World</h1>";
326
- cssInput.value = "body { font-family: system-ui, sans-serif; }";
327
- jsInput.value = "console.log('Reset!');";
328
- runPreview();
329
- }
330
-
331
- runBtn.addEventListener("click", runPreview);
332
- resetBtn.addEventListener("click", resetEditors);
333
-
334
- // Optional: auto-run on Ctrl+Enter in any editor
335
- [htmlInput, cssInput, jsInput].forEach((area) => {
336
- area.addEventListener("keydown", (e) => {
337
- if (e.ctrlKey && e.key === "Enter") {
338
- e.preventDefault();
339
- runPreview();
340
- }
341
- });
342
- });
343
-
344
- // Initial load
345
- runPreview();
346
  </script>
347
  </body>
348
  </html>
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="UTF-8" />
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>CrystalFlow Plumbing</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
8
+ <link
9
+ href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap"
10
+ rel="stylesheet"
11
+ />
12
  <style>
13
  * {
 
14
  margin: 0;
15
  padding: 0;
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ :root {
20
+ --primary: #34b3ff;
21
+ --primary-soft: rgba(52, 179, 255, 0.5);
22
+ --accent: #00e0ff;
23
+ --bg-dark: #020817;
24
+ --glass-bg: rgba(255, 255, 255, 0.09);
25
+ --text-main: #f9fbff;
26
+ --text-muted: #b4c3df;
27
+ --border-glass: rgba(255, 255, 255, 0.2);
28
+ --shadow-soft: 0 18px 40px rgba(0, 0, 0, 0.5);
29
  }
30
 
31
  body {
32
+ font-family: "Poppins", system-ui, -apple-system, BlinkMacSystemFont,
33
+ "Segoe UI", sans-serif;
34
  min-height: 100vh;
35
+ color: var(--text-main);
36
+ background: radial-gradient(circle at 0% 0%, #062244 0, #020817 40%, #000 100%);
37
+ overflow-x: hidden;
38
+ }
39
+
40
+ /* WATER BACKGROUND EFFECT */
41
+ .water-bg {
42
+ position: fixed;
43
+ inset: 0;
44
+ overflow: hidden;
45
+ z-index: -2;
46
+ }
47
+
48
+ .water-bg::before,
49
+ .water-bg::after {
50
+ content: "";
51
+ position: absolute;
52
+ width: 160%;
53
+ height: 160%;
54
+ top: -30%;
55
+ left: -30%;
56
+ background:
57
+ radial-gradient(circle at 10% 20%, rgba(0, 240, 255, 0.28) 0, transparent 55%),
58
+ radial-gradient(circle at 80% 10%, rgba(0, 90, 255, 0.4) 0, transparent 55%),
59
+ radial-gradient(circle at 0% 100%, rgba(0, 150, 255, 0.35) 0, transparent 50%);
60
+ opacity: 0.55;
61
+ filter: blur(4px);
62
+ animation: waterFlow 18s infinite alternate ease-in-out;
63
+ }
64
+
65
+ .water-bg::after {
66
+ animation-duration: 26s;
67
+ animation-direction: alternate-reverse;
68
+ mix-blend-mode: screen;
69
+ opacity: 0.45;
70
+ }
71
+
72
+ @keyframes waterFlow {
73
+ 0% {
74
+ transform: translate3d(0, 0, 0) scale(1.02);
75
+ }
76
+ 50% {
77
+ transform: translate3d(-40px, 20px, 0) scale(1.05);
78
+ }
79
+ 100% {
80
+ transform: translate3d(30px, -30px, 0) scale(1.03);
81
+ }
82
+ }
83
+
84
+ /* OVERLAY WAVES AT BOTTOM */
85
+ .wave {
86
+ position: fixed;
87
+ left: 0;
88
+ bottom: 0;
89
+ width: 200%;
90
+ height: 220px;
91
+ background: radial-gradient(circle at 50% -50%, transparent 60%, rgba(0, 112, 255, 0.8) 63%, #020817 72%);
92
+ opacity: 0.75;
93
+ transform: translateX(0);
94
+ animation: waveMove 14s linear infinite;
95
+ z-index: -1;
96
+ filter: blur(2px);
97
+ }
98
+
99
+ .wave:nth-child(2) {
100
+ bottom: -40px;
101
+ opacity: 0.4;
102
+ animation-duration: 20s;
103
+ animation-direction: reverse;
104
+ filter: blur(4px);
105
+ }
106
+
107
+ @keyframes waveMove {
108
+ 0% {
109
+ transform: translateX(0);
110
+ }
111
+ 100% {
112
+ transform: translateX(-50%);
113
+ }
114
+ }
115
+
116
+ /* PAGE LAYOUT */
117
+ .page {
118
+ max-width: 1140px;
119
+ margin: 0 auto;
120
+ padding: 24px 18px 72px;
121
  }
122
 
123
  header {
 
 
124
  display: flex;
 
125
  justify-content: space-between;
126
+ align-items: center;
127
+ margin-bottom: 32px;
128
  }
129
 
130
+ .logo {
131
+ display: flex;
132
+ align-items: center;
133
+ gap: 10px;
134
+ font-weight: 700;
135
+ letter-spacing: 0.04em;
136
+ text-transform: uppercase;
137
+ font-size: 0.95rem;
138
+ }
139
+
140
+ .logo-icon {
141
+ width: 34px;
142
+ height: 34px;
143
+ border-radius: 12px;
144
+ background: radial-gradient(circle at 30% 0, #e0faff 0, #00bfff 40%, #0055ff 90%);
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ box-shadow: 0 0 16px rgba(0, 191, 255, 0.8);
149
+ position: relative;
150
+ overflow: hidden;
151
+ }
152
+
153
+ .logo-icon span {
154
  font-size: 1.1rem;
155
+ font-weight: 800;
156
+ text-shadow: 0 0 10px rgba(0, 0, 0, 0.75);
157
+ }
158
+
159
+ nav {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 22px;
163
+ font-size: 0.9rem;
164
+ }
165
+
166
+ nav a {
167
+ text-decoration: none;
168
+ color: var(--text-muted);
169
+ position: relative;
170
+ transition: 0.2s ease;
171
+ }
172
+
173
+ nav a::after {
174
+ content: "";
175
+ position: absolute;
176
+ left: 0;
177
+ bottom: -5px;
178
+ width: 0;
179
+ height: 2px;
180
+ border-radius: 999px;
181
+ background: linear-gradient(90deg, var(--primary), var(--accent));
182
+ transition: width 0.2s ease-out;
183
+ }
184
+
185
+ nav a:hover {
186
+ color: var(--text-main);
187
+ }
188
+
189
+ nav a:hover::after {
190
+ width: 100%;
191
+ }
192
+
193
+ .nav-cta {
194
+ padding: 8px 18px;
195
+ border-radius: 999px;
196
+ border: 1px solid rgba(255, 255, 255, 0.3);
197
+ background: radial-gradient(circle at 0 0, rgba(255, 255, 255, 0.12), rgba(22, 46, 89, 0.72));
198
+ backdrop-filter: blur(14px);
199
+ -webkit-backdrop-filter: blur(14px);
200
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.45);
201
+ font-size: 0.78rem;
202
+ text-transform: uppercase;
203
+ letter-spacing: 0.12em;
204
+ cursor: pointer;
205
+ transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
206
+ color: var(--text-main);
207
+ }
208
+
209
+ .nav-cta:hover {
210
+ transform: translateY(-1px);
211
+ border-color: var(--accent);
212
+ box-shadow: 0 10px 26px rgba(0, 0, 0, 0.6);
213
+ }
214
+
215
+ /* HERO */
216
+ .hero {
217
+ display: grid;
218
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
219
+ gap: 32px;
220
+ align-items: center;
221
+ }
222
+
223
+ .hero-left {
224
+ position: relative;
225
+ }
226
+
227
+ .hero-badge {
228
+ display: inline-flex;
229
+ align-items: center;
230
+ gap: 8px;
231
+ padding: 6px 12px;
232
+ border-radius: 999px;
233
+ background: rgba(0, 0, 0, 0.4);
234
+ border: 1px solid rgba(255, 255, 255, 0.16);
235
+ backdrop-filter: blur(16px);
236
+ -webkit-backdrop-filter: blur(16px);
237
+ font-size: 0.78rem;
238
+ margin-bottom: 14px;
239
+ }
240
+
241
+ .dot-online {
242
+ width: 8px;
243
+ height: 8px;
244
+ border-radius: 50%;
245
+ background: radial-gradient(circle, #00ff95 0, #00b86e 60%, transparent 100%);
246
+ box-shadow: 0 0 8px rgba(0, 255, 149, 0.8);
247
+ }
248
+
249
+ .hero-badge strong {
250
+ color: var(--accent);
251
  font-weight: 600;
 
252
  }
253
 
254
+ h1 {
255
+ font-size: clamp(2.3rem, 4vw, 3rem);
256
+ line-height: 1.12;
257
+ margin-bottom: 10px;
258
+ }
259
+
260
+ h1 span {
261
+ background: linear-gradient(110deg, #e1f5ff, #00e0ff, #39a4ff);
262
+ -webkit-background-clip: text;
263
+ background-clip: text;
264
+ color: transparent;
265
+ }
266
+
267
+ .hero-subtitle {
268
+ font-size: 0.97rem;
269
+ color: var(--text-muted);
270
+ max-width: 460px;
271
+ margin-bottom: 20px;
272
  }
273
 
274
+ .hero-cta-row {
275
  display: flex;
276
+ flex-wrap: wrap;
277
+ gap: 12px;
278
+ margin-bottom: 16px;
279
  }
280
 
281
+ .btn-primary,
282
+ .btn-ghost {
 
283
  border-radius: 999px;
284
+ padding: 12px 22px;
285
+ font-size: 0.92rem;
286
+ border: 1px solid transparent;
287
  cursor: pointer;
288
+ display: inline-flex;
289
+ align-items: center;
290
+ gap: 8px;
291
+ text-decoration: none;
292
+ transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.2s;
293
+ }
294
+
295
+ .btn-primary {
296
+ background: radial-gradient(circle at 0 0, #ffffff 0, #c6f2ff 18%, #009dff 60%, #0040ff 100%);
297
+ color: #031018;
298
+ box-shadow: 0 14px 30px rgba(0, 166, 255, 0.75);
299
  font-weight: 600;
 
300
  }
301
 
302
+ .btn-primary:hover {
303
  transform: translateY(-1px);
304
+ box-shadow: 0 17px 38px rgba(0, 166, 255, 0.9);
305
  }
306
 
307
+ .btn-ghost {
308
+ background: rgba(4, 16, 36, 0.85);
309
+ border-color: rgba(255, 255, 255, 0.2);
310
+ color: var(--text-main);
311
+ backdrop-filter: blur(10px);
312
+ -webkit-backdrop-filter: blur(10px);
313
  }
314
 
315
+ .btn-ghost:hover {
316
+ border-color: var(--primary-soft);
317
+ background: rgba(6, 32, 70, 0.85);
318
+ transform: translateY(-1px);
319
  }
320
 
321
+ .hero-note {
322
+ font-size: 0.8rem;
323
+ color: var(--text-muted);
 
 
324
  }
325
 
326
+ .hero-note strong {
327
+ color: var(--accent);
328
+ }
329
+
330
+ /* HERO RIGHT - GLASS CARD */
331
+ .hero-right {
332
+ position: relative;
333
+ display: flex;
334
+ justify-content: flex-end;
335
+ }
336
+
337
+ .glass-card {
338
+ position: relative;
339
+ width: 100%;
340
+ max-width: 360px;
341
+ padding: 20px 18px 18px;
342
+ border-radius: 22px;
343
+ background: radial-gradient(circle at 0 0, rgba(255, 255, 255, 0.18), rgba(6, 24, 46, 0.96));
344
+ border: 1px solid var(--border-glass);
345
+ box-shadow: var(--shadow-soft);
346
+ backdrop-filter: blur(20px);
347
+ -webkit-backdrop-filter: blur(20px);
348
+ overflow: hidden;
349
+ }
350
+
351
+ .glass-card::before {
352
+ content: "";
353
+ position: absolute;
354
+ inset: -40%;
355
+ background:
356
+ conic-gradient(from 120deg, rgba(0, 217, 255, 0.1), transparent 40%, rgba(255, 255, 255, 0.12), transparent 60%, rgba(0, 140, 255, 0.26), transparent 80%, rgba(0, 217, 255, 0.1));
357
+ opacity: 0.85;
358
+ mix-blend-mode: screen;
359
+ filter: blur(6px);
360
+ animation: glassShine 14s infinite linear;
361
+ pointer-events: none;
362
+ }
363
+
364
+ @keyframes glassShine {
365
+ 0% {
366
+ transform: translate3d(-10%, 0, 0) rotate(0deg);
367
  }
368
+ 100% {
369
+ transform: translate3d(10%, 0, 0) rotate(360deg);
370
+ }
371
+ }
372
+
373
+ .glass-inner {
374
+ position: relative;
375
+ z-index: 1;
376
+ }
377
+
378
+ .card-header {
379
+ display: flex;
380
+ justify-content: space-between;
381
+ align-items: center;
382
+ margin-bottom: 12px;
383
+ }
384
+
385
+ .badge-emergency {
386
+ font-size: 0.7rem;
387
+ text-transform: uppercase;
388
+ letter-spacing: 0.12em;
389
+ padding: 4px 10px;
390
+ border-radius: 999px;
391
+ background: rgba(255, 44, 93, 0.25);
392
+ border: 1px solid rgba(255, 122, 154, 0.6);
393
+ color: #ffe7ed;
394
+ }
395
+
396
+ .rating {
397
+ font-size: 0.8rem;
398
+ color: #fffbcc;
399
+ }
400
+
401
+ .rating span {
402
+ font-size: 1rem;
403
+ }
404
+
405
+ .pipe-graphic {
406
+ margin: 8px 0 14px;
407
+ height: 82px;
408
+ border-radius: 18px;
409
+ background:
410
+ radial-gradient(circle at 12% 0, rgba(255, 255, 255, 0.5) 0, transparent 45%),
411
+ linear-gradient(135deg, rgba(0, 0, 0, 0.34), rgba(0, 29, 65, 0.95)),
412
+ repeating-linear-gradient(120deg, rgba(0, 180, 255, 0.2) 0, rgba(0, 180, 255, 0.2) 8px, transparent 8px, transparent 14px);
413
+ border: 1px solid rgba(255, 255, 255, 0.18);
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ position: relative;
418
+ overflow: hidden;
419
+ }
420
+
421
+ .pipe-line {
422
+ position: absolute;
423
+ height: 10px;
424
+ width: 110%;
425
+ border-radius: 999px;
426
+ background:
427
+ linear-gradient(90deg, rgba(0, 18, 40, 0.9), rgba(0, 187, 255, 0.9), rgba(0, 18, 40, 0.9));
428
+ box-shadow: 0 0 16px rgba(0, 224, 255, 0.9);
429
+ animation: flow 4.5s infinite linear;
430
  }
431
 
432
+ @keyframes flow {
433
+ 0% {
434
+ transform: translateX(-10%);
435
+ }
436
+ 100% {
437
+ transform: translateX(10%);
438
+ }
439
+ }
440
+
441
+ .pipe-droplet {
442
+ position: absolute;
443
+ right: 16px;
444
+ bottom: 10px;
445
+ width: 28px;
446
+ height: 28px;
447
+ border-radius: 50% 50% 60% 60%;
448
+ background: radial-gradient(circle at 30% 0, #ffffff, #8be8ff 30%, #009dff 70%);
449
+ box-shadow: 0 0 18px rgba(0, 209, 255, 0.9);
450
+ animation: drop 2.4s infinite ease-in-out;
451
+ }
452
+
453
+ @keyframes drop {
454
+ 0% {
455
+ transform: translateY(-4px) scale(1);
456
+ }
457
+ 50% {
458
+ transform: translateY(2px) scale(1.03);
459
+ }
460
+ 100% {
461
+ transform: translateY(-4px) scale(1);
462
+ }
463
+ }
464
+
465
+ .card-list {
466
  display: grid;
467
+ gap: 8px;
468
+ font-size: 0.82rem;
469
+ margin-bottom: 12px;
470
  }
471
 
472
+ .card-list-row {
473
  display: flex;
474
+ justify-content: space-between;
475
+ align-items: center;
476
+ color: var(--text-muted);
 
477
  }
478
 
479
+ .card-list-row span:first-child {
480
  display: flex;
481
  align-items: center;
482
+ gap: 6px;
483
+ }
484
+
485
+ .bullet {
486
+ width: 6px;
487
+ height: 6px;
488
+ border-radius: 50%;
489
+ background: var(--accent);
490
+ box-shadow: 0 0 8px rgba(0, 204, 255, 0.8);
491
+ }
492
+
493
+ .card-footer {
494
+ display: flex;
495
  justify-content: space-between;
496
+ align-items: center;
497
+ font-size: 0.78rem;
498
+ color: var(--text-muted);
499
+ }
500
+
501
+ .card-footer strong {
502
+ color: var(--text-main);
503
+ }
504
+
505
+ .card-phone {
506
+ display: inline-flex;
507
+ align-items: center;
508
+ gap: 6px;
509
  padding: 6px 10px;
510
+ border-radius: 999px;
511
+ background: rgba(0, 0, 0, 0.4);
512
+ border: 1px solid rgba(255, 255, 255, 0.28);
513
+ cursor: pointer;
514
+ transition: 0.15s ease;
515
+ }
516
+
517
+ .card-phone:hover {
518
+ background: rgba(0, 0, 0, 0.7);
519
  }
520
 
521
+ /* SERVICES + CONTACT SECTION */
522
+ .bottom {
523
+ margin-top: 44px;
524
+ display: grid;
525
+ grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
526
+ gap: 26px;
527
+ }
528
+
529
+ .section-title {
530
+ font-size: 1rem;
531
+ margin-bottom: 10px;
532
+ }
533
+
534
+ .section-title span {
535
+ font-size: 0.78rem;
536
  text-transform: uppercase;
537
+ letter-spacing: 0.18em;
538
+ color: var(--text-muted);
539
+ display: block;
540
+ margin-bottom: 4px;
541
  }
542
 
543
+ .services-grid {
544
+ display: grid;
545
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
546
+ gap: 12px;
 
 
 
547
  }
548
 
549
+ .service-card {
550
+ padding: 12px 12px 11px;
551
+ border-radius: 18px;
552
+ background: linear-gradient(
553
+ 135deg,
554
+ rgba(10, 26, 60, 0.9),
555
+ rgba(5, 13, 30, 0.96)
556
+ );
557
+ border: 1px solid rgba(255, 255, 255, 0.12);
558
+ backdrop-filter: blur(12px);
559
+ -webkit-backdrop-filter: blur(12px);
560
+ box-shadow: 0 10px 22px rgba(0, 0, 0, 0.5);
561
+ font-size: 0.86rem;
562
+ display: flex;
563
+ flex-direction: column;
564
+ gap: 4px;
565
+ }
566
+
567
+ .service-icon {
568
+ width: 26px;
569
+ height: 26px;
570
+ border-radius: 10px;
571
+ display: inline-flex;
572
+ align-items: center;
573
+ justify-content: center;
574
+ margin-bottom: 4px;
575
+ font-size: 1rem;
576
+ background: radial-gradient(circle at 0 0, rgba(255, 255, 255, 0.5) 0, rgba(0, 176, 255, 0.9) 40%, #0036b8 100%);
577
+ box-shadow: 0 0 10px rgba(0, 198, 255, 0.75);
578
+ }
579
+
580
+ .service-title {
581
+ font-weight: 500;
582
+ }
583
+
584
+ .service-text {
585
+ font-size: 0.76rem;
586
+ color: var(--text-muted);
587
+ }
588
+
589
+ .badge-guarantee {
590
+ margin-top: 10px;
591
+ font-size: 0.76rem;
592
+ color: var(--text-muted);
593
+ display: inline-flex;
594
+ align-items: center;
595
+ gap: 6px;
596
+ }
597
+
598
+ .badge-guarantee span {
599
+ font-size: 1rem;
600
+ }
601
+
602
+ /* CONTACT FORM */
603
+ .contact-card {
604
+ padding: 18px 16px;
605
+ border-radius: 20px;
606
+ background: radial-gradient(circle at 100% 0, rgba(255, 255, 255, 0.28), rgba(3, 17, 38, 0.96));
607
+ border: 1px solid rgba(255, 255, 255, 0.2);
608
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.6);
609
+ backdrop-filter: blur(18px);
610
+ -webkit-backdrop-filter: blur(18px);
611
+ }
612
+
613
+ .contact-card p {
614
  font-size: 0.8rem;
615
+ color: var(--text-muted);
616
+ margin-bottom: 12px;
 
 
 
617
  }
618
 
619
+ .form-row {
620
+ display: grid;
621
+ grid-template-columns: repeat(2, minmax(0, 1fr));
622
+ gap: 10px;
623
+ margin-bottom: 10px;
624
  }
625
 
626
+ .form-field {
627
  display: flex;
628
  flex-direction: column;
629
+ gap: 4px;
630
+ font-size: 0.8rem;
631
  }
632
 
633
+ .form-field label {
634
+ color: var(--text-muted);
635
+ }
636
+
637
+ .form-field input,
638
+ .form-field select,
639
+ .form-field textarea {
640
+ padding: 8px 10px;
641
+ border-radius: 10px;
642
+ border: 1px solid rgba(255, 255, 255, 0.3);
643
+ background: rgba(3, 10, 24, 0.9);
644
+ color: var(--text-main);
645
+ font-family: inherit;
646
+ font-size: 0.82rem;
647
+ outline: none;
648
+ transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
649
+ }
650
+
651
+ .form-field textarea {
652
+ resize: vertical;
653
+ min-height: 70px;
654
+ }
655
+
656
+ .form-field input::placeholder,
657
+ .form-field textarea::placeholder {
658
+ color: rgba(180, 195, 223, 0.7);
659
+ }
660
+
661
+ .form-field input:focus,
662
+ .form-field select:focus,
663
+ .form-field textarea:focus {
664
+ border-color: var(--accent);
665
+ box-shadow: 0 0 0 1px rgba(0, 219, 255, 0.8);
666
+ background: rgba(3, 18, 40, 0.98);
667
+ }
668
+
669
+ .contact-footer {
670
  display: flex;
 
671
  justify-content: space-between;
672
+ align-items: center;
673
+ margin-top: 12px;
674
+ font-size: 0.78rem;
675
+ color: var(--text-muted);
676
+ flex-wrap: wrap;
677
+ gap: 8px;
678
  }
679
 
680
+ .contact-footer small strong {
681
+ color: var(--accent);
 
 
682
  }
683
 
684
+ footer {
685
+ margin-top: 30px;
686
+ font-size: 0.75rem;
687
+ color: var(--text-muted);
688
+ text-align: center;
689
  }
690
 
691
+ /* RESPONSIVE */
692
+ @media (max-width: 880px) {
693
+ header {
694
+ gap: 12px;
695
+ }
696
+
697
+ nav {
698
+ display: none; /* keep it simple for small screens */
699
+ }
700
+
701
+ .hero {
702
+ grid-template-columns: minmax(0, 1fr);
703
+ }
704
+
705
+ .hero-right {
706
+ order: -1;
707
+ justify-content: flex-start;
708
+ }
709
+
710
+ .glass-card {
711
+ max-width: 100%;
712
+ }
713
+
714
+ .bottom {
715
+ grid-template-columns: minmax(0, 1fr);
716
+ }
717
+ }
718
+
719
+ @media (max-width: 520px) {
720
+ .page {
721
+ padding-inline: 14px;
722
+ }
723
+
724
+ .hero-cta-row {
725
+ flex-direction: column;
726
+ align-items: stretch;
727
+ }
728
+
729
+ .btn-primary,
730
+ .btn-ghost {
731
+ justify-content: center;
732
+ width: 100%;
733
+ }
734
+
735
+ .form-row {
736
+ grid-template-columns: minmax(0, 1fr);
737
+ }
738
  }
739
  </style>
740
  </head>
741
  <body>
742
+ <!-- Animated water/gradient background -->
743
+ <div class="water-bg"></div>
744
+ <div class="wave"></div>
745
+ <div class="wave"></div>
746
+
747
+ <div class="page">
748
+ <header>
749
+ <div class="logo">
750
+ <div class="logo-icon">
751
+ <span>💧</span>
 
 
 
 
 
 
 
 
752
  </div>
753
+ CrystalFlow Plumbing
 
 
 
 
 
 
754
  </div>
755
+ <nav>
756
+ <a href="#services">Services</a>
757
+ <a href="#contact">Schedule</a>
758
+ <a href="#guarantee">Guarantee</a>
759
+ <button class="nav-cta">Call Now: (000) 123-4567</button>
760
+ </nav>
761
+ </header>
762
+
763
+ <main>
764
+ <section class="hero">
765
+ <!-- RIGHT: Glass card on top for mobile, but visually on right for desktop -->
766
+ <div class="hero-right">
767
+ <div class="glass-card">
768
+ <div class="glass-inner">
769
+ <div class="card-header">
770
+ <span class="badge-emergency">24/7 Emergency</span>
771
+ <div class="rating">
772
+ <span>⭐</span> 4.9 • 1,200+ jobs
773
+ </div>
774
+ </div>
775
+
776
+ <div class="pipe-graphic">
777
+ <div class="pipe-line"></div>
778
+ <div class="pipe-droplet"></div>
779
+ </div>
780
+
781
+ <div class="card-list">
782
+ <div class="card-list-row">
783
+ <span><span class="bullet"></span> Arrival</span>
784
+ <span><strong>&lt; 45 min</strong></span>
785
+ </div>
786
+ <div class="card-list-row">
787
+ <span><span class="bullet"></span> Coverage</span>
788
+ <span>Citywide & suburbs</span>
789
+ </div>
790
+ <div class="card-list-row">
791
+ <span><span class="bullet"></span> Guarantee</span>
792
+ <span>Leak-free for 12 months</span>
793
+ </div>
794
+ </div>
795
+
796
+ <div class="card-footer">
797
+ <div>
798
+ From <strong>$49</strong><br />
799
+ <span>Transparent, flat-rate pricing</span>
800
+ </div>
801
+ <div class="card-phone">
802
+ 📞 <strong>(000) 123-4567</strong>
803
+ </div>
804
+ </div>
805
+ </div>
806
+ </div>
807
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
808
 
809
+ <!-- LEFT: Text content -->
810
+ <div class="hero-left">
811
+ <div class="hero-badge">
812
+ <span class="dot-online"></span>
813
+ <span>Local, licensed & insured • <strong>Free leak check</strong></span>
814
+ </div>
815
+
816
+ <h1>
817
+ Crystal-clear pipes,<br />
818
+ <span>stress-free plumbing.</span>
819
+ </h1>
820
+
821
+ <p class="hero-subtitle">
822
+ From burst pipes to dripping taps, our expert plumbers keep your home flowing.
823
+ Same-day service, water-tight fixes, and a 12-month workmanship guarantee.
824
+ </p>
825
+
826
+ <div class="hero-cta-row">
827
+ <a href="#contact" class="btn-primary">
828
+ Book a plumber now →
829
+ </a>
830
+ <a href="#services" class="btn-ghost">
831
+ View services
832
+ </a>
833
+ </div>
834
+
835
+ <p class="hero-note">
836
+ <strong>Emergency?</strong> We aim to be at your door in under 45 minutes, day or night.
837
+ </p>
838
+ </div>
839
+ </section>
840
+
841
+ <section class="bottom">
842
+ <!-- Services -->
843
+ <div id="services">
844
+ <h2 class="section-title">
845
+ <span>What we fix</span>
846
+ Full-service plumbing for home & business
847
+ </h2>
848
+
849
+ <div class="services-grid">
850
+ <div class="service-card">
851
+ <div class="service-icon">🚿</div>
852
+ <div class="service-title">Leaks & burst pipes</div>
853
+ <div class="service-text">
854
+ Rapid leak detection, pipe repair, and water-damage prevention.
855
+ </div>
856
+ </div>
857
+
858
+ <div class="service-card">
859
+ <div class="service-icon">🚽</div>
860
+ <div class="service-title">Drain & toilet clogs</div>
861
+ <div class="service-text">
862
+ High-pressure jetting to clear tough blockages safely.
863
+ </div>
864
+ </div>
865
+
866
+ <div class="service-card">
867
+ <div class="service-icon">🔥</div>
868
+ <div class="service-title">Water heaters</div>
869
+ <div class="service-text">
870
+ Repair, replacement, and full system installation.
871
+ </div>
872
+ </div>
873
+
874
+ <div class="service-card">
875
+ <div class="service-icon">🏠</div>
876
+ <div class="service-title">Kitchen & bathroom</div>
877
+ <div class="service-text">
878
+ Tap, sink, and fixture installs with a clean, tidy finish.
879
+ </div>
880
+ </div>
881
+ </div>
882
+
883
+ <div class="badge-guarantee" id="guarantee">
884
+ <span>🛡️</span>
885
+ 12-month labour guarantee • Fully insured • Upfront quotes only
886
+ </div>
887
  </div>
 
 
 
 
 
 
888
 
889
+ <!-- Contact / Booking -->
890
+ <div id="contact" class="contact-card">
891
+ <h2 class="section-title">
892
+ <span>Book now</span>
893
+ Describe your plumbing issue
894
+ </h2>
895
+ <p>
896
+ Send us a quick request and our team will call you back with an exact quote
897
+ and arrival time.
898
+ </p>
899
+
900
+ <form>
901
+ <div class="form-row">
902
+ <div class="form-field">
903
+ <label for="name">Name</label>
904
+ <input id="name" type="text" placeholder="Your full name" required />
905
+ </div>
906
+ <div class="form-field">
907
+ <label for="phone">Phone</label>
908
+ <input id="phone" type="tel" placeholder="Best contact number" required />
909
+ </div>
910
+ </div>
911
+
912
+ <div class="form-row">
913
+ <div class="form-field">
914
+ <label for="location">Area</label>
915
+ <input id="location" type="text" placeholder="Neighborhood / city" />
916
+ </div>
917
+ <div class="form-field">
918
+ <label for="service">Service type</label>
919
+ <select id="service">
920
+ <option value="">Select an option</option>
921
+ <option>Emergency leak</option>
922
+ <option>Clogged drain / toilet</option>
923
+ <option>Water heater issue</option>
924
+ <option>Kitchen / bathroom install</option>
925
+ <option>Other plumbing</option>
926
+ </select>
927
+ </div>
928
+ </div>
929
+
930
+ <div class="form-field">
931
+ <label for="details">Issue details</label>
932
+ <textarea
933
+ id="details"
934
+ placeholder="Example: water leaking under kitchen sink for 2 days, stops when tap is closed…"
935
+ ></textarea>
936
+ </div>
937
+
938
+ <div class="contact-footer">
939
+ <small>
940
+ Average response time: <strong>10–15 minutes</strong><br />
941
+ No call-out fee if you approve the quote.
942
+ </small>
943
+ <button type="submit" class="btn-primary">
944
+ Request a callback
945
+ </button>
946
+ </div>
947
+ </form>
948
+ </div>
949
+ </section>
950
+ </main>
951
 
952
+ <footer>
953
+ © <span id="year"></span> CrystalFlow Plumbing. All rights reserved.
954
+ </footer>
955
+ </div>
956
 
957
  <script>
958
+ // Set current year in footer
959
+ document.getElementById("year").textContent = new Date().getFullYear();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
960
  </script>
961
  </body>
962
  </html>