Ryugen22 commited on
Commit
f3cd459
·
verified ·
1 Parent(s): 98cd1cc

Upload 6 files

Browse files
templates/admin_dashboard.html ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — Admin Dashboard</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root { --orange: #F26419; --peach: #F9A87E; --cream: #FFF3EC; --deep: #3D1A00; --mid: #7A3B10; --light-orange: #FDDCC4; }
11
+ body { font-family: 'DM Sans', sans-serif; background: var(--cream); min-height: 100vh; padding-bottom: 60px; }
12
+
13
+ header {
14
+ background: #fff; border-bottom: 1.5px solid var(--light-orange);
15
+ padding: 18px 32px; display: flex; align-items: center; justify-content: space-between;
16
+ position: sticky; top: 0; z-index: 10;
17
+ box-shadow: 0 2px 16px rgba(242,100,25,0.07);
18
+ }
19
+ .logo { display: flex; align-items: center; gap: 12px; }
20
+ .logo-mark {
21
+ width: 38px; height: 38px; background: var(--orange); border-radius: 10px;
22
+ display: flex; align-items: center; justify-content: center;
23
+ color: #fff; font-family: 'Playfair Display', serif; font-size: 18px; font-weight: 700;
24
+ }
25
+ .logo-text { font-family: 'Playfair Display', serif; font-size: 18px; font-weight: 700; color: var(--deep); }
26
+ .logo-text span { color: var(--orange); }
27
+ .admin-badge {
28
+ background: var(--light-orange); color: var(--orange);
29
+ font-size: 11px; font-weight: 600; letter-spacing: 1.5px;
30
+ text-transform: uppercase; padding: 4px 12px; border-radius: 100px;
31
+ border: 1px solid var(--peach);
32
+ }
33
+ .logout {
34
+ background: none; border: 1.5px solid var(--light-orange); color: var(--mid);
35
+ padding: 8px 16px; border-radius: 10px; font-family: 'DM Sans', sans-serif;
36
+ font-size: 13px; cursor: pointer; text-decoration: none;
37
+ transition: border-color 0.2s, color 0.2s;
38
+ }
39
+ .logout:hover { border-color: var(--orange); color: var(--orange); }
40
+
41
+ .container { max-width: 900px; margin: 0 auto; padding: 32px 20px; }
42
+
43
+ .stats {
44
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
45
+ gap: 16px; margin-bottom: 32px;
46
+ }
47
+ .stat-card {
48
+ background: #fff; border: 1.5px solid var(--light-orange); border-radius: 16px;
49
+ padding: 20px 22px; animation: fadeUp 0.4s ease both;
50
+ }
51
+ .stat-label { font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--mid); margin-bottom: 8px; font-weight: 500; }
52
+ .stat-value { font-family: 'Playfair Display', serif; font-size: 32px; color: var(--orange); font-weight: 700; }
53
+
54
+ .section-title {
55
+ font-family: 'Playfair Display', serif; font-size: 20px; color: var(--deep);
56
+ margin-bottom: 16px; display: flex; align-items: center; gap: 10px;
57
+ }
58
+
59
+ /* Empty state */
60
+ .empty {
61
+ background: #fff; border: 1.5px solid var(--light-orange); border-radius: 18px;
62
+ padding: 60px 20px; text-align: center; color: var(--mid);
63
+ }
64
+ .empty-icon { font-size: 40px; margin-bottom: 12px; }
65
+ .empty p { font-size: 15px; font-weight: 300; }
66
+
67
+ /* Cards grid */
68
+ .cards-grid { display: grid; gap: 16px; }
69
+ .reg-card {
70
+ background: #fff; border: 1.5px solid var(--light-orange); border-radius: 18px;
71
+ padding: 22px 24px; animation: fadeUp 0.4s ease both;
72
+ transition: box-shadow 0.2s;
73
+ }
74
+ .reg-card:hover { box-shadow: 0 8px 28px rgba(242,100,25,0.12); }
75
+ .reg-header {
76
+ display: flex; align-items: flex-start; justify-content: space-between;
77
+ margin-bottom: 14px; flex-wrap: wrap; gap: 8px;
78
+ }
79
+ .reg-name { font-family: 'Playfair Display', serif; font-size: 20px; color: var(--deep); }
80
+ .reg-id {
81
+ background: var(--light-orange); color: var(--orange);
82
+ font-size: 12px; font-weight: 600; padding: 4px 12px; border-radius: 100px;
83
+ }
84
+ .reg-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
85
+ .chip {
86
+ background: var(--cream); border: 1px solid var(--light-orange);
87
+ border-radius: 100px; padding: 4px 12px; font-size: 13px; color: var(--mid);
88
+ }
89
+ .chip strong { color: var(--deep); }
90
+ .reg-details { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
91
+ .detail { display: flex; align-items: flex-start; gap: 8px; font-size: 14px; color: var(--mid); }
92
+ .detail-icon { font-size: 16px; flex-shrink: 0; }
93
+ .detail-text { line-height: 1.5; }
94
+ .reg-date { font-size: 12px; color: var(--mid); margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--light-orange); font-weight: 300; }
95
+
96
+ @keyframes fadeUp { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }
97
+ </style>
98
+ </head>
99
+ <body>
100
+
101
+ <header>
102
+ <div class="logo">
103
+ <div class="logo-mark">R</div>
104
+ <div class="logo-text">RE<span>COM</span></div>
105
+ <div class="admin-badge">Admin</div>
106
+ </div>
107
+ <a href="/admin/logout" class="logout">Logout</a>
108
+ </header>
109
+
110
+ <div class="container">
111
+
112
+ <div class="stats">
113
+ <div class="stat-card" style="animation-delay:0.1s">
114
+ <div class="stat-label">Total Registrations</div>
115
+ <div class="stat-value">{{ students|length }}</div>
116
+ </div>
117
+ <div class="stat-card" style="animation-delay:0.2s">
118
+ <div class="stat-label">Total Revenue</div>
119
+ <div class="stat-value">₹{{ students|length * 200 }}</div>
120
+ </div>
121
+ </div>
122
+
123
+ <div class="section-title">📋 All Registrations</div>
124
+
125
+ {% if students|length == 0 %}
126
+ <div class="empty">
127
+ <div class="empty-icon">📭</div>
128
+ <p>No registrations yet. They'll appear here once students sign up.</p>
129
+ </div>
130
+ {% else %}
131
+ <div class="cards-grid">
132
+ {% for s in students|reverse %}
133
+ <div class="reg-card" style="animation-delay: {{ loop.index0 * 0.05 }}s">
134
+ <div class="reg-header">
135
+ <div class="reg-name">{{ s.name }}</div>
136
+ <div class="reg-id">#{{ s.id }}</div>
137
+ </div>
138
+ <div class="reg-chips">
139
+ <div class="chip">Class <strong>{{ s.class }}</strong></div>
140
+ <div class="chip">Section <strong>{{ s.section }}</strong></div>
141
+ </div>
142
+ <div class="reg-details">
143
+ <div class="detail">
144
+ <span class="detail-icon">📞</span>
145
+ <div class="detail-text">{{ s.get('phone', '—') }}</div>
146
+ </div>
147
+ <div class="detail">
148
+ <span class="detail-icon">💬</span>
149
+ <div class="detail-text">{{ s.get('whatsapp', '—') }}</div>
150
+ </div>
151
+ <div class="detail" style="grid-column: 1 / -1">
152
+ <span class="detail-icon">📍</span>
153
+ <div class="detail-text">{{ s.get('address', '—') }}</div>
154
+ </div>
155
+ </div>
156
+ <div class="reg-date">🕐 Registered on {{ s.get('registered_at', '—') }}</div>
157
+ </div>
158
+ {% endfor %}
159
+ </div>
160
+ {% endif %}
161
+
162
+ </div>
163
+ </body>
164
+ </html>
templates/admin_login.html ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — Admin</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root { --orange: #F26419; --peach: #F9A87E; --cream: #FFF3EC; --deep: #3D1A00; --mid: #7A3B10; --light-orange: #FDDCC4; }
11
+ body {
12
+ font-family: 'DM Sans', sans-serif; background: var(--cream);
13
+ min-height: 100vh; display: flex; align-items: center; justify-content: center;
14
+ }
15
+ body::before {
16
+ content: ''; position: fixed; top: -100px; right: -100px;
17
+ width: 400px; height: 400px; border-radius: 50%;
18
+ background: radial-gradient(circle, var(--peach) 0%, transparent 70%);
19
+ opacity: 0.4; pointer-events: none;
20
+ }
21
+ .card {
22
+ background: #fff; border: 1.5px solid var(--light-orange);
23
+ border-radius: 24px; padding: 44px 40px 40px;
24
+ width: min(400px, 92vw);
25
+ box-shadow: 0 12px 48px rgba(242,100,25,0.10);
26
+ animation: fadeUp 0.5s ease both;
27
+ }
28
+ .lock { font-size: 36px; margin-bottom: 16px; }
29
+ h2 { font-family: 'Playfair Display', serif; font-size: 26px; color: var(--deep); margin-bottom: 6px; }
30
+ .sub { font-size: 14px; color: var(--mid); font-weight: 300; margin-bottom: 28px; }
31
+ label { display: block; font-size: 12px; font-weight: 500; letter-spacing: 1px; text-transform: uppercase; color: var(--mid); margin-bottom: 8px; }
32
+ input {
33
+ width: 100%; padding: 13px 16px; border: 1.5px solid var(--light-orange);
34
+ border-radius: 12px; font-family: 'DM Sans', sans-serif; font-size: 15px;
35
+ color: var(--deep); background: var(--cream); outline: none;
36
+ transition: border 0.2s, box-shadow 0.2s; margin-bottom: 20px;
37
+ }
38
+ input:focus { border-color: var(--orange); box-shadow: 0 0 0 3px rgba(242,100,25,0.12); background: #fff; }
39
+ .error {
40
+ background: #fff0f0; border: 1.5px solid #ffcccc; border-radius: 10px;
41
+ padding: 10px 14px; font-size: 13px; color: #cc3300;
42
+ margin-bottom: 16px;
43
+ }
44
+ .btn {
45
+ width: 100%; padding: 14px; background: var(--orange); color: #fff;
46
+ border: none; border-radius: 12px; font-family: 'DM Sans', sans-serif;
47
+ font-size: 15px; font-weight: 500; cursor: pointer;
48
+ box-shadow: 0 6px 20px rgba(242,100,25,0.28);
49
+ transition: background 0.2s, transform 0.15s;
50
+ }
51
+ .btn:hover { background: #d6540f; transform: translateY(-1px); }
52
+ @keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
53
+ </style>
54
+ </head>
55
+ <body>
56
+ <div class="card">
57
+ <div class="lock">🔐</div>
58
+ <h2>Admin Access</h2>
59
+ <p class="sub">Enter your password to view registrations.</p>
60
+ {% if error %}
61
+ <div class="error">{{ error }}</div>
62
+ {% endif %}
63
+ <form method="POST">
64
+ <label>Password</label>
65
+ <input type="password" name="password" placeholder="Enter admin password" required autofocus/>
66
+ <button type="submit" class="btn">Login →</button>
67
+ </form>
68
+ </div>
69
+ </body>
70
+ </html>
templates/contact.html ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — Contact Details</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root {
11
+ --orange: #F26419; --peach: #F9A87E; --cream: #FFF3EC;
12
+ --deep: #3D1A00; --mid: #7A3B10; --light-orange: #FDDCC4;
13
+ }
14
+ body {
15
+ font-family: 'DM Sans', sans-serif;
16
+ background: var(--cream);
17
+ min-height: 100vh;
18
+ display: flex; flex-direction: column; align-items: center;
19
+ overflow-x: hidden;
20
+ }
21
+ body::before {
22
+ content: '';
23
+ position: fixed; top: -120px; right: -120px;
24
+ width: 480px; height: 480px; border-radius: 50%;
25
+ background: radial-gradient(circle, var(--peach) 0%, transparent 70%);
26
+ opacity: 0.4; pointer-events: none;
27
+ }
28
+ header {
29
+ width: 100%; padding: 28px 40px 20px;
30
+ display: flex; align-items: center; gap: 14px;
31
+ }
32
+ .logo-mark {
33
+ width: 44px; height: 44px; background: var(--orange);
34
+ border-radius: 12px; display: flex; align-items: center; justify-content: center;
35
+ color: #fff; font-family: 'Playfair Display', serif;
36
+ font-size: 22px; font-weight: 900; box-shadow: 0 4px 14px rgba(242,100,25,0.35);
37
+ }
38
+ .logo-text { font-family: 'Playfair Display', serif; font-size: 22px; font-weight: 700; color: var(--deep); letter-spacing: 1px; }
39
+ .logo-text span { color: var(--orange); }
40
+
41
+ .steps {
42
+ display: flex; align-items: center; gap: 10px;
43
+ margin: 10px 0 30px; animation: fadeUp 0.5s ease both;
44
+ }
45
+ .step {
46
+ display: flex; align-items: center; gap: 6px;
47
+ font-size: 13px; font-weight: 500;
48
+ }
49
+ .step-dot {
50
+ width: 26px; height: 26px; border-radius: 50%;
51
+ display: flex; align-items: center; justify-content: center;
52
+ font-size: 12px; font-weight: 700;
53
+ }
54
+ .step.done .step-dot { background: var(--orange); color: #fff; }
55
+ .step.done .step-label { color: var(--orange); }
56
+ .step.active .step-dot { background: var(--deep); color: #fff; }
57
+ .step.active .step-label { color: var(--deep); }
58
+ .step.inactive .step-dot { background: var(--light-orange); color: var(--mid); }
59
+ .step.inactive .step-label { color: var(--mid); }
60
+ .step-line { width: 30px; height: 2px; background: var(--light-orange); border-radius: 2px; }
61
+
62
+ .greeting {
63
+ text-align: center; padding: 0 20px;
64
+ animation: fadeUp 0.6s 0.1s ease both;
65
+ }
66
+ .greeting .hi { font-size: 13px; letter-spacing: 2px; text-transform: uppercase; color: var(--mid); margin-bottom: 8px; }
67
+ .greeting h2 { font-family: 'Playfair Display', serif; font-size: 28px; color: var(--deep); margin-bottom: 6px; }
68
+ .greeting h2 span { color: var(--orange); }
69
+ .greeting p { font-size: 14px; color: var(--mid); font-weight: 300; margin-bottom: 28px; }
70
+
71
+ .info-bar {
72
+ display: flex; gap: 10px; justify-content: center;
73
+ flex-wrap: wrap; margin-bottom: 32px;
74
+ animation: fadeUp 0.6s 0.2s ease both;
75
+ }
76
+ .chip {
77
+ background: #fff; border: 1.5px solid var(--light-orange);
78
+ border-radius: 100px; padding: 6px 16px;
79
+ font-size: 13px; color: var(--mid); font-weight: 500;
80
+ }
81
+ .chip strong { color: var(--deep); }
82
+
83
+ .card {
84
+ background: #fff; border: 1.5px solid var(--light-orange);
85
+ border-radius: 24px; padding: 38px 40px 34px;
86
+ width: min(440px, 92vw); box-shadow: 0 12px 48px rgba(242,100,25,0.10);
87
+ animation: fadeUp 0.6s 0.3s ease both; margin-bottom: 60px;
88
+ }
89
+ .card-title { font-family: 'Playfair Display', serif; font-size: 20px; color: var(--deep); margin-bottom: 6px; }
90
+ .card-sub { font-size: 13px; color: var(--mid); margin-bottom: 28px; font-weight: 300; }
91
+
92
+ .field { margin-bottom: 20px; }
93
+ label { display: block; font-size: 12px; font-weight: 500; letter-spacing: 1px; text-transform: uppercase; color: var(--mid); margin-bottom: 8px; }
94
+ input, textarea {
95
+ width: 100%; padding: 13px 16px;
96
+ border: 1.5px solid var(--light-orange); border-radius: 12px;
97
+ font-family: 'DM Sans', sans-serif; font-size: 15px; color: var(--deep);
98
+ background: var(--cream); outline: none;
99
+ transition: border 0.2s, box-shadow 0.2s;
100
+ }
101
+ input:focus, textarea:focus {
102
+ border-color: var(--orange); box-shadow: 0 0 0 3px rgba(242,100,25,0.12); background: #fff;
103
+ }
104
+ textarea { resize: none; height: 80px; }
105
+
106
+ .note {
107
+ background: var(--light-orange); border-radius: 12px;
108
+ padding: 14px 16px; margin-bottom: 22px;
109
+ font-size: 13px; color: var(--mid); line-height: 1.6;
110
+ }
111
+ .note strong { color: var(--orange); }
112
+
113
+ .btn {
114
+ width: 100%; padding: 15px; background: var(--orange); color: #fff;
115
+ border: none; border-radius: 14px; font-family: 'DM Sans', sans-serif;
116
+ font-size: 16px; font-weight: 500; cursor: pointer; margin-top: 4px;
117
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
118
+ box-shadow: 0 6px 20px rgba(242,100,25,0.28);
119
+ display: flex; align-items: center; justify-content: center; gap: 8px;
120
+ }
121
+ .btn:hover { background: #d6540f; transform: translateY(-2px); }
122
+ .btn:active { transform: translateY(0); }
123
+ .btn:disabled { background: var(--peach); cursor: not-allowed; transform: none; }
124
+
125
+ @keyframes fadeUp {
126
+ from { opacity: 0; transform: translateY(20px); }
127
+ to { opacity: 1; transform: translateY(0); }
128
+ }
129
+ </style>
130
+ </head>
131
+ <body>
132
+
133
+ <header>
134
+ <div class="logo-mark">R</div>
135
+ <div class="logo-text">RE<span>COM</span></div>
136
+ </header>
137
+
138
+ <div class="steps">
139
+ <div class="step done"><div class="step-dot">✓</div><div class="step-label">Basic Info</div></div>
140
+ <div class="step-line"></div>
141
+ <div class="step active"><div class="step-dot">2</div><div class="step-label">Contact</div></div>
142
+ <div class="step-line"></div>
143
+ <div class="step inactive"><div class="step-dot">3</div><div class="step-label">Done</div></div>
144
+ </div>
145
+
146
+ <div class="greeting">
147
+ <div class="hi">Almost there</div>
148
+ <h2>Hey, <span>{{ name }}!</span></h2>
149
+ <p>Just a couple more details and you're all set.</p>
150
+ </div>
151
+
152
+ <div class="info-bar">
153
+ <div class="chip">Class <strong>{{ cls }}</strong></div>
154
+ <div class="chip">Section <strong>{{ section }}</strong></div>
155
+ </div>
156
+
157
+ <div class="card">
158
+ <div class="card-title">Contact Details</div>
159
+ <div class="card-sub">We'll use this to coordinate pick-up & drop</div>
160
+
161
+ <div class="note">
162
+ <strong>📞 Our contact numbers will be shared here soon.</strong><br/>
163
+ You can also reach us once your booking is confirmed.
164
+ </div>
165
+
166
+ <form id="contactForm">
167
+ <div class="field">
168
+ <label>Phone Number</label>
169
+ <input type="tel" id="phone" placeholder="+91 98765 43210" maxlength="15" required/>
170
+ </div>
171
+ <div class="field">
172
+ <label>WhatsApp Number</label>
173
+ <input type="tel" id="whatsapp" placeholder="Same as above or different" maxlength="15"/>
174
+ </div>
175
+ <div class="field">
176
+ <label>Pick-up Address</label>
177
+ <textarea id="address" placeholder="Your area / locality in Hyderabad" required></textarea>
178
+ </div>
179
+ <button type="submit" class="btn" id="submitBtn">Confirm Booking ✓</button>
180
+ </form>
181
+ </div>
182
+
183
+ <script>
184
+ document.getElementById("contactForm").addEventListener("submit", async function(e) {
185
+ e.preventDefault();
186
+ const btn = document.getElementById("submitBtn");
187
+ btn.disabled = true;
188
+ btn.textContent = "Booking...";
189
+
190
+ const data = {
191
+ name: "{{ name }}",
192
+ class: "{{ cls }}",
193
+ section: "{{ section }}",
194
+ phone: document.getElementById("phone").value.trim(),
195
+ whatsapp: document.getElementById("whatsapp").value.trim(),
196
+ address: document.getElementById("address").value.trim()
197
+ };
198
+
199
+ const res = await fetch("/submit", {
200
+ method: "POST",
201
+ headers: { "Content-Type": "application/json" },
202
+ body: JSON.stringify(data)
203
+ });
204
+ const result = await res.json();
205
+ if (result.success) window.location.href = "/success";
206
+ });
207
+ </script>
208
+ </body>
209
+ </html>
templates/index.html ADDED
@@ -0,0 +1,303 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — Record Completion Service</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+
11
+ :root {
12
+ --orange: #F26419;
13
+ --peach: #F9A87E;
14
+ --cream: #FFF3EC;
15
+ --deep: #3D1A00;
16
+ --mid: #7A3B10;
17
+ --light-orange: #FDDCC4;
18
+ }
19
+
20
+ body {
21
+ font-family: 'DM Sans', sans-serif;
22
+ background: var(--cream);
23
+ min-height: 100vh;
24
+ display: flex;
25
+ flex-direction: column;
26
+ align-items: center;
27
+ overflow-x: hidden;
28
+ }
29
+
30
+ /* Decorative blob background */
31
+ body::before {
32
+ content: '';
33
+ position: fixed;
34
+ top: -120px; right: -120px;
35
+ width: 480px; height: 480px;
36
+ border-radius: 50%;
37
+ background: radial-gradient(circle, var(--peach) 0%, transparent 70%);
38
+ opacity: 0.45;
39
+ pointer-events: none;
40
+ }
41
+ body::after {
42
+ content: '';
43
+ position: fixed;
44
+ bottom: -100px; left: -100px;
45
+ width: 380px; height: 380px;
46
+ border-radius: 50%;
47
+ background: radial-gradient(circle, var(--orange) 0%, transparent 70%);
48
+ opacity: 0.18;
49
+ pointer-events: none;
50
+ }
51
+
52
+ header {
53
+ width: 100%;
54
+ padding: 28px 40px 20px;
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 14px;
58
+ }
59
+
60
+ .logo-mark {
61
+ width: 44px; height: 44px;
62
+ background: var(--orange);
63
+ border-radius: 12px;
64
+ display: flex; align-items: center; justify-content: center;
65
+ color: #fff;
66
+ font-family: 'Playfair Display', serif;
67
+ font-size: 22px;
68
+ font-weight: 900;
69
+ box-shadow: 0 4px 14px rgba(242,100,25,0.35);
70
+ }
71
+
72
+ .logo-text {
73
+ font-family: 'Playfair Display', serif;
74
+ font-size: 22px;
75
+ font-weight: 700;
76
+ color: var(--deep);
77
+ letter-spacing: 1px;
78
+ }
79
+ .logo-text span { color: var(--orange); }
80
+
81
+ .hero {
82
+ margin-top: 20px;
83
+ text-align: center;
84
+ padding: 0 20px;
85
+ animation: fadeUp 0.7s ease both;
86
+ }
87
+
88
+ .badge {
89
+ display: inline-block;
90
+ background: var(--light-orange);
91
+ color: var(--orange);
92
+ font-size: 12px;
93
+ font-weight: 500;
94
+ letter-spacing: 2px;
95
+ text-transform: uppercase;
96
+ padding: 6px 18px;
97
+ border-radius: 100px;
98
+ margin-bottom: 18px;
99
+ border: 1.5px solid var(--peach);
100
+ }
101
+
102
+ h1 {
103
+ font-family: 'Playfair Display', serif;
104
+ font-size: clamp(32px, 6vw, 56px);
105
+ color: var(--deep);
106
+ line-height: 1.15;
107
+ margin-bottom: 14px;
108
+ }
109
+ h1 em { color: var(--orange); font-style: normal; }
110
+
111
+ .sub {
112
+ color: var(--mid);
113
+ font-size: 16px;
114
+ font-weight: 300;
115
+ max-width: 420px;
116
+ margin: 0 auto 10px;
117
+ line-height: 1.7;
118
+ }
119
+
120
+ /* Price pill */
121
+ .price-pill {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ gap: 8px;
125
+ background: var(--orange);
126
+ color: #fff;
127
+ font-size: 15px;
128
+ font-weight: 500;
129
+ padding: 10px 22px;
130
+ border-radius: 100px;
131
+ margin: 16px 0 32px;
132
+ box-shadow: 0 6px 20px rgba(242,100,25,0.3);
133
+ animation: pulse 2.5s ease-in-out infinite;
134
+ }
135
+ .price-pill .rupee { font-size: 20px; font-weight: 700; }
136
+
137
+ @keyframes pulse {
138
+ 0%, 100% { box-shadow: 0 6px 20px rgba(242,100,25,0.3); }
139
+ 50% { box-shadow: 0 6px 28px rgba(242,100,25,0.55); }
140
+ }
141
+
142
+ /* Features strip */
143
+ .features {
144
+ display: flex;
145
+ gap: 12px;
146
+ justify-content: center;
147
+ flex-wrap: wrap;
148
+ margin-bottom: 40px;
149
+ animation: fadeUp 0.7s 0.2s ease both;
150
+ }
151
+ .feat {
152
+ background: #fff;
153
+ border: 1.5px solid var(--light-orange);
154
+ border-radius: 12px;
155
+ padding: 12px 18px;
156
+ font-size: 13px;
157
+ color: var(--mid);
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 8px;
161
+ font-weight: 500;
162
+ }
163
+ .feat-icon { font-size: 18px; }
164
+
165
+ /* Card */
166
+ .card {
167
+ background: #fff;
168
+ border: 1.5px solid var(--light-orange);
169
+ border-radius: 24px;
170
+ padding: 40px 40px 36px;
171
+ width: min(440px, 92vw);
172
+ box-shadow: 0 12px 48px rgba(242,100,25,0.10);
173
+ animation: fadeUp 0.7s 0.3s ease both;
174
+ margin-bottom: 60px;
175
+ }
176
+
177
+ .card-title {
178
+ font-family: 'Playfair Display', serif;
179
+ font-size: 20px;
180
+ color: var(--deep);
181
+ margin-bottom: 6px;
182
+ }
183
+ .card-sub {
184
+ font-size: 13px;
185
+ color: var(--mid);
186
+ margin-bottom: 28px;
187
+ font-weight: 300;
188
+ }
189
+
190
+ .field { margin-bottom: 20px; }
191
+ label {
192
+ display: block;
193
+ font-size: 12px;
194
+ font-weight: 500;
195
+ letter-spacing: 1px;
196
+ text-transform: uppercase;
197
+ color: var(--mid);
198
+ margin-bottom: 8px;
199
+ }
200
+ input, select {
201
+ width: 100%;
202
+ padding: 13px 16px;
203
+ border: 1.5px solid var(--light-orange);
204
+ border-radius: 12px;
205
+ font-family: 'DM Sans', sans-serif;
206
+ font-size: 15px;
207
+ color: var(--deep);
208
+ background: var(--cream);
209
+ outline: none;
210
+ transition: border 0.2s, box-shadow 0.2s;
211
+ appearance: none;
212
+ }
213
+ input:focus, select:focus {
214
+ border-color: var(--orange);
215
+ box-shadow: 0 0 0 3px rgba(242,100,25,0.12);
216
+ background: #fff;
217
+ }
218
+
219
+ .row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
220
+
221
+ .btn {
222
+ width: 100%;
223
+ padding: 15px;
224
+ background: var(--orange);
225
+ color: #fff;
226
+ border: none;
227
+ border-radius: 14px;
228
+ font-family: 'DM Sans', sans-serif;
229
+ font-size: 16px;
230
+ font-weight: 500;
231
+ cursor: pointer;
232
+ margin-top: 8px;
233
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
234
+ box-shadow: 0 6px 20px rgba(242,100,25,0.28);
235
+ display: flex; align-items: center; justify-content: center; gap: 8px;
236
+ }
237
+ .btn:hover { background: #d6540f; transform: translateY(-2px); box-shadow: 0 10px 28px rgba(242,100,25,0.38); }
238
+ .btn:active { transform: translateY(0); }
239
+
240
+ @keyframes fadeUp {
241
+ from { opacity: 0; transform: translateY(24px); }
242
+ to { opacity: 1; transform: translateY(0); }
243
+ }
244
+ </style>
245
+ </head>
246
+ <body>
247
+
248
+ <header>
249
+ <div class="logo-mark">R</div>
250
+ <div class="logo-text">RE<span>COM</span></div>
251
+ </header>
252
+
253
+ <div class="hero">
254
+ <div class="badge">✦ Record Completion Service</div>
255
+ <h1>Your records,<br/><em>completed.</em></h1>
256
+ <p class="sub">We pick up your school records anywhere in Hyderabad, complete them, and drop them back — hassle-free.</p>
257
+ <div class="price-pill">
258
+ <span class="rupee">₹200</span>
259
+ <span>per record · Pick & Drop included · No extra charges</span>
260
+ </div>
261
+ </div>
262
+
263
+ <div class="features">
264
+ <div class="feat"><span class="feat-icon">🛵</span> Free Pick-up & Drop</div>
265
+ <div class="feat"><span class="feat-icon">📍</span> Anywhere in Hyderabad</div>
266
+ <div class="feat"><span class="feat-icon">⚡</span> Fast Turnaround</div>
267
+ </div>
268
+
269
+ <div class="card">
270
+ <div class="card-title">Let's get started</div>
271
+ <div class="card-sub">Enter your basic details to proceed</div>
272
+
273
+ <form id="basicForm">
274
+ <div class="field">
275
+ <label>Full Name</label>
276
+ <input type="text" id="name" placeholder="e.g. Arjun Reddy" required/>
277
+ </div>
278
+ <div class="row">
279
+ <div class="field">
280
+ <label>Class</label>
281
+ <input type="text" id="class" placeholder="e.g. MBBS, 10th" required/>
282
+ </div>
283
+ <div class="field">
284
+ <label>Section</label>
285
+ <input type="text" id="section" placeholder="e.g. A, B" required/>
286
+ </div>
287
+ </div>
288
+ <button type="submit" class="btn">Continue →</button>
289
+ </form>
290
+ </div>
291
+
292
+ <script>
293
+ document.getElementById("basicForm").addEventListener("submit", function(e) {
294
+ e.preventDefault();
295
+ const name = document.getElementById("name").value.trim();
296
+ const cls = document.getElementById("class").value;
297
+ const section = document.getElementById("section").value;
298
+ if (!name || !cls || !section) return;
299
+ window.location.href = `/instructions?name=${encodeURIComponent(name)}&class=${encodeURIComponent(cls)}&section=${encodeURIComponent(section)}`;
300
+ });
301
+ </script>
302
+ </body>
303
+ </html>
templates/instructions.html ADDED
@@ -0,0 +1,320 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — How It Works</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root {
11
+ --orange: #F26419; --peach: #F9A87E; --cream: #FFF3EC;
12
+ --deep: #3D1A00; --mid: #7A3B10; --light-orange: #FDDCC4;
13
+ }
14
+
15
+ body {
16
+ font-family: 'DM Sans', sans-serif;
17
+ background: var(--cream);
18
+ min-height: 100vh;
19
+ display: flex; flex-direction: column; align-items: center;
20
+ overflow-x: hidden; padding-bottom: 60px;
21
+ }
22
+ body::before {
23
+ content: ''; position: fixed; top: -100px; right: -100px;
24
+ width: 420px; height: 420px; border-radius: 50%;
25
+ background: radial-gradient(circle, var(--peach) 0%, transparent 70%);
26
+ opacity: 0.4; pointer-events: none;
27
+ }
28
+ body::after {
29
+ content: ''; position: fixed; bottom: -80px; left: -80px;
30
+ width: 320px; height: 320px; border-radius: 50%;
31
+ background: radial-gradient(circle, var(--orange) 0%, transparent 70%);
32
+ opacity: 0.13; pointer-events: none;
33
+ }
34
+
35
+ header {
36
+ width: 100%; padding: 28px 40px 0;
37
+ display: flex; align-items: center; gap: 14px;
38
+ }
39
+ .logo-mark {
40
+ width: 44px; height: 44px; background: var(--orange); border-radius: 12px;
41
+ display: flex; align-items: center; justify-content: center;
42
+ color: #fff; font-family: 'Playfair Display', serif; font-size: 22px; font-weight: 900;
43
+ box-shadow: 0 4px 14px rgba(242,100,25,0.35);
44
+ }
45
+ .logo-text { font-family: 'Playfair Display', serif; font-size: 22px; font-weight: 700; color: var(--deep); letter-spacing: 1px; }
46
+ .logo-text span { color: var(--orange); }
47
+
48
+ /* Steps */
49
+ .steps {
50
+ display: flex; align-items: center; gap: 10px;
51
+ margin: 24px 0 28px; animation: fadeUp 0.5s ease both;
52
+ }
53
+ .step { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; }
54
+ .step-dot {
55
+ width: 26px; height: 26px; border-radius: 50%;
56
+ display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700;
57
+ }
58
+ .step.done .step-dot { background: var(--orange); color: #fff; }
59
+ .step.done .step-label { color: var(--orange); }
60
+ .step.active .step-dot { background: var(--deep); color: #fff; }
61
+ .step.active .step-label { color: var(--deep); }
62
+ .step.inactive .step-dot { background: var(--light-orange); color: var(--mid); }
63
+ .step.inactive .step-label { color: var(--mid); }
64
+ .step-line { width: 30px; height: 2px; background: var(--light-orange); border-radius: 2px; }
65
+
66
+ /* Hero */
67
+ .page-hero {
68
+ text-align: center; padding: 0 20px 28px;
69
+ animation: fadeUp 0.5s 0.1s ease both;
70
+ }
71
+ .badge {
72
+ display: inline-block; background: var(--light-orange); color: var(--orange);
73
+ font-size: 12px; font-weight: 500; letter-spacing: 2px; text-transform: uppercase;
74
+ padding: 6px 18px; border-radius: 100px; margin-bottom: 14px;
75
+ border: 1.5px solid var(--peach);
76
+ }
77
+ .page-hero h2 {
78
+ font-family: 'Playfair Display', serif; font-size: 30px; color: var(--deep); margin-bottom: 8px;
79
+ }
80
+ .page-hero p { font-size: 14px; color: var(--mid); font-weight: 300; }
81
+
82
+ /* Main card */
83
+ .main-card {
84
+ background: #fff; border: 1.5px solid var(--light-orange); border-radius: 24px;
85
+ padding: 36px 36px 32px; width: min(500px, 92vw);
86
+ box-shadow: 0 12px 48px rgba(242,100,25,0.10);
87
+ animation: fadeUp 0.5s 0.2s ease both;
88
+ }
89
+
90
+ /* Timeline section */
91
+ .section-label {
92
+ font-size: 11px; font-weight: 600; letter-spacing: 2px; text-transform: uppercase;
93
+ color: var(--orange); margin-bottom: 16px; display: flex; align-items: center; gap: 8px;
94
+ }
95
+ .section-label::after {
96
+ content: ''; flex: 1; height: 1.5px; background: var(--light-orange); border-radius: 2px;
97
+ }
98
+
99
+ .timeline { display: flex; flex-direction: column; gap: 0; margin-bottom: 28px; }
100
+ .tl-item {
101
+ display: flex; gap: 16px; align-items: stretch;
102
+ animation: fadeUp 0.4s ease both;
103
+ }
104
+ .tl-left {
105
+ display: flex; flex-direction: column; align-items: center; width: 36px; flex-shrink: 0;
106
+ }
107
+ .tl-dot {
108
+ width: 36px; height: 36px; border-radius: 50%; background: var(--light-orange);
109
+ display: flex; align-items: center; justify-content: center;
110
+ font-size: 16px; flex-shrink: 0; border: 2px solid var(--peach);
111
+ }
112
+ .tl-line { width: 2px; background: var(--light-orange); flex: 1; min-height: 16px; margin: 4px 0; }
113
+ .tl-item:last-child .tl-line { display: none; }
114
+ .tl-body { padding: 6px 0 20px; flex: 1; }
115
+ .tl-pages {
116
+ display: inline-block; background: var(--orange); color: #fff;
117
+ font-size: 12px; font-weight: 600; padding: 3px 10px; border-radius: 100px;
118
+ margin-bottom: 6px; letter-spacing: 0.5px;
119
+ }
120
+ .tl-days { font-size: 18px; font-weight: 700; color: var(--deep); margin-bottom: 3px; }
121
+ .tl-desc { font-size: 13px; color: var(--mid); font-weight: 300; line-height: 1.5; }
122
+
123
+ /* Rules */
124
+ .rules { display: flex; flex-direction: column; gap: 12px; margin-bottom: 28px; }
125
+ .rule {
126
+ display: flex; gap: 12px; align-items: flex-start;
127
+ padding: 14px 16px; border-radius: 14px;
128
+ border: 1.5px solid var(--light-orange); background: var(--cream);
129
+ font-size: 14px; color: var(--mid); line-height: 1.6;
130
+ animation: fadeUp 0.4s ease both;
131
+ }
132
+ .rule-icon { font-size: 18px; flex-shrink: 0; margin-top: 1px; }
133
+ .rule strong { color: var(--deep); font-weight: 600; }
134
+
135
+ /* Payment warning */
136
+ .payment-box {
137
+ background: linear-gradient(135deg, var(--orange) 0%, #e0520d 100%);
138
+ border-radius: 18px; padding: 22px 24px; margin-bottom: 28px; color: #fff;
139
+ animation: fadeUp 0.4s ease both;
140
+ }
141
+ .payment-box .pay-icon { font-size: 28px; margin-bottom: 10px; }
142
+ .payment-box h3 {
143
+ font-family: 'Playfair Display', serif; font-size: 18px;
144
+ margin-bottom: 8px; letter-spacing: 0.3px;
145
+ }
146
+ .payment-box p { font-size: 13px; opacity: 0.92; line-height: 1.65; font-weight: 300; }
147
+
148
+ /* Mistake policy */
149
+ .policy-box {
150
+ background: var(--light-orange); border: 1.5px solid var(--peach);
151
+ border-radius: 14px; padding: 16px 18px; margin-bottom: 28px;
152
+ font-size: 14px; color: var(--mid); line-height: 1.65;
153
+ animation: fadeUp 0.4s ease both;
154
+ }
155
+ .policy-box strong { color: var(--deep); }
156
+
157
+ /* Contact / WhatsApp block */
158
+ .contact-block {
159
+ background: #fff; border: 2px solid var(--orange); border-radius: 18px;
160
+ padding: 22px 24px; text-align: center; margin-bottom: 28px;
161
+ animation: fadeUp 0.4s ease both;
162
+ box-shadow: 0 6px 24px rgba(242,100,25,0.12);
163
+ }
164
+ .contact-block .ct-label {
165
+ font-size: 12px; letter-spacing: 2px; text-transform: uppercase;
166
+ color: var(--mid); font-weight: 600; margin-bottom: 10px;
167
+ }
168
+ .contact-block .ct-sub {
169
+ font-size: 13px; color: var(--mid); font-weight: 300; margin-bottom: 16px; line-height: 1.6;
170
+ }
171
+ .wa-btn {
172
+ display: inline-flex; align-items: center; gap: 10px;
173
+ background: #25D366; color: #fff; text-decoration: none;
174
+ padding: 13px 28px; border-radius: 14px; font-size: 16px; font-weight: 600;
175
+ box-shadow: 0 6px 20px rgba(37,211,102,0.3);
176
+ transition: background 0.2s, transform 0.15s;
177
+ margin-bottom: 10px;
178
+ }
179
+ .wa-btn:hover { background: #1ebe5d; transform: translateY(-2px); }
180
+ .wa-number { font-size: 18px; font-weight: 700; color: var(--deep); margin-top: 10px; letter-spacing: 1px; }
181
+ .wa-note { font-size: 12px; color: var(--mid); margin-top: 6px; font-weight: 300; }
182
+
183
+ /* Footer note */
184
+ .footer-note {
185
+ text-align: center; font-size: 13px; color: var(--mid);
186
+ font-weight: 300; margin-bottom: 28px; line-height: 1.7;
187
+ }
188
+ .footer-note strong { color: var(--deep); }
189
+
190
+ /* CTA */
191
+ .btn {
192
+ width: 100%; padding: 15px; background: var(--orange); color: #fff;
193
+ border: none; border-radius: 14px; font-family: 'DM Sans', sans-serif;
194
+ font-size: 16px; font-weight: 500; cursor: pointer;
195
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
196
+ box-shadow: 0 6px 20px rgba(242,100,25,0.28);
197
+ display: flex; align-items: center; justify-content: center; gap: 8px;
198
+ }
199
+ .btn:hover { background: #d6540f; transform: translateY(-2px); box-shadow: 0 10px 28px rgba(242,100,25,0.38); }
200
+
201
+ @keyframes fadeUp {
202
+ from { opacity: 0; transform: translateY(18px); }
203
+ to { opacity: 1; transform: translateY(0); }
204
+ }
205
+ </style>
206
+ </head>
207
+ <body>
208
+
209
+ <header>
210
+ <div class="logo-mark">R</div>
211
+ <div class="logo-text">RE<span>COM</span></div>
212
+ </header>
213
+
214
+ <div class="steps">
215
+ <div class="step done"><div class="step-dot">✓</div><div class="step-label">Basic Info</div></div>
216
+ <div class="step-line"></div>
217
+ <div class="step active"><div class="step-dot">2</div><div class="step-label">How It Works</div></div>
218
+ <div class="step-line"></div>
219
+ <div class="step inactive"><div class="step-dot">3</div><div class="step-label">Contact</div></div>
220
+ <div class="step-line"></div>
221
+ <div class="step inactive"><div class="step-dot">4</div><div class="step-label">Done</div></div>
222
+ </div>
223
+
224
+ <div class="page-hero">
225
+ <div class="badge">✦ Please Read Carefully</div>
226
+ <h2>Before You Submit</h2>
227
+ <p>Here's everything you need to know about our service.</p>
228
+ </div>
229
+
230
+ <div class="main-card">
231
+
232
+ <!-- Timeline -->
233
+ <div class="section-label">⏱ Completion Timeline</div>
234
+ <div class="timeline">
235
+ <div class="tl-item" style="animation-delay:0.1s">
236
+ <div class="tl-left"><div class="tl-dot">📄</div><div class="tl-line"></div></div>
237
+ <div class="tl-body">
238
+ <div class="tl-pages">Up to 30 pages</div>
239
+ <div class="tl-days">1 Day</div>
240
+ <div class="tl-desc">Quick turnaround for shorter records.</div>
241
+ </div>
242
+ </div>
243
+ <div class="tl-item" style="animation-delay:0.2s">
244
+ <div class="tl-left"><div class="tl-dot">📋</div><div class="tl-line"></div></div>
245
+ <div class="tl-body">
246
+ <div class="tl-pages">Up to 50 pages</div>
247
+ <div class="tl-days">2 Days</div>
248
+ <div class="tl-desc">Medium-length records completed in 2 days.</div>
249
+ </div>
250
+ </div>
251
+ <div class="tl-item" style="animation-delay:0.3s">
252
+ <div class="tl-left"><div class="tl-dot">📚</div></div>
253
+ <div class="tl-body">
254
+ <div class="tl-pages">50+ pages</div>
255
+ <div class="tl-days">3 – 7 Days</div>
256
+ <div class="tl-desc">Exact duration depends on the total page count. You'll be informed on submission day.</div>
257
+ </div>
258
+ </div>
259
+ </div>
260
+
261
+ <!-- Rules -->
262
+ <div class="section-label">📌 Important Rules</div>
263
+ <div class="rules">
264
+ <div class="rule" style="animation-delay:0.1s">
265
+ <span class="rule-icon">📎</span>
266
+ <div>The <strong>PDF file shared to our number will be written as-is.</strong> Nothing extra will be added, and nothing will be removed or cut off.</div>
267
+ </div>
268
+ <div class="rule" style="animation-delay:0.15s">
269
+ <span class="rule-icon">🖊️</span>
270
+ <div>If your record contains <strong>complex diagrams or drawings</strong>, an additional <strong>₹50 will be charged</strong> on top of the base price.</div>
271
+ </div>
272
+ <div class="rule" style="animation-delay:0.2s">
273
+ <span class="rule-icon">📅</span>
274
+ <div>The <strong>exact submission date</strong> will be announced to you at the time of record pick-up itself.</div>
275
+ </div>
276
+ </div>
277
+
278
+ <!-- Payment warning -->
279
+ <div class="payment-box" style="animation-delay:0.25s">
280
+ <div class="pay-icon">💳</div>
281
+ <h3>Payment Before Submission</h3>
282
+ <p>The payment must be completed <strong>before handing over your record.</strong> We do not accept post-completion payments. This ensures a smooth, problem-free process for both parties. Please pay first, then give your record for writing.</p>
283
+ </div>
284
+
285
+ <!-- Mistake policy -->
286
+ <div class="policy-box" style="animation-delay:0.3s">
287
+ <strong>🔍 Mistake Policy</strong><br/>
288
+ If you feel there was a mistake from our side, let us know. We'll review it carefully — and if we find there is actually a mistake, we'll correct it without any problem, free of charge.
289
+ </div>
290
+
291
+ <!-- Contact / WhatsApp -->
292
+ <div class="section-label">📞 Contact & Orders</div>
293
+ <div class="contact-block" style="animation-delay:0.35s">
294
+ <div class="ct-label">Available Anytime</div>
295
+ <div class="ct-sub">All orders must be placed to this number only.<br/>Send your PDF and confirm your pick-up here.</div>
296
+ <a href="https://wa.me/91XXXXXXXXXX" class="wa-btn" id="waLink">
297
+ <span>💬</span> Order on WhatsApp
298
+ </a>
299
+ <div class="wa-number" id="waNumber">+91 XXXXX XXXXX</div>
300
+ <div class="wa-note">Number will be updated shortly</div>
301
+ </div>
302
+
303
+ <div class="footer-note">
304
+ Thank you for choosing <strong>RECOM</strong>.<br/>Have a great day! 😊
305
+ </div>
306
+
307
+ <!-- CTA to next step -->
308
+ <button class="btn" onclick="goContact()">Proceed to Book →</button>
309
+
310
+ </div>
311
+
312
+ <script>
313
+ // Pass name/class/section through to next page
314
+ const params = new URLSearchParams(window.location.search);
315
+ function goContact() {
316
+ window.location.href = `/contact?${params.toString()}`;
317
+ }
318
+ </script>
319
+ </body>
320
+ </html>
templates/success.html ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE 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>RECOM — Booking Confirmed!</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet"/>
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root { --orange: #F26419; --peach: #F9A87E; --cream: #FFF3EC; --deep: #3D1A00; --mid: #7A3B10; --light-orange: #FDDCC4; }
11
+ body {
12
+ font-family: 'DM Sans', sans-serif; background: var(--cream);
13
+ min-height: 100vh; display: flex; flex-direction: column;
14
+ align-items: center; justify-content: center; overflow-x: hidden; padding: 40px 20px;
15
+ }
16
+ body::before {
17
+ content: ''; position: fixed; top: -100px; right: -100px;
18
+ width: 400px; height: 400px; border-radius: 50%;
19
+ background: radial-gradient(circle, var(--peach) 0%, transparent 70%);
20
+ opacity: 0.45; pointer-events: none;
21
+ }
22
+ .icon-wrap {
23
+ width: 90px; height: 90px; background: var(--orange); border-radius: 50%;
24
+ display: flex; align-items: center; justify-content: center;
25
+ font-size: 40px; margin-bottom: 24px;
26
+ box-shadow: 0 12px 36px rgba(242,100,25,0.35);
27
+ animation: pop 0.5s cubic-bezier(0.34,1.56,0.64,1) both;
28
+ }
29
+ @keyframes pop {
30
+ from { transform: scale(0); opacity: 0; }
31
+ to { transform: scale(1); opacity: 1; }
32
+ }
33
+ h2 {
34
+ font-family: 'Playfair Display', serif; font-size: 34px;
35
+ color: var(--deep); margin-bottom: 12px; text-align: center;
36
+ animation: fadeUp 0.5s 0.3s ease both;
37
+ }
38
+ p {
39
+ font-size: 15px; color: var(--mid); font-weight: 300;
40
+ max-width: 340px; text-align: center; line-height: 1.7;
41
+ margin-bottom: 8px; animation: fadeUp 0.5s 0.4s ease both;
42
+ }
43
+ .price-note {
44
+ display: inline-flex; align-items: center; gap: 8px;
45
+ background: var(--orange); color: #fff;
46
+ padding: 10px 24px; border-radius: 100px; font-size: 15px;
47
+ margin: 20px 0; font-weight: 500; animation: fadeUp 0.5s 0.5s ease both;
48
+ box-shadow: 0 6px 20px rgba(242,100,25,0.28);
49
+ }
50
+ .steps-done {
51
+ display: flex; flex-direction: column; gap: 10px;
52
+ background: #fff; border: 1.5px solid var(--light-orange);
53
+ border-radius: 18px; padding: 24px 28px; margin: 20px 0;
54
+ width: min(360px, 90vw); animation: fadeUp 0.5s 0.6s ease both;
55
+ }
56
+ .step-row { display: flex; align-items: center; gap: 12px; font-size: 14px; color: var(--mid); }
57
+ .step-row .dot { width: 28px; height: 28px; background: var(--light-orange); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
58
+ a.back {
59
+ font-size: 14px; color: var(--orange); text-decoration: none;
60
+ font-weight: 500; margin-top: 10px; animation: fadeUp 0.5s 0.7s ease both;
61
+ }
62
+ a.back:hover { text-decoration: underline; }
63
+ @keyframes fadeUp {
64
+ from { opacity: 0; transform: translateY(16px); }
65
+ to { opacity: 1; transform: translateY(0); }
66
+ }
67
+ </style>
68
+ </head>
69
+ <body>
70
+ <div class="icon-wrap">🎉</div>
71
+ <h2>Booking Confirmed!</h2>
72
+ <p>We've received your details. Our team will reach out to you shortly to arrange pick-up.</p>
73
+
74
+ <div class="price-note">₹200 total · No hidden charges</div>
75
+
76
+ <div class="steps-done">
77
+ <div class="step-row"><div class="dot">📋</div> We'll call/WhatsApp you to confirm</div>
78
+ <div class="step-row"><div class="dot">🛵</div> Record picked up from your address</div>
79
+ <div class="step-row"><div class="dot">✏️</div> Record completed by our team</div>
80
+ <div class="step-row"><div class="dot">🏠</div> Dropped back at your doorstep</div>
81
+ </div>
82
+
83
+ <a href="/" class="back">← Submit another record</a>
84
+ </body>
85
+ </html>