javascript:(()=>{if(window.__gestureOn){alert("ジェスチャー待機中です");return;}window.__gestureOn=true;let sx=0,sy=0;const min=40;const down=e=>{sx=e.clientX;sy=e.clientY;document.addEventListener("mouseup",up,{once:true});};const up=e=>{const dx=e.clientX-sx,dy=e.clientY-sy;cleanup();if(Math.abs(dx)<min&&Math.abs(dy)<min)return;if(Math.abs(dx)>Math.abs(dy)&&dx>0)TEL();};const cleanup=()=>{document.removeEventListener("mousedown",down);window.__gestureOn=false;};document.addEventListener("mousedown",down,{once:true});alert("ジェスチャー待機中:右にドラッグ");function TEL(){if(document.getElementById("__tel_panel")){document.getElementById("__tel_panel").remove();return;}const raw=document.body.innerText.match(/[\+0-9][0-9\s\-]{8,20}[0-9]/g)||[];const norm=s=>{let n=s.replace(/\D/g,"");if(n.startsWith("0081"))n="0"+n.slice(4);else if(n.startsWith("81")&&n.length>=11)n="0"+n.slice(2);if(!n.startsWith("0"))return null;return n;};const uniq=[...new Set(raw.map(norm).filter(Boolean))];const fmt=n=>{if(/^0(70|80|90|50)\d{8}$/.test(n))return n.replace(/(\d{3})(\d{4})(\d{4})/,"$1-$2-$3");if(/^(0120|0570)\d{6}$/.test(n))return n.replace(/(\d{4})(\d{3})(\d{3})/,"$1-$2-$3");if(n.length===10)return n.replace(/(\d{2,4})(\d{2,4})(\d{4})/,"$1-$2-$3");return null};const out=uniq.map(fmt).filter(Boolean);const p=document.createElement("div");p.id="__tel_panel";p.style.cssText="position:fixed;top:0;right:0;width:320px;height:100%;background:#111;color:#0f0;z-index:999999;font:12px/1.6 monospace;padding:10px;overflow:auto";p.innerHTML="<b>📞 電話番号一覧 ("+out.length+")</b><hr>"+(out.length?out.map(n=>`<div>${n}</div>`).join(""):"なし");document.body.appendChild(p);}})();