/* ============================================================
   SELARAS — shared icons, primitives, mock data
   ============================================================ */
const ICONS = {
  plus:'<path d="M12 5v14M5 12h14"/>',
  grid:'<rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/>',
  briefcase:'<rect x="3" y="7" width="18" height="13" rx="2"/><path d="M8 7V5.5A2.5 2.5 0 0 1 10.5 3h3A2.5 2.5 0 0 1 16 5.5V7M3 12h18"/>',
  compare:'<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M12 4v16"/>',
  card:'<rect x="3" y="5" width="18" height="14" rx="2"/><path d="M3 10h18M7 15h3"/>',
  settings:'<path d="M3 7h9M17 7h4M3 17h6M15 17h6"/><circle cx="14.5" cy="7" r="2.4"/><circle cx="11.5" cy="17" r="2.4"/>',
  users:'<path d="M16 19v-1a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v1"/><circle cx="9" cy="7" r="3.4"/><path d="M22 19v-1a4 4 0 0 0-3-3.85M16 3.15A4 4 0 0 1 16 11"/>',
  user:'<path d="M19 20v-1a5 5 0 0 0-5-5h-4a5 5 0 0 0-5 5v1"/><circle cx="12" cy="7" r="4"/>',
  bell:'<path d="M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9M13.7 21a2 2 0 0 1-3.4 0"/>',
  search:'<circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/>',
  lock:'<rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/>',
  sparkles:'<path d="M12 3l1.8 4.9L18.7 9.7 13.8 11.5 12 16.4 10.2 11.5 5.3 9.7 10.2 7.9z"/><path d="M19 14l.8 2.2 2.2.8-2.2.8-.8 2.2-.8-2.2-2.2-.8 2.2-.8z"/>',
  check:'<path d="M5 12.5l4.4 4.4L19 7.3"/>',
  checkCircle:'<circle cx="12" cy="12" r="9"/><path d="M8.5 12.5l2.5 2.5 4.5-5"/>',
  chevR:'<path d="M9 6l6 6-6 6"/>',
  chevL:'<path d="M15 6l-6 6 6 6"/>',
  chevD:'<path d="M6 9l6 6 6-6"/>',
  arrowR:'<path d="M5 12h14M13 6l6 6-6 6"/>',
  arrowUp:'<path d="M12 19V6M6 12l6-6 6 6"/>',
  trend:'<path d="M3 17l6-6 4 4 7.5-7.5M15 7h5v5"/>',
  alert:'<path d="M12 3.5l9.3 16.5H2.7z"/><path d="M12 10v4.5M12 18h.01"/>',
  wa:'<path d="M21 11.5a8.5 8.5 0 0 1-12.5 7.5L3 21l2-5.5A8.5 8.5 0 1 1 21 11.5z"/><path d="M8.8 9.2c0 3 2.2 5.2 5 5.2.5 0 1-.6 1.2-1.2l-1.8-.9-.8.9c-1-.4-1.8-1.2-2.2-2.2l.9-.8-.9-1.8c-.6.2-1.4.6-1.4 1.6z" stroke="none" fill="currentColor"/>',
  clock:'<circle cx="12" cy="12" r="9"/><path d="M12 7.5V12l3 2"/>',
  x:'<path d="M6 6l12 12M18 6L6 18"/>',
  menu:'<path d="M4 7h16M4 12h16M4 17h16"/>',
  logout:'<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9"/>',
  mail:'<rect x="3" y="5" width="18" height="14" rx="2"/><path d="M3.5 6.5l8.5 6 8.5-6"/>',
  eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/>',
  eyeOff:'<path d="M3 3l18 18M10.6 10.7a3 3 0 0 0 4.1 4.1M9.4 5.3A10.5 10.5 0 0 1 12 5c6.5 0 10 7 10 7a17.6 17.6 0 0 1-3 3.9M6.2 6.2A17.4 17.4 0 0 0 2 12s3.5 7 10 7a10.4 10.4 0 0 0 3-.5"/>',
  shield:'<path d="M12 3l8 3v6c0 5-4 8-8 9-4-1-8-4-8-9V6z"/><path d="M9 12l2 2 4-4"/>',
  zap:'<path d="M13 3L4 14h7l-1 7 9-11h-7z"/>',
  file:'<path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4M9 13h6M9 17h5"/>',
  calendar:'<rect x="3" y="5" width="18" height="16" rx="2"/><path d="M3 10h18M8 3v4M16 3v4"/>',
  star:'<path d="M12 3.5l2.6 5.7 6.2.6-4.7 4.2 1.4 6.1L12 17l-5.5 3.1 1.4-6.1L3.2 9.8l6.2-.6z"/>',
  info:'<circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 7.6h.01"/>',
  copy:'<rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v1"/>',
  send:'<path d="M22 3L11 14M22 3l-7 18-4-7-7-4z"/>',
  phone:'<rect x="6" y="3" width="12" height="18" rx="2.5"/><path d="M11 18h2"/>',
  globe:'<circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3c2.6 2.6 2.6 15.4 0 18M12 3c-2.6 2.6-2.6 15.4 0 18"/>',
  building:'<path d="M5 21V5a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v16M9 7h2M9 11h2M9 15h2M15 21h5V11h-5"/>',
  target:'<circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="4.5"/><circle cx="12" cy="12" r="1"/>',
  gauge:'<path d="M21 12a9 9 0 1 0-18 0"/><path d="M7 17a7 7 0 0 1 10 0"/><path d="M12 13l3.5-3.5"/>',
  more:'<circle cx="5" cy="12" r="1.4"/><circle cx="12" cy="12" r="1.4"/><circle cx="19" cy="12" r="1.4"/>',
  award:'<circle cx="12" cy="9" r="5"/><path d="M9 13l-2 8 5-3 5 3-2-8"/>',
  help:'<circle cx="12" cy="12" r="9"/><path d="M9.5 9.2a2.5 2.5 0 0 1 4 1.6c0 1.6-2 1.9-2 3.2M12 17h.01"/>',
  download:'<path d="M12 3v12M7 11l5 5 5-5M5 21h14"/>',
  list:'<path d="M8 6h13M8 12h13M8 18h13"/><circle cx="3.6" cy="6" r="1"/><circle cx="3.6" cy="12" r="1"/><circle cx="3.6" cy="18" r="1"/>',
  filter:'<path d="M3 5h18l-7 8v5l-4 2v-7z"/>',
  pencil:'<path d="M15.5 4.5l4 4L8 20H4v-4z"/>',
  trash:'<path d="M4 7h16M9 7V5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2M6.5 7l1 13h9l1-13"/>',
  refresh:'<path d="M20.5 12a8.5 8.5 0 1 1-2.6-6.1M20.5 4v4.2h-4.2"/>',
  ext:'<path d="M14 4h6v6M20 4l-8.5 8.5M18 13v6H5V6h6"/>',
  play:'<path d="M7 4.5l12 7.5-12 7.5z"/>',
  rocket:'<path d="M5 15c-1.5 1.5-2 5-2 5s3.5-.5 5-2c.8-.8.8-2.2 0-3s-2.2-.8-3 0zM9 12l3 3M14.5 4.5c3 0 5 2 5 5L13 16l-5-5z"/><circle cx="14.5" cy="9.5" r="1.3"/>',
  scale:'<path d="M12 4v16M7 20h10M12 4l-6 2 6-2 6 2-6-2M6 6L3 13a3 3 0 0 0 6 0zM18 6l-3 7a3 3 0 0 0 6 0z"/>',
  doc:'<path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/>',
  layers:'<path d="M12 3l9 5-9 5-9-5z"/><path d="M3 13l9 5 9-5"/>',
  flag:'<path d="M5 21V4M5 4h11l-2 4 2 4H5"/>',
  graduation:'<path d="M3 9l9-4 9 4-9 4z"/><path d="M7 11v4c0 1.5 2.5 3 5 3s5-1.5 5-3v-4"/>',
};

