secure checkout

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>VitaAmrita – Secure Checkout</title>

<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Cormorant+Garamond:wght@600;700&display=swap" rel="stylesheet">

<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>

<style>

:root {

  --g1:#0F7A4E; --g2:#17A567; --g3:#1DC97C; --gpal:#EAF8F1; --gpale:#F4FCF8;

  --org:#FF6B2B; --orgl:#FFF2EC;

  --ink:#111B17; --mid:#3D5A48; --soft:#7A9688; --xsoft:#B8CFC5;

  --border:#D1E8DC; --white:#FFFFFF; --cream:#F8FDFB;

  --err:#D63B3B; --gold:#D4900A; --goldl:#FFF8E6;

  --r:12px; --rs:8px;

  --sh: 0 2px 16px rgba(15,122,78,0.10);

}

*{margin:0;padding:0;box-sizing:border-box;}

body{font-family:'Manrope',sans-serif;background:var(--cream);color:var(--ink);min-height:100vh;}


/* ───── HEADER ───── */

.hdr{background:var(--white);border-bottom:1px solid var(--border);padding:0 20px;height:58px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:200;box-shadow:var(--sh);}

.hdr-logo{display:flex;align-items:center;gap:9px;}

.hdr-leaf{width:34px;height:34px;background:linear-gradient(135deg,var(--g1),var(--g3));border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:17px;}

.hdr-name{font-family:'Cormorant Garamond',serif;font-size:21px;font-weight:700;color:var(--g1);letter-spacing:-0.3px;}

.hdr-secure{display:flex;align-items:center;gap:5px;font-size:12px;font-weight:700;color:var(--soft);}


/* ───── STEPS BAR ───── */

.steps-bar{background:var(--white);padding:14px 20px;border-bottom:1px solid var(--border);}

.steps-inner{max-width:440px;margin:0 auto;display:flex;align-items:center;}

.stp{display:flex;flex-direction:column;align-items:center;flex:1;position:relative;}

.stp:not(:last-child)::after{content:'';position:absolute;top:14px;left:55%;width:90%;height:2px;background:var(--border);transition:background .4s;}

.stp.done:not(:last-child)::after,.stp.act:not(:last-child)::after{background:var(--g2);}

.stp-c{width:28px;height:28px;border-radius:50%;background:var(--border);color:var(--soft);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;position:relative;z-index:1;transition:all .3s;}

