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 = `
“${r.text}”