function Icon({n, s=20, className='', style={}}){
  return React.createElement('svg', {
    width:s, height:s, viewBox:'0 0 24 24', fill:'none',
    stroke:'currentColor', strokeWidth:2, strokeLinecap:'round', strokeLinejoin:'round',
    className, style, dangerouslySetInnerHTML:{__html:ICONS[n]||''}
  });
}

function Mark({s=24, color='var(--brand)'}){
  // confident check — "vetted / a fit" — never reads as an X
  return (
    <svg width={s} height={s} viewBox="0 0 24 24" fill="none" stroke={color}
      strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round">
      <path d="M4.5 12.5L9.5 17.5 19.5 6.5"/>
    </svg>
  );
}

function Avatar({name, color, size=38, fontSize}){
  const init = name.split(' ').filter(Boolean).slice(0,2).map(w=>w[0]).join('').toUpperCase();
  return <div className="av" style={{width:size,height:size,background:color,fontSize:fontSize||Math.round(size*0.36)}}>{init}</div>;
}

const fitTone = s => s>=75 ? 'hi' : s>=58 ? 'mid' : 'lo';
const fitLabel = s => s>=75 ? 'Fit tinggi' : s>=58 ? 'Fit sedang' : 'Fit rendah';
const barColor = t => t==='hi'?'var(--hi-bar)':t==='mid'?'var(--mid-bar)':'var(--lo-bar)';

