Locatigo Catalog Wholesale terms Reviews Contact Hong Kong · Wholesale export Certified pre-owned iPhones, graded and ready to ship. Every unit is tested, function-checked and graded before it leaves our facility. Full range from iPhone XR to iPhone 17 — minimum order 10 units per model and colour. Browse the catalog Request price list ConditionGrade A / B, tested Minimum order10 units / SKU RangeiPhone XR – 17 PricingOn request Ships fromHong Kong The catalog Select a series to see every model and colour we currently grade. How wholesale ordering works 1. Choose your models. Pick any combination of models and colours from the catalog above. 2. 3. 4. Confirm quantity. Minimum order is 10 units per model / colour combination — mix and match SKUs freely above that. Request pricing. Prices aren't published on this site. Message us on WhatsApp with your list and we'll send the current wholesale price sheet. Grading & shipment. Every unit is tested and graded before packing, then shipped from our Hong Kong facility. From wholesale buyers Get the price list Reach us directly — no account or sign-up needed. Message on WhatsApp Visit our TikTok Locatigo Hong Kong · Wholesale export of certified pre-owned iPhones Wholesale only — minimum order 10 units per model / colour. Pricing provided on request. /* ========================================================================== LOCATIGO — DESIGN TOKENS ========================================================================== */ :root{ --bg: #0e0f11; --surface: #17181b; --surface-2: #1f2023; --text: #ededec; --muted: #9a9ca3; --accent: #c6a15b; --accent-soft: #e4c98a; --grade: #7ea987; --line: rgba(255,255,255,0.08); --font-display: "Fraunces", Georgia, serif; --font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --radius: 4px; } *{ box-sizing: border-box; } html{ scroll-behavior: smooth; } body{ margin:0; background: var(--bg); color: var(--text); font-family: var(--font-body); line-height: 1.5; -webkit-font-smoothing: antialiased; } a{ color: inherit; } h1,h2,h3{ font-family: var(--font-display); font-weight: 600; margin: 0 0 0.4em; } p{ margin: 0 0 1em; color: var(--muted); } img{ max-width: 100%; display:block; } :focus-visible{ outline: 2px solid var(--accent); outline-offset: 2px; } /* ---------- Header ---------- */ .site-header{ position: sticky; top:0; z-index: 40; display:flex; align-items:center; justify-content: space-between; padding: 18px 28px; background: rgba(14,15,17,0.9); backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); } .wordmark{ font-family: var(--font-display); font-weight: 600; font-style: italic; font-size: 1.7rem; letter-spacing: 0.01em; color: var(--accent-soft); text-decoration: none; } .main-nav{ display:flex; gap: 28px; } .main-nav a{ text-decoration:none; color: var(--muted); font-size: 0.92rem; } .main-nav a:hover{ color: var(--text); } /* ---------- Hero ---------- */ .hero{ display:grid; grid-template-columns: 1.2fr 0.8fr; gap: 48px; padding: 72px 28px; max-width: 1180px; margin: 0 auto; align-items: center; } .hero-kicker{ color: var(--accent); font-size: 0.85rem; margin-bottom: 10px; } .hero h1{ font-size: clamp(2rem, 4vw, 3rem); line-height: 1.12; color: var(--text); max-width .hero-sub{ max-width: 48ch; font-size: 1.02rem; } .hero-actions{ display:flex; gap: 14px; margin-top: 8px; flex-wrap: wrap; } .btn{ display:inline-block; padding: 12px 22px; border-radius: var(--radius); text-decoration:none; font-size: 0.92rem; font-weight: 500; border: 1px solid transparent; transition: background 0.15s ease, border-color 0.15s ease; } .btn-primary{ background: var(--accent); color: #17181b; } .btn-primary:hover{ background: var(--accent-soft); } .btn-ghost{ border-color: var(--line); color: var(--text); } .btn-ghost:hover{ border-color: var(--accent); } .hero-panel{ background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 24px; } .spec-row{ display:flex; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid var(--line); font-size: 0.9rem; } .spec-row:last-child{ border-bottom:none; } .spec-row span{ color: var(--muted); } .spec-row strong{ color: var(--accent-soft); font-weight: 500; } /* ---------- Section shell ---------- */ main > section{ max-width: 1180px; margin: 0 auto; padding: 64px 28px; } .section-head{ margin-bottom: 32px; max-width: 60ch; } .section-head h2{ font-size: 1.8rem; color: var(--text); } /* ---------- Catalog / series grid ---------- */ .series-grid{ display:grid; grid-template-columns: repeat(auto-fill, minmax(260px,1fr)); gap: .series-card{ background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; cursor:pointer; } .series-card h3{ font-size: 1.15rem; color: var(--text); margin-bottom: 4px; } .series-card .series-count{ color: var(--muted); font-size: 0.85rem; } .variant-list{ margin-top: 14px; display:flex; flex-direction: column; gap: 8px; } .variant-list[hidden]{ display:none; } .variant-chip{ display:flex; align-items:center; justify-content: space-between; background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 14px; cursor:pointer; font-size: 0.9rem; text-align:left; width:100%; color: var(--text); font-family: var(--font-body); } .variant-chip:hover{ border-color: var(--accent); } .variant-chip .swatches{ display:flex; gap: 4px; } .swatch-dot{ width: 12px; height:12px; border-radius:50%; border: 1px solid rgba(255,255,255, /* ---------- Terms list ---------- */ .terms-list{ list-style: none; margin:0; padding:0; display:grid; gap: 18px; counter-reset: s .terms-list li{ counter-increment: step; border-left: 2px solid var(--accent); padding-left: 18px; color: var(--muted); max-width: 6 } .terms-list li strong{ color: var(--text); display:block; margin-bottom: 4px; } /* ---------- Reviews ---------- */ .reviews-grid{ display:grid; grid-template-columns: repeat(auto-fill, minmax(240px,1fr)); gap .review-card{ background: var(--surface); border:1px solid var(--line); border-radius: var(-- .review-card p{ color: var(--text); font-size: 0.95rem; } .review-meta{ color: var(--muted); font-size: 0.82rem; margin-top: 10px; } /* ---------- Contact ---------- */ .contact-actions{ display:flex; gap: 14px; flex-wrap: wrap; } /* ---------- Footer ---------- */ .site-footer{ border-top: 1px solid var(--line); padding: 40px 28px; text-align:center; color: var(--mute } .footer-wordmark{ font-family: var(--font-display); font-style: italic; color: var(--accent-s .footer-fine{ font-size: 0.8rem; opacity: 0.8; } /* ---------- Product overlay ---------- */ .overlay{ position: fixed; inset:0; background: rgba(6,6,7,0.82); display:flex; align-items:flex-start; justify-content:center; overflow-y:auto; padding: 40px 16px; z-index: 100; } .overlay-panel{ background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); max-width: 880px; width: 100%; padding: 32px; position:relative; margin-bottom: 40px; } .overlay-close{ position:absolute; top: 16px; right: 16px; background:none; border:none; color: var(--muted); font-size: 1.6rem; cursor:pointer; line-height:1; } .overlay-close:hover{ color: var(--text); } .product-title{ font-size: 1.6rem; color: var(--text); margin-bottom: 4px; } .product-storage{ color: var(--muted); font-size: 0.9rem; margin-bottom: 18px; } .color-picker{ display:flex; gap: 10px; margin-bottom: 22px; flex-wrap: wrap; } .color-btn{ display:flex; align-items:center; gap: 8px; padding: 6px 12px 6px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-2); color: var(--text); cursor:pointer; font-size: 0.85rem; font-family: var(--font-body); } .color-btn.active{ border-color: var(--accent); color: var(--accent-soft); } .color-btn .swatch-dot{ width: 16px; height:16px; } .image-slots{ display:grid; grid-template-columns: repeat(auto-fill, minmax(140px,1fr)); gap: .image-slot{ aspect-ratio: 3/4; border: 1px dashed var(--line); border-radius: var(--radius); display:flex; align-items:center; justify-content:center; flex-direction: column; gap:6px; background: var(--surface-2); color: var(--muted); font-size: 0.75rem; text-align:center; p overflow:hidden; } .image-slot img{ width:100%; height:100%; object-fit:cover; } .image-slot .slot-label{ text-transform: capitalize; } .product-notes{ display:grid; gap: 10px; border-top: 1px solid var(--line); padding-top: 20px .product-notes .note-row{ display:flex; gap: 10px; font-size: 0.9rem; } .product-notes .note-row strong{ color: var(--text); min-width: 110px; flex-shrink:0; } .product-notes .note-row span{ color: var(--muted); } .overlay-actions{ margin-top: 22px; display:flex; gap: 12px; flex-wrap:wrap; } /* ---------- Responsive ---------- */ @media (max-width: 860px){ .hero{ grid-template-columns: 1fr; padding-top: 48px; } .main-nav{ display:none; } } @media (prefers-reduced-motion: reduce){ html{ scroll-behavior:auto; } .btn{ transition:none; } }/* ========================================================================= LOCATIGO — SITE LOGIC No editing needed here for normal catalog updates — edit data.js instead. ========================================================================= */ function slugify(str){ return str.toLowerCase().trim().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, ""); } const IMAGE_SLOTS = ["front", "back", "side", "camera", "screen"]; /* ---------- Render series + variant list ---------- */ function renderSeriesGrid(){ const grid = document.getElementById("series-grid"); grid.innerHTML = ""; CATALOG.forEach((group, groupIndex) => { const card = document.createElement("div"); card.className = "series-card"; const count = group.variants.length; card.innerHTML = `

${group.series}

${count} model${count > 1 ? "s" : ""} available
`; const header = card.querySelector("h3"); const list = card.querySelector(".variant-list"); header.style.cursor = "pointer"; header.addEventListener("click", () => { list.hidden = !list.hidden; }); group.variants.forEach(variant => { const chip = document.createElement("button"); chip.type = "button"; chip.className = "variant-chip"; chip.innerHTML = ` ${variant.name} ${variant.colors.map(c => ` `; chip.addEventListener("click", () => openProduct(variant)); list.appendChild(chip); }); grid.appendChild(card); }); } /* ---------- Render reviews ---------- */ function renderReviews(){ const grid = document.getElementById("reviews-grid"); grid.innerHTML = REVIEWS.map(r => `

“${r.text}”

${r.name} — ${r.location}
`).join(""); } /* ---------- Product overlay ---------- */ const overlay = document.getElementById("product-overlay"); const overlayBody = document.getElementById("overlay-body"); function openProduct(variant){ let activeColor = variant.colors[0]; renderOverlayBody(variant, activeColor); overlay.hidden = false; document.body.style.overflow = "hidden"; } function renderOverlayBody(variant, activeColor){ const colorSlug = slugify(activeColor.name); overlayBody.innerHTML = `

${variant.name}

${variant.storage.join(" · ")}
Condition${CATALOG_NOTES.condition}
Minimum order${CATALOG_NOTES.moq}Pricing${CATALOG_NOTES.pricing} `; const picker = overlayBody.querySelector("#color-picker"); variant.colors.forEach(color => { const btn = document.createElement("button"); btn.type = "button"; btn.className = "color-btn" + (color.name === activeColor.name ? " active" : ""); btn.innerHTML = `${color. btn.addEventListener("click", () => renderOverlayBody(variant, color)); picker.appendChild(btn); }); const slots = overlayBody.querySelector("#image-slots"); IMAGE_SLOTS.forEach(slot => { const path = `images/${variant.id}/${colorSlug}/${slot}.jpg`; const box = document.createElement("div"); box.className = "image-slot"; box.innerHTML = `${slot}photo coming soon`; const img = new Image(); img.onload = () => { box.innerHTML = ""; const shown = document.createElement("img"); shown.src = path; shown.alt = `${variant.name} ${activeColor.name} — ${slot}`; box.appendChild(shown); }; img.src = path; slots.appendChild(box); }); } document.getElementById("overlay-close").addEventListener("click", closeOverlay); overlay.addEventListener("click", (e) => { if (e.target === overlay) closeOverlay(); }); document.addEventListener("keydown", (e) => { if (e.key === "Escape") closeOverlay(); }); function closeOverlay(){ overlay.hidden = true; document.body.style.overflow = ""; } renderSeriesGrid(); renderReviews();/* ========================================================================= LOCATIGO — CATALOG DATA ------------------------------------------------------------------------- This is the ONLY file you need to touch to add, remove, or edit phones. Every phone on the site is generated automatically from this list. TO ADD A NEW SERIES (e.g. once iPhone 18 is real): 1. Copy one of the { series: ... } blocks below. 2. Change the series name and each variant's id / name / colors. 3. Save. The homepage and product pages update automatically. IMAGES: For every variant + color combination, the site looks for photos at: images///front.jpg images///back.jpg images///side.jpg images///camera.jpg images///screen.jpg e.g. for iPhone 13 Pro in "Sierra Blue": images/13-pro/sierra-blue/front.jpg If a photo is missing, a placeholder box is shown instead — the site never breaks, it just shows "photo coming soon" until you upload one. ========================================================================= */ const CATALOG = [ { series: "iPhone XR", variants: [ { id: "xr", name: "iPhone XR", storage: ["64GB", "128GB"], colors: [{ name: "Black", hex: "#1c1c1e" }, { name: "White", hex: "#f2f2ed" }, { name ] }, { series: "iPhone 11", variants: [ { id: "11", name: "iPhone 11", storage: ["64GB", "128GB"], colors: [{ name: "Purple", hex: "#a9a7c4" }, { name: "Green", hex: "#a9c0ab" }, { nam { id: "11-pro", name: "iPhone 11 Pro", storage: ["64GB", "256GB"], colors: [{ name: "Midnight Green", hex: "#4e5851" }, { name: "Space Grey", hex: "#545 { id: "11-pro-max", name: "iPhone 11 Pro Max", storage: ["64GB", "256GB"], colors: [{ name: "Midnight Green", hex: "#4e5851" }, { name: "Space Grey", hex: "#545 ] }, { }, { }, { }, { }, series: "iPhone 12", variants: [ { id: "12", name: "iPhone 12", storage: ["64GB", "128GB"], colors: [{ name: "Blue", hex: "#7c9bb5" }, { name: "Green", hex: "#a9c0ab" }, { name: { id: "12-pro", name: "iPhone 12 Pro", storage: ["128GB", "256GB"], colors: [{ name: "Pacific Blue", hex: "#3f5a6e" }, { name: "Graphite", hex: "#4a4a48" { id: "12-pro-max", name: "iPhone 12 Pro Max", storage: ["128GB", "256GB"], colors: [{ name: "Pacific Blue", hex: "#3f5a6e" }, { name: "Graphite", hex: "#4a4a48" ] name: series: "iPhone 13", variants: [ { id: "13", name: "iPhone 13", storage: ["128GB", "256GB"], colors: [{ name: "Pink", hex: "#e8c3c8" }, { name: "Blue", hex: "#7c9bb5" }, { { id: "13-pro", name: "iPhone 13 Pro", storage: ["128GB", "256GB"], colors: [{ name: "Sierra Blue", hex: "#8fa8bd" }, { name: "Graphite", hex: "#4a4a48" { id: "13-pro-max", name: "iPhone 13 Pro Max", storage: ["128GB", "256GB"], colors: [{ name: "Sierra Blue", hex: "#8fa8bd" }, { name: "Graphite", hex: "#4a4a48" ] { name series: "iPhone 14", variants: [ { id: "14", name: "iPhone 14", storage: ["128GB", "256GB"], colors: [{ name: "Purple", hex: "#b9b3c9" }, { name: "Blue", hex: "#a9bcc9" }, { id: "14-plus", name: "iPhone 14 Plus", storage: ["128GB", "256GB"], colors: [{ name: "Purple", hex: "#b9b3c9" }, { name: "Blue", hex: "#a9bcc9" }, { id: "14-pro", name: "iPhone 14 Pro", storage: ["128GB", "256GB"], colors: [{ name: "Deep Purple", hex: "#4f4a5c" }, { name: "Space Black", hex: "#1c1c1 { id: "14-pro-max", name: "iPhone 14 Pro Max", storage: ["128GB", "256GB"], colors: [{ name: "Deep Purple", hex: "#4f4a5c" }, { name: "Space Black", hex: "#1c1c1 { name ] name: series: "iPhone 15", variants: [ { id: "15", name: "iPhone 15", storage: ["128GB", "256GB"], colors: [{ name: "Pink", hex: "#e8c3c8" }, { name: "Blue", hex: "#a9bcc9" }, { { id: "15-plus", name: "iPhone 15 Plus", storage: ["128GB", "256GB"], colors: [{ name: "Pink", hex: "#e8c3c8" }, { name: "Blue", hex: "#a9bcc9" }, { { id: "15-pro", name: "iPhone 15 Pro", storage: ["128GB", "256GB"], colors: [{ name: "Blue Titanium", hex: "#5c6b78" }, { name: "Natural Titanium", hex: { id: "15-pro-max", name: "iPhone 15 Pro Max", storage: ["256GB", "512GB"], colors: [{ name: "Blue Titanium", hex: "#5c6b78" }, { name: "Natural Titanium", hex: name: ] { series: "iPhone 16", variants: [ { id: "16", name: "iPhone 16", storage: ["128GB", "256GB"], colors: [{ name: "Ultramarine", hex: "#5b6ea8" }, { name: "Teal", hex: "#6f9a94" }, { { id: "16-plus", name: "iPhone 16 Plus", storage: ["128GB", "256GB"], colors: [{ name: "Ultramarine", hex: "#5b6ea8" }, { name: "Teal", hex: "#6f9a94" }, { { id: "16-pro", name: "iPhone 16 Pro", storage: ["128GB", "256GB"], colors: [{ name: "Desert Titanium", hex: "#a1907a" }, { name: "Black Titanium", hex: { id: "16-pro-max", name: "iPhone 16 Pro Max", storage: ["256GB", "512GB"], colors: [{ name: "Desert Titanium", hex: "#a1907a" }, { name: "Black Titanium", hex: ] }, { series: "iPhone 17", variants: [ { id: "17", name: "iPhone 17", storage: ["128GB", "256GB"], colors: [{ name: "Lavender", hex: "#c3bfe0" }, { name: "Mist Blue", hex: "#a9c0d0" }, { id: "17-air", name: "iPhone Air", storage: ["256GB", "512GB"], colors: [{ name: "Sky Blue", hex: "#a9c5d8" }, { name: "Cloud White", hex: "#eceae4" { id: "17-pro", name: "iPhone 17 Pro", storage: ["256GB", "512GB"], colors: [{ name: "Cosmic Orange", hex: "#a8542f" }, { name: "Deep Blue", hex: "#2f3a4 { id: "17-pro-max", name: "iPhone 17 Pro Max", storage: ["256GB", "512GB", "1TB"], colors: [{ name: "Cosmic Orange", hex: "#a8542f" }, { name: "Deep Blue", hex: "#2f3a4 ] } ]; /* Shared boilerplate copy — edit once, applies to every product page. */ const CATALOG_NOTES = { condition: "Fairly used (pre-owned), professionally tested and graded — not new. Fully func moq: "Minimum order 10 units per model / colour combination.", pricing: "Wholesale pricing is provided separately on request — no prices are listed contactNote: "Ask for the current wholesale price list and available stock." on thi }; /* Reviews shown at the bottom of the homepage. Edit freely. */ const REVIEWS = [ { name: "M. Osei", location: "Accra, Ghana", text: "Ordered 40 units across three models. G { name: "R. Fernandes", location: "Lisbon, Portugal", text: "Smooth wholesale process from { name: "T. Nguyen", location: "Ho Chi Minh City, Vietnam", text: "Good stock variety and c ];