elpaypg 0.0.0-stage → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +8 -0
- package/README.md +176 -2
- package/package.json +21 -4
- package/public/elpay-checkout.js +769 -0
- package/public/elpay-sms-gateway.apk +0 -0
- package/public/elpay-sms-gateway.apk.sha256 +1 -0
- package/public/elpay.js +785 -0
- package/public/fonts/dm-sans.woff2 +0 -0
- package/public/fonts/sora.woff2 +0 -0
- package/public/views/checkout.html +2839 -0
- package/public/views/partials/auth.html +110 -0
- package/public/views/partials/footer.html +54 -0
- package/public/views/partials/header.html +101 -0
- package/public/views/partials/modals.html +179 -0
- package/public/views/partials/payment-methods.html +526 -0
- package/public/views/partials/sidebar.html +75 -0
- package/public/views/partials/splash.html +35 -0
- package/src/__tests__/smoke.test.js +8 -0
- package/src/auth-guard.js +95 -0
- package/src/index.js +137 -0
- package/src/router.js +46 -0
- package/src/routes/admin.routes.js +2424 -0
- package/src/routes/checkout.routes.js +2000 -0
- package/src/routes/customer.routes.js +650 -0
- package/src/routes/device.routes.js +303 -0
- package/src/routes/payments.routes.js +446 -0
- package/src/routes/pollers.routes.js +653 -0
- package/src/services/observer-poller.service.js +369 -0
- package/src/services/tunnel-manager.js +130 -0
- package/src/services/whatsapp-berry.service.js +743 -0
- package/src/vendor/common/__tests__/common.test.js +297 -0
- package/src/vendor/common/__tests__/common.test.ts +160 -0
- package/src/vendor/common/contracts.js +64 -0
- package/src/vendor/common/contracts.ts +188 -0
- package/src/vendor/common/crypto.js +132 -0
- package/src/vendor/common/crypto.ts +112 -0
- package/src/vendor/common/enums.js +91 -0
- package/src/vendor/common/enums.ts +91 -0
- package/src/vendor/common/index.js +12 -0
- package/src/vendor/common/index.ts +8 -0
- package/src/vendor/common/money.js +62 -0
- package/src/vendor/common/money.ts +56 -0
- package/src/vendor/common/observation.js +27 -0
- package/src/vendor/common/observation.ts +52 -0
- package/src/vendor/common/runtime-config.js +246 -0
- package/src/vendor/common/secrets.js +374 -0
- package/src/vendor/common/state-machine.d.ts +1 -0
- package/src/vendor/common/state-machine.js +1 -0
- package/src/vendor/common/state-transitions.js +85 -0
- package/src/vendor/common/tunnel-command.js +59 -0
- package/src/vendor/common/upi-providers.js +389 -0
- package/src/vendor/common/upi-providers.ts +400 -0
- package/src/vendor/common/upi.js +69 -0
- package/src/vendor/common/upi.ts +61 -0
- package/src/vendor/core/__tests__/core.test.js +683 -0
- package/src/vendor/core/__tests__/queue-timing.test.js +237 -0
- package/src/vendor/core/__tests__/webhook-engine.test.js +243 -0
- package/src/vendor/core/attribution-engine.js +855 -0
- package/src/vendor/core/bank-email-parser.js +105 -0
- package/src/vendor/core/bank-sms-parser.js +183 -0
- package/src/vendor/core/device-security.js +506 -0
- package/src/vendor/core/index.js +13 -0
- package/src/vendor/core/normalizer.js +165 -0
- package/src/vendor/core/qr-lib.js +8 -0
- package/src/vendor/core/qr.js +62 -0
- package/src/vendor/core/queue-engine.js +153 -0
- package/src/vendor/core/recovery-engine.js +159 -0
- package/src/vendor/core/state-machine.js +42 -0
- package/src/vendor/core/timing-engine.js +272 -0
- package/src/vendor/core/verification-pipeline.js +1164 -0
- package/src/vendor/core/webhook-engine.js +280 -0
- package/src/vendor/db/__tests__/auth-matrix.test.js +564 -0
- package/src/vendor/db/__tests__/customer-reset.test.js +95 -0
- package/src/vendor/db/__tests__/db.test.js +265 -0
- package/src/vendor/db/__tests__/schema-parity.test.js +137 -0
- package/src/vendor/db/__tests__/sqlite_verify.test.js +15 -0
- package/src/vendor/db/database.js +181 -0
- package/src/vendor/db/index.js +12 -0
- package/src/vendor/db/migrate.js +210 -0
- package/src/vendor/db/repositories/audit-log.repository.js +68 -0
- package/src/vendor/db/repositories/customer-session.repository.js +181 -0
- package/src/vendor/db/repositories/customer.repository.js +636 -0
- package/src/vendor/db/repositories/device.repository.js +285 -0
- package/src/vendor/db/repositories/merchant.repository.js +158 -0
- package/src/vendor/db/repositories/observation.repository.js +124 -0
- package/src/vendor/db/repositories/payment-session.repository.js +618 -0
- package/src/vendor/db/repositories/receiving-account.repository.js +244 -0
- package/src/vendor/db/repositories/support-ticket.repository.js +140 -0
- package/src/vendor/db/schema.sql +266 -0
- package/src/vendor/db/sqlite-schema.sql +270 -0
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
<!-- MAIN PAYMENT GATEWAY INTERFACE -->
|
|
2
|
+
<div id="paymentGatewayInterface" hidden>
|
|
3
|
+
|
|
4
|
+
<!-- DYNAMIC PAYMENT METHOD SELECTOR BAR (ONLINE / OFFLINE MODALITY TABS) -->
|
|
5
|
+
<div id="paymentMethodSelectorBar" class="ypg-method-selector-bar" style="display:{{METHOD_SELECTOR_DISPLAY}};">
|
|
6
|
+
<button type="button" class="ypg-method-tab active" id="tabMethodUpi" onclick="selectPaymentMethod('UPI')">
|
|
7
|
+
<img src="/icons/upi.svg" alt="UPI" class="ypg-tab-icon" style="height:15px;" />
|
|
8
|
+
<span>UPI QR</span>
|
|
9
|
+
</button>
|
|
10
|
+
<button type="button" class="ypg-method-tab" id="tabMethodCod" onclick="selectPaymentMethod('COD')"
|
|
11
|
+
style="{{TAB_COD_STYLE}}">
|
|
12
|
+
<img src="/icons/cash.svg" alt="COD" class="ypg-tab-icon" style="height:14px; width:14px;" />
|
|
13
|
+
<span>Cash on Delivery</span>
|
|
14
|
+
</button>
|
|
15
|
+
<button type="button" class="ypg-method-tab" id="tabMethodCash"
|
|
16
|
+
onclick="selectPaymentMethod('CASH_COUNTER')" style="{{TAB_CASH_STYLE}}">
|
|
17
|
+
<img src="/icons/cash.svg" alt="Cash" class="ypg-tab-icon" style="height:14px; width:14px;" />
|
|
18
|
+
<span>Cash</span>
|
|
19
|
+
</button>
|
|
20
|
+
<button type="button" class="ypg-method-tab" id="tabMethodCard"
|
|
21
|
+
onclick="selectPaymentMethod('CARD_COUNTER')" style="{{TAB_CARD_STYLE}}">
|
|
22
|
+
<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" style="margin-right:4px; vertical-align:middle;"><rect x="2" y="5" width="20" height="14" rx="2"/><line x1="2" y1="10" x2="22" y2="10"/></svg>
|
|
23
|
+
<span>Card</span>
|
|
24
|
+
</button>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- PC 2-SUB-COLUMN CONTAINER (Exact Razorpay Frame 002 layout on Desktop) -->
|
|
28
|
+
<div class="ypg-pc-columns">
|
|
29
|
+
<!-- PC LEFT METHODS SUB-COLUMN -->
|
|
30
|
+
<div class="ypg-pc-methods-list" id="pcMethodsList">
|
|
31
|
+
<!-- UPI Card -->
|
|
32
|
+
<div class="ypg-pc-method-card is-active" id="pcMethodCardUpi" onclick="selectPaymentMethod('UPI')">
|
|
33
|
+
<div class="ypg-pc-method-header">
|
|
34
|
+
<img src="/icons/upi.svg" alt="UPI" style="height:15px; margin-right:6px; vertical-align:middle;" />
|
|
35
|
+
<div class="ypg-pc-method-title">UPI QR</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="ypg-pc-method-sub">Scan & Pay via UPI Apps</div>
|
|
38
|
+
<div class="ypg-pc-method-icons">
|
|
39
|
+
<img class="ypg-pc-mini-icon" src="/icons/gpay.png"
|
|
40
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.gpay" alt="GPay" />
|
|
41
|
+
<img class="ypg-pc-mini-icon" src="/icons/phonepe.png"
|
|
42
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.phonepe" alt="PhonePe" />
|
|
43
|
+
<img class="ypg-pc-mini-icon" src="/icons/paytm.png"
|
|
44
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.paytm" alt="Paytm" />
|
|
45
|
+
<img class="ypg-pc-mini-icon" src="/icons/cred.png"
|
|
46
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.cred" alt="CRED" />
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- Cash at Till Card (Offline Mode) -->
|
|
51
|
+
<div class="ypg-pc-method-card" id="pcMethodCardCash" onclick="selectPaymentMethod('CASH_COUNTER')" style="{{PC_CASH_STYLE}}">
|
|
52
|
+
<div class="ypg-pc-method-header">
|
|
53
|
+
<img src="/icons/cash.svg" alt="Cash" style="width:16px; height:16px; margin-right:6px; vertical-align:middle;" />
|
|
54
|
+
<div class="ypg-pc-method-title">Cash at Till</div>
|
|
55
|
+
<span class="ypg-pc-cash-pill">Counter</span>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="ypg-pc-method-sub">Pay cash directly to cashier</div>
|
|
58
|
+
<div class="ypg-pc-method-icons" style="margin-top:6px;">
|
|
59
|
+
<span style="font-size:10.5px; font-weight:700; color:#15803d; background:#dcfce7; padding:2px 8px; border-radius:5px; display:inline-flex; align-items:center; gap:4px; border:1px solid #bbf7d0;">
|
|
60
|
+
<img src="/icons/cash.svg" alt="Cash" style="width:12px; height:12px;" />
|
|
61
|
+
Physical Cash
|
|
62
|
+
</span>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<!-- Card at Counter (Offline Mode) -->
|
|
67
|
+
<div class="ypg-pc-method-card" id="pcMethodCardCard" onclick="selectPaymentMethod('CARD_COUNTER')" style="{{PC_CARD_STYLE}}">
|
|
68
|
+
<div class="ypg-pc-method-header">
|
|
69
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" style="margin-right:6px; vertical-align:middle; color:#475569;"><rect x="2" y="5" width="20" height="14" rx="2"/><line x1="2" y1="10" x2="22" y2="10"/></svg>
|
|
70
|
+
<div class="ypg-pc-method-title">Card at Counter</div>
|
|
71
|
+
<span class="ypg-pc-cash-pill" style="background:#f1f5f9; color:#475569;">POS</span>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="ypg-pc-method-sub">Swipe or tap card at POS desk</div>
|
|
74
|
+
<div class="ypg-pc-method-icons" style="gap:5px; margin-top:6px; display:flex; align-items:center;">
|
|
75
|
+
<img src="/icons/visa.svg" alt="Visa" style="height:15px; width:auto; object-fit:contain;" />
|
|
76
|
+
<img src="/icons/mastercard.svg" alt="Mastercard" style="height:15px; width:auto; object-fit:contain;" />
|
|
77
|
+
<img src="/icons/rupay.svg" alt="RuPay" style="height:15px; width:auto; object-fit:contain;" />
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<!-- Cash on Delivery (COD) Card (Online Mode) -->
|
|
82
|
+
<div class="ypg-pc-method-card" id="pcMethodCardCod" onclick="selectPaymentMethod('COD')" style="{{PC_COD_STYLE}}">
|
|
83
|
+
<div class="ypg-pc-method-header">
|
|
84
|
+
<img src="/icons/cash.svg" alt="COD" style="width:16px; height:16px; margin-right:6px; vertical-align:middle;" />
|
|
85
|
+
<div class="ypg-pc-method-title">Cash on Delivery</div>
|
|
86
|
+
<span class="ypg-pc-cash-pill" style="background:#fef3c7; color:#92400e;">COD</span>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="ypg-pc-method-sub">Pay physical cash at doorstep</div>
|
|
89
|
+
<div class="ypg-pc-method-icons" style="margin-top:6px;">
|
|
90
|
+
<span style="font-size:10.5px; font-weight:700; color:#b45309; background:#fef3c7; padding:2px 8px; border-radius:5px; display:inline-flex; align-items:center; gap:4px; border:1px solid #fde68a;">
|
|
91
|
+
<img src="/icons/cash.svg" alt="COD" style="width:12px; height:12px;" />
|
|
92
|
+
Doorstep Cash
|
|
93
|
+
</span>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<!-- PC RIGHT ACTIVE PAYMENT WORKSPACE -->
|
|
99
|
+
<div class="ypg-pc-active-view">
|
|
100
|
+
<!-- VIEW A: PURE UPI QR INTERFACE -->
|
|
101
|
+
<div id="viewUpiContent">
|
|
102
|
+
<h2 class="ypg-page-title">UPI QR Payment</h2>
|
|
103
|
+
|
|
104
|
+
<!-- Section Label & Countdown Timer -->
|
|
105
|
+
<div class="ypg-section-label-row">
|
|
106
|
+
<span class="ypg-section-heading">Scan & Pay via UPI</span>
|
|
107
|
+
<div class="ypg-countdown-pill" id="activeTimerBadge">
|
|
108
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
109
|
+
stroke-width="2.2">
|
|
110
|
+
<circle cx="12" cy="12" r="10" />
|
|
111
|
+
<polyline points="12 6 12 12 16 14" />
|
|
112
|
+
</svg>
|
|
113
|
+
<span id="activeTimerText">05:00</span>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<!-- UPI Server Health Indicator & Downtime Warning -->
|
|
118
|
+
<div class="ypg-server-health-indicator {{SERVER_HEALTH_CLASS}}" id="upiServerHealthIndicator">
|
|
119
|
+
<span class="ypg-pulse-dot" id="serverPulseDot"></span>
|
|
120
|
+
<span id="serverStatusLabel">{{SERVER_HEALTH_LABEL}}</span>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div class="{{DOWNTIME_ALERT_CLASS}}" id="serverDowntimeAlert" style="display:{{DOWNTIME_ALERT_STYLE}};">
|
|
124
|
+
<div class="ypg-downtime-icon">
|
|
125
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#d97706" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="ypg-downtime-info">
|
|
128
|
+
<div class="ypg-downtime-heading">{{DOWNTIME_HEADING}}</div>
|
|
129
|
+
<div class="ypg-downtime-msg" id="serverDowntimeMsg">
|
|
130
|
+
{{DOWNTIME_MSG}}
|
|
131
|
+
</div>
|
|
132
|
+
<button type="button" class="ypg-btn-downtime-alt" id="btnDowntimeCashAlt"
|
|
133
|
+
onclick="switchMethodFromDowntime()" style="display:{{DOWNTIME_ALT_BTN_DISPLAY}};">
|
|
134
|
+
{{DOWNTIME_ALT_BTN_LABEL}}
|
|
135
|
+
</button>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<!-- Core UPI QR Card -->
|
|
140
|
+
<div class="ypg-qr-card-container">
|
|
141
|
+
<!-- Left: QR Box -->
|
|
142
|
+
<div class="ypg-qr-image-box" id="qrImageContainer">
|
|
143
|
+
<div style="font-size:11px; color:#94a3b8; text-align:center;">Loading QR...</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<!-- Right: Prompt, UPI App Logos -->
|
|
147
|
+
<div class="ypg-qr-details-col">
|
|
148
|
+
<div class="ypg-qr-prompt-title">Scan the QR using any UPI App</div>
|
|
149
|
+
|
|
150
|
+
<!-- Brand Logos Row (Zero Fake Offers) -->
|
|
151
|
+
<div style="display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:3px 0 6px 0;">
|
|
152
|
+
<div class="ypg-upi-logos-row">
|
|
153
|
+
<div class="ypg-app-icon" title="Google Pay"><img src="/icons/gpay.png"
|
|
154
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.gpay" alt="GPay" /></div>
|
|
155
|
+
<div class="ypg-app-icon" title="PhonePe"><img src="/icons/phonepe.png"
|
|
156
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.phonepe" alt="PhonePe" />
|
|
157
|
+
</div>
|
|
158
|
+
<div class="ypg-app-icon" title="Paytm"><img src="/icons/paytm.png"
|
|
159
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.paytm" alt="Paytm" /></div>
|
|
160
|
+
<div class="ypg-app-icon" title="CRED"><img src="/icons/cred.png"
|
|
161
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.cred" alt="CRED" /></div>
|
|
162
|
+
<div class="ypg-app-icon" title="BHIM UPI"><img src="/icons/bhim.png"
|
|
163
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.bhim" alt="BHIM" /></div>
|
|
164
|
+
<div class="ypg-app-icon" title="Amazon Pay"><img src="/icons/amazonpay.png"
|
|
165
|
+
onerror="if(window.FALLBACK_ICONS)this.src=window.FALLBACK_ICONS.amazonpay"
|
|
166
|
+
alt="Amazon Pay" /></div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<div style="font-size:12px; color:#64748b; line-height:1.4;">
|
|
171
|
+
Open any UPI app on your phone to scan and pay directly.
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
<!-- UPI Payment Instructions Guide -->
|
|
176
|
+
<div class="ypg-instructions-card">
|
|
177
|
+
<div class="ypg-instruction-step">
|
|
178
|
+
<div class="ypg-step-num">1</div>
|
|
179
|
+
<div>Open any UPI App on your phone (Google Pay, PhonePe, Paytm, CRED).</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="ypg-instruction-step">
|
|
182
|
+
<div class="ypg-step-num">2</div>
|
|
183
|
+
<div>Scan the QR code above and complete the payment of <strong>₹{{AMOUNT}}</strong>.</div>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="ypg-instruction-step">
|
|
186
|
+
<div class="ypg-step-num">3</div>
|
|
187
|
+
<div>Payment is detected automatically, or tap <strong>Continue</strong> below after paying.</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<!-- VIEW COD: CASH ON DELIVERY (ONLINE SELLING MODE) -->
|
|
193
|
+
<div id="viewCodContent" hidden>
|
|
194
|
+
<div class="ypg-section-label-row" style="margin-top:0; margin-bottom:12px;">
|
|
195
|
+
<h2 class="ypg-page-title" style="margin-bottom:0;">Cash on Delivery (COD)</h2>
|
|
196
|
+
<div class="ypg-countdown-pill" id="codTimerBadge">
|
|
197
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
198
|
+
stroke-width="2.2">
|
|
199
|
+
<circle cx="12" cy="12" r="10" />
|
|
200
|
+
<polyline points="12 6 12 12 16 14" />
|
|
201
|
+
</svg>
|
|
202
|
+
<span id="codTimerText">05:00</span>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
<!-- COD Notice Pill -->
|
|
207
|
+
<div class="ypg-offers-pill" style="background:#fef3c7; border-color:#fde68a;">
|
|
208
|
+
<div class="ypg-offers-left">
|
|
209
|
+
<div class="ypg-offer-icon-badge" style="background:#d97706; color:#fff; display:flex; align-items:center; justify-content:center;">
|
|
210
|
+
<img src="/icons/cash.svg" alt="Cash" style="width:14px; height:14px;" />
|
|
211
|
+
</div>
|
|
212
|
+
<span style="color:#92400e; font-weight:700;">Pay Cash at Doorstep</span>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="ypg-offers-right">
|
|
215
|
+
<span style="color:#b45309;">Verified Purchase</span>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<!-- Order Summary Card -->
|
|
220
|
+
<div
|
|
221
|
+
style="background:#ffffff; border:1px solid var(--ypg-border); border-radius:12px; padding:16px; margin:14px 0;">
|
|
222
|
+
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:12px;">
|
|
223
|
+
<span style="font-size:12px; color:#64748b; font-weight:600;">Payable on Delivery</span>
|
|
224
|
+
<strong style="font-size:20px; font-weight:800; color:#0f172a;">₹{{AMOUNT}}</strong>
|
|
225
|
+
</div>
|
|
226
|
+
<div
|
|
227
|
+
style="font-size:12px; color:#334155; line-height:1.5; border-top:1px dashed var(--ypg-border); padding-top:10px;">
|
|
228
|
+
<div>Recipient: <strong id="codCustomerName">Customer</strong></div>
|
|
229
|
+
<div>Contact: <span id="codCustomerPhone" style="font-family:monospace;">-</span></div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<!-- Doorstep Delivery Guide -->
|
|
234
|
+
<div class="ypg-instructions-card">
|
|
235
|
+
<div class="ypg-instruction-step">
|
|
236
|
+
<div class="ypg-step-num">1</div>
|
|
237
|
+
<div>Review and confirm your Cash on Delivery order below.</div>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="ypg-instruction-step">
|
|
240
|
+
<div class="ypg-step-num">2</div>
|
|
241
|
+
<div>Merchant processes and ships your package directly to your destination.</div>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="ypg-instruction-step">
|
|
244
|
+
<div class="ypg-step-num">3</div>
|
|
245
|
+
<div>Hand over <strong>₹{{AMOUNT}}</strong> in physical cash to the courier agent upon arrival.
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
<!-- Action Button with Pre-Purchase Confirmation -->
|
|
251
|
+
<button type="button" class="ypg-btn-auth-action" id="btnConfirmCod" onclick="promptConfirmCodOrder()"
|
|
252
|
+
style="background:#0d9f67; font-size:14px; padding:12px;">
|
|
253
|
+
<span>Confirm & Place COD Order (₹{{AMOUNT}})</span> ›
|
|
254
|
+
</button>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<!-- VIEW CASH: CASH AT BILLING TILL (OFFLINE SELLING MODE) -->
|
|
258
|
+
<div id="viewCashContent" hidden>
|
|
259
|
+
<h2 class="ypg-page-title">Pay with Cash at Till</h2>
|
|
260
|
+
|
|
261
|
+
<div
|
|
262
|
+
style="background:#f0fdf4; border:1px solid #bbf7d0; border-radius:12px; padding:16px; margin:14px 0; text-align:center;">
|
|
263
|
+
<div
|
|
264
|
+
style="font-size:12px; font-weight:700; color:#166534; text-transform:uppercase; letter-spacing:0.5px; margin-bottom:4px;">
|
|
265
|
+
Amount Payable to Cashier</div>
|
|
266
|
+
<div style="font-size:28px; font-weight:800; color:#15803d;">₹{{AMOUNT}}</div>
|
|
267
|
+
|
|
268
|
+
<!-- Prominent Cashier Order ID Display -->
|
|
269
|
+
<div
|
|
270
|
+
style="margin-top:12px; padding-top:10px; border-top:1px dashed #86efac; display:flex; align-items:center; justify-content:center; gap:8px;">
|
|
271
|
+
<span style="font-size:12px; font-weight:700; color:#166534;">Store Order ID:</span>
|
|
272
|
+
<span class="cashierOrderIdDisplay"
|
|
273
|
+
style="font-family:monospace; font-size:14.5px; font-weight:900; color:#0f172a; background:#ffffff; padding:3px 10px; border-radius:6px; border:1.5px solid #86efac; letter-spacing:0.5px;">#{{ORDER_ID}}</span>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<!-- Counter Desk Instructions -->
|
|
278
|
+
<div class="ypg-instructions-card">
|
|
279
|
+
<div style="font-size:12.5px; font-weight:700; color:#0f172a; margin-bottom:8px;">Counter Desk
|
|
280
|
+
Instructions</div>
|
|
281
|
+
<p style="font-size:12px; color:#475569; line-height:1.5; margin:0;" id="cashCounterDeskNotice">
|
|
282
|
+
{{COUNTER_INSTRUCTIONS}}
|
|
283
|
+
</p>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
<div class="ypg-live-observer-strip" style="background:#eff6ff; border-color:#bfdbfe; color:#1e40af;">
|
|
287
|
+
<div class="ypg-radar-dot" style="background:#2563eb; box-shadow:0 0 0 0 rgba(37,99,235,0.7);"></div>
|
|
288
|
+
<span>Awaiting Cashier Confirmation at Billing Desk...</span>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div style="font-size:12px; color:#64748b; text-align:center; padding:8px;">
|
|
292
|
+
Present this screen and Order ID to the cashier. Your payment will automatically update once confirmed
|
|
293
|
+
by staff.
|
|
294
|
+
</div>
|
|
295
|
+
</div>
|
|
296
|
+
|
|
297
|
+
<!-- VIEW CARD: CARD AT POS MACHINE (OFFLINE SELLING MODE) -->
|
|
298
|
+
<div id="viewCardContent" hidden>
|
|
299
|
+
<h2 class="ypg-page-title">Pay with Card at Counter</h2>
|
|
300
|
+
<div style="display:flex; align-items:center; justify-content:center; gap:8px; margin:6px 0 12px 0;">
|
|
301
|
+
<img src="/icons/visa.svg" alt="Visa" style="height:16px; width:auto; object-fit:contain;" />
|
|
302
|
+
<img src="/icons/mastercard.svg" alt="Mastercard" style="height:16px; width:auto; object-fit:contain;" />
|
|
303
|
+
<img src="/icons/rupay.svg" alt="RuPay" style="height:16px; width:auto; object-fit:contain;" />
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<div
|
|
307
|
+
style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:12px; padding:16px; margin:14px 0; text-align:center;">
|
|
308
|
+
<div
|
|
309
|
+
style="font-size:12px; font-weight:700; color:#475569; text-transform:uppercase; letter-spacing:0.5px; margin-bottom:4px;">
|
|
310
|
+
POS Terminal Charge</div>
|
|
311
|
+
<div style="font-size:28px; font-weight:800; color:#0f172a;">₹{{AMOUNT}}</div>
|
|
312
|
+
|
|
313
|
+
<!-- Prominent Cashier Order ID Display -->
|
|
314
|
+
<div
|
|
315
|
+
style="margin-top:12px; padding-top:10px; border-top:1px dashed #cbd5e1; display:flex; align-items:center; justify-content:center; gap:8px;">
|
|
316
|
+
<span style="font-size:12px; font-weight:700; color:#475569;">Store Order ID:</span>
|
|
317
|
+
<span class="cashierOrderIdDisplay"
|
|
318
|
+
style="font-family:monospace; font-size:14.5px; font-weight:900; color:#0f172a; background:#ffffff; padding:3px 10px; border-radius:6px; border:1.5px solid #cbd5e1; letter-spacing:0.5px;">#{{ORDER_ID}}</span>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
|
|
322
|
+
<!-- Counter Desk Instructions -->
|
|
323
|
+
<div class="ypg-instructions-card">
|
|
324
|
+
<div style="font-size:12.5px; font-weight:700; color:#0f172a; margin-bottom:8px;">POS Terminal
|
|
325
|
+
Instructions</div>
|
|
326
|
+
<p style="font-size:12px; color:#475569; line-height:1.5; margin:0;" id="cardCounterDeskNotice">
|
|
327
|
+
Please swipe, insert, or tap your credit or debit card on the store POS terminal at the billing
|
|
328
|
+
desk.
|
|
329
|
+
</p>
|
|
330
|
+
</div>
|
|
331
|
+
|
|
332
|
+
<div class="ypg-live-observer-strip" style="background:#eff6ff; border-color:#bfdbfe; color:#1e40af;">
|
|
333
|
+
<div class="ypg-radar-dot" style="background:#2563eb; box-shadow:0 0 0 0 rgba(37,99,235,0.7);"></div>
|
|
334
|
+
<span>Awaiting Cashier Slip Verification...</span>
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<div style="font-size:12px; color:#64748b; text-align:center; padding:8px;">
|
|
338
|
+
Present this screen and Order ID to the cashier. Cashier will verify transaction and approve this
|
|
339
|
+
checkout session.
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
|
|
343
|
+
<!-- VIEW B: QUEUE VIEW (WHEN CHANNELS ARE OCCUPIED) -->
|
|
344
|
+
<div id="viewQueuedContent" hidden>
|
|
345
|
+
<!-- Psychological Time-Saving Conversion Hook in Queue -->
|
|
346
|
+
<div id="queueTimeSavingBanner" class="ypg-time-saving-banner" style="display:none;"></div>
|
|
347
|
+
|
|
348
|
+
<div class="ypg-queue-container">
|
|
349
|
+
<div style="font-size:16px; font-weight:800; color:#1e3a8a;">You Are In Line for Payment</div>
|
|
350
|
+
<div class="ypg-queue-number" id="queueNumberDisplay">#1</div>
|
|
351
|
+
<div style="font-size:13px; font-weight:700; color:#2563eb;">
|
|
352
|
+
Estimated Wait: <span id="queueTimerText">00:30</span>
|
|
353
|
+
</div>
|
|
354
|
+
<div style="font-size:12px; color:#475569; margin-top:8px; line-height:1.4;">
|
|
355
|
+
Your payment slot is reserved. You will be activated automatically the moment the current
|
|
356
|
+
transaction finishes.
|
|
357
|
+
</div>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
|
|
361
|
+
<!-- VIEW C: RAZORPAY AUTHENTIC PROCESSING / VERIFYING VIEW -->
|
|
362
|
+
<div id="viewProcessingContent" hidden>
|
|
363
|
+
<div
|
|
364
|
+
style="padding:28px 16px 20px; display:flex; flex-direction:column; align-items:center; text-align:center;">
|
|
365
|
+
<div class="rzp-sheet-title">Processing your payment</div>
|
|
366
|
+
<div class="rzp-sheet-subtitle">This will only take a few seconds.</div>
|
|
367
|
+
<div class="rzp-coin-stage">
|
|
368
|
+
<div class="rzp-halo-ring"></div>
|
|
369
|
+
<div class="rzp-3d-coin">
|
|
370
|
+
<div class="rzp-coin-face rzp-coin-front">
|
|
371
|
+
<div class="rzp-coin-inner-rim"></div>
|
|
372
|
+
<div class="rzp-coin-sheen"></div>
|
|
373
|
+
</div>
|
|
374
|
+
<div class="rzp-coin-face rzp-coin-back">
|
|
375
|
+
<div class="rzp-coin-inner-rim"></div>
|
|
376
|
+
<div class="rzp-coin-sheen"></div>
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
</div>
|
|
380
|
+
<div style="font-size:12px; color:#64748b; margin-top:8px;">
|
|
381
|
+
Bank verification in progress (<span id="procTimerText">30s</span>)
|
|
382
|
+
</div>
|
|
383
|
+
<button type="button" class="rzp-sheet-cancel-btn" onclick="openCancelPaymentModal()"
|
|
384
|
+
style="max-width:320px;">Cancel</button>
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
|
|
388
|
+
<!-- VIEW D: SUCCESS CELEBRATION VIEW -->
|
|
389
|
+
<div id="viewSuccessContent" hidden>
|
|
390
|
+
<div class="ypg-success-box">
|
|
391
|
+
<div class="ypg-success-circle" id="successIconCircle">
|
|
392
|
+
<svg class="ypg-check-svg" viewBox="0 0 24 24">
|
|
393
|
+
<polyline class="ypg-check-path" points="20 6 9 17 4 12"></polyline>
|
|
394
|
+
</svg>
|
|
395
|
+
</div>
|
|
396
|
+
<div class="ypg-success-title" id="successTitleText">Payment Successful!</div>
|
|
397
|
+
<div class="ypg-success-amount" id="successAmountVal">₹{{AMOUNT}}</div>
|
|
398
|
+
<div style="font-size:12px; color:var(--ypg-text-muted); margin-bottom:14px;" id="successDescText">
|
|
399
|
+
Your payment was automatically verified by ELPAY PG banking observers.
|
|
400
|
+
</div>
|
|
401
|
+
<div id="successCodDevApiBox"
|
|
402
|
+
style="display:none; font-size:11.5px; background:#f1f5f9; padding:10px 14px; border-radius:8px; margin-bottom:14px; text-align:left; border:1px solid #e2e8f0;">
|
|
403
|
+
<span style="font-weight:700; color:#334155;">Developer Order API:</span>
|
|
404
|
+
<div
|
|
405
|
+
style="word-break:break-all; font-family:monospace; color:#2563eb; margin-top:3px; font-size:11px;"
|
|
406
|
+
id="successCodDevApiUrl"></div>
|
|
407
|
+
</div>
|
|
408
|
+
<a href="javascript:void(0)" class="btn-return-merchant" id="btnReturnStore">Return to Merchant</a>
|
|
409
|
+
</div>
|
|
410
|
+
</div>
|
|
411
|
+
|
|
412
|
+
<!-- VIEW E: DEDICATED PAYMENT EXPIRED / FAILED VIEW (CLEAN & CENTERED) -->
|
|
413
|
+
<div id="viewFailedContent" hidden>
|
|
414
|
+
<div class="ypg-expired-box">
|
|
415
|
+
<div class="ypg-expired-icon-wrap">
|
|
416
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"
|
|
417
|
+
stroke-linejoin="round">
|
|
418
|
+
<circle cx="12" cy="12" r="10" />
|
|
419
|
+
<polyline points="12 6 12 12 16 14" />
|
|
420
|
+
</svg>
|
|
421
|
+
</div>
|
|
422
|
+
<div class="ypg-expired-title" id="failedTitleText">Payment Session Expired</div>
|
|
423
|
+
<div class="ypg-expired-desc" id="failedDescriptionText">
|
|
424
|
+
The 5-minute active payment window elapsed before verification was completed. For security, please
|
|
425
|
+
return to the store and initiate a new order.
|
|
426
|
+
</div>
|
|
427
|
+
<div class="ypg-expired-actions">
|
|
428
|
+
<button type="button" class="ypg-btn-expired-primary" id="btnFailedAction"
|
|
429
|
+
onclick="handleRetryNewPayment()">
|
|
430
|
+
Try Again
|
|
431
|
+
</button>
|
|
432
|
+
<button type="button" class="ypg-btn-expired-secondary" onclick="openHelpModal()">
|
|
433
|
+
Help & Support
|
|
434
|
+
</button>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
</div>
|
|
438
|
+
|
|
439
|
+
<!-- VIEW F: DEDICATED FRAUD / SECURITY ALERT & ACCESS BLOCKED VIEW -->
|
|
440
|
+
<div id="viewBlockedContent" hidden>
|
|
441
|
+
<div class="ypg-blocked-box">
|
|
442
|
+
<div class="ypg-blocked-badge">
|
|
443
|
+
<span class="ypg-blocked-badge-dot"></span>
|
|
444
|
+
<span>Security Alert • Under Investigation</span>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="ypg-blocked-icon-wrap">
|
|
447
|
+
<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
|
|
448
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
|
449
|
+
<line x1="12" y1="8" x2="12" y2="12"/>
|
|
450
|
+
<line x1="12" y1="16" x2="12.01" y2="16"/>
|
|
451
|
+
</svg>
|
|
452
|
+
</div>
|
|
453
|
+
<div class="ypg-blocked-title" id="blockedTitleText">Fraudulent Activity Detected</div>
|
|
454
|
+
<div class="ypg-blocked-subtitle" id="blockedSubtitleText">Payment Session Terminated & Account Suspended</div>
|
|
455
|
+
|
|
456
|
+
<div class="ypg-blocked-card">
|
|
457
|
+
<p class="ypg-blocked-desc" id="blockedNoticeText">
|
|
458
|
+
Our automated verification engine detected fraudulent payment activity associated with this transaction. Access has been immediately suspended to protect network integrity.
|
|
459
|
+
</p>
|
|
460
|
+
<div class="ypg-blocked-investigation">
|
|
461
|
+
<span style="font-size:15px; line-height:1;">🔍</span>
|
|
462
|
+
<span><strong>Investigation In Progress:</strong> Our fraud risk & security operations team is reviewing the activity. Store administrator review is required before access can be restored.</span>
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
<div class="ypg-blocked-details">
|
|
467
|
+
<span class="ypg-blocked-details-label">Order Ref:</span>
|
|
468
|
+
<span class="ypg-blocked-details-val" id="blockedOrderRefVal">-</span>
|
|
469
|
+
<span class="ypg-blocked-details-label">Session ID:</span>
|
|
470
|
+
<span class="ypg-blocked-details-val" id="blockedSessionIdVal">-</span>
|
|
471
|
+
<span class="ypg-blocked-details-label">Status:</span>
|
|
472
|
+
<span class="ypg-blocked-details-val" style="color:#ef4444; font-weight:800;">ACCOUNT BLOCKED</span>
|
|
473
|
+
<span class="ypg-blocked-details-label">Timestamp:</span>
|
|
474
|
+
<span class="ypg-blocked-details-val" id="blockedTimestampVal">-</span>
|
|
475
|
+
</div>
|
|
476
|
+
|
|
477
|
+
<div style="display:flex; flex-direction:column; gap:8px; width:100%; max-width:340px;">
|
|
478
|
+
<button type="button" class="ypg-btn-blocked-exit" onclick="handleBlockedExit()">
|
|
479
|
+
<span>Return to Merchant Store</span>
|
|
480
|
+
</button>
|
|
481
|
+
<button type="button" onclick="openHelpModal()" style="background:none; border:none; color:#64748b; font-size:12px; font-weight:600; cursor:pointer; text-decoration:underline; padding:6px;">
|
|
482
|
+
Need help? View Security Case Reference
|
|
483
|
+
</button>
|
|
484
|
+
</div>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
|
|
488
|
+
<!-- VIEW G: DEDICATED DUPLICATE SESSION DETECTED VIEW (DEVICE BINDING SECURITY) -->
|
|
489
|
+
<div id="viewDuplicateSessionContent" hidden>
|
|
490
|
+
<div class="ypg-duplicate-box">
|
|
491
|
+
<div class="ypg-duplicate-badge">
|
|
492
|
+
<span class="ypg-duplicate-badge-dot"></span>
|
|
493
|
+
<span>Device Security Check</span>
|
|
494
|
+
</div>
|
|
495
|
+
<div class="ypg-duplicate-icon-wrap">
|
|
496
|
+
<svg viewBox="0 0 24 24" width="34" height="34" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
|
|
497
|
+
<rect x="2" y="3" width="20" height="14" rx="2" ry="2"/>
|
|
498
|
+
<line x1="8" y1="21" x2="16" y2="21"/>
|
|
499
|
+
<line x1="12" y1="17" x2="12" y2="21"/>
|
|
500
|
+
<line x1="12" y1="7" x2="12" y2="10"/>
|
|
501
|
+
<line x1="12" y1="13" x2="12.01" y2="13"/>
|
|
502
|
+
</svg>
|
|
503
|
+
</div>
|
|
504
|
+
<div class="ypg-duplicate-title" id="dupSessionTitleText">Duplicate Session Detected</div>
|
|
505
|
+
<div class="ypg-duplicate-subtitle" id="dupSessionSubtitleText">Payment Session Active on Another Device</div>
|
|
506
|
+
|
|
507
|
+
<div class="ypg-duplicate-card">
|
|
508
|
+
<p class="ypg-duplicate-desc" style="font-weight:700; color:#0f172a; margin-bottom:6px;">
|
|
509
|
+
This payment session was created on another device.
|
|
510
|
+
</p>
|
|
511
|
+
<p class="ypg-duplicate-desc" style="color:#64748b; font-size:12.5px;">
|
|
512
|
+
For security reasons, this session cannot be continued from this device.
|
|
513
|
+
</p>
|
|
514
|
+
</div>
|
|
515
|
+
|
|
516
|
+
<div style="display:flex; flex-direction:column; gap:8px; width:100%; max-width:360px;">
|
|
517
|
+
<button type="button" class="ypg-btn-duplicate-action" id="btnEndAndRestartPayment" onclick="handleEndAndStartNewPayment()">
|
|
518
|
+
<span>END SESSION & START NEW PAYMENT</span>
|
|
519
|
+
</button>
|
|
520
|
+
</div>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
524
|
+
|
|
525
|
+
</div>
|
|
526
|
+
</main>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!-- PC LEFT SIDEBAR (Razorpay 2-Column Exact Layout for Desktop) -->
|
|
2
|
+
<aside class="ypg-pc-sidebar">
|
|
3
|
+
<div>
|
|
4
|
+
<!-- Merchant Brand Header -->
|
|
5
|
+
<div class="ypg-pc-brand-header">
|
|
6
|
+
<div class="ypg-pc-avatar" id="pcMerchantAvatarBox">
|
|
7
|
+
<span id="pcMerchantAvatarLetter">M</span>
|
|
8
|
+
<img id="pcMerchantAvatarImg" alt="Logo" style="display:none;" />
|
|
9
|
+
</div>
|
|
10
|
+
<div class="ypg-pc-brand-info">
|
|
11
|
+
<div class="ypg-pc-merchant-name" id="pcMerchantName">{{MERCHANT_NAME}}</div>
|
|
12
|
+
<div class="ypg-pc-trust-badge" id="pcTrustBadge">
|
|
13
|
+
<svg class="ypg-pc-green-shield" viewBox="0 0 24 24" fill="none">
|
|
14
|
+
<path d="M12 2L3 6v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V6l-9-4z" fill="#10b981" />
|
|
15
|
+
<path d="M8.5 12l2.5 2.5 5-5" stroke="#ffffff" stroke-width="2.2" stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round" />
|
|
17
|
+
</svg>
|
|
18
|
+
<span id="pcTrustBadgeText">ELPAY PG Trusted Business</span>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<!-- Social Proof Banner -->
|
|
24
|
+
<div class="ypg-pc-social-proof" id="pcSocialProofWrap">
|
|
25
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
26
|
+
<circle cx="9" cy="21" r="1" />
|
|
27
|
+
<circle cx="20" cy="21" r="1" />
|
|
28
|
+
<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" />
|
|
29
|
+
</svg>
|
|
30
|
+
<span id="pcSocialProofText">500+ orders last month from {{MERCHANT_NAME}}</span>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- Price Summary Card (STRICTLY NO UPI ID VISIBLE) -->
|
|
34
|
+
<div class="ypg-pc-price-card">
|
|
35
|
+
<div class="ypg-pc-price-label">Price Summary</div>
|
|
36
|
+
<div class="ypg-pc-price-val" id="pcPriceSummaryAmount">₹{{AMOUNT}}</div>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<!-- User Identity Row -->
|
|
40
|
+
<div class="ypg-pc-row-btn" id="pcCustomerProfileRow" onclick="toggleAccountMenu(event)">
|
|
41
|
+
<div class="ypg-pc-row-left">
|
|
42
|
+
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
43
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />
|
|
44
|
+
<circle cx="12" cy="7" r="4" />
|
|
45
|
+
</svg>
|
|
46
|
+
<span id="pcCustomerProfileText">Using as Guest User</span>
|
|
47
|
+
</div>
|
|
48
|
+
<span class="ypg-pc-chevron">›</span>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- Bottom Isometric Shopping Bags Graphic -->
|
|
53
|
+
<div style="margin-top:auto;">
|
|
54
|
+
<div class="ypg-pc-bags-wrap">
|
|
55
|
+
<svg viewBox="0 0 260 160" width="220" height="135" fill="none">
|
|
56
|
+
<ellipse cx="130" cy="145" rx="100" ry="12" fill="rgba(0,0,0,0.18)" />
|
|
57
|
+
<!-- White / Cyan shopping bag with blue handles -->
|
|
58
|
+
<path d="M100 65 L135 60 L145 135 L90 140 Z" fill="#ffffff" stroke="#cbd5e1" stroke-width="1.5" />
|
|
59
|
+
<path d="M100 65 L135 60 L140 85 L95 90 Z" fill="#f1f5f9" />
|
|
60
|
+
<path d="M110 63 C110 48, 125 48, 125 61" stroke="#0284c7" stroke-width="3" fill="none"
|
|
61
|
+
stroke-linecap="round" />
|
|
62
|
+
<!-- Green shopping bag with % badge -->
|
|
63
|
+
<path d="M140 75 L180 70 L195 135 L135 140 Z" fill="#10b981" stroke="#059669" stroke-width="1.5" />
|
|
64
|
+
<path d="M150 73 C150 58, 168 58, 168 71" stroke="#047857" stroke-width="3" fill="none"
|
|
65
|
+
stroke-linecap="round" />
|
|
66
|
+
<circle cx="160" cy="98" r="14" fill="#34d399" />
|
|
67
|
+
<text x="160" y="103" font-size="12" font-weight="900" fill="#064e3b" text-anchor="middle">%</text>
|
|
68
|
+
<!-- Blue gift box with white ribbon -->
|
|
69
|
+
<path d="M55 100 L95 95 L105 140 L50 142 Z" fill="#0284c7" />
|
|
70
|
+
<path d="M50 100 L95 95 L95 105 L48 108 Z" fill="#38bdf8" />
|
|
71
|
+
<rect x="71" y="96" width="7" height="45" fill="#ffffff" />
|
|
72
|
+
</svg>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</aside>
|