/* ---------------- mock data ---------------- */
const AV_COLORS = ['#176352','#2E7D67','#9A6B3F','#7C5BA6','#3E6FA8','#A9781E','#B0503C','#508079'];

const TEST_RECS = [
  {n:1, name:'Situational Judgment — Frontline', tag:'SJT', tagClass:'b-sjt', on:true, weight:40,
   why:'Simulasi komplain tamu & situasi shift. Paling prediktif untuk ketahanan kerja, dan susah dicurangi karena bukan soal yang bisa di-google.'},
  {n:2, name:'Kepribadian Big Five', tag:'Tervalidasi · IPIP', tagClass:'b-valid', on:true, weight:30,
   why:'Fokus ke conscientiousness & agreeableness, dua hal yang paling nyambung dengan kerja layanan tamu dan kerapian administrasi.'},
  {n:3, name:'Kemampuan Verbal & Numerik', tag:'Tervalidasi · ICAR', tagClass:'b-valid', on:true, weight:30,
   why:'Tes singkat untuk komunikasi dan ketelitian hitung saat check-out. Diberi batas waktu untuk jaga integritas.'},
  {n:4, name:'Profil Gaya Kerja', tag:'Opsional', tagClass:'b-opt', on:false, weight:0,
   why:'Profil gaya kerja 4-kuadrat untuk gambaran cepat gaya komunikasi & kerja. Bobotnya di skor fit dijaga rendah karena kurang prediktif — untuk profiling, bukan penentu.'},
];

const CANDIDATES = [
  {id:'pa', name:'Putu Ari Wibawa', score:88, mins:11, dims:[90,85,87,72], color:'#176352',
   sub:'Tenang di tekanan, administrasi rapi'},
  {id:'kd', name:'Kadek Dwi Lestari', score:84, mins:13, dims:[80,88,82,68], color:'#3E6FA8',
   sub:'Komunikator hangat, sangat teliti'},
  {id:'ms', name:'Made Surya Pratama', score:79, mins:10, dims:[83,66,86,74], color:'#7C5BA6',
   sub:'Cepat & ramah, agak kurang sabar'},
  {id:'nk', name:'Ni Komang Ayu', score:66, mins:16, dims:[58,72,61,55], color:'#A9781E',
   sub:'Niat baik, butuh struktur jelas'},
  {id:'rh', name:'Rizky Hidayat', score:41, mins:8, dims:[42,48,33,38], color:'#B0503C',
   sub:'Pola jawaban tidak konsisten'},
];

const DIM_NAMES = ['Situational Judgment','Kepribadian','Kognitif','Gaya Kerja'];

const PLANS = [
  {name:'Coba', price:'Gratis', credits:'10 kredit', per:'sekali', feat:['Skor & ranking kandidat','Rekomendasi tes AI','1 lowongan aktif'], cta:'Paket sekarang', tone:'ghost'},
  {name:'Pro', price:'Rp 499rb', credits:'200 kredit / bln', per:'per bulan', feat:['Semua di paket Coba','Laporan analis lengkap','Bandingkan kandidat','Lowongan tak terbatas','3 anggota tim'], cta:'Paket aktif', tone:'primary', popular:true},
  {name:'Tim', price:'Rp 1,29jt', credits:'600 kredit / bln', per:'per bulan', feat:['Semua di paket Pro','Anggota tim tak terbatas','Custom test bank','Integrasi WhatsApp Business API','Prioritas dukungan'], cta:'Hubungi kami', tone:'ghost'},
];

const TEAM = [
  {name:'Indah Permata', role:'Owner · HR Lead', email:'indah@ubudvilla.co', color:'#176352', you:true},
  {name:'Gede Mahendra', role:'Admin', email:'gede@ubudvilla.co', color:'#3E6FA8'},
  {name:'Sari Dewanti', role:'Anggota', email:'sari@ubudvilla.co', color:'#7C5BA6'},
];

