return 'ほとんど現れにくい傾向です。'; } function buildSummary(v,a,k,vp,ap,kp){ const arr = [ {k:'V',score:v,p:vp,label:'視覚(V)'}, {k:'A',score:a,p:ap,label:'聴覚(A)'}, {k:'K',score:k,p:kp,label:'体感覚(K)'} ].sort((x,y)=> y.score - x.score); const top = arr[0]; const ties = arr.filter(x=>x.score===top.score); if(ties.length>1){ const names = ties.map(t=>t.label).join('・'); return `優位タイプは ${names}(同率)。文脈に応じた使い分けが最も効果的です。`; } let hint = ''; if(top.k==='V') hint = '図解・カンバン・見える化で理解と意思決定が加速します。'; if(top.k==='A') hint = '音読・対話・要点コールで記憶と合意が進みます。'; if(top.k==='K') hint = 'ロールプレイ・小実験・行動設計で定着が高まります。'; return `最優位は ${top.label}(${top.p}%)。${hint}`; } function render(){ const v = sumFor('V'); const a = sumFor('A'); const k = sumFor('K'); const [vp,ap,kp] = pct(v,a,k); vBar.style.width = vp + '%'; aBar.style.width = ap + '%'; kBar.style.width = kp + '%'; vPct.textContent = vp + '%'; aPct.textContent = ap + '%'; kPct.textContent = kp + '%'; vScoreEl.textContent = v; aScoreEl.textContent = a; kScoreEl.textContent = k; vMsg.textContent = msgFor(v); aMsg.textContent = msgFor(a); kMsg.textContent = msgFor(k); typeSummary.innerHTML = buildSummary(v,a,k,vp,ap,kp); // スクロール(アクセシビリティ配慮) document.getElementById('result').scrollIntoView({behavior:'smooth', block:'start'}); } calcBtn.addEventListener('click', render); printBtn.addEventListener('click', ()=> window.print()); copyBtn.addEventListener('click', ()=>{ const text = `NLP VAKタイプ診断\nV:${vPct.textContent}(${vScoreEl.textContent}/30)\nA:${aPct.textContent}(${aScoreEl.textContent}/30)\nK:${kPct.textContent}(${kScoreEl.textContent}/30)\n優位タイプ: ${typeSummary.textContent}`; navigator.clipboard.writeText(text).then(()=>{ copyBtn.textContent = 'コピーしました'; setTimeout(()=> copyBtn.textContent='結果をコピー', 2000); }); }); // 事前にラジオボタンをクリックしやすく document.querySelectorAll('.scale label').forEach(lbl=>{ lbl.addEventListener('click',()=>{ const r = lbl.querySelector('input[type="radio"]'); r && (r.checked = true); }); }); // パフォーマンス向上のため、初期描画は空 })();