.stp.act .stp-c{background:var(--g1);color:#fff;box-shadow:0 0 0 4px rgba(15,122,78,.18);}

.stp.done .stp-c{background:var(--g2);color:#fff;}

.stp-l{font-size:10px;font-weight:700;color:var(--soft);margin-top:5px;text-align:center;white-space:nowrap;}

.stp.act .stp-l{color:var(--g1);}


/* ───── LAYOUT ───── */

.wrap{max-width:980px;margin:0 auto;padding:24px 16px 60px;display:grid;grid-template-columns:1fr 348px;gap:24px;align-items:start;}

@media(max-width:720px){.wrap{grid-template-columns:1fr;}.ord-panel{order:-1;}}


/* ───── CARD ───── */

.card{background:var(--white);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden;margin-bottom:18px;}

.card-hd{padding:15px 22px;background:linear-gradient(90deg,var(--gpal),var(--white));border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;}

.card-ico{width:30px;height:30px;background:var(--g1);border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;}

.card-ttl{font-size:15px;font-weight:800;color:var(--g1);}

.card-bd{padding:22px;}


/* ───── FORM ───── */

.fsec{display:none;}

.fsec.on{display:block;animation:up .4s ease;}

@keyframes up{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

.fg{margin-bottom:16px;}

.fl{display:block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:var(--mid);margin-bottom:5px;}

.fl span{color:var(--err);}

.fi{width:100%;padding:11px 13px;border:1.5px solid var(--border);border-radius:var(--rs);font-family:'Manrope',sans-serif;font-size:14px;color:var(--ink);background:var(--white);transition:all .25s;-webkit-appearance:none;}

.fi:focus{outline:none;border-color:var(--g2);box-shadow:0 0 0 3px rgba(23,165,103,.14);}

.fi.err{border-color:var(--err);}

.fi[readonly]{background:var(--cream);color:var(--soft);}

.fhint{font-size:11px;color:var(--soft);margin-top:3px;}

.frow{display:grid;grid-template-columns:1fr 1fr;gap:13px;}

@media(max-width:400px){.frow{grid-template-columns:1fr;}}


/* ───── PAY OPTIONS ───── */

.pay-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-bottom:20px;}

.popt{border:2px solid var(--border);border-radius:var(--r);padding:16px 12px;cursor:pointer;text-align:center;transition:all .3s;position:relative;background:var(--white);}

.popt:hover{border-color:var(--g3);background:var(--gpale);}

.popt.sel{border-color:var(--g1);background:var(--gpal);box-shadow:0 0 0 3px rgba(15,122,78,.10);}

.popt input{display:none;}

.pchk{display:none;position:absolute;top:8px;right:8px;width:18px;height:18px;background:var(--g1);border-radius:50%;color:#fff;font-size:10px;font-weight:800;align-items:center;justify-content:center;}

.popt.sel .pchk{display:flex;}

.pemo{font-size:28px;margin-bottom:7px;}

.pnm{font-size:13px;font-weight:800;color:var(--ink);}

.psb{font-size:11px;color:var(--soft);margin-top:2px;}


/* ───── QR BOX ───── */

.qr-box{border:1.5px dashed var(--g3);border-radius:var(--r);padding:24px 18px;text-align:center;background:var(--gpale);margin-bottom:18px;}

.qr-ttl{font-size:13px;font-weight:800;color:var(--mid);margin-bottom:2px;}

.qr-amt{font-family:'Cormorant Garamond',serif;font-size:32px;font-weight:700;color:var(--g1);margin-bottom:14px;line-height:1;}

#qrWrap{display:flex;justify-content:center;margin-bottom:14px;}

#qrWrap canvas,#qrWrap img{border-radius:10px;padding:10px;background:#fff;box-shadow:0 4px 20px rgba(0,0,0,.12);}

.qr-apps{display:flex;justify-content:center;gap:8px;margin-bottom:12px;flex-wrap:wrap;}

.qr-app{font-size:11px;font-weight:700;color:var(--mid);background:#fff;border:1px solid var(--border);border-radius:5px;padding:4px 10px;}

.qr-uid{font-size:13px;font-weight:700;color:var(--g1);background:#fff;border:1px solid var(--border);border-radius:6px;padding:7px 14px;display:inline-block;margin-bottom:10px;letter-spacing:.4px;}

.qr-note{font-size:12px;color:var(--soft);line-height:1.6;}


/* Paid confirm */

.paid-box{background:var(--orgl);border:1.5px solid var(--org);border-radius:var(--r);padding:18px;margin-top:16px;}

.paid-q{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:12px;}

.paid-btns{display:flex;gap:10px;}

.pbtn-y,.pbtn-n{flex:1;padding:11px;border-radius:var(--rs);font-family:'Manrope',sans-serif;font-size:13px;font-weight:700;cursor:pointer;border:none;transition:all .25s;}

.pbtn-y{background:var(--g1);color:#fff;}

.pbtn-y:hover{background:var(--g2);}

.pbtn-n{background:#fff;color:var(--soft);border:1.5px solid var(--border);}


/* COD box */

.cod-box{background:var(--gpale);border:1.5px solid var(--border);border-radius:var(--r);padding:18px;margin-bottom:16px;}

.cod-ttl{font-size:14px;font-weight:800;color:var(--g1);margin-bottom:10px;}

.cod-li{list-style:none;}

.cod-li li{display:flex;gap:8px;font-size:13px;color:var(--mid);padding:4px 0;line-height:1.5;}

.cod-li li::before{content:'✓';color:var(--g2);font-weight:800;flex-shrink:0;}


/* ───── BUTTONS ───── */

.btn{width:100%;padding:14px;border-radius:var(--rs);font-family:'Manrope',sans-serif;font-size:15px;font-weight:800;cursor:pointer;border:none;transition:all .3s;display:flex;align-items:center;justify-content:center;gap:8px;}

.btn-green{background:linear-gradient(135deg,var(--g1),var(--g2));color:#fff;box-shadow:0 4px 14px rgba(15,122,78,.28);}

.btn-green:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(15,122,78,.36);}

.btn-green:disabled{opacity:.55;cursor:not-allowed;transform:none;}

.btn-back{background:none;border:none;color:var(--soft);font-family:'Manrope',sans-serif;font-size:13px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:4px;padding:0;margin-bottom:18px;}

.btn-back:hover{color:var(--g1);}

.brow{margin-top:20px;display:flex;flex-direction:column;gap:10px;}


/* ───── ORDER PANEL ───── */

/* Product loading skeleton */

.skel{background:linear-gradient(90deg,#edf5f1 25%,#dff0e8 50%,#edf5f1 75%);background-size:200% 100%;animation:skel .9s infinite;border-radius:6px;}

@keyframes skel{0%{background-position:200% 0}100%{background-position:-200% 0}}


.prod-card{display:flex;gap:13px;align-items:flex-start;background:var(--gpale);border-radius:var(--rs);padding:13px;margin-bottom:18px;border:1px solid var(--border);}

.prod-img{width:72px;height:72px;border-radius:9px;object-fit:cover;border:1px solid var(--border);flex-shrink:0;background:var(--gpal);}

.prod-img-ph{width:72px;height:72px;border-radius:9px;background:linear-gradient(135deg,var(--gpal),var(--gpale));display:flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0;border:1px solid var(--border);}

.prod-nm{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:3px;line-height:1.3;}

.prod-qty{font-size:12px;color:var(--soft);margin-bottom:5px;}

.prod-pr{font-size:17px;font-weight:800;color:var(--g1);}

.prod-mrp{font-size:12px;color:var(--xsoft);text-decoration:line-through;margin-left:4px;}

.prod-save{display:inline-block;background:var(--goldl);color:var(--gold);font-size:10px;font-weight:800;padding:2px 7px;border-radius:100px;margin-left:5px;}


.sum-lines{}

.sum-ln{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:13px;border-bottom:1px solid var(--gpal);color:var(--mid);}

.sum-ln:last-child{border:none;}

.sum-ln.tot{padding:13px 0 4px;font-size:15px;font-weight:800;color:var(--ink);border-top:2px solid var(--border);border-bottom:none;}

.sum-ln.tot .sv{font-size:21px;color:var(--g1);}

.sl{font-weight:600;}

.sv{font-weight:700;}

.free{color:var(--g2);font-weight:800;}


/* Trust */

.trust{display:grid;grid-template-columns:repeat(3,1fr);padding:14px;border-top:1px solid var(--border);}

.tr-it{text-align:center;}

.tr-em{font-size:18px;margin-bottom:3px;}

.tr-tx{font-size:10px;font-weight:700;color:var(--soft);line-height:1.3;}


/* ───── LOADING / SUCCESS ───── */

.overlay{position:fixed;inset:0;background:rgba(255,255,255,.9);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:999;}

.spin{width:44px;height:44px;border:4px solid var(--border);border-top-color:var(--g1);border-radius:50%;animation:sp .7s linear infinite;margin-bottom:14px;}

@keyframes sp{to{transform:rotate(360deg)}}

.ov-tx{font-size:14px;font-weight:700;color:var(--g1);}


/* Success */

.succ{text-align:center;padding:36px 20px;}

.succ-ico{width:76px;height:76px;background:linear-gradient(135deg,var(--g1),var(--g3));border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:34px;margin:0 auto 18px;animation:pop .5s cubic-bezier(.34,1.56,.64,1);}

@keyframes pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}

.succ-ttl{font-family:'Cormorant Garamond',serif;font-size:26px;font-weight:700;color:var(--g1);margin-bottom:8px;}

.succ-msg{font-size:13px;color:var(--soft);line-height:1.7;margin-bottom:20px;}

.succ-id{background:var(--gpal);border:1px solid var(--border);border-radius:var(--rs);padding:13px;margin-bottom:20px;font-size:13px;color:var(--mid);}

.succ-id strong{display:block;font-size:18px;font-weight:800;color:var(--g1);}

.succ-steps{text-align:left;background:var(--cream);border-radius:var(--rs);padding:14px;margin-bottom:20px;}

.succ-step{display:flex;gap:8px;font-size:13px;color:var(--mid);padding:4px 0;}


/* Toast */

.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(70px);background:var(--ink);color:#fff;padding:11px 20px;border-radius:100px;font-size:13px;font-weight:600;z-index:9999;transition:transform .4s cubic-bezier(.34,1.56,.64,1);white-space:nowrap;}

.toast.err{background:var(--err);}

.toast.on{transform:translateX(-50%) translateY(0);}

</style>

</head>

<body>


<!-- Overlay -->

<div class="overlay" id="overlay">

  <div class="spin"></div>

  <div class="ov-tx" id="ovTx">Processing your order…</div>

</div>


<!-- Toast -->

<div class="toast" id="toast"></div>


<!-- HEADER -->

<header class="hdr">

  <div class="hdr-logo">

    <div class="hdr-leaf">🌿</div>

    <div class="hdr-name">VitaAmrita</div>

  </div>

  <div class="hdr-secure">🔒 100% Secure Checkout</div>

</header>


<!-- STEPS -->

<div class="steps-bar">

  <div class="steps-inner">

    <div class="stp act" id="s1"><div class="stp-c">1</div><div class="stp-l">Details</div></div>

    <div class="stp" id="s2"><div class="stp-c">2</div><div class="stp-l">Payment</div></div>

    <div class="stp" id="s3"><div class="stp-c">✓</div><div class="stp-l">Confirmed</div></div>

  </div>

</div>


<!-- MAIN LAYOUT -->

<div class="wrap">


  <!-- ── LEFT COLUMN ── -->

  <div>


    <!-- STEP 1: DETAILS -->

    <div class="fsec on" id="step1">

      <div class="card">

        <div class="card-hd"><div class="card-ico">📦</div><div class="card-ttl">Delivery Details</div></div>

        <div class="card-bd">

          <div class="frow">

            <div class="fg">

              <label class="fl">Full Name <span>*</span></label>

              <input class="fi" id="fullName" type="text" placeholder="e.g. Ramesh Kumar" autocomplete="name">

            </div>

            <div class="fg">

              <label class="fl">Mobile Number <span>*</span></label>

              <input class="fi" id="phone" type="tel" placeholder="10-digit number" maxlength="10" autocomplete="tel">

            </div>

          </div>

          <div class="fg">

            <label class="fl">Email Address</label>

            <input class="fi" id="email" type="email" placeholder="For order updates (optional)" autocomplete="email">

          </div>

          <div class="fg">

            <label class="fl">Address Line 1 <span>*</span></label>

            <input class="fi" id="addr1" type="text" placeholder="House no., Building, Street name" autocomplete="address-line1">

          </div>

          <div class="fg">

            <label class="fl">Address Line 2</label>

            <input class="fi" id="addr2" type="text" placeholder="Area, Colony, Landmark (optional)" autocomplete="address-line2">

          </div>

          <div class="frow">

            <div class="fg">

              <label class="fl">City <span>*</span></label>

              <input class="fi" id="city" type="text" placeholder="City" autocomplete="address-level2">

            </div>

            <div class="fg">

              <label class="fl">State <span>*</span></label>

              <input class="fi" id="state" type="text" placeholder="State" autocomplete="address-level1">

            </div>

          </div>

          <div class="frow">

            <div class="fg">

              <label class="fl">PIN Code <span>*</span></label>

              <input class="fi" id="pin" type="tel" placeholder="6-digit PIN" maxlength="6" autocomplete="postal-code">

            </div>

            <div class="fg">

              <label class="fl">Country</label>

              <input class="fi" id="country" type="text" value="India" readonly>

            </div>

          </div>

          <div class="brow">

            <button class="btn btn-green" onclick="toStep2()">Continue to Payment →</button>

          </div>

        </div>

      </div>

    </div><!-- /step1 -->


    <!-- STEP 2: PAYMENT -->

    <div class="fsec" id="step2">

      <div class="card">

        <div class="card-hd"><div class="card-ico">💳</div><div class="card-ttl">Payment Method</div></div>

        <div class="card-bd">

          <button class="btn-back" onclick="toStep1()">← Back</button>


          <div class="pay-grid">

            <div class="popt sel" id="pUPI" onclick="selPay('upi')">

              <div class="pchk">✓</div>

              <input type="radio" name="pm" value="upi" checked>

              <div class="pemo">📱</div>

              <div class="pnm">UPI / QR Code</div>

              <div class="psb">GPay · PhonePe · Paytm</div>

            </div>

            <div class="popt" id="pCOD" onclick="selPay('cod')">

              <div class="pchk">✓</div>

              <input type="radio" name="pm" value="cod">

              <div class="pemo">🏠</div>

              <div class="pnm">Cash on Delivery</div>

              <div class="psb">Pay when delivered</div>

            </div>

          </div>


          <!-- UPI -->

          <div id="upiSec">

            <div class="qr-box">

              <div class="qr-ttl">Scan & Pay</div>

              <div class="qr-amt" id="qrAmt">₹0</div>

              <div id="qrWrap"></div>

              <div class="qr-apps">

                <div class="qr-app">📱 Google Pay</div>

                <div class="qr-app">📳 PhonePe</div>

                <div class="qr-app">💙 Paytm</div>

                <div class="qr-app">WhatsApp Pay</div>

              </div>

              <div class="qr-uid">UPI: 9893495444@ybl</div>

              <div class="qr-note">Open any UPI app → Scan QR → Pay the amount<br>Then tap <strong>"Yes, I have paid"</strong> below</div>

            </div>

            <div class="paid-box">

              <div class="paid-q">✅ Have you completed the UPI payment?</div>

              <div class="paid-btns">

                <button class="pbtn-y" onclick="confirmUPI()">✓ Yes, I have paid</button>

                <button class="pbtn-n" onclick="toast('Please complete payment first',true)">Not yet</button>

              </div>

            </div>

          </div>


          <!-- COD -->

          <div id="codSec" style="display:none">

            <div class="cod-box">

              <div class="cod-ttl">💵 Cash on Delivery Selected</div>

              <ul class="cod-li">

                <li>Pay cash when your order arrives at your door</li>

                <li>Free delivery across India</li>

                <li>Delivery in 5–7 working days</li>

                <li>WhatsApp tracking updates on <span id="codPhone" style="font-weight:800"></span></li>

              </ul>

            </div>

            <div class="brow">

              <button class="btn btn-green" onclick="placeOrder('COD')">🏠 Place Order – Pay on Delivery</button>

            </div>

          </div>


        </div>

      </div>

    </div><!-- /step2 -->


    <!-- SUCCESS -->

    <div class="card" id="succCard" style="display:none">

      <div class="card-bd">

        <div class="succ">

          <div class="succ-ico">✓</div>

          <div class="succ-ttl">Order Confirmed!</div>

          <div class="succ-msg">Your VitaAmrita order has been placed successfully.<br>You'll receive a WhatsApp confirmation shortly.</div>

          <div class="succ-id">

            Order ID

            <strong id="succOID">#VA-000000</strong>

            <div style="font-size:11px;margin-top:4px;color:var(--soft)">Save this for tracking</div>

          </div>

          <div class="succ-steps">

            <div class="succ-step">📦 Order confirmed & sent to warehouse</div>

            <div class="succ-step">🚚 Delivery in 5–7 working days</div>

            <div class="succ-step">📱 WhatsApp tracking on <strong id="succPhone"></strong></div>

          </div>

          <button class="btn btn-green" onclick="location.href='/'">← Back to VitaAmrita Store</button>

        </div>

      </div>

    </div>


  </div><!-- /left -->


  <!-- ── RIGHT COLUMN: ORDER SUMMARY ── -->

  <div class="ord-panel">

    <div class="card" id="summaryCard">

      <div class="card-hd"><div class="card-ico">🛒</div><div class="card-ttl">Order Summary</div></div>

      <div class="card-bd">


        <!-- Product (auto-loaded) -->

        <div class="prod-card" id="prodCard">

          <div id="prodImgWrap"><div class="prod-img-ph">🌿</div></div>

          <div style="flex:1">

            <div class="prod-nm" id="prodNm">

              <div class="skel" style="height:14px;width:90%;margin-bottom:6px;"></div>

              <div class="skel" style="height:14px;width:60%;"></div>

            </div>

            <div class="prod-qty">Qty: 1</div>

            <div>

              <span class="prod-pr" id="prodPr"></span>

              <span class="prod-mrp" id="prodMrp"></span>

              <span class="prod-save" id="prodSave"></span>

            </div>

          </div>

        </div>


        <!-- Summary -->

        <div class="sum-lines">

          <div class="sum-ln"><span class="sl">Subtotal</span><span class="sv" id="sumSub">–</span></div>

          <div class="sum-ln"><span class="sl">Shipping</span><span class="sv free" id="sumShip">🚚 FREE</span></div>

          <div class="sum-ln"><span class="sl">Discount</span><span class="sv" id="sumDisc" style="color:var(--g2)">–</span></div>

          <div class="sum-ln tot"><span class="sl">Total</span><span class="sv" id="sumTot">–</span></div>

        </div>


      </div>

      <div class="trust">

        <div class="tr-it"><div class="tr-em">🔒</div><div class="tr-tx">Secure<br>Payment</div></div>

        <div class="tr-it"><div class="tr-em">🚚</div><div class="tr-tx">Free<br>Delivery</div></div>

        <div class="tr-it"><div class="tr-em">↩️</div><div class="tr-tx">Easy<br>Returns</div></div>

      </div>

    </div>


    <!-- Help box -->

    <div class="card">

      <div class="card-bd" style="padding:16px 20px">

        <div style="font-size:13px;font-weight:700;color:var(--mid);margin-bottom:10px;">Need help with your order?</div>

        <a href="https://wa.me/919009343700?text=Hi VitaAmrita, I need help with my order" target="_blank"

           style="display:flex;align-items:center;gap:8px;background:#25D366;color:#fff;padding:10px 14px;border-radius:var(--rs);text-decoration:none;font-size:13px;font-weight:700;">

          <span style="font-size:18px;">💬</span> Chat on WhatsApp

        </a>

      </div>

    </div>

  </div><!-- /right -->


</div><!-- /wrap -->


<script>

/* ══════════════════════════════════════════

   ⚙️ CONFIG (already set for you)

══════════════════════════════════════════ */

const C = {

  upiId: '9893495444@ybl',

  upiName: 'Rishabh Kumar Jain',

  wa: '919009343700',

  storeName: 'VitaAmrita'

};


/* ══════════════════════════════════════════

   PRODUCT – auto-fetch from Shopify

   Priority:

   1. URL param ?variant=ID (from Buy Now button)

   2. Cart items (from Add to Cart)

   3. URL param ?handle=slug

══════════════════════════════════════════ */

let prod = { title:'Loading…', price:0, compareAt:0, variantId:null, image:null };

let qrDone = false;


async function loadProduct() {

  const params = new URLSearchParams(location.search);

  const variantId = params.get('variant');

  const handle = params.get('handle');


  try {

    // Attempt 1: specific variant ID in URL

    if (variantId) {

      const r = await fetch(`/variants/${variantId}.json`);

      if (r.ok) {

        const d = await r.json();

        const v = d.variant;

        // Also get the full product for image

        const r2 = await fetch(`/products/${v.product_id}.json`).catch(()=>null);

        let img = null;

        if (r2 && r2.ok) {

          const d2 = await r2.json();

          img = d2.product.images.length ? d2.product.images[0].src : null;

        }

        prod = {

          title: v.title === 'Default Title' ? v.name || 'DiaVeda Powder' : v.title,

          price: parseFloat(v.price),

          compareAt: parseFloat(v.compare_at_price) || parseFloat(v.price) * 1.3,

          variantId: v.id,

          image: img

        };

        renderProd(); return;

      }

    }


    // Attempt 2: cart items

    const cartR = await fetch('/cart.json');

    if (cartR.ok) {

      const cart = await cartR.json();

      if (cart.items && cart.items.length > 0) {

        const item = cart.items[0];

        prod = {

          title: item.product_title,

          price: item.final_price / 100,

          compareAt: item.compare_at_price ? item.compare_at_price / 100 : (item.final_price / 100) * 1.3,

          variantId: item.variant_id,

          image: item.image

        };

        renderProd(); return;

      }

    }


    // Attempt 3: handle in URL

    if (handle) {

      const r = await fetch(`/products/${handle}.json`);

      if (r.ok) {

        const d = await r.json();

        const p = d.product, v = p.variants[0];

        prod = {

          title: p.title,

          price: parseFloat(v.price),

          compareAt: parseFloat(v.compare_at_price) || parseFloat(v.price) * 1.3,

          variantId: v.id,

          image: p.images.length ? p.images[0].src : null

        };

        renderProd(); return;

      }

    }


    // Attempt 4: fetch first product in store

    const allR = await fetch('/products.json?limit=10');

    if (allR.ok) {

      const all = await allR.json();

      // Find a diabetes/ayurvedic product

      const match = all.products.find(p =>

        p.handle.includes('diaveda') || p.handle.includes('diabetes') || p.handle.includes('ayurvedic')

      ) || all.products[0];

      if (match) {

        const v = match.variants[0];

        prod = {

          title: match.title,

          price: parseFloat(v.price),

          compareAt: parseFloat(v.compare_at_price) || parseFloat(v.price) * 1.3,

          variantId: v.id,

          image: match.images.length ? match.images[0].src : null

        };

        renderProd(); return;

      }

    }


  } catch(e) {

    console.warn('Product fetch error:', e);

  }


  // Final fallback

  prod = { title:'DiaVeda Ayurvedic Powder', price:1350, compareAt:1750, variantId:null, image:null };

  renderProd();

}


function fmt(n) { return Number(n).toLocaleString('en-IN'); }


function renderProd() {

  const save = Math.max(0, prod.compareAt - prod.price);

  document.getElementById('prodNm').textContent = prod.title;

  document.getElementById('prodPr').textContent = '₹' + fmt(prod.price);

  document.getElementById('prodMrp').textContent = prod.compareAt > prod.price ? '₹' + fmt(prod.compareAt) : '';

  document.getElementById('prodSave').textContent = save > 0 ? 'Save ₹' + fmt(save) : '';

  document.getElementById('sumSub').textContent = '₹' + fmt(prod.price);

  document.getElementById('sumDisc').textContent = save > 0 ? '– ₹' + fmt(save) : '–';

  document.getElementById('sumTot').textContent = '₹' + fmt(prod.price);

  document.getElementById('qrAmt').textContent = '₹' + fmt(prod.price);

  if (prod.image) {

    document.getElementById('prodImgWrap').innerHTML =

      `<img class="prod-img" src="${prod.image}" alt="${prod.title}" onerror="this.parentNode.innerHTML='<div class=prod-img-ph>🌿</div>'">`;

  }

  // Regenerate QR with actual amount

  if (qrDone) buildQR();

}


/* ══════════════════════════════════════════

   QR CODE

══════════════════════════════════════════ */

let qrObj = null;

function buildQR() {

  const upiStr = `upi://pay?pa=${C.upiId}&pn=${encodeURIComponent(C.upiName)}&am=${prod.price}&cu=INR&tn=${encodeURIComponent('VitaAmrita Order')}`;

  const wrap = document.getElementById('qrWrap');

  wrap.innerHTML = '';

  qrObj = new QRCode(wrap, {

    text: upiStr,

    width: 200, height: 200,

    colorDark: '#0F7A4E',

    colorLight: '#FFFFFF',

    correctLevel: QRCode.CorrectLevel.H

  });

  qrDone = true;

}


/* ══════════════════════════════════════════

   STEP NAVIGATION

══════════════════════════════════════════ */

function setStep(n) {

  for(let i=1;i<=3;i++){

    const d=document.getElementById('s'+i);

    d.classList.remove('act','done');

    if(i<n) d.classList.add('done');

    if(i===n) d.classList.add('act');

  }

}


function toStep1() {

  document.getElementById('step1').classList.add('on');

  document.getElementById('step2').classList.remove('on');

  setStep(1);

}


function toStep2() {

  if (!validate()) return;

  document.getElementById('codPhone').textContent = '+91 ' + document.getElementById('phone').value.trim();

  document.getElementById('step1').classList.remove('on');

  document.getElementById('step2').classList.add('on');

  setStep(2);

  buildQR();

  window.scrollTo({top:0,behavior:'smooth'});

}


/* ══════════════════════════════════════════

   PAYMENT SELECT

══════════════════════════════════════════ */

function selPay(m) {

  document.getElementById('pUPI').classList.toggle('sel', m==='upi');

  document.getElementById('pCOD').classList.toggle('sel', m==='cod');

  document.getElementById('upiSec').style.display = m==='upi' ? 'block' : 'none';

  document.getElementById('codSec').style.display = m==='cod' ? 'block' : 'none';

  if (m==='upi' && !qrDone) buildQR();

}


function confirmUPI() { placeOrder('UPI'); }


/* ══════════════════════════════════════════

   VALIDATION

══════════════════════════════════════════ */

function validate() {

  const checks = [

    ['fullName','Full Name',2,null,false],

    ['phone','Phone Number',10,10,true],

    ['addr1','Address',5,null,false],

    ['city','City',2,null,false],

    ['state','State',2,null,false],

    ['pin','PIN Code',6,6,true]

  ];

  for (const [id,lbl,min,exact,num] of checks) {

    const el = document.getElementById(id);

    const v = el.value.trim();

    el.classList.remove('err');

    if (!v || v.length < min) { el.classList.add('err'); toast(`Enter valid ${lbl}`,true); el.focus(); return false; }

    if (exact && v.length !== exact) { el.classList.add('err'); toast(`${lbl} must be ${exact} digits`,true); el.focus(); return false; }

    if (num && !/^\d+$/.test(v)) { el.classList.add('err'); toast(`${lbl} should be numeric`,true); el.focus(); return false; }

  }

  return true;

}


/* ══════════════════════════════════════════

   PLACE ORDER → SYNC TO SHOPIFY

══════════════════════════════════════════ */

async function placeOrder(method) {

  showOv('Placing your order…');


  const o = {

    name: document.getElementById('fullName').value.trim(),

    phone: document.getElementById('phone').value.trim(),

    email: document.getElementById('email').value.trim(),

    addr1: document.getElementById('addr1').value.trim(),

    addr2: document.getElementById('addr2').value.trim(),

    city: document.getElementById('city').value.trim(),

    state: document.getElementById('state').value.trim(),

    pin: document.getElementById('pin').value.trim(),

    method: method

  };


  try {

    // 1. Clear cart

    await fetch('/cart/clear.js', { method:'POST' }).catch(()=>{});


    // 2. Add product to cart (only if variantId known)

    if (prod.variantId) {

      const ar = await fetch('/cart/add.js', {

        method:'POST',

        headers:{'Content-Type':'application/json'},

        body: JSON.stringify({

          items:[{

            id: prod.variantId,

            quantity: 1,

            properties:{

              'Payment Method': method === 'UPI' ? 'UPI – QR Code (Prepaid)' : 'Cash on Delivery',

              'Phone': o.phone,

              'Full Address': `${o.addr1}${o.addr2 ? ', '+o.addr2 : ''}, ${o.city}, ${o.state} – ${o.pin}`

            }

          }]

        })

      });

      if (!ar.ok) {

        const e = await ar.json();

        throw new Error(e.description || 'Product not available');

      }

    }


    // 3. Update cart note + attributes

    const noteStr = `Name: ${o.name} | Phone: ${o.phone} | Payment: ${method} | Address: ${o.addr1}, ${o.city}, ${o.state} ${o.pin}`;

    await fetch('/cart/update.js', {

      method:'POST',

      headers:{'Content-Type':'application/json'},

      body: JSON.stringify({

        note: noteStr,

        attributes:{

          '_cust_name': o.name,

          '_cust_phone': o.phone,

          '_cust_email': o.email,

          '_cust_addr1': o.addr1,

          '_cust_addr2': o.addr2,

          '_cust_city': o.city,

          '_cust_state': o.state,

          '_cust_pin': o.pin,

          '_payment': method,

          '_source': 'VitaAmrita Custom Checkout'

        }

      })

    }).catch(()=>{});


    // 4. Build pre-filled checkout URL for Shopify

    const email = o.email || `+91${o.phone}@vitaamrita.com`;

    const fname = o.name.split(' ')[0];

    const lname = o.name.split(' ').slice(1).join(' ') || ' ';

    const qsp = new URLSearchParams({

      'checkout[email]': email,

      'checkout[shipping_address][first_name]': fname,

      'checkout[shipping_address][last_name]': lname,

      'checkout[shipping_address][address1]': o.addr1,

      'checkout[shipping_address][address2]': o.addr2,

      'checkout[shipping_address][city]': o.city,

      'checkout[shipping_address][province]': o.state,

      'checkout[shipping_address][zip]': o.pin,

      'checkout[shipping_address][country]': 'India',

      'checkout[shipping_address][phone]': '+91'+o.phone

    });


    hideOv();

    showSuccess(o);


    // 5. Auto-redirect to Shopify checkout to finalise (payment & order creation)

    setTimeout(() => {

      window.location.href = '/checkout?' + qsp.toString();

    }, 4000);


  } catch(err) {

    hideOv();

    toast('Error: ' + err.message, true);

    console.error(err);

  }

}


/* ══════════════════════════════════════════

   SUCCESS SCREEN

══════════════════════════════════════════ */

function showSuccess(o) {

  setStep(3);

  document.getElementById('step2').classList.remove('on');

  const oid = '#VA-' + Date.now().toString().slice(-6);

  document.getElementById('succOID').textContent = oid;

  document.getElementById('succPhone').textContent = '+91 ' + o.phone;

  document.getElementById('succCard').style.display = 'block';

  document.getElementById('succCard').scrollIntoView({behavior:'smooth'});


  // WhatsApp notification to store owner

  const msg = encodeURIComponent(

    `🌿 *New VitaAmrita Order!*\n\n` +

    `*ID:* ${oid}\n*Name:* ${o.name}\n*Phone:* ${o.phone}\n` +

    `*Payment:* ${o.method}\n` +

    `*Product:* ${prod.title}\n*Amount:* ₹${fmt(prod.price)}\n` +

    `*Address:* ${o.addr1}, ${o.addr2 ? o.addr2+', ':'' }${o.city}, ${o.state} – ${o.pin}`

  );

  setTimeout(() => {

    window.open(`https://wa.me/${C.wa}?text=${msg}`, '_blank');

  }, 800);

}


/* ══════════════════════════════════════════

   HELPERS

══════════════════════════════════════════ */

function showOv(t){ document.getElementById('ovTx').textContent=t||'Processing…'; document.getElementById('overlay').style.display='flex'; }

function hideOv(){ document.getElementById('overlay').style.display='none'; }

function toast(msg,err){

  const t=document.getElementById('toast');

  t.textContent=msg; t.className='toast'+(err?' err':'')+' on';

  clearTimeout(t._t); t._t=setTimeout(()=>{t.className='toast';},3500);

}


// INIT

loadProduct();

</script>

</body>

</html>