const JOBS = [
  {id:'j1', title:'Resepsionis Hotel', cat:'Hospitality', applicants:42, done:31, hi:9, status:'Aktif', posted:'3 hari lalu', credits:42},
  {id:'j2', title:'Housekeeping Supervisor', cat:'Operasional', applicants:18, done:14, hi:4, status:'Aktif', posted:'1 minggu lalu', credits:18},
  {id:'j3', title:'Food & Beverage Server', cat:'Hospitality', applicants:27, done:9, hi:3, status:'Menyaring', posted:'2 hari lalu', credits:27},
  {id:'j4', title:'Admin & Reservasi', cat:'Office', applicants:11, done:11, hi:5, status:'Selesai', posted:'3 minggu lalu', credits:11},
];

// test question (candidate side)
const QUESTIONS = [
  {tag:'Situational Judgment', q:'Tamu komplain kamarnya belum siap padahal sudah lewat jam check-in. Dia mulai meninggikan suara di depan tamu lain. Apa yang kamu lakukan?',
   opts:[
     'Minta maaf, ajak duduk dengan welcome drink, cek status kamar real-time, dan beri estimasi waktu yang jelas.',
     'Jelaskan bahwa ini di luar kendali saya dan housekeeping yang lambat.',
     'Minta tamu menunggu di lobby sampai kamarnya siap.',
     'Langsung panggil manajer tanpa menangani tamu dulu.'], pick:0},
  {tag:'Situational Judgment', q:'Rekan kerja shift sebelumnya lupa mencatat satu reservasi, dan tamunya datang sekarang. Sistem penuh. Apa langkah pertamamu?',
   opts:[
     'Tetap tenang, sambut tamu, cari solusi kamar setara dulu, baru rapikan catatan dengan rekan nanti.',
     'Beri tahu tamu bahwa rekan saya yang salah, bukan saya.',
     'Minta tamu kembali besok karena tidak ada catatan.',
     'Diam dan tunggu manajer datang memutuskan.'], pick:0},
];

// per-candidate analyst report content (data-driven, beda tiap kandidat)
const REPORTS = {
  pa:{
    verdict:'Sangat direkomendasikan',
    summary:'Kandidat terkuat di batch ini, dan profilnya pas untuk front desk. Tenang menghadapi tamu sulit, teliti dalam administrasi, dan punya dorongan melayani yang tulus, bukan dibuat-buat. <b>Yang perlu kamu sadari sebelum interview:</b> ketahanannya di bawah tekanan berkelanjutan belum teruji, dia cenderung terlalu mengalah saat ada gesekan dengan rekan atau atasan, dan belum punya pengalaman shift malam. Tidak ada red flag serius. Prioritaskan untuk interview, dan arahkan pertanyaan ke tiga titik lemah itu.',
    tests:[
      {name:'Situational Judgment', weight:'bobot 40%', score:90, it:'Dari 12 skenario layanan, 10 dijawab dengan penanganan ideal. Polanya konsisten: menenangkan tamu lebih dulu, baru menyelesaikan akar masalah, dan tidak pernah menyalahkan rekan di depan tamu. Satu titik lemah muncul di skenario konflik dengan atasan, dia memilih mengalah penuh alih-alih mengangkat masalah secara sopan.'},
      {name:'Kepribadian Big Five', weight:'IPIP · 30%', score:85, facets:[['Conscientiousness',88],['Agreeableness',84],['Extraversion',72],['Stabilitas emosi',62],['Keterbukaan',58]], it:'Tulang punggungnya conscientiousness dan agreeableness yang tinggi, modal kuat untuk administrasi rapi dan kerja tim front office. <b>Stabilitas emosi adalah facet terendahnya</b>: di tekanan berkelanjutan seperti peak season, dia mungkin butuh dukungan lebih.'},
      {name:'Verbal & Numerik', weight:'ICAR · 30%', score:87, it:'Verbal kuat dan numerik teliti, nol kesalahan pada simulasi perhitungan check-out. Selesai dalam batas waktu, indikasi kuat dia mengerjakan sendiri.'},
    ],
    qs:[
      {q:'"Ceritakan satu kali kamu harus menyampaikan masalah ke atasan padahal kamu tahu dia tidak akan senang. Apa yang kamu lakukan?"', why:'Menguji ketegasan, titik lemah dari hasil SJT.'},
      {q:'"Pernah kerja shift malam? Bagaimana kamu menjaga ketelitian dan energi di jam 3 pagi?"', why:'Belum ada pengalaman shift malam di rekam jejaknya.'},
      {q:'"Hotel penuh, kamu sendirian di front desk, antrian panjang, satu tamu marah. Apa yang kamu dahulukan?"', why:'Menguji ketahanan di bawah tekanan, facet stabilitas emosi terendahnya.'},
    ],
    strengths:['Penanganan tamu sulit di atas rata-rata batch','Teliti dan rapi dalam administrasi','Indikator betah jangka panjang (conscientiousness tinggi)'],
    watch:['Stabilitas emosi di bawah tekanan berkelanjutan','Cenderung mengalah saat ada gesekan dengan atasan','Belum ada exposure shift malam'],
    improve:['Keberanian menyuarakan masalah operasional','Manajemen energi di shift panjang','Fleksibilitas saat harus keluar dari SOP'],
    expect:'Akan cepat menguasai SOP dan administrasi, kemungkinan jadi salah satu yang paling rapi di tim. Butuh mentor untuk situasi eskalasi tamu ekstrem di bulan pertama. Pantau peak season pertamanya; di situ stabilitas emosinya akan benar-benar teruji.',
    risks:[{lvl:'SEDANG', text:'<b>Retensi.</b> Conscientiousness tinggi mengindikasikan dia cenderung bertahan, tapi konfirmasi ekspektasi gaji vs range entry kamu.'},{lvl:'AMAN', text:'<b>Integritas tes.</b> Selesai dalam batas waktu, pola jawaban konsisten, tidak ada tanda mencontek.'}],
  },
  kd:{
    verdict:'Direkomendasikan',
    summary:'Kandidat kuat dan paling teliti di batch. Komunikator hangat, sangat rapi administrasi, dan stabil di bawah tekanan. <b>Yang perlu diperhatikan:</b> agak kurang tegas dan tempo kerjanya sedikit lebih lambat, jadi di jam super sibuk mungkin perlu dukungan. Aman untuk dilanjutkan ke interview.',
    tests:[
      {name:'Situational Judgment', weight:'bobot 40%', score:80, it:'Mayoritas skenario ditangani dengan baik dan empatik. Sesekali terlalu lama mempertimbangkan sebelum bertindak, yang bisa jadi masalah saat antrian panjang.'},
      {name:'Kepribadian Big Five', weight:'IPIP · 30%', score:88, facets:[['Conscientiousness',90],['Agreeableness',86],['Extraversion',70],['Stabilitas emosi',75],['Keterbukaan',60]], it:'Conscientiousness sangat tinggi, ini orang yang detail dan bisa diandalkan. Stabilitas emosi sehat. Ekstraversi sedang: hangat tapi bukan tipe yang mendominasi percakapan.'},
      {name:'Verbal & Numerik', weight:'ICAR · 30%', score:82, it:'Solid di verbal dan numerik, teliti pada perhitungan. Tidak ada indikasi mencontek.'},
    ],
    qs:[
      {q:'"Saat antrian panjang dan kamu harus cepat memutuskan, bagaimana caramu tetap akurat?"', why:'Menguji apakah tempo lambatnya jadi masalah di jam sibuk.'},
      {q:'"Ceritakan saat kamu harus menolak permintaan tamu atau rekan. Bagaimana kamu menyampaikannya?"', why:'Menguji ketegasan.'},
    ],
    strengths:['Paling teliti di batch','Hangat dan empatik ke tamu','Stabil di bawah tekanan'],
    watch:['Tempo kerja sedikit lebih lambat','Kurang tegas saat harus menolak'],
    improve:['Kecepatan mengambil keputusan saat ramai','Asertivitas yang sopan'],
    expect:'Cepat jadi anggota tim yang diandalkan untuk administrasi dan layanan. Dampingi di minggu-minggu awal untuk kecepatan di jam sibuk.',
    risks:[{lvl:'AMAN', text:'<b>Retensi.</b> Profil stabil dan teliti, indikasi betah.'},{lvl:'AMAN', text:'<b>Integritas tes.</b> Pola jawaban konsisten, durasi wajar.'}],
  },
  ms:{
    verdict:'Direkomendasikan dengan catatan',
    summary:'Cepat dan ramah, dengan kognitif tertinggi di batch. <b>Tapi kepribadiannya menunjukkan kesabaran yang lebih tipis:</b> agreeableness dan stabilitas emosi hanya sedang. Bagus untuk tempo cepat dan tamu yang ramah, tapi perlu dipantau saat menghadapi tamu sulit atau komplain bertubi.',
    tests:[
      {name:'Situational Judgment', weight:'bobot 40%', score:83, it:'Kuat di skenario operasional dan cepat. Sedikit menurun di skenario yang butuh kesabaran ekstra; pernah memilih solusi cepat yang kurang menenangkan tamu.'},
      {name:'Kepribadian Big Five', weight:'IPIP · 30%', score:66, facets:[['Conscientiousness',70],['Agreeableness',60],['Extraversion',80],['Stabilitas emosi',58],['Keterbukaan',64]], it:'Ekstraversi tinggi, energik dan komunikatif. <b>Agreeableness dan stabilitas emosi sedang</b>: di bawah tekanan atau menghadapi tamu menyebalkan, kesabarannya bisa menipis.'},
      {name:'Verbal & Numerik', weight:'ICAR · 30%', score:86, it:'Kognitif terkuat di batch, cepat dan akurat. Tidak ada masalah ketelitian.'},
    ],
    qs:[
      {q:'"Ceritakan saat ada tamu yang menurutmu tidak masuk akal. Apa yang kamu rasakan dan lakukan?"', why:'Menguji kesabaran, dua facet kepribadiannya yang sedang.'},
      {q:'"Bagaimana kamu menjaga kualitas saat bekerja cepat?"', why:'Memastikan kecepatannya tidak mengorbankan layanan.'},
    ],
    strengths:['Kognitif paling tinggi di batch','Energik dan komunikatif','Cepat menyelesaikan tugas'],
    watch:['Kesabaran tipis saat tamu sulit','Stabilitas emosi sedang'],
    improve:['Manajemen emosi menghadapi komplain','Konsistensi kualitas saat cepat'],
    expect:'Produktif sejak awal di peran bertempo cepat. Beri umpan balik soal kesabaran; pasangkan dengan rekan yang tenang saat menghadapi tamu sulit.',
    risks:[{lvl:'SEDANG', text:'<b>Kesabaran.</b> Pantau respons terhadap tamu sulit di bulan pertama.'},{lvl:'AMAN', text:'<b>Integritas tes.</b> Durasi dan pola jawaban wajar.'}],
  },
  nk:{
    verdict:'Pertimbangkan dengan catatan',
    summary:'Niat baik dan ramah, tapi skornya menengah dan dia butuh struktur serta SOP yang jelas untuk perform. <b>SJT-nya menunjukkan ragu saat situasi tak terduga.</b> Bisa dipertimbangkan untuk peran yang lebih terstruktur atau dengan supervisi awal yang lebih rapat. Bukan pilihan pertama untuk front desk yang dinamis.',
    tests:[
      {name:'Situational Judgment', weight:'bobot 40%', score:58, it:'Pada skenario rutin jawabannya oke, tapi di situasi tak terduga atau konflik dia ragu dan cenderung menunggu arahan alih-alih mengambil inisiatif.'},
      {name:'Kepribadian Big Five', weight:'IPIP · 30%', score:72, facets:[['Conscientiousness',68],['Agreeableness',78],['Extraversion',64],['Stabilitas emosi',60],['Keterbukaan',55]], it:'Agreeableness baik, dia kooperatif dan ramah. Conscientiousness dan stabilitas emosi sedang; perlu struktur dan kepastian untuk bekerja tenang.'},
      {name:'Verbal & Numerik', weight:'ICAR · 30%', score:61, it:'Cukup, dengan beberapa kesalahan kecil pada perhitungan. Mengerjakan dengan tempo lambat tapi serius.'},
    ],
    qs:[
      {q:'"Ceritakan saat kamu menghadapi situasi yang belum pernah kamu alami di kerjaan. Apa yang kamu lakukan?"', why:'Menguji inisiatif saat tak ada SOP, kelemahan dari SJT.'},
      {q:'"Lingkungan kerja seperti apa yang membuatmu paling nyaman dan produktif?"', why:'Memastikan kebutuhan strukturnya cocok dengan realita di tempatmu.'},
    ],
    strengths:['Kooperatif dan ramah','Serius dan mau belajar'],
    watch:['Ragu saat situasi tak terduga','Butuh struktur dan arahan jelas'],
    improve:['Inisiatif mengambil keputusan','Ketelitian pada angka'],
    expect:'Bisa berkembang di lingkungan terstruktur dengan SOP jelas dan supervisi awal. Berisiko kewalahan di front desk yang dinamis tanpa pendampingan.',
    risks:[{lvl:'SEDANG', text:'<b>Kesiapan peran.</b> Cocok untuk peran terstruktur, kurang untuk yang menuntut improvisasi.'},{lvl:'AMAN', text:'<b>Integritas tes.</b> Durasi lama tapi pola konsisten, dikerjakan serius.'}],
  },
  rh:{
    verdict:'Tidak disarankan',
    summary:'Kandidat dengan skor terendah di batch, dan ada tanda kualitas jawaban yang perlu kamu waspadai. <b>Tesnya diselesaikan hanya 8 menit, jauh di bawah waktu wajar, dan pola jawabannya tidak konsisten</b>, dua sinyal bahwa dia mungkin menjawab asal. Di luar itu, penanganan situasi layanannya lemah dan cenderung defensif. Bukan berarti orangnya buruk, tapi data tes ini tidak mendukung untuk lanjut, dan skornya sendiri kurang bisa dipercaya karena cara dia mengerjakan.',
    tests:[
      {name:'Situational Judgment', weight:'bobot 40%', score:42, it:'Mayoritas skenario dijawab dengan respons yang justru memperburuk situasi: menyalahkan rekan di depan tamu, atau melempar masalah ke atasan tanpa mencoba menenangkan tamu dulu. Orientasinya defensif, bukan mencari solusi.'},
      {name:'Kepribadian Big Five', weight:'IPIP · 30%', score:48, facets:[['Conscientiousness',40],['Agreeableness',52],['Extraversion',55],['Stabilitas emosi',38],['Keterbukaan',50]], it:'Conscientiousness dan stabilitas emosi rendah, indikasi kurang teliti dan mudah goyah. <b>Tapi baca dengan hati-hati</b>: ada tanda jawaban tidak konsisten, jadi skor ini mungkin tidak mencerminkan kondisi sebenarnya.'},
      {name:'Verbal & Numerik', weight:'ICAR · 30%', score:33, it:'Beberapa kesalahan pada simulasi perhitungan check-out, dan sebagian soal dilewati. Diselesaikan sangat cepat, memperkuat dugaan dikerjakan terburu-buru.'},
    ],
    qs:[
      {q:'"Tes ini kamu selesaikan sangat cepat, boleh ceritakan kondisimu saat mengerjakan?"', why:'Memberi kesempatan menjelaskan apakah ada alasan di balik pengerjaan yang terburu-buru.'},
      {q:'"Saat tamu komplain soal hal yang bukan salahmu, apa langkah pertamamu?"', why:'Memverifikasi langsung orientasi layanan yang lemah di SJT.'},
    ],
    strengths:['Sedikit yang menonjol dari data tes ini, sebagian karena cara pengerjaannya'],
    watch:['Orientasi layanan defensif saat menghadapi komplain','Ketelitian rendah','Stabilitas emosi rendah','Pola jawaban tidak konsisten'],
    improve:['Dasar orientasi melayani tamu','Ketelitian dan kesungguhan mengerjakan'],
    expect:'Berisiko tinggi untuk front desk: kemungkinan butuh supervisi ketat dan tetap rawan memicu komplain tamu. Tidak disarankan tanpa bukti tambahan, dan idealnya tes ulang dulu jika kamu ragu skornya adil.',
    risks:[{lvl:'TINGGI', text:'<b>Integritas tes.</b> Selesai 8 menit (jauh di bawah wajar) dan pola jawaban tidak konsisten. Skor mungkin tidak mencerminkan kemampuan sebenarnya, pertimbangkan tes ulang sebelum memutuskan.'},{lvl:'TINGGI', text:'<b>Kesiapan peran.</b> Berdasar data yang ada, tidak siap untuk peran layanan tamu langsung.'}],
  },
};

Object.assign(window, {
  Icon, Mark, Avatar, ICONS,
  fitTone, fitLabel, barColor,
  AV_COLORS, TEST_RECS, CANDIDATES, DIM_NAMES, PLANS, TEAM, JOBS, QUESTIONS, REPORTS
});
