.ms-wrap{ font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; background:#f7f6f4; padding:40px 20px 48px; } .ms-fb{ font-size:13px; padding:7px 18px; border-radius:20px; border:1px solid #ddd; background:#fff; color:#555; cursor:pointer; transition:all .15s; font-family:inherit; } .ms-fb:hover{ border-color:#aaa; color:#111; } .ms-fb.on{ background:#111; color:#fff; border-color:#111; } .ms-count{ text-align:center; font-size:13px; color:#888; padding:10px 0 16px; } .ms-card{ background:#fff; border-radius:12px; overflow:hidden; border:1px solid #e8e4df; transition:box-shadow .2s; cursor:pointer; height:100%; } .ms-card:hover{ box-shadow:0 4px 20px rgba(0,0,0,.09); } .ms-img-wrap{ position:relative; overflow:hidden; background:#f0eee9; height:210px; display:flex; align-items:center; justify-content:center; } .ms-img{ width:100%; height:100%; object-fit:contain; object-position:center; display:block; transition:transform .3s; } .ms-card:hover .ms-img{ transform:scale(1.03); } .ms-zoom{ position:absolute; bottom:10px; right:10px; background:rgba(0,0,0,.45); color:#fff; border-radius:50%; width:32px; height:32px; display:flex; align-items:center; justify-content:center; opacity:0; transition:opacity .2s; } .ms-card:hover .ms-zoom{ opacity:1; } .ms-meta{ padding:13px 15px 15px; } .ms-tag{ display:inline-block; font-size:11px; font-weight:500; padding:3px 10px; border-radius:4px; margin-bottom:7px; } .ms-tag-fillers{ background:#f0e8fb; color:#5b1aa0; } .ms-tag-liplift{ background:#fce8f0; color:#a01a5b; } .ms-tag-vein{ background:#e8f0fb; color:#1a4fa0; } .ms-card h3{ font-size:14px; font-weight:500; color:#111; margin:0 0 4px; line-height:1.35; } .ms-card p{ font-size:12px; color:#666; line-height:1.55; margin:0; } .ms-disc{ text-align:center; font-size:11px; color:#aaa; padding:24px 0 0; max-width:640px; margin:0 auto; line-height:1.6; } .ms-modal{ display:none; position:fixed; inset:0; z-index:99999; align-items:center; justify-content:center; } .ms-modal.open{ display:flex; } .ms-overlay{ position:absolute; inset:0; background:rgba(0,0,0,.85); } .ms-modal-inner{ position:relative; z-index:1; max-width:92vw; max-height:92vh; display:flex; flex-direction:column; align-items:center; } .ms-modal-img{ max-width:100%; max-height:80vh; border-radius:8px; display:block; object-fit:contain; } .ms-modal-meta{ margin-top:14px; text-align:center; color:#fff; } .ms-modal-meta strong{ font-size:15px; display:block; margin-bottom:4px; } .ms-modal-meta span{ font-size:13px; color:rgba(255,255,255,.65); } .ms-modal-close{ position:absolute; top:-14px; right:-14px; width:36px; height:36px; border-radius:50%; background:#fff; border:none; cursor:pointer; font-size:18px; display:flex; align-items:center; justify-content:center; color:#111; box-shadow:0 2px 8px rgba(0,0,0,.3); } .ms-modal-prev, .ms-modal-next{ position:fixed; top:50%; transform:translateY(-50%); background:rgba(255,255,255,.15); border:none; color:#fff; font-size:22px; width:44px; height:44px; border-radius:50%; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:background .15s; z-index:2; } .ms-modal-prev{ left:16px; } .ms-modal-next{ right:16px; } .ms-modal-prev:hover, .ms-modal-next:hover{ background:rgba(255,255,255,.3); } All cases Fillers Lip lift Spider vein treatment Real patient results. Individual outcomes vary. All procedures performed by board-certified plastic surgeons. ← × → (function(){ const BASE = "https://storage.googleapis.com/treatspace-prod-media/pracimg/u-3304/"; /* * Keloid cases have been removed completely. * They will not appear in the gallery, filters, counts, or modal navigation. */ const CASES = [ /* ── FILLERS ── */ { img:"patient-3123-fillers-injectables-before-after-2-570x190.webp", cat:"Fillers", title:"Lip fillers — volume and definition", detail: "Lip filler treatment showing enhanced volume, improved lip border definition, and natural shape." }, /* ── LIP LIFT ── */ { img:"Lip_Lift.webp", cat:"Lip Lift", title:"Lip lift", detail: "Surgical lip lift showing increased upper lip show, improved cupid's bow definition, and reduced philtrum length." }, /* ── SPIDER VEIN TREATMENT ── */ { img:"patient-3180-vein-treatment-before-after-570x190.webp", cat:"Spider Vein Treatment", title:"Spider vein treatment — sclerotherapy", detail: "Sclerotherapy showing significant reduction in visible spider veins on the legs." }, { img:"patient-3180-vein-treatment-before-after-1-570x190.webp", cat:"Spider Vein Treatment", title:"Spider vein treatment", detail: "Sclerotherapy result with improved skin clarity and reduced vein visibility." }, { img:"patient-3180-vein-treatment-before-after-2-570x190.webp", cat:"Spider Vein Treatment", title:"Spider vein treatment", detail: "Spider vein treatment showing clearance of superficial leg veins." }, { img:"patient-3180-vein-treatment-before-after-3-570x190.webp", cat:"Spider Vein Treatment", title:"Spider vein treatment", detail: "Sclerotherapy with notable reduction in spider vein network density." } ]; const TAG = { "Fillers":"ms-tag-fillers", "Lip Lift":"ms-tag-liplift", "Spider Vein Treatment":"ms-tag-vein" }; let active = "All"; let filtered = []; let modalIdx = 0; const filters = document.getElementById("ms-filters"); const count = document.getElementById("ms-count"); const grid = document.getElementById("ms-grid"); const modal = document.getElementById("ms-modal"); const modalImage = document.getElementById("ms-modal-img"); const modalTitle = document.getElementById("ms-modal-title"); const modalDetail = document.getElementById("ms-modal-detail"); const closeButton = document.getElementById("ms-close"); const overlay = document.getElementById("ms-overlay"); const previousButton = document.getElementById("ms-prev"); const nextButton = document.getElementById("ms-next"); function escapeHTML(value){ return String(value) .replace(/&/g,"&") .replace(//g,">") .replace(/"/g,""") .replace(/'/g,"'"); } function render(){ filtered = active === "All" ? CASES : CASES.filter(function(caseItem){ return caseItem.cat === active; }); count.textContent = "Showing " + filtered.length + " case" + (filtered.length !== 1 ? "s" : ""); grid.innerHTML = filtered.map(function(caseItem,index){ const tagClass = TAG[caseItem.cat] || "ms-tag-fillers"; return ` ${escapeHTML(caseItem.cat)} ${escapeHTML(caseItem.title)} ${escapeHTML(caseItem.detail)} `; }).join(""); document.querySelectorAll(".ms-card").forEach(function(card){ card.addEventListener("click",function(){ openModal(Number(card.dataset.i)); }); card.addEventListener("keydown",function(event){ if(event.key === "Enter" || event.key === " "){ event.preventDefault(); openModal(Number(card.dataset.i)); } }); }); } function openModal(index){ if(!filtered.length){ return; } modalIdx = index; const caseItem = filtered[index]; modalImage.src = BASE + caseItem.img; modalImage.alt = caseItem.title; modalTitle.textContent = caseItem.title; modalDetail.textContent = caseItem.detail; modal.classList.add("open"); document.body.style.overflow = "hidden"; } function closeModal(){ modal.classList.remove("open"); document.body.style.overflow = ""; } function step(direction){ if(!filtered.length){ return; } const nextIndex = (modalIdx + direction + filtered.length) % filtered.length; openModal(nextIndex); } closeButton.addEventListener("click",closeModal); overlay.addEventListener("click",closeModal); previousButton.addEventListener("click",function(){ step(-1); }); nextButton.addEventListener("click",function(){ step(1); }); document.addEventListener("keydown",function(event){ if(!modal.classList.contains("open")){ return; } if(event.key === "Escape"){ closeModal(); } if(event.key === "ArrowLeft"){ step(-1); } if(event.key === "ArrowRight"){ step(1); } }); filters.addEventListener("click",function(event){ const button = event.target.closest(".ms-fb"); if(!button){ return; } active = button.dataset.cat; document.querySelectorAll(".ms-fb").forEach(function(filterButton){ filterButton.classList.toggle( "on", filterButton.dataset.cat === active ); }); render(); }); render(); })();