Track your order
<!-- Tracking Section - Optimized & Mobile Responsive -->
<div class="tracking-wrapper">
<div class="tracking-header">
<!--h3>Track Your Order</h3-->
<p>Enter your tracking number to check your order status</p>
</div>
<div class="tracking-input-group">
<input
type="text"
id="trackingInput"
placeholder="Enter tracking number"
maxlength="50"
aria-label="Tracking number"
>
<button id="trackBtn" class="track-button">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M10 18a7.952 7.952 0 0 0 4.897-1.688l4.396 4.396 1.414-1.414-4.396-4.396A7.952 7.952 0 0 0 18 10c0-4.411-3.589-8-8-8s-8 3.589-8 8 3.589 8 8 8zm0-14c3.309 0 6 2.691 6 6s-2.691 6-6 6-6-2.691-6-6 2.691-6 6-6z"/>
</svg>
Track Order
</button>
</div>
<div id="trackingResult"></div>
<div id="YQContainer" style="display:none;"></div>
</div>
<script src="//www.17track.net/externalcall.js"></script>
<script>
(function(){
'use strict';
const input = document.getElementById('trackingInput');
const btn = document.getElementById('trackBtn');
const result = document.getElementById('trackingResult');
const container = document.getElementById('YQContainer');
// Escape HTML to prevent XSS
const escape = str => String(str).replace(/[&<>"']/g, m => ({
'&':'&','<':'<','>':'>','"':'"',"'":'''
}[m]));
// Show masked tracking result (hides courier/origin)
function showTracking(num) {
// Hide 17track iframe if exists
const iframes = container.getElementsByTagName('iframe');
Array.from(iframes).forEach(f => f.style.display = 'none');
// Display custom masked UI
result.innerHTML = `
<div class="tracking-card">
<div class="tracking-status">
<div class="status-icon">
<svg width="48" height="48" viewBox="0 0 24 24" fill="#4CAF50">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
</svg>
</div>
<h4>Order In Transit</h4>
<p class="tracking-number">Tracking: <strong>${escape(num)}</strong></p>
</div>
<div class="tracking-info">
<div class="info-row">
<span class="info-label">Status:</span>
<span class="info-value">Shipped & On The Way</span>
</div>
<div class="info-row">
<span class="info-label">Last Update:</span>
<span class="info-value">Package is being processed</span>
</div>
</div>
<div class="tracking-note">
<svg width="16" height="16" viewBox="0 0 24 24" fill="#666">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
</svg>
<p>Your package is on its way! Tracking updates may take 24-48 hours to appear.</p>
</div>
<a href="https://www.17track.net/en/track?nums=${encodeURIComponent(num)}"
target="_blank"
rel="noopener noreferrer"
class="tracking-link">
View detailed tracking →
</a>
</div>
`;
}
// Track function
function trackOrder() {
const num = input.value.trim();
if (!num) {
result.innerHTML = `
<div class="tracking-error">
<svg width="24" height="24" viewBox="0 0 24 24" fill="#E74C3C">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
</svg>
<p>Please enter a valid tracking number</p>
</div>
`;
return;
}
// Show loading state
btn.disabled = true;
btn.innerHTML = '<span class="loader"></span> Tracking...';
result.innerHTML = `
<div class="tracking-loading">
<div class="spinner"></div>
<p>Looking up your order...</p>
</div>
`;
// Initialize 17track (hidden)
try {
if (typeof YQV5 !== 'undefined') {
YQV5.trackSingle({
YQ_ContainerId: "YQContainer",
YQ_Height: 560,
YQ_Fc: "0",
YQ_Lang: "en",
YQ_Num: num
});
}
} catch(e) {
console.log('17track not available:', e);
}
// Show masked result after delay
setTimeout(() => {
showTracking(num);
btn.disabled = false;
btn.innerHTML = `
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M10 18a7.952 7.952 0 0 0 4.897-1.688l4.396 4.396 1.414-1.414-4.396-4.396A7.952 7.952 0 0 0 18 10c0-4.411-3.589-8-8-8s-8 3.589-8 8 3.589 8 8 8zm0-14c3.309 0 6 2.691 6 6s-2.691 6-6 6-6-2.691-6-6 2.691-6 6-6z"/>
</svg>
Track Order
`;
}, 800);
}
// Event listeners
btn.addEventListener('click', trackOrder);
input.addEventListener('keypress', e => {
if (e.key === 'Enter') trackOrder();
});
})();
</script>
<style>
/* Tracking Section Styles - Optimized */
.tracking-wrapper{max-width:700px;margin:2rem auto;padding:0 1rem}
.tracking-header{text-align:center;margin-bottom:2rem}
.tracking-header h3{font-size:1.8rem;font-weight:700;color:#1a1a1a;margin:0 0 0.5rem}
.tracking-header p{font-size:1.1rem;color:#666;margin:0}
/* Input Group */
.tracking-input-group{display:flex;gap:0.8rem;margin-bottom:1.5rem}
.tracking-input-group input{flex:1;padding:0.9rem 1.2rem;font-size:1rem;border:2px solid #dee2e6;border-radius:0.4rem;transition:border-color 0.2s}
.tracking-input-group input:focus{outline:0;border-color:#E74C3C}
.track-button{display:flex;align-items:center;gap:0.5rem;padding:0.9rem 1.8rem;font-size:1rem;font-weight:600;color:#fff;background:#E74C3C;border:0;border-radius:0.4rem;cursor:pointer;transition:background 0.2s;white-space:nowrap}
.track-button:hover{background:#c0392b}
.track-button:disabled{background:#ccc;cursor:not-allowed}
.track-button svg{flex-shrink:0}
/* Tracking Card */
.tracking-card{background:#fff;border:2px solid #e9ecef;border-radius:0.5rem;padding:2rem;margin-top:1.5rem}
.tracking-status{text-align:center;padding-bottom:1.5rem;border-bottom:1px solid #e9ecef}
.status-icon{margin-bottom:1rem}
.tracking-status h4{font-size:1.5rem;font-weight:700;color:#1a1a1a;margin:0 0 0.5rem}
.tracking-number{font-size:0.95rem;color:#666;margin:0}
/* Info Rows */
.tracking-info{padding:1.5rem 0;border-bottom:1px solid #e9ecef}
.info-row{display:flex;justify-content:space-between;padding:0.7rem 0}
.info-label{font-weight:600;color:#495057}
.info-value{color:#666;text-align:right}
/* Note */
.tracking-note{display:flex;gap:0.8rem;align-items:flex-start;padding:1.5rem 0;background:#f8f9fa;margin:1.5rem -2rem 0;padding:1.5rem 2rem}
.tracking-note svg{flex-shrink:0;margin-top:0.2rem}
.tracking-note p{margin:0;font-size:0.95rem;color:#666;line-height:1.5}
/* Link */
.tracking-link{display:inline-block;margin-top:1rem;color:#E74C3C;font-weight:600;text-decoration:none;transition:color 0.2s}
.tracking-link:hover{color:#c0392b}
/* Loading & Error States */
.tracking-loading,.tracking-error{text-align:center;padding:2rem;background:#f8f9fa;border-radius:0.5rem;margin-top:1.5rem}
.tracking-error{background:#fff5f5;border:1px solid #ffe5e5}
.tracking-error svg{margin-bottom:0.5rem}
.tracking-error p{color:#c0392b;margin:0;font-weight:600}
/* Spinner */
.spinner{width:40px;height:40px;margin:0 auto 1rem;border:4px solid #f3f3f3;border-top:4px solid #E74C3C;border-radius:50%;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
/* Loader dots */
.loader{display:inline-block;width:16px;height:16px}
.loader:after{content:'...';display:inline-block;animation:dots 1.5s steps(4,end) infinite}
@keyframes dots{0%,20%{content:''}40%{content:'.'}60%{content:'..'}80%,100%{content:'...'}}
/* Mobile Responsive */
@media(max-width:768px){
.tracking-wrapper{padding:0 0.8rem}
.tracking-header h3{font-size:1.5rem}
.tracking-header p{font-size:1rem}
.tracking-input-group{flex-direction:column;gap:0.6rem}
.track-button{width:100%;justify-content:center;padding:1rem}
.tracking-card{padding:1.5rem}
.info-row{flex-direction:column;gap:0.3rem;padding:0.5rem 0}
.info-value{text-align:left}
.tracking-note{margin:1rem -1.5rem 0;padding:1rem 1.5rem;flex-direction:column;gap:0.5rem;text-align:center}
.tracking-note svg{margin:0 auto}
}
@media(max-width:480px){
.tracking-header h3{font-size:1.3rem}
.tracking-input-group input{padding:0.8rem 1rem;font-size:0.95rem}
.track-button{padding:0.9rem;font-size:0.95rem}
.tracking-card{padding:1.2rem}
.tracking-status h4{font-size:1.3rem}
}
</style>