Face Compatibility Test

How compatible are our faces? :root{–bg:#fff7fb;–card:#fff;–text:#171717;–muted:#6b7280;–line:#f0d9e6;–pink:#e11d74;–violet:#7c3aed;–shadow:0 14px 34px rgba(109,40,77,.10)} *{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:linear-gradient(180deg,#fff7fb,#f8fafc);color:var(–text);font-family:Pretendard,”Noto Sans KR”,Arial,sans-serif}button,input{font:inherit}button{cursor:pointer} .app{width:100%;max-width:780px;margin:0 auto;padding:8px 8px 48px}.hero{padding:28px 18px 24px;border-radius:0 0 28px 28px;background:radial-gradient(circle at 8% 8%,#fde7f3 0,transparent 34%),radial-gradient(circle at 94% 0,#ede9fe 0,transparent 35%),linear-gradient(135deg,#fff,#fff1f6);box-shadow:var(–shadow)}.hero-badge{display:inline-flex;padding:7px 11px;border-radius:999px;background:#111827;color:#fff;font-size:12px;font-weight:900}.hero h1{margin:14px 0 10px;font-size:32px;line-height:1.22;letter-spacing:-1px}.hero p{margin:0;color:#4b5563;font-size:15px;line-height:1.75}.hero-note{margin-top:12px;padding:11px 12px;border-radius:14px;background:#ffffffbb;border:1px solid #f3d9e7;color:#6b7280;font-size:12px;line-height:1.6} .card{margin-top:14px;padding:18px 14px;background:var(–card);border:1px solid var(–line);border-radius:22px;box-shadow:0 8px 24px rgba(15,23,42,.05)}.step{display:inline-block;padding:6px 10px;border-radius:999px;background:#fce7f3;color:#9d174d;font-size:12px;font-weight:900}.card h2{margin:12px 0 7px;font-size:22px;line-height:1.35}.card h3{margin:0 0 10px;font-size:19px}.desc{margin:0 0 15px;color:var(–muted);font-size:14px;line-height:1.65} .photo-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.photo-box{position:relative}.file{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.photo-label{display:flex;min-height:220px;align-items:center;justify-content:center;padding:12px;border:2px dashed #f0a4c4;border-radius:18px;background:#fff8fb;text-align:center;overflow:hidden}.photo-icon{font-size:42px}.photo-title{margin-top:8px;font-size:17px;font-weight:900;color:#9d174d}.photo-help{margin-top:5px;color:#6b7280;font-size:12px}.preview{display:none;width:100%;height:220px;object-fit:cover;border-radius:14px;background:#111827}.change{display:none;width:100%;margin-top:8px;padding:11px;border:0;border-radius:12px;background:#fdf2f8;color:#9d174d;font-weight:900}.label-tag{position:absolute;top:9px;left:9px;z-index:2;padding:5px 8px;border-radius:999px;background:#111827;color:#fff;font-size:11px;font-weight:900} .question-wrap{display:grid;gap:14px}.question{padding:14px;border-radius:16px;background:#fffafb;border:1px solid #f3dce7}.question strong{display:block;margin-bottom:10px;font-size:15px}.options{display:grid;grid-template-columns:1fr 1fr;gap:8px}.option{position:relative}.option input{position:absolute;opacity:0}.option label{display:block;padding:11px 10px;border-radius:12px;border:1px solid #ead5df;background:#fff;text-align:center;font-size:13px;font-weight:800;color:#374151}.option input:checked+label{border-color:#ec4899;background:#fdf2f8;color:#9d174d;box-shadow:0 0 0 2px #fbcfe8 inset} .status{margin-top:12px;padding:12px;border-radius:14px;background:#f8fafc;color:#475569;text-align:center;font-size:13px;line-height:1.55}.main{width:100%;margin-top:13px;padding:16px;border:0;border-radius:17px;background:linear-gradient(135deg,var(–pink),var(–violet));color:#fff;font-size:17px;font-weight:950;box-shadow:0 10px 20px rgba(190,24,93,.22)}.main:disabled{background:#cbd5e1;box-shadow:none;cursor:not-allowed}.hidden{display:none!important} .loading{margin-top:14px;padding:24px 16px;border-radius:24px;background:linear-gradient(135deg,#111827,#312e81,#831843);color:#fff;text-align:center;box-shadow:var(–shadow)}.dual-photo,.result-photos{display:flex;justify-content:center;align-items:center}.dual-photo img,.result-photos img{width:118px;height:118px;object-fit:cover;border-radius:50%;border:5px solid rgba(255,255,255,.18)}.dual-photo img+img,.result-photos img+img{margin-left:-18px}.heart{position:relative;z-index:2;margin:0 -8px;font-size:34px}.bar{height:12px;margin-top:18px;border-radius:999px;background:#334155;overflow:hidden}.bar>div{height:100%;width:0;background:linear-gradient(90deg,#f472b6,#c084fc,#60a5fa);transition:width .3s}.percent{margin-top:8px;color:#d1d5db;font-size:13px} .gate{text-align:center}.ad{margin:15px 0;min-height:90px;display:flex;align-items:center;justify-content:center;border-radius:15px;background:#f8fafc;color:#94a3b8;font-size:12px}.reveal{width:100%;padding:16px;border:0;border-radius:17px;background:linear-gradient(135deg,#db2777,#7c3aed);color:#fff;font-size:17px;font-weight:950} .result-hero{margin-top:14px;padding:20px 16px;border-radius:26px;background:radial-gradient(circle at 15% 0,#be185d,#111827 58%,#020617);color:#fff;text-align:center;box-shadow:var(–shadow)}.result-kicker{font-size:12px;font-weight:900;letter-spacing:1.6px;color:#fbcfe8}.probability{margin-top:8px;font-size:54px;line-height:1;font-weight:1000;letter-spacing:-2px}.probability-label{margin-top:6px;color:#fce7f3;font-size:15px}.verdict{margin-top:13px;padding:13px 14px;border-radius:16px;background:rgba(255,255,255,.10);font-size:16px;font-weight:900;line-height:1.6}.badge-row{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;margin-top:12px}.result-badge{padding:7px 10px;border-radius:999px;background:rgba(255,255,255,.11);font-size:12px} .section{margin-top:12px;padding:17px 14px;background:#fff;border:1px solid var(–line);border-radius:20px;box-shadow:0 8px 22px rgba(15,23,42,.05)}.section p{margin:0;color:#374151;font-size:15px;line-height:1.82}.warm{background:#fff7ed;border-color:#fed7aa}.cool{background:#eff6ff;border-color:#bfdbfe}.danger{background:#fff1f2;border-color:#fecdd3}.score-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.score-card{padding:13px;border-radius:15px;background:#f8fafc}.score-card b{display:block;margin-bottom:6px;font-size:14px}.score-card strong{font-size:24px}.score-card span{display:block;margin-top:5px;color:#64748b;font-size:12px;line-height:1.5}.metric{margin-top:11px}.metric-head{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px}.metric-track{height:9px;border-radius:999px;background:#e5e7eb;overflow:hidden}.metric-track i{display:block;height:100%;background:linear-gradient(90deg,#ec4899,#8b5cf6,#2563eb)}.emotion-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.emotion{padding:12px;border-radius:14px;background:#f8fafc}.emotion-top{display:flex;justify-content:space-between;font-size:13px}.emotion small{display:block;margin-top:5px;color:#64748b;line-height:1.5}.timeline{display:grid;gap:8px}.timeline-row{display:grid;grid-template-columns:88px 1fr;gap:8px}.timeline-tag{padding:9px 8px;border-radius:12px;background:#fce7f3;color:#9d174d;font-size:12px;font-weight:900;text-align:center}.timeline-text{padding:10px 12px;border-radius:12px;background:#f8fafc;color:#374151;font-size:14px;line-height:1.6}.list{display:grid;gap:8px}.list-item{padding:12px 13px;border-radius:14px;background:#f8fafc;font-size:14px;line-height:1.65;color:#374151}.actions{display:grid;grid-template-columns:1fr 1fr;gap:9px}.actions button{border:0;border-radius:14px;padding:13px 8px;font-weight:900}.save{background:#111827;color:#fff}.share{background:#fee500}.copy{background:#e0f2fe;color:#075985}.retry{background:#ede9fe;color:#5b21b6}.disclaimer{margin:16px 3px 0;text-align:center;color:#94a3b8;font-size:11px;line-height:1.65} @media(max-width:560px){.hero h1{font-size:28px}.photo-label{min-height:190px}.preview{height:190px}.options{grid-template-columns:1fr}.probability{font-size:48px}}@media(min-width:640px){.app{padding:18px 14px 50px}.hero{border-radius:28px}.hero h1{font-size:37px}.card{padding:22px}}
❤️ 2 Photos + Compatibility Quiz

How compatible
are we?

We’ll compare your photo and your crush’s to estimate your dating potential, odds of making a successful move, and long-term relationship potential.

For entertainment only. Your photos are processed in your browser and aren’t saved to our servers.
STEP 01

Upload a photo of each of you

For the best results, use clear photos where the face is easy to see and only one person appears.

You
Your match
🔒 Your photos stay in your browser and aren’t saved to our servers.
(function(){ “use strict”;const $=id=>document.getElementById(id);let myImage=””,theirImage=””,report=null;const myFile=$(“myFile”),theirFile=$(“theirFile”),requiredNames=[“relationship”,”contact”,”meet”,”feeling”,”initiative”,”issue”]; function bindFile(input,preview,empty,change){input.addEventListener(“change”,function(){const file=this.files&&this.files[0];if(!file)return;if(!/^image\/(jpeg|png|webp)$/.test(file.type)){alert(“Please choose a JPG, PNG, or WEBP image.”);this.value=””;return}if(file.size>12*1024*1024){alert(“Please choose a photo under 12MB.”);this.value=””;return}const reader=new FileReader();reader.onload=e=>{preview.src=e.target.result;preview.style.display=”block”;empty.style.display=”none”;change.style.display=”block”;if(input===myFile)myImage=e.target.result;else theirImage=e.target.result;validatePhotos()};reader.readAsDataURL(file)});change.addEventListener(“click”,()=>input.click())} bindFile(myFile,$(“myPreview”),$(“myEmpty”),$(“myChange”));bindFile(theirFile,$(“theirPreview”),$(“theirEmpty”),$(“theirChange”)); function validatePhotos(){const ok=!!myImage&&!!theirImage;$(“toSurvey”).disabled=!ok;$(“photoStatus”).textContent=ok?”✅ Both photos are ready! Let’s move on to the relationship questions.”:”🔒 Your photos stay in your browser and aren’t saved to our servers.”} $(“toSurvey”).onclick=()=>{$(“photoSection”).classList.add(“hidden”);$(“surveySection”).classList.remove(“hidden”);scrollTo({top:$(“surveySection”).offsetTop-8,behavior:”smooth”})}; document.addEventListener(“change”,e=>{if(e.target.matches(‘input[type=”radio”]’))validateSurvey()});function validateSurvey(){const complete=requiredNames.every(name=>document.querySelector(`input[name=”${name}”]:checked`));$(“startBtn”).disabled=!complete;$(“surveyStatus”).textContent=complete?”✅ All answers are in. Start the analysis when you’re ready.”:”Answer all 6 questions to start your analysis.”} const val=name=>document.querySelector(`input[name=”${name}”]:checked`).value,clamp=(n,min,max)=>Math.max(min,Math.min(max,n)),delay=ms=>new Promise(r=>setTimeout(r,ms)); async function feature(src){const img=new Image();img.src=src;await img.decode();const c=$(“analysisCanvas”),ctx=c.getContext(“2d”,{willReadFrequently:true});ctx.clearRect(0,0,64,64);ctx.drawImage(img,0,0,64,64);const d=ctx.getImageData(0,0,64,64).data;let b=0,s=0,r=0,g=0,bl=0,h=2166136261,l=[];for(let i=0;i<d.length;i+=16){const R=d[i],G=d[i+1],B=d[i+2],mx=Math.max(R,G,B),mn=Math.min(R,G,B),L=.2126*R+.7152*G+.0722*B;b+=L;s+=mx-mn;r+=R;g+=G;bl+=B;l.push(L);h^=(R+(G<<8)+(B<<16));h=Math.imul(h,16777619)}b/=l.length;s/=l.length;r/=l.length;g/=l.length;bl/=l.length;let ctt=0;for(const L of l)ctt+=(L-b)*(L-b);return{b,s,r,g,bl,contrast:Math.sqrt(ctt/l.length),hash:Math.abs(h)}} function survey(){return{relationship:+val("relationship"),contact:+val("contact"),meet:+val("meet"),feeling:+val("feeling"),initiative:+val("initiative"),issue:val("issue")}} function makeReport(a,b,s){const sim=clamp(100-Math.abs(a.b-b.b)*.45-Math.abs(a.s-b.s)*.25-Math.abs(a.contrast-b.contrast)*.35,35,96),color=clamp(100-(Math.abs(a.r-b.r)+Math.abs(a.g-b.g)+Math.abs(a.bl-b.bl))*.16,34,97),seed=(a.hash+b.hash)%9973;let base=18+s.relationship*9+s.contact*7+s.meet*6+s.feeling*10+(Math.abs(s.initiative-2)<=1?8:-4)+sim*.1+color*.07;const pen={awkward:5,contact:10,expression:8,jealousy:13,distance:12,situation:9,unknown:7}[s.issue];base-=pen;if(s.relationship===-1)base-=18;if(s.initiative===0)base-=10;if(s.feeling===0)base-=14;if(s.contact===0)base-=9;if(s.meet===0)base-=6;const p=Math.round(clamp(base+seed%9-4,12,96)),conf=Math.round(clamp(p+s.feeling*3+s.meet*2-pen-(s.relationship<2?8:0),8,94)),long=Math.round(clamp((sim+color)/2+s.relationship*5+s.meet*4-pen+seed%7,20,95)),contact=Math.round(clamp(35+s.contact*13+(Math.abs(s.initiative-2)<=1?12:2),25,97)),balance=Math.round(clamp(48-Math.abs(s.initiative-2)*12+s.feeling*7,18,96)),conversation=Math.round(clamp(42+s.contact*9+s.meet*7+seed%15,25,97)),date=Math.round(clamp((sim+color)/2+s.meet*4+seed%11,35,97)),expression=Math.round(clamp(45+s.feeling*8+s.relationship*5-(s.issue==="expression"?18:0),24,96)),trust=Math.round(clamp(40+s.meet*8+s.relationship*7+seed%13,24,96)),recovery=Math.round(clamp(55+s.relationship*6+s.meet*3-(s.issue==="jealousy"?18:0),22,94)),interest=Math.round(clamp(24+s.feeling*16+s.initiative*6+s.contact*5-(s.initiative===0?12:0)+seed%8,8,96)),curiosity=Math.round(clamp(48+s.relationship*4+s.meet*3+seed%17,28,98)),excitement=Math.round(clamp((interest+date)/2+seed%9-4,18,96)),comfort=Math.round(clamp(36+s.meet*10+s.relationship*7+seed%12,20,98)),intimacy=Math.round(clamp(28+s.contact*8+s.meet*9+s.relationship*6,15,98)),burden=Math.round(clamp(72-interest+Math.abs(s.initiative-2)*12+(s.relationship=80?”You two have strong potential to become a couple.”:p>=65?”The potential is definitely there, but one move could change the whole direction of this relationship.”:p>=45?”There may be some interest, but you’re missing a clear turning point right now.”:p>=30?”This may be a relationship where one person is more invested than the other.”:”Based on what you told us, staying at a distance looks more likely than dating right now.”,stage=p>=80?”Almost dating”:p>=65?”Strong potential”:p>=45?”Curious and exploring”:p>=30?”Different temperatures”:”Friendship or one-sided interest”,who=s.initiative>=3?”They may be the more proactive one”:s.initiative===2?”You’re both putting in similar effort”:”You may be the more proactive one”; const strengths=[“Your photo vibes and color balance don’t clash, so being together may feel fairly natural.”,”The more you talk or spend time together, the faster your comfort level may grow.”,”You both seem more likely to take your time and feel things out than rush into a label.”,”Once a conversation gets going, you may be good at matching each other’s energy.”,”If you start dating, that easy, friend-like comfort could become one of your biggest strengths.”,”Your differences keep things interesting, so the relationship may not get boring quickly.”]; const risks={awkward:[“You haven’t had enough real interaction yet, so it’s easy to overestimate feelings based on photos or short conversations.”,”Without spending time alone together, this connection could keep growing mostly in your imagination.”],contact:[“Different texting frequency or reply speeds could feel like a difference in feelings.”,”If one person always has to start the conversation, that person may eventually get tired.”],expression:[“Even if there’s interest, holding back can make the other person assume you don’t care.”,”If you both wait for the other person to make the first move, the connection may stall.”],jealousy:[“Reading too much into situations you haven’t confirmed can damage trust quickly.”,”If jealousy is disguised as affection, the other person may feel pressured.”],distance:[“Long gaps between seeing each other can make the connection feel more imagined than real.”,”If you only text, it may be hard to build deeper closeness.”],situation:[“Friends, schedules, work, or school could keep throwing off your timing.”,”Even with real feelings, practical circumstances may slow things down.”],unknown:[“Not knowing what the actual problem is may be the biggest problem of all.”,”It’s worth checking whether you’re interpreting basic kindness as romantic interest.”]}; const actions=p<40?["Instead of confessing right away, try creating one or two chances to hang out one-on-one first.","For the next week, initiate a little less and see whether they restart the conversation on their own.","Pay attention not just to reply speed, but to whether they ask questions back or suggest plans."]:p=70?[[“1–2 weeks”,”Your conversations and plans may start happening more naturally.”],[“1 month”,”You may have a conversation about where this is going.”],[“3 months”,”If you start dating, your different communication habits may be the first real test.”],[“6 months”,”If you can talk through conflict, this could settle into a lasting relationship.”]]:p>=45?[[“1–2 weeks”,”Watch for whether they keep conversations going on their own.”],[“1 month”,”More one-on-one time could turn this into something more.”],[“3 months”,”If nothing changes, you may settle into a friendship.”],[“6 months”,”Even if you start dating, a lack of emotional expression could keep things stuck.”]]:[[“1–2 weeks”,”See how they respond when you stop doing all the work.”],[“1 month”,”If they don’t reach out or suggest plans on their own, it may be time to lower your expectations.”],[“3 months”,”If the current pattern continues, you’ll probably remain friends or acquaintances.”],[“6 months”,”A relationship where only one person tries could become emotionally exhausting.”]]; const cold=p>=75?”You have many of the ingredients for a real relationship. Just remember: a high score isn’t a guarantee. Look for genuine interest in their questions, invitations, and willingness to make time—not just how fast they text back.”:p>=50?”There’s curiosity and potential here, but not enough solid evidence that this is ready to become a relationship. Don’t assume kindness means romantic interest. Notice whether they keep things going when you stop doing all the initiating.”:”Based on your answers, your emotional temperatures may be pretty mismatched right now. That doesn’t necessarily mean they dislike you, but there also isn’t much clear behavior showing they want a relationship. A confession right now could create pressure instead of momentum.”; return{p,conf,long,sim:Math.round(sim),color:Math.round(color),contact,balance,conversation,date,expression,trust,recovery,interest,curiosity,excitement,comfort,intimacy,burden,caution,verdict,stage,who,strengths:[strengths[seed%6],strengths[(seed+2)%6],strengths[(seed+4)%6]],risks:risks[s.issue],confessionText:conf>=75?”Your odds look pretty good right now. Rather than pouring out every feeling at once, tell them honestly that you feel comfortable together and would like to spend more time with them.”:conf>=50?”Making a move isn’t out of the question, but they may not be fully sure yet. Try setting up one more one-on-one hangout and see whether they choose to invest the time.”:”We wouldn’t recommend confessing right now. It may not be that they dislike you—the closeness and initiative needed to read this as romantic just aren’t there yet.”,timeline,dateOptions:[[“Best choice”,”Quiet coffee + a walk”,”A good way to see how naturally the conversation flows.”],[“Skip for now”,”An extra-long day together”,”It could feel like too much if you’re not close yet.”],[“Best vibe”,”A scenic drive or museum”,”You can let things unfold without forcing conversation.”],[“Good reality check”,”A short meal together”,”Notice whether they try to extend the time together.”]],relationshipItems:[`The upside: ${date>=70?”You may have an easy time together and enjoy your dates a lot.”:”Your differences could keep the relationship fresh.”}`,`The challenge: ${contact<60?"Different texting frequency or reply speeds could become a recurring source of tension.":"You may communicate well but still differ in how you show affection."}`,`What you might fight about: ${s.issue===”jealousy”?”Reading too much into situations without checking the facts”:”Expecting the other person to know what you need without saying it”}`,`How to make up: Wait until the emotions cool down, then talk about specific facts and actions instead of arguing from assumptions.`],cold,actions,coupleType:p>=75?”Comfortable best-friend couple”:p>=55?”Slow-burn couple”:p>=35?”Hot-and-cold couple”:”One-sided-crush energy”,first:s.initiative>=3?”They’re more likely to make the first move”:s.initiative=80?”2 weeks–1 month”:p>=60?”1–3 months”:p>=40?”3+ months”:”Hard to predict from the current pattern”,surrounding:p>=65?”Friends may already suspect there’s something between you.”:p>=40?”People around you may not know whether you’re friends or flirting.”:”Others may feel like one of you is more interested than the other.”}} $(“startBtn”).onclick=async()=>{$(“surveySection”).classList.add(“hidden”);$(“loadingSection”).classList.remove(“hidden”);$(“loadingMe”).src=myImage;$重(“loadingThem”).src=theirImage;const stages=[[12,”Comparing your vibes…”,”Checking the brightness and color balance in your photos.”],[28,”Analyzing your relationship…”,”Calculating your relationship stage and time spent together.”],[46,”Reading your communication pattern…”,”Seeing who puts in more effort.”],[63,”Measuring your balance…”,”Combining spark, comfort, and pressure.”],[81,”Estimating your chances…”,”Figuring out whether now is a good time to make a move.”],[100,”Analysis complete!”,”Your honest relationship report is ready.”]],p1=feature(myImage),p2=feature(theirImage),s=survey();for(const [p,t,d] of stages){$(“loadingTitle”).textContent=t;$(“loadingDesc”).textContent=d;$(“progressBar”).style.width=p+”%”;$(“percent”).textContent=p+”%”;await delay(p===100?450:720)}report=makeReport(await p1,await p2,s);$(“loadingSection”).classList.add(“hidden”);$(“gateSection”).classList.remove(“hidden”);try{(adsbygoogle=window.adsbygoogle||[]).push({})}catch(e){};scrollTo({top:$(“gateSection”).offsetTop-8,behavior:”smooth”})}; $(“revealBtn”).onclick=()=>{render(report);$(“gateSection”).classList.add(“hidden”);$(“resultSection”).classList.remove(“hidden”);scrollTo({top:$(“resultSection”).offsetTop-8,behavior:”smooth”})}; function render(r){$(“resultMe”).src=myImage;$(“resultThem”).src=theirImage;$(“mainProbability”).textContent=r.p+”%”;$(“verdict”).textContent=r.verdict;$(“badgeRow”).innerHTML=[r.stage,r.who,`Estimated time: ${r.time}`].map(x=>`${x}`).join(“”);$(“coreScores”).innerHTML=[[“Odds of a successful move”,r.conf+”%”,”Based on your current timing”],[“Long-term potential”,r.long+”%”,”If you start dating”],[“Photo vibe match”,r.sim+” points”,”Color, brightness, and contrast”],[“Balance of interest”,r.balance+” points”,”Whether one person is carrying it”]].map(x=>`
${x[0]}${x[1]}${x[2]}
`).join(“”);$(“detailMetrics”).innerHTML=[[“Communication chemistry”,r.contact],[“Conversation chemistry”,r.conversation],[“Date chemistry”,r.date],[“Affection styles”,r.expression],[“Trust-building potential”,r.trust],[“Conflict recovery”,r.recovery],[“Long-term potential”,r.long]].map(x=>`
${x[0]}${x[1]}%
`).join(“”);$(“emotionGrid”).innerHTML=[[“Chance they’re interested”,r.interest,”How likely they are to see this romantically”],[“Curiosity”,r.curiosity,”How much they want to know more about you”],[“Butterflies”,r.excitement,”Emotional spark and anticipation”],[“Comfort”,r.comfort,”How relaxed they feel around you”],[“Closeness”,r.intimacy,”How close you are right now”],[“Pressure”,r.burden,”Higher means slow things down”],[“Guardedness”,r.caution,”How unsure they may still be”]].map(x=>`
${x[0]}${x[1]}%
${x[2]}
`).join(“”);$(“temperatureText”).textContent=r.balance>=75?`Your interest levels look pretty similar. ${r.who}. Just remember that real interest shows up in spontaneous texts and invitations, not only words.`:r.balance>=50?`This doesn’t look completely one-sided, but there is a bit of a temperature gap. ${r.who}. Watch their actions so you don’t get stuck being the only one who reaches out.`:`Your emotional investment may be pretty uneven right now. ${r.who}. If one person is doing all the work to keep the conversation alive, don’t overestimate the dating potential.`;$(“contactText”).textContent=r.contact>=75?”Your communication styles look like a strong match. Conversations probably flow naturally, with both of you asking questions and keeping things going. Still, what matters most is whether texting turns into real plans.”:r.contact>=50?”You stay in touch, but your timing and communication styles aren’t a perfect match. Trying to decode your feelings every time a reply is slow could get exhausting.”:”Your communication match is on the weaker side. If one person starts nearly every conversation or the other tends to give one-word replies, their current interest may not be very high.”;$(“strengthList”).innerHTML=r.strengths.map((x,i)=>`
${i+1}. ${x}
`).join(“”);$(“riskList”).innerHTML=r.risks.map((x,i)=>`
${i+1}. ${x}
`).join(“”);$(“confessionText”).textContent=r.confessionText;$(“timeline”).innerHTML=r.timeline.map(x=>`
${x[0]}
${x[1]}
`).join(“”);$(“dateGrid”).innerHTML=r.dateOptions.map(x=>`
${x[0]}${x[1]}${x[2]}
`).join(“”);$(“relationshipList”).innerHTML=r.relationshipItems.map(x=>`
${x}
`).join(“”);$(“coldSummary”).textContent=r.cold;$(“actionList”).innerHTML=r.actions.map((x,i)=>`
${i+1}. ${x}
`).join(“”);$(“coupleGrid”).innerHTML=[[“Couple type”,r.coupleType,”If you start dating”],[“Who makes the first move”,r.first,”Based on your current communication pattern”],[“Estimated time to dating”,r.time,”If the current pattern continues”],[“How your friends may see it”,r.surrounding,”From the outside looking in”]].map(x=>`
${x[0]}${x[1]}${x[2]}
`).join(“”)} $(“copyBtn”).onclick=async()=>{try{await navigator.clipboard.writeText(location.href);$(“copyBtn”).textContent=”✅ Link copied”}catch(e){prompt(“Copy this link:”,location.href)}};$(“shareBtn”).onclick=async()=>{const text=`Apparently our odds of becoming a couple are ${report.p}% 😂 Try it too!`;if(navigator.share)try{await navigator.share({title:”Dating Potential Test”,text,url:location.href})}catch(e){}else alert(text+”\n”+location.href)};$(“retryBtn”).onclick=()=>location.reload(); })();
🧿 액운 막는 수호부적 받기 →