<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Free Canada Immigration Assessment — Canada Migration Services</title>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;600;700&family=Outfit:wght@300;400;500;600&display=swap" rel="stylesheet">
<!-- EmailJS loaded globally via WPCode plugin in WordPress header -->
<style>
:root{
--cream:#FAF7F2;--white:#FFFFFF;--ink:#1A1A2E;--ink-soft:#3D3D56;--muted:#8A8FA8;
--border:#E8E4DC;--gold:#C8944A;--gold-light:#F5E6CC;--gold-dim:rgba(200,148,74,0.12);
--maple:#CC3333;--success:#2D7A4F;--success-dim:rgba(45,122,79,0.1);--blue:#3B6EA5;
--shadow-sm:0 2px 8px rgba(26,26,46,0.06);--shadow-md:0 8px 32px rgba(26,26,46,0.10);
--shadow-lg:0 20px 60px rgba(26,26,46,0.14);--radius:16px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:var(--cream);font-family:'Outfit',sans-serif;color:var(--ink);min-height:100vh;
background-image:radial-gradient(ellipse 800px 600px at 20% 0%,rgba(200,148,74,0.07) 0%,transparent 60%),
radial-gradient(ellipse 600px 500px at 85% 100%,rgba(59,110,165,0.06) 0%,transparent 55%);}
/* HEADER */
.site-header{background:#fff;padding:0 40px;height:64px;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid #CC3333;}
.logo{font-family:'Playfair Display',serif;font-size:17px;color:#fff;}
.logo span{color:var(--gold);}
.logo-badge{font-size:10px;color:rgba(255,255,255,0.45);letter-spacing:1.5px;text-transform:uppercase;margin-top:1px;}
.header-trust{font-size:12px;color:#1A1A2E;}
/* HERO */
.hero-band{background:linear-gradient(135deg,var(--ink) 0%,#252540 100%);padding:40px;text-align:center;position:relative;overflow:hidden;}
.hero-band::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);}
.hero-eyebrow{display:inline-flex;align-items:center;gap:8px;background:var(--gold-dim);border:1px solid rgba(200,148,74,0.3);border-radius:100px;padding:5px 16px;font-size:11px;color:#E8C07A;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:16px;}
.hero-band h1{font-family:'Playfair Display',serif;font-size:clamp(24px,4vw,38px);color:#fff;line-height:1.2;max-width:680px;margin:0 auto 12px;}
.hero-band h1 em{color:var(--gold);font-style:normal;}
.hero-sub{font-size:14px;color:rgba(255,255,255,0.55);max-width:500px;margin:0 auto;line-height:1.6;}
/* PROGRESS */
.progress-wrapper{background:var(--white);border-bottom:1px solid var(--border);padding:24px 40px;position:sticky;top:0;z-index:100;box-shadow:var(--shadow-sm);}
.progress-steps{display:flex;align-items:center;max-width:680px;margin:0 auto;}
.ps-item{display:flex;flex-direction:column;align-items:center;gap:6px;flex:1;position:relative;}
.ps-item::after{content:'';position:absolute;top:17px;left:calc(50% + 18px);width:calc(100% - 36px);height:2px;background:var(--border);transition:background 0.4s;}
.ps-item:last-child::after{display:none;}
.ps-item.completed::after{background:var(--gold);}
.ps-item.active::after{background:linear-gradient(90deg,var(--gold),var(--border));}
.ps-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;border:2px solid var(--border);background:var(--cream);color:var(--muted);transition:all 0.3s;position:relative;z-index:1;}
.ps-item.active .ps-circle{border-color:var(--gold);background:var(--gold);color:#fff;box-shadow:0 0 0 4px var(--gold-dim);}
.ps-item.completed .ps-circle{border-color:var(--gold);background:var(--gold);color:#fff;}
.ps-label{font-size:10px;font-weight:500;color:var(--muted);text-align:center;letter-spacing:0.3px;text-transform:uppercase;transition:color 0.3s;}
.ps-item.active .ps-label{color:var(--gold);font-weight:600;}
.ps-item.completed .ps-label{color:var(--ink-soft);}
.progress-bar-track{max-width:680px;margin:12px auto 0;height:3px;background:var(--border);border-radius:2px;overflow:hidden;}
.progress-bar-fill{height:100%;background:linear-gradient(90deg,var(--gold),#E8A030);border-radius:2px;transition:width 0.5s cubic-bezier(0.4,0,0.2,1);}
/* SAVE BANNER */
.save-banner{background:linear-gradient(90deg,#f0f9f4,#e8f5ed);border:1px solid rgba(45,122,79,0.25);border-radius:10px;padding:10px 16px;display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--success);margin-bottom:24px;}
.save-banner strong{color:#1A5C36;}
.save-btn-sm{margin-left:auto;background:var(--success);color:#fff;border:none;border-radius:6px;padding:5px 12px;font-size:11px;font-family:'Outfit',sans-serif;font-weight:600;cursor:pointer;transition:opacity 0.2s;}
.save-btn-sm:hover{opacity:0.85;}
/* FORM */
.form-outer{max-width:800px;margin:0 auto;padding:36px 24px 80px;}
.step-card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);overflow:hidden;display:none;animation:stepIn 0.35s cubic-bezier(0.4,0,0.2,1);}
.step-card.active{display:block;}
@keyframes stepIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.step-card-header{padding:28px 36px 24px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;gap:18px;}
.step-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:transparent!important;}
.step-icon.s1{}
.step-icon.s2{}
.step-icon.s3{}
.step-icon.s4{}
.step-title{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;color:var(--ink);line-height:1.2;margin-bottom:5px;}
.step-desc{font-size:13px;color:var(--muted);line-height:1.55;}
.step-count{margin-left:auto;font-size:11px;color:var(--muted);font-weight:500;white-space:nowrap;padding-top:4px;}
.step-body{padding:32px 36px;}
/* FIELDS */
.field-row{display:grid;gap:16px;margin-bottom:20px;}
.field-row.c1{grid-template-columns:1fr;}
.field-row.c2{grid-template-columns:1fr 1fr;}
.field-row.c3{grid-template-columns:1fr 1fr 1fr;}
.field-row.c4{grid-template-columns:1fr 1fr 1fr 1fr;}
.field-group{display:flex;flex-direction:column;gap:6px;}
.field-label{font-size:12px;font-weight:600;color:var(--ink-soft);letter-spacing:0.3px;text-transform:uppercase;}
.field-label .req{color:var(--maple);margin-left:2px;}
.field-hint{font-size:11px;color:var(--muted);margin-top:-2px;line-height:1.4;}
input[type="text"],input[type="email"],input[type="tel"],input[type="month"],select,textarea{width:100%;padding:11px 14px;border:1.5px solid var(--border);border-radius:10px;font-family:'Outfit',sans-serif;font-size:14px;color:var(--ink);background:var(--white);transition:border-color 0.2s,box-shadow 0.2s;outline:none;-webkit-appearance:none;appearance:none;}
input:focus,select:focus,textarea:focus{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-dim);background:#FFFDF9;}
select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238A8FA8' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:38px;cursor:pointer;}
textarea{resize:vertical;min-height:80px;line-height:1.5;}
/* RADIO CARDS */
.radio-grid{display:grid;gap:10px;margin-bottom:20px;}
.radio-grid.c2{grid-template-columns:1fr 1fr;}
.radio-grid.c3{grid-template-columns:1fr 1fr 1fr;}
.radio-grid.c4{grid-template-columns:1fr 1fr 1fr 1fr;}
.radio-card{position:relative;cursor:pointer;}
.radio-card input[type="radio"]{position:absolute;opacity:0;width:0;height:0;}
.radio-label{display:flex;flex-direction:column;align-items:center;gap:5px;padding:14px 10px;border:1.5px solid var(--border);border-radius:12px;background:var(--cream);text-align:center;transition:all 0.2s;font-size:13px;color:var(--ink-soft);font-weight:500;line-height:1.3;}
.radio-label .ri{font-size:22px;}
.radio-card input:checked+.radio-label{border-color:var(--gold);background:var(--gold-light);color:var(--ink);box-shadow:0 0 0 2px var(--gold-dim);}
.radio-card:hover .radio-label{border-color:rgba(200,148,74,0.4);background:#FDFAF5;}
/* SECTION SEP */
.section-sep{display:flex;align-items:center;gap:12px;margin:24px 0 20px;}
.sep-title{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;white-space:nowrap;}
.sep-line{flex:1;height:1px;background:var(--border);}
/* SCORE WIDGET */
.score-preview{background:linear-gradient(135deg,#1A1A2E 0%,#252540 100%);border-radius:14px;padding:20px 24px;margin-top:28px;display:flex;align-items:center;gap:20px;}
.score-circle{width:70px;height:70px;border-radius:50%;border:3px solid var(--gold);display:flex;flex-direction:column;align-items:center;justify-content:center;flex-shrink:0;}
.score-num{font-family:'Playfair Display',serif;font-size:22px;color:var(--gold);line-height:1;font-weight:700;}
.score-max{font-size:10px;color:rgba(255,255,255,0.4);margin-top:1px;}
.score-info{flex:1;}
.score-label{font-size:13px;font-weight:600;color:#fff;margin-bottom:4px;}
.score-bar-wrap{height:6px;background:rgba(255,255,255,0.1);border-radius:3px;overflow:hidden;margin-bottom:6px;}
.score-bar-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--gold),#E8C07A);transition:width 0.6s cubic-bezier(0.4,0,0.2,1);}
.score-msg{font-size:11px;color:rgba(255,255,255,0.45);}
/* BAND GRID */
.band-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0;}
.band-item .band-lbl{font-size:11px;font-weight:700;color:var(--ink-soft);text-transform:uppercase;letter-spacing:0.5px;text-align:center;margin-bottom:5px;}
.lapsed-warn{background:rgba(204,51,51,0.08);border:1.5px solid var(--maple);border-radius:8px;padding:10px 14px;font-size:12px;color:var(--maple);font-weight:600;margin:10px 0;}
.band-lowest-warn{background:rgba(200,148,74,0.1);border:1px solid rgba(200,148,74,0.4);border-radius:8px;padding:9px 13px;font-size:11.5px;color:#8B5E1A;margin-top:8px;}
/* JOB ENTRY */
.job-card{background:var(--cream);border:1.5px solid var(--border);border-radius:12px;padding:18px;margin-bottom:12px;position:relative;}
.job-card-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
.job-card-num{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;}
.btn-remove-job{background:none;border:none;cursor:pointer;color:var(--muted);font-size:18px;line-height:1;padding:2px 6px;border-radius:5px;transition:color 0.2s;}
.btn-remove-job:hover{color:var(--maple);}
.btn-add-job{display:flex;align-items:center;gap:8px;background:transparent;border:1.5px dashed var(--border);border-radius:10px;padding:10px 18px;font-size:13px;color:var(--muted);cursor:pointer;width:100%;justify-content:center;transition:all 0.2s;font-family:'Outfit',sans-serif;margin-top:4px;font-weight:500;}
.btn-add-job:hover{border-color:var(--gold);color:var(--gold);background:var(--gold-dim);}
/* FILE UPLOAD */
.upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px;}
.upload-label-txt{font-size:12px;font-weight:600;color:var(--ink-soft);text-transform:uppercase;letter-spacing:0.3px;margin-bottom:8px;}
.file-drop{border:2px dashed var(--border);border-radius:12px;padding:20px 16px;text-align:center;cursor:pointer;transition:all 0.2s;background:var(--cream);position:relative;overflow:hidden;}
.file-drop:hover,.file-drop.over{border-color:var(--gold);background:var(--gold-dim);}
.file-drop input[type="file"]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}
.fd-icon{font-size:26px;margin-bottom:6px;}
.fd-title{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:2px;}
.fd-sub{font-size:11px;color:var(--muted);}
.file-list{display:flex;flex-direction:column;gap:5px;margin-top:8px;}
.file-tag{display:flex;align-items:center;gap:7px;background:var(--white);border:1px solid var(--border);border-radius:7px;padding:6px 10px;font-size:12px;color:var(--ink-soft);}
.file-tag-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.file-tag-size{color:var(--muted);font-size:10px;flex-shrink:0;}
.file-tag-rm{background:none;border:none;cursor:pointer;color:var(--muted);font-size:14px;flex-shrink:0;}
.file-tag-rm:hover{color:var(--maple);}
/* FEES TEASER */
.fees-box{background:linear-gradient(135deg,#1A1A2E 0%,#2A2A50 100%);border-radius:16px;padding:28px;margin-top:32px;position:relative;overflow:hidden;}
.fees-box::before{content:'CA';font-family:'DM Serif Display',serif;font-weight:700;letter-spacing:-1px;position:absolute;right:24px;top:20px;font-size:56px;opacity:0.05;}
.fees-tag{display:inline-flex;align-items:center;gap:6px;background:rgba(200,148,74,0.15);border:1px solid rgba(200,148,74,0.35);border-radius:100px;padding:4px 14px;font-size:10px;color:#E8C07A;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:14px;}
.fees-box h3{font-family:'Playfair Display',serif;font-size:19px;color:#fff;margin-bottom:8px;line-height:1.3;}
.fees-box p{font-size:13px;color:rgba(255,255,255,0.5);line-height:1.65;margin-bottom:18px;}
.fees-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:20px;}
.fee-card{background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:14px 12px;text-align:center;}
.fee-card-name{font-size:10px;color:rgba(255,255,255,0.45);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:5px;}
.fee-card-price{font-family:'Playfair Display',serif;font-size:20px;color:var(--gold);font-weight:700;}
.fee-card-note{font-size:10px;color:rgba(255,255,255,0.3);margin-top:3px;}
.fees-links{display:flex;gap:10px;flex-wrap:wrap;}
.fees-link{display:inline-flex;align-items:center;gap:6px;padding:10px 18px;border-radius:9px;font-size:13px;font-weight:600;cursor:pointer;transition:all 0.2s;font-family:'Outfit',sans-serif;text-decoration:none;}
.fees-link.primary{background:var(--gold);color:var(--ink);border:none;}
.fees-link.primary:hover{background:#D49830;}
.fees-link.ghost{background:transparent;color:rgba(255,255,255,0.6);border:1px solid rgba(255,255,255,0.2);}
.fees-link.ghost:hover{background:rgba(255,255,255,0.07);color:#fff;}
/* BRANCHES */
.branch{margin-bottom:16px;animation:brIn 0.3s cubic-bezier(0.4,0,0.2,1);}
@keyframes brIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
.branch-inner{border-radius:12px;padding:18px 20px;border-left:4px solid;}
.br-gold{background:rgba(200,148,74,0.07);border-color:var(--gold);}
.br-blue{background:rgba(59,110,165,0.07);border-color:var(--blue);}
.br-green{background:rgba(45,122,79,0.07);border-color:var(--success);}
.br-red{background:rgba(204,51,51,0.05);border-color:var(--maple);}
.br-hdr{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:8px;}
.br-note{font-size:11.5px;color:var(--ink-soft);line-height:1.55;margin-bottom:14px;padding:8px 12px;background:rgba(255,255,255,0.6);border-radius:7px;}
.cond-note{background:rgba(200,148,74,0.08);border-left:3px solid var(--gold);border-radius:0 8px 8px 0;padding:10px 14px;font-size:12px;color:var(--ink-soft);margin-bottom:16px;line-height:1.5;}
/* FOOTER */
.step-footer{padding:20px 36px 28px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--border);gap:12px;}
.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 28px;border-radius:10px;font-family:'Outfit',sans-serif;font-size:14px;font-weight:600;cursor:pointer;border:none;transition:all 0.2s;text-decoration:none;}
.btn-back{background:transparent;color:var(--muted);border:1.5px solid var(--border);}
.btn-back:hover{border-color:var(--ink-soft);color:var(--ink);}
.btn-next{background:var(--ink);color:#fff;box-shadow:0 4px 12px rgba(26,26,46,0.2);}
.btn-next:hover{background:#252540;transform:translateY(-1px);}
.btn-submit{background:linear-gradient(135deg,#CC3333,#A52828);color:#fff;box-shadow:0 4px 14px rgba(204,51,51,0.3);padding:14px 36px;font-size:15px;}
.btn-submit:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(204,51,51,0.4);}
.btn-save{background:transparent;color:var(--success);border:1.5px solid rgba(45,122,79,0.35);font-size:13px;padding:10px 18px;}
.btn-save:hover{background:var(--success-dim);}
/* MODAL */
.modal-overlay{position:fixed;inset:0;background:rgba(26,26,46,0.55);backdrop-filter:blur(4px);z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px;opacity:0;pointer-events:none;transition:opacity 0.25s;}
.modal-overlay.open{opacity:1;pointer-events:all;}
.modal{background:var(--white);border-radius:20px;padding:36px;max-width:420px;width:100%;box-shadow:var(--shadow-lg);transform:translateY(12px);transition:transform 0.25s;position:relative;}
.modal-overlay.open .modal{transform:translateY(0);}
.modal-icon{font-size:40px;margin-bottom:12px;}
.modal h3{font-family:'Playfair Display',serif;font-size:20px;font-weight:700;color:var(--ink);margin-bottom:8px;}
.modal p{font-size:13.5px;color:var(--ink-soft);line-height:1.6;margin-bottom:16px;}
.modal-close{position:absolute;top:16px;right:20px;font-size:20px;cursor:pointer;color:var(--muted);background:none;border:none;}
.resume-code{font-family:monospace;font-size:22px;font-weight:700;color:var(--gold);background:var(--gold-dim);border:1.5px dashed var(--gold);border-radius:10px;padding:14px;text-align:center;letter-spacing:6px;margin-bottom:12px;}
/* SUCCESS */
.success-card{display:none;padding:50px 36px;text-align:center;}
.success-card.show{display:block;}
.success-check{width:80px;height:80px;border-radius:50%;background:var(--success-dim);border:3px solid var(--success);display:flex;align-items:center;justify-content:center;font-size:36px;margin:0 auto 24px;}
.success-card h2{font-family:'Playfair Display',serif;font-size:28px;color:var(--ink);margin-bottom:12px;}
.success-card > p{font-size:14px;color:var(--ink-soft);line-height:1.65;max-width:460px;margin:0 auto 28px;}
/* Score summary */
.score-summary-box{background:linear-gradient(135deg,#1A1A2E,#252540);border-radius:14px;padding:24px 28px;max-width:520px;margin:0 auto 24px;text-align:left;}
.ss-hdr{font-size:11px;font-weight:700;color:rgba(255,255,255,0.4);text-transform:uppercase;letter-spacing:1px;margin-bottom:14px;}
.ss-row{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid rgba(255,255,255,0.06);font-size:13px;}
.ss-row:last-of-type{border-bottom:none;}
.ss-lbl{color:rgba(255,255,255,0.55);}
.ss-val{font-weight:700;color:var(--gold);}
.ss-total-row{display:flex;justify-content:space-between;align-items:center;border-top:1px solid rgba(200,148,74,0.3);padding-top:14px;margin-top:6px;}
.ss-total-lbl{font-family:'Playfair Display',serif;font-size:16px;color:#fff;}
.ss-total-num{font-family:'Playfair Display',serif;font-size:30px;color:var(--gold);font-weight:700;}
/* What's next */
.next-box{background:var(--cream);border:1px solid var(--border);border-radius:14px;padding:20px 24px;max-width:520px;margin:0 auto 24px;text-align:left;}
.next-title{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:12px;}
.next-item{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px;font-size:13px;color:var(--ink-soft);}
.next-item::before{content:'→';color:var(--gold);font-weight:700;flex-shrink:0;margin-top:1px;}
/* TOAST */
.toast{position:fixed;bottom:24px;right:24px;background:var(--ink);color:#fff;border-radius:10px;padding:12px 20px;font-size:13px;font-weight:500;box-shadow:var(--shadow-md);display:flex;align-items:center;gap:8px;transform:translateY(80px);opacity:0;transition:all 0.3s cubic-bezier(0.4,0,0.2,1);z-index:2000;pointer-events:none;}
.toast.show{transform:translateY(0);opacity:1;}
/* RESPONSIVE */
@media(max-width:640px){
.field-row.c2,.field-row.c3,.field-row.c4{grid-template-columns:1fr;}
.radio-grid.c3,.radio-grid.c4{grid-template-columns:1fr 1fr;}
.band-grid{grid-template-columns:1fr 1fr;}
.upload-grid{grid-template-columns:1fr;}
.fees-grid{grid-template-columns:1fr;}
.step-body,.step-footer,.step-card-header{padding-left:20px;padding-right:20px;}
.site-header{padding:0 20px;}
.progress-wrapper{padding:16px 20px;}
.form-outer{padding:20px 12px 60px;}
.ps-label{display:none;}
.step-footer{flex-wrap:wrap;}
}
/* ─── BILINGUAL LABELS: FR always visible below EN ─── */
.fr-sub {
display: block;
font-size: 10.5px;
color: rgba(255,255,255,0.28);
font-style: italic;
font-weight: 400;
margin-top: 2px;
letter-spacing: 0.1px;
line-height: 1.3;
}
</style>
</head>
<body>
<header class="site-header">
<div style="display:flex;align-items:center;gap:12px">
<!-- LOGO: Replace the src URL below with your actual logo URL from WordPress Media Library -->
<img src="https://canadamigrationservices.com/wp-content/uploads/2026/03/cropped-NEW_CMS-Logo_Transparent.png"
alt="Canada Migration Services"
style="height:42px;width:auto;object-fit:contain;"
onerror="this.style.display='none';document.getElementById('logo-text-fallback').style.display='block'">
<div id="logo-text-fallback" style="display:none">
<div class="logo">Canada <span>Migration</span> Services</div>
<div class="logo-badge">RCIC #R415359 · Bibi R Maudhoo</div>
</div>
</div>
<div class="header-trust">Regulated Canadian Immigration Consultant (RCIC)</div>
</header>
<div class="hero-band">
<div class="hero-eyebrow">· Free · No Obligation · 5 Minutes</div>
<h1>Find Out If You <em>Qualify</em><br>for Canadian Permanent Residence</h1>
<p class="hero-sub">Answer a few questions and receive your personalized CRS score estimate and recommended immigration pathway.</p>
</div>
<div class="progress-wrapper">
<div class="progress-steps">
<div class="ps-item active" id="ps-1"><div class="ps-circle">1</div><div class="ps-label">You & Goals<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px">Vous & Objectifs</span></div></div>
<div class="ps-item" id="ps-2"><div class="ps-circle">2</div><div class="ps-label">Education & Work<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px">Formation & Travail</span></div></div>
<div class="ps-item" id="ps-3"><div class="ps-circle">3</div><div class="ps-label">Language & Ties<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px">Langue & Liens</span></div></div>
<div class="ps-item" id="ps-4"><div class="ps-circle">4</div><div class="ps-label">Final Details<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px">Détails Finaux</span></div></div>
</div>
<div class="progress-bar-track"><div class="progress-bar-fill" id="progressFill" style="width:12%"></div></div>
</div>
<div class="form-outer">
<div class="save-banner" id="saveBanner">
<span style="font-family:monospace;font-size:13px;font-weight:700">S</span>
<span><strong>Your progress is automatically saved.</strong> <span>You can close this page and resume later.</span></span>
<button class="save-btn-sm" onclick="showSaveModal()">Save & Exit</button>
</div>
<!-- ═══════════════════════════ STEP 1 ═══════════════════════════ -->
<div class="step-card active" id="step-1">
<div class="step-card-header">
<div class="step-icon s1" style="background:transparent;border:none"><span style="display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z" fill="white"/></svg></span></div>
<div><div class="step-title">About You & Your Goals<span style="display:block;font-size:11px;color:rgba(255,255,255,0.26);font-style:italic;font-weight:400;margin-top:3px">Vous et vos objectifs</span></div><div class="step-desc">Contact details, family situation, and your chosen immigration pathway.</div></div>
<div class="step-count">Step 1 of 4</div>
</div>
<div class="step-body">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Contact<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px;letter-spacing:0.3px">Contact</span></span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label"><span>First Name</span> <span class="req">*</span></label><input type="text" id="f_fname" placeholder="e.g. Amara"></div>
<div class="field-group"><label class="field-label"><span>Last Name</span> <span class="req">*</span></label><input type="text" id="f_lname" placeholder="e.g. Diallo"></div>
</div>
<div class="field-row c2">
<div class="field-group"><label class="field-label"><span>Email</span> <span class="req">*</span></label><input type="email" id="f_email" placeholder="your@email.com"><span class="field-hint">Results sent here within 24 hrs</span></div>
<div class="field-group"><label class="field-label">Phone / WhatsApp<span class="fr-sub">Téléphone / WhatsApp</span></label><input type="tel" id="f_phone" placeholder="+221 77 000 0000"><span class="field-hint">Optional — for faster follow-up</span></div>
</div>
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Background<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px;letter-spacing:0.3px">Contexte</span></span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group">
<label class="field-label"><span>Country of Residence</span> <span class="req">*</span></label>
<select id="f_country">
<option value="">Select…</option>
<optgroup label="Africa"><option>Mauritius</option><option>DR Congo (DRC)</option><option>Senegal</option><option>Ivory Coast</option><option>Cameroon</option><option>Morocco</option><option>Other African country</option></optgroup>
<optgroup label="Gulf / Middle East"><option>UAE</option><option>Saudi Arabia</option><option>Qatar</option><option>Kuwait</option><option>Other Gulf country</option></optgroup>
<optgroup label="Other"><option>Other country</option></optgroup>
</select>
</div>
<div class="field-group">
<label class="field-label">Current Age <span class="req">*</span><span class="fr-sub">Âge actuel</span></label>
<select id="f_age">
<option value="">Select…</option>
<option value="18-24">18 – 24</option><option value="25-29">25 – 29 ⭐ (best CRS)</option>
<option value="30-34">30 – 34</option><option value="35-39">35 – 39</option>
<option value="40-44">40 – 44</option><option value="45+">45 or older</option>
</select>
</div>
</div>
<div class="field-row c2">
<div class="field-group">
<label class="field-label"><span>Marital Status</span> <span class="req">*</span></label>
<select id="f_marital" onchange="toggleMarital()">
<option value="">Select…</option><option value="single">Single</option>
<option value="married">Married / Common-law</option><option value="divorced">Divorced / Separated</option><option value="widowed">Widowed</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Dependent children?<span class="fr-sub">Enfants à charge ?</span></label>
<select id="f_has_kids" onchange="toggleKids()"><option value="no">No children</option><option value="yes">Yes</option></select>
</div>
</div>
<!-- SPOUSE BRANCH Step 1: Name + Age only -->
<div id="spouse_s1" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z" fill="white"/></svg></span> Spouse / Partner — Basic Info</div>
<div class="br-note">Full education, language and work details captured in Step 2. Your spouse's profile can add up to 40 bonus CRS points.</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Spouse's full name<span class="fr-sub">Nom complet du conjoint(e)</span></label><input type="text" id="f_sp_name" placeholder="e.g. Marie Dupont"></div>
<div class="field-group">
<label class="field-label">Spouse's age<span class="fr-sub">Âge du conjoint(e)</span></label>
<select id="f_sp_age"><option value="">Select…</option><option value="18-24">18–24</option><option value="25-29">25–29</option><option value="30-34">30–34</option><option value="35-39">35–39</option><option value="40-44">40–44</option><option value="45+">45+</option></select>
</div>
</div>
</div>
</div>
<!-- KIDS BRANCH -->
<div id="kids_branch" class="branch" style="display:none">
<div class="branch-inner br-green">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13 2v8l2-2 2 2V2h-4zm-2 9H7c-1.1 0-2 .9-2 2v9h2v-4h4v4h2v-9c0-1.1-.9-2-2-2zm0 5H7v-3h4v3z" fill="white"/></svg></span> Children Details</div>
<div class="br-note">Dependent children (under 22, unmarried) are included in your application. Their ages affect processing options.</div>
<div class="field-row c3" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">How many children<span class="fr-sub">Nombre d'enfants</span></label>
<select id="f_num_kids" onchange="renderKidsFields()"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6+</option></select>
</div>
<div class="field-group"><label class="field-label">Any already in Canada?<span class="fr-sub">Certains déjà au Canada ?</span></label>
<select id="f_kids_canada"><option value="no">No</option><option value="yes">Yes — studying/visiting</option></select>
</div>
<div class="field-group"><label class="field-label">All under age 22?<span class="fr-sub">Tous de moins de 22 ans ?</span></label>
<select id="f_kids_u22"><option value="yes">Yes — all under 22</option><option value="some">Some 22+</option><option value="no">All 22+</option></select>
</div>
</div>
<div id="kids_ages_wrap"></div>
</div>
</div>
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Immigration Goal</span><div class="sep-line"></div></div>
<label class="field-label" style="margin-bottom:10px;display:block">Which pathway interests you most? <span class="req">*</span></label>
<div class="radio-grid c2">
<label class="radio-card"><input type="radio" name="pathway" value="express-entry"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="white"/></svg></span><span>Express Entry</span><br><small style="font-size:10px;color:var(--muted)">Fastest PR route</small></span></label>
<label class="radio-card"><input type="radio" name="pathway" value="pnp"><span class="radio-label"><span class="ri"></span><span>Provincial Nominee</span><br><small style="font-size:10px;color:var(--muted)">Province-specific</small></span></label>
<label class="radio-card"><input type="radio" name="pathway" value="study"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span><span>Study → PR</span><br><small style="font-size:10px;color:var(--muted)">Via study permit</small></span></label>
<label class="radio-card"><input type="radio" name="pathway" value="family"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z" fill="white"/></svg></span><span>Family Sponsorship</span><br><small style="font-size:10px;color:var(--muted)">Reunite with family</small></span></label>
<label class="radio-card"><input type="radio" name="pathway" value="business"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6h-2.18c.07-.44.18-.86.18-1 0-2.21-1.79-4-4-4s-4 1.79-4 4c0 .14.11.56.18 1H8c-1.11 0-1.99.89-1.99 2L6 19c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6-3c1.1 0 2 .9 2 2 0 .14-.11.56-.18 1h-3.64c-.07-.44-.18-.86-.18-1 0-1.1.9-2 2-2zm0 12l-4-4 1.41-1.41L13 12.17V7h2v5.17l2.59-2.58L19 11l-5 5z" fill="white"/></svg></span><span>Business / Investor</span><br><small style="font-size:10px;color:var(--muted)">Start-up visa etc.</small></span></label>
<label class="radio-card"><input type="radio" name="pathway" value="not-sure"><span class="radio-label"><span class="ri">🤔</span>Not Sure Yet<br><small style="font-size:10px;color:var(--muted)">Help me decide</small></span></label>
</div>
<!-- PATHWAY BRANCHES -->
<!-- PNP BRANCH -->
<div id="pw_pnp" class="branch" style="display:none">
<div class="branch-inner br-gold">
<div class="br-hdr" data-placeholder="1"> Provincial Nominee Program — Province Selection</div>
<div class="br-note">Each province runs its own streams with different criteria. Select your target province and we'll capture the relevant details. Quebec has a separate system (QSWP) managed entirely by the province — not IRCC.</div>
<div class="field-row c2" style="margin-bottom:14px">
<div class="field-group">
<label class="field-label">Target province <span class="req">*</span></label>
<select id="f_pnp_province" onchange="togglePNPProvince()">
<option value="">Select province…</option>
<option value="ON"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Ontario (OINP)</option>
<option value="BC"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> British Columbia (BC PNP)</option>
<option value="AB"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Alberta (AAIP)</option>
<option value="MB"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Manitoba (MPNP)</option>
<option value="SK"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Saskatchewan (SINP)</option>
<option value="NS"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Nova Scotia (NSNP)</option>
<option value="NB"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> New Brunswick (NBPNP)</option>
<option value="PE"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Prince Edward Island (PEI PNP)</option>
<option value="NL"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Newfoundland & Labrador (NLPNP)</option>
<option value="QC"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Quebec (QSWP — separate system)</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Do you have any ties to that province?<span class="fr-sub">Avez-vous des liens avec cette province ?</span></label>
<select id="f_pnp_ties">
<option value="none">No existing ties</option>
<option value="job-offer">Job offer from that province</option>
<option value="family">Family / friends there</option>
<option value="studied">Studied there previously</option>
<option value="visited">Visited / worked temporarily</option>
</select>
</div>
</div>
<!-- ONTARIO (OINP) -->
<div id="pnp_ON" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Ontario Immigrant Nominee Program (OINP) — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Human Capital Priorities</strong> — Requires active EE profile, CLB 7+, Bachelor's+<br>
<strong style="color:rgba(255,255,255,0.85)">Employer Job Offer</strong> — Valid job offer in skilled NOC role<br>
<strong style="color:rgba(255,255,255,0.85)">French-Speaking Skilled Worker</strong> — CLB 7 French, CLB 6 English<br>
<strong style="color:rgba(255,255,255,0.85)">International Student</strong> — Ontario graduate with job offer
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Which OINP stream interests you?<span class="fr-sub">Quel programme OINP vous intéresse ?</span></label>
<select id="f_pnp_ON_stream">
<option value="">Select…</option>
<option value="hcp">Human Capital Priorities</option>
<option value="employer-jo">Employer Job Offer</option>
<option value="french">French-Speaking Skilled Worker</option>
<option value="intl-student">International Student</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
<div class="field-group"><label class="field-label">Do you have an active Express Entry profile?<span class="fr-sub">Profil Entrée express actif ?</span></label>
<select id="f_pnp_ON_ee"><option value="no">No</option><option value="yes">Yes — active profile</option><option value="not-yet">Not yet — planning to create</option></select>
</div>
</div>
</div>
<!-- BRITISH COLUMBIA (BC PNP) -->
<div id="pnp_BC" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> BC Provincial Nominee Program — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Skills Immigration (SI)</strong> — Skilled Worker, Health Authority, International Graduate<br>
<strong style="color:rgba(255,255,255,0.85)">Express Entry BC (EEBC)</strong> — Linked to EE pool, faster processing<br>
<strong style="color:rgba(255,255,255,0.85)">Entrepreneur</strong> — Min. CAD $600k net worth, 3yr management experience
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Which BC stream interests you?<span class="fr-sub">Quel programme C.-B. vous intéresse ?</span></label>
<select id="f_pnp_BC_stream">
<option value="">Select…</option>
<option value="skilled-worker">Skilled Worker</option>
<option value="health">Health Authority Worker</option>
<option value="intl-grad">International Graduate</option>
<option value="eebc">Express Entry BC (EEBC)</option>
<option value="entrepreneur">Entrepreneur</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
<div class="field-group"><label class="field-label">Do you have a BC job offer?<span class="fr-sub">Offre d'emploi en C.-B. ?</span></label>
<select id="f_pnp_BC_jo"><option value="no">No</option><option value="yes">Yes — from a BC employer</option><option value="open">Open to finding one</option></select>
</div>
</div>
</div>
<!-- ALBERTA (AAIP) -->
<div id="pnp_AB" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Alberta Advantage Immigration Program (AAIP) — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Alberta Opportunity Stream</strong> — Working in AB with job offer, NOC TEER 0–3<br>
<strong style="color:rgba(255,255,255,0.85)">Alberta Express Entry Stream</strong> — Linked to EE, invitation-only<br>
<strong style="color:rgba(255,255,255,0.85)">Rural Renewal Stream</strong> — Job offer in a rural AB community<br>
<strong style="color:rgba(255,255,255,0.85)">Entrepreneur stream</strong> — Actively exploring new entrants
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Are you currently working in Alberta?<span class="fr-sub">Travaillez-vous en Alberta ?</span></label>
<select id="f_pnp_AB_working"><option value="no">No</option><option value="yes">Yes — valid work permit</option><option value="planning">Planning to move there</option></select>
</div>
<div class="field-group"><label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_AB_stream">
<option value="">Select…</option>
<option value="opportunity">Alberta Opportunity Stream</option>
<option value="express-entry">Alberta Express Entry</option>
<option value="rural">Rural Renewal Stream</option>
<option value="entrepreneur">Entrepreneur</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
</div>
</div>
<!-- MANITOBA (MPNP) -->
<div id="pnp_MB" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Manitoba Provincial Nominee Program (MPNP) — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Skilled Workers in Manitoba</strong> — Job offer or close relative in MB<br>
<strong style="color:rgba(255,255,255,0.85)">Skilled Workers Overseas</strong> — Strong connection to MB required<br>
<strong style="color:rgba(255,255,255,0.85)">International Education Stream</strong> — MB graduate with job offer<br>
<strong style="color:rgba(255,255,255,0.85)">Business Investor Stream</strong> — Min. CAD $500k net worth
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Connection to Manitoba<span class="fr-sub">Lien avec le Manitoba</span></label>
<select id="f_pnp_MB_ties">
<option value="none">No existing connection</option>
<option value="job-offer">Job offer in MB</option>
<option value="relative">Close relative (parent/sibling/child) in MB</option>
<option value="studied">Studied in MB</option>
<option value="working">Currently working in MB</option>
</select>
</div>
<div class="field-group"><label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_MB_stream">
<option value="">Select…</option>
<option value="in-mb">Skilled Workers in Manitoba</option>
<option value="overseas">Skilled Workers Overseas</option>
<option value="intl-edu">International Education</option>
<option value="business">Business Investor</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
</div>
</div>
<!-- SASKATCHEWAN (SINP) -->
<div id="pnp_SK" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Saskatchewan Immigrant Nominee Program (SINP) — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">International Skilled Worker</strong> — Occupation in-demand list, no job offer needed for some<br>
<strong style="color:rgba(255,255,255,0.85)">Express Entry</strong> — Linked to EE pool<br>
<strong style="color:rgba(255,255,255,0.85)">Entrepreneur</strong> — Min. CAD $500k net worth, 3yr management exp
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Is your occupation on SK in-demand list?</label>
<select id="f_pnp_SK_occ"><option value="unsure">Not sure — Bibi will check</option><option value="yes">Yes</option><option value="no">No / not sure</option></select>
</div>
<div class="field-group"><label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_SK_stream">
<option value="">Select…</option>
<option value="isw">International Skilled Worker</option>
<option value="express-entry">Express Entry</option>
<option value="entrepreneur">Entrepreneur</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
</div>
</div>
<!-- NOVA SCOTIA (NSNP) -->
<div id="pnp_NS" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Nova Scotia Nominee Program (NSNP) — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Skilled Worker</strong> — Job offer from NS employer, 1yr related experience<br>
<strong style="color:rgba(255,255,255,0.85)">Labour Market Priorities</strong> — Invitation only, linked to EE<br>
<strong style="color:rgba(255,255,255,0.85)">International Graduate Entrepreneur</strong> — NS grad launching a business<br>
<strong style="color:rgba(255,255,255,0.85)">Physician</strong> — Medical doctors with NS regional health authority offer
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Do you have a Nova Scotia job offer?<span class="fr-sub">Offre en Nouvelle-Écosse ?</span></label>
<select id="f_pnp_NS_jo"><option value="no">No</option><option value="yes">Yes</option><option value="open">Open to finding one</option></select>
</div>
<div class="field-group"><label class="field-label">Are you a physician / healthcare professional?</label>
<select id="f_pnp_NS_health"><option value="no">No</option><option value="yes-md">Yes — Medical Doctor</option><option value="yes-other">Yes — Other healthcare</option></select>
</div>
</div>
</div>
<!-- NEW BRUNSWICK (NBPNP) -->
<div id="pnp_NB" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> New Brunswick Provincial Nominee Program (NBPNP)</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Skilled Workers with Employer Support</strong> — Job offer from NB employer<br>
<strong style="color:rgba(255,255,255,0.85)">Express Entry Labour Market Stream</strong> — Linked to EE pool<br>
<strong style="color:rgba(255,255,255,0.85)">Entrepreneurial Stream</strong> — Min. CAD $500k net worth, 3yr management<br>
<strong style="color:rgba(255,255,255,0.85)">Strategic Initiative Stream</strong> — Partnership & agriculture focus
</div>
</div>
<div class="field-group" style="margin-bottom:10px">
<label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_NB_stream">
<option value="">Select…</option>
<option value="skilled">Skilled Workers with Employer Support</option>
<option value="eel">Express Entry Labour Market</option>
<option value="entrepreneur">Entrepreneurial Stream</option>
<option value="strategic">Strategic Initiative</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
</div>
<!-- PEI -->
<div id="pnp_PE" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Prince Edward Island PNP — Key Streams</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Labour Impact Category</strong> — Skilled Worker, Critical Worker, International Graduate<br>
<strong style="color:rgba(255,255,255,0.85)">Express Entry</strong> — Linked to EE profile<br>
<strong style="color:rgba(255,255,255,0.85)">Business Impact Category</strong> — Min. CAD $600k net worth
</div>
</div>
<div class="field-group" style="margin-bottom:10px">
<label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_PE_stream">
<option value="">Select…</option>
<option value="skilled">Skilled Worker</option>
<option value="critical">Critical Worker</option>
<option value="intl-grad">International Graduate</option>
<option value="express-entry">Express Entry</option>
<option value="business">Business Impact</option>
<option value="unsure">Not sure — advise me</option>
</select>
</div>
</div>
<!-- NEWFOUNDLAND (NLPNP) -->
<div id="pnp_NL" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#E8C07A;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Newfoundland & Labrador Provincial Nominee Program (NLPNP)</div>
<div style="font-size:11.5px;color:rgba(255,255,255,0.6);line-height:1.7">
<strong style="color:rgba(255,255,255,0.85)">Skilled Worker Category</strong> — Job offer from NL employer, NOC TEER 0–3<br>
<strong style="color:rgba(255,255,255,0.85)">International Graduate Category</strong> — Memorial University / CNA graduate<br>
<strong style="color:rgba(255,255,255,0.85)">Express Entry Skilled Worker</strong> — Linked to EE
</div>
</div>
<div class="field-group" style="margin-bottom:10px">
<label class="field-label">Target stream<span class="fr-sub">Programme cible</span></label>
<select id="f_pnp_NL_stream">
<option value="">Select…</option>
<option value="skilled">Skilled Worker</option>
<option value="intl-grad">International Graduate</option>
<option value="express-entry">Express Entry Skilled Worker</option>
<option value="unsure">Not sure</option>
</select>
</div>
</div>
<!-- QUEBEC (QSWP) -->
<div id="pnp_QC" style="display:none">
<div style="background:rgba(204,51,51,0.15);border:1px solid rgba(204,51,51,0.3);border-radius:10px;padding:14px 16px;margin-bottom:12px">
<div style="font-size:12px;font-weight:700;color:#F4A0A0;margin-bottom:8px"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Quebec — Separate Immigration System</div>
<div style="font-size:11.5px;color:rgba(255,200,200,0.8);line-height:1.7">
Quebec manages its own immigration independently from IRCC. The main programs are the <strong style="color:#fff">Quebec Skilled Worker Program (QSWP)</strong>, <strong style="color:#fff">Quebec Experience Program (PEQ)</strong>, and <strong style="color:#fff">Entrepreneur / Investor streams</strong>. A valid <strong style="color:#fff">Certificat de sélection du Québec (CSQ)</strong> is required before IRCC processes the PR application. <strong style="color:#fff">Strong French is typically essential</strong> for most Quebec streams.
</div>
</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Which Quebec program?<span class="fr-sub">Quel programme québécois ?</span></label>
<select id="f_pnp_QC_stream">
<option value="">Select…</option>
<option value="qswp">QSWP — Skilled Worker</option>
<option value="peq">PEQ — Quebec Experience</option>
<option value="entrepreneur">Entrepreneur / Investor</option>
<option value="unsure">Not sure — Bibi advise me</option>
</select>
</div>
<div class="field-group"><label class="field-label">French proficiency (self-assessed)<span class="fr-sub">Niveau de français (auto-évalué)</span></label>
<select id="f_pnp_QC_french">
<option value="none">None / Basic</option>
<option value="intermediate">Intermediate (B1–B2)</option>
<option value="advanced">Advanced (C1) ⭐</option>
<option value="native">Native / Fluent ⭐⭐</option>
</select>
</div>
</div>
</div>
<!-- UNSURE province -->
<div id="pnp_unsure" style="display:none">
<div style="background:rgba(255,255,255,0.07);border-radius:10px;padding:14px 16px;margin-bottom:10px">
<div style="font-size:11.5px;color:rgba(255,255,255,0.65);line-height:1.7">
<span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" fill="white"/></svg></span> No problem — province selection is a key part of Bibi's assessment. Based on your occupation, language scores, and personal circumstances, some provinces will be significantly stronger candidates than others. Bibi will recommend the best 2–3 options in her response.
</div>
</div>
</div>
<!-- Common to all PNP -->
<div class="field-row c1" style="margin-top:4px;margin-bottom:0">
<div class="field-group">
<label class="field-label">Why this province? (optional)<span class="fr-sub">Pourquoi cette province ? (facultatif)</span></label>
<textarea id="f_pnp_reason" style="min-height:55px" placeholder="e.g. My brother lives in Calgary and I have a job offer from an Alberta tech company. I also have oil & gas experience which suits the province…"></textarea>
<span class="field-hint">Personal connections, job offers, industry fit — all help Bibi assess provincial eligibility quickly</span>
</div>
</div>
</div>
</div>
<div id="pw_business" class="branch" style="display:none">
<div class="branch-inner br-gold">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6h-2.18c.07-.44.18-.86.18-1 0-2.21-1.79-4-4-4s-4 1.79-4 4c0 .14.11.56.18 1H8c-1.11 0-1.99.89-1.99 2L6 19c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6-3c1.1 0 2 .9 2 2 0 .14-.11.56-.18 1h-3.64c-.07-.44-.18-.86-.18-1 0-1.1.9-2 2-2zm0 12l-4-4 1.41-1.41L13 12.17V7h2v5.17l2.59-2.58L19 11l-5 5z" fill="white"/></svg></span> Business & Investor Details</div>
<div class="br-note">Each stream has minimum thresholds. <strong>Start-up Visa</strong> requires a Letter of Support from a designated organisation. <strong>Self-Employed</strong> requires 2+ years relevant experience. <strong>ICT</strong> requires 1+ year with the same employer. <strong>Provincial Business</strong> programs set their own net worth and investment minimums. Provide as much detail as possible — Bibi will identify the best fit.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">Stream of interest<span class="fr-sub">Programme visé</span></label>
<select id="f_biz_stream"><option value="">Select…</option><option value="startup">Start-up Visa (SUV)</option><option value="self-employed">Self-Employed Persons</option><option value="ict">Intra-Company Transfer</option><option value="prov-biz">Provincial Business Program</option><option value="unsure">Not sure — advise me</option></select>
</div>
<div class="field-group"><label class="field-label">Years of management / ownership<span class="fr-sub">Années de gestion</span></label>
<select id="f_biz_mgmt"><option value="">Select…</option><option value="u2">Under 2 yrs</option><option value="2-5">2–5 yrs</option><option value="5-10">5–10 yrs</option><option value="10+">10+ yrs</option></select>
</div>
</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">Personal net worth (CAD)<span class="fr-sub">Valeur nette (CAD)</span></label>
<select id="f_biz_networth"><option value="">Select…</option><option value="u300k">Under $300k</option><option value="300-600k">$300k–$600k</option><option value="600k-1m">$600k–$1M</option><option value="1m-2m">$1M–$2M</option><option value="2m+">$2M+</option></select>
</div>
<div class="field-group"><label class="field-label">Investment funds available (CAD)<span class="fr-sub">Investissement disponible (CAD)</span></label>
<select id="f_biz_invest"><option value="">Select…</option><option value="u75k">Under $75k</option><option value="75-200k">$75k–$200k</option><option value="200-500k">$200k–$500k</option><option value="500k+">$500k+</option></select>
</div>
</div>
<div class="field-row c1" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Business / idea description<span class="fr-sub">Description de l'entreprise</span></label>
<textarea id="f_biz_desc" style="min-height:60px" placeholder="e.g. I operate an e-commerce logistics company (12 staff, Senegal). Looking to expand into Canada via Start-up Visa…"></textarea>
</div>
</div>
</div>
</div>
<div id="pw_study" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span> Study Permit → PR Details</div>
<div class="br-note">The right DLI (Designated Learning Institution) and program directly affects your PGWP eligibility and PR timeline.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">Institution status<span class="fr-sub">Statut de l'établissement</span></label>
<select id="f_study_status"><option value="no">Still researching</option><option value="shortlist">Have a shortlist</option><option value="applied">Applied — awaiting</option><option value="accepted">Accepted / LOA received ✓</option></select>
</div>
<div class="field-group"><label class="field-label">Level of study<span class="fr-sub">Niveau d'études</span></label>
<select id="f_study_level"><option value="">Select…</option><option value="diploma-1yr">College Diploma 1yr</option><option value="diploma-2yr">College Diploma 2yr</option><option value="bachelors">Bachelor's Degree</option><option value="pgd">Post-Grad Diploma</option><option value="masters">Master's</option><option value="phd">PhD</option></select>
</div>
</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Preferred field<span class="fr-sub">Domaine préféré</span></label><input type="text" id="f_study_field" placeholder="e.g. Business Analytics, Nursing…"></div>
<div class="field-group"><label class="field-label">Tuition budget / yr (CAD)<span class="fr-sub">Budget scolarité / an (CAD)</span></label>
<select id="f_study_budget"><option value="">Select…</option><option value="u12k">Under $12k</option><option value="12-20k">$12k–$20k</option><option value="20-30k">$20k–$30k</option><option value="30k+">$30k+</option></select>
</div>
</div>
</div>
</div>
<div id="pw_family" class="branch" style="display:none">
<div class="branch-inner br-green">
<div class="br-hdr">Family Sponsorship Details</div>
<div class="br-note">The sponsor must meet minimum income thresholds. Clear details upfront allow Bibi to assess eligibility immediately.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">Your role<span class="fr-sub">Votre rôle</span></label>
<select id="f_fam_role"><option value="sponsored">Being sponsored (I'm abroad)</option><option value="sponsoring">I am the sponsor (in Canada)</option></select>
</div>
<div class="field-group"><label class="field-label">Relationship<span class="fr-sub">Lien de parenté</span></label>
<select id="f_fam_rel"><option value="">Select…</option><option value="spouse">Spouse / Common-law</option><option value="parent">Parent / Grandparent</option><option value="child">Dependent child</option><option value="sibling">Sibling (limited)</option><option value="other">Other relative</option></select>
</div>
</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Sponsor's status<span class="fr-sub">Statut du répondant</span></label>
<select id="f_fam_status"><option value="">Select…</option><option value="citizen">Canadian Citizen</option><option value="pr">Permanent Resident</option><option value="pending">Pending application</option></select>
</div>
<div class="field-group"><label class="field-label">How long sponsor in Canada?<span class="fr-sub">Depuis combien de temps au Canada ?</span></label>
<select id="f_fam_years"><option value="">Select…</option><option value="u1">Under 1 yr</option><option value="1-3">1–3 yrs</option><option value="3-5">3–5 yrs</option><option value="5+">5+ yrs</option></select>
</div>
</div>
</div>
</div>
</div>
<div class="step-footer">
<button class="btn btn-save" onclick="saveProgress()"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z" fill="white"/></svg></span> Save progress</button>
<button class="btn btn-next" onclick="goTo(2)">Continue to Step 2 →</button>
</div>
</div>
<!-- ═══════════════════════════ STEP 2 ═══════════════════════════ -->
<div class="step-card" id="step-2">
<div class="step-card-header">
<div class="step-icon s1" style="background:transparent;border:none"><span style="display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span></div>
<div><div class="step-title">Education & Work Experience<span style="display:block;font-size:11px;color:rgba(255,255,255,0.26);font-style:italic;font-weight:400;margin-top:3px">Formation et expérience</span></div><div class="step-desc">The two biggest CRS factors. If married, spouse details are captured here too.</div></div>
<div class="step-count">Step 2 of 4</div>
</div>
<div class="step-body">
<!-- PNP CONTEXT BANNER — shown only when PNP pathway selected -->
<div id="pnp_context_banner" style="display:none;margin-bottom:20px">
<div style="border-radius:12px;padding:14px 18px;border:1.5px solid;display:flex;gap:12px;align-items:flex-start" id="pnp_banner_inner">
<div style="font-size:22px;flex-shrink:0" id="pnp_banner_icon"></div>
<div>
<div style="font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:4px" id="pnp_banner_title">Provincial Nominee Program</div>
<div style="font-size:12.5px;line-height:1.6" id="pnp_banner_body">Select a province in Step 1 to see province-specific requirements here.</div>
</div>
</div>
</div>
<!-- PRINCIPAL: EDUCATION -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title" id="edu_sep_label">Your Education</span><div class="sep-line"></div></div>
<label class="field-label" style="margin-bottom:10px;display:block">Highest completed credential <span class="req">*</span></label>
<div class="radio-grid c3">
<label class="radio-card"><input type="radio" name="edu" value="high-school"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>High School<br><small style="font-size:10px;color:var(--muted)">Diploma / GED</small></span></label>
<label class="radio-card"><input type="radio" name="edu" value="1yr-diploma"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zm-7-7H7v-2h4v2zm6 4H7v-2h10v2zm0-4h-4v-2h4v2z" fill="white"/></svg></span>1-Year Diploma</span></label>
<label class="radio-card"><input type="radio" name="edu" value="2yr-diploma"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zm-7-7H7v-2h4v2zm6 4H7v-2h10v2zm0-4h-4v-2h4v2z" fill="white"/></svg></span>2-Year Diploma</span></label>
<label class="radio-card"><input type="radio" name="edu" value="bachelors"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>Bachelor's<br><small style="font-size:10px;color:var(--muted)">3 or 4 years</small></span></label>
<label class="radio-card"><input type="radio" name="edu" value="two-plus"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>Two+ Degrees<br><small style="font-size:10px;color:var(--muted)">One must be 3yr+</small></span></label>
<label class="radio-card"><input type="radio" name="edu" value="masters-phd"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="white"/></svg></span>Master's / PhD</span></label>
</div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Field of Study / Profession<span class="fr-sub">Domaine d'études / Profession</span></label><input type="text" id="f_field" placeholder="e.g. Civil Engineering, Nursing, Finance"></div>
<div class="field-group">
<label class="field-label">Earned in Canada?</label>
<select id="f_can_edu"><option value="no">No — foreign credential</option><option value="1yr">Yes — 1-year Canadian program</option><option value="2yr">Yes — 2+ year Canadian program (+30 pts)</option></select>
</div>
</div>
<!-- PRINCIPAL: WORK -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Your Work Experience</span><div class="sep-line"></div></div>
<div class="field-row c3">
<div class="field-group">
<label class="field-label">Foreign work exp (last 10 yrs) <span class="req">*</span><span class="fr-sub">Exp. étrangère (10 dernières années)</span></label>
<select id="f_work_foreign" onchange="toggleWorkHistory('main', this.value)">
<option value="0">None</option><option value="1">1 year</option><option value="2-3">2–3 years</option>
<option value="4-5">4–5 years ⭐</option><option value="5+">5+ years ⭐</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Canadian work exp<span class="fr-sub">Exp. professionnelle au Canada</span></label>
<select id="f_work_canada">
<option value="0">None</option><option value="1">1 yr (+40 pts) ⭐</option>
<option value="2-3">2–3 yrs ⭐⭐</option><option value="4-5">4–5 yrs ⭐⭐⭐</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Canadian job offer?<span class="fr-sub">Offre d'emploi canadienne ?</span></label>
<select id="f_job_offer" onchange="toggleJobOffer()"><option value="no">No offer</option><option value="teer1">Yes — TEER 0/1 (+200 pts!)</option><option value="other">Yes — Other NOC (+50 pts)</option></select>
</div>
</div>
<!-- JOB OFFER DETAIL BRANCH -->
<div id="job_offer_branch" class="branch" style="display:none">
<div class="branch-inner br-green">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6h-2.18c.07-.44.18-.86.18-1 0-2.21-1.79-4-4-4s-4 1.79-4 4c0 .14.11.56.18 1H8c-1.11 0-1.99.89-1.99 2L6 19c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6-3c1.1 0 2 .9 2 2 0 .14-.11.56-.18 1h-3.64c-.07-.44-.18-.86-.18-1 0-1.1.9-2 2-2zm0 12l-4-4 1.41-1.41L13 12.17V7h2v5.17l2.59-2.58L19 11l-5 5z" fill="white"/></svg></span> Job Offer Details</div>
<div class="br-note">A valid job offer from a Canadian employer can add up to 200 CRS points. Bibi will verify the NOC/TEER code to confirm eligibility.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">Employer name<span class="fr-sub">Employeur</span></label><input type="text" id="f_jo_employer" placeholder="e.g. Maple Tech Inc., Toronto"></div>
<div class="field-group"><label class="field-label">Job title offered<span class="fr-sub">Intitulé du poste offert</span></label><input type="text" id="f_jo_title" placeholder="e.g. Senior Software Engineer"></div>
</div>
<div class="field-row c3" style="margin-bottom:12px">
<div class="field-group"><label class="field-label">NOC / TEER code (if known)<span class="fr-sub">Code CNP / TEER (si connu)</span></label><input type="text" id="f_jo_noc" placeholder="e.g. 21232 / TEER 1"></div>
<div class="field-group"><label class="field-label">Offer type<span class="fr-sub">Type d'offre</span></label>
<select id="f_jo_type"><option value="permanent">Permanent / indeterminate</option><option value="contract">Contract (1+ year)</option><option value="verbal">Verbal / pending written</option></select>
</div>
<div class="field-group"><label class="field-label">LMIA status<span class="fr-sub">Statut EIMT</span></label>
<select id="f_jo_lmia"><option value="yes">Yes — LMIA approved</option><option value="exempt">LMIA exempt</option><option value="no">No LMIA yet</option><option value="unsure">Not sure</option></select>
</div>
</div>
<div class="field-row c1" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Brief description of role & duties</label>
<textarea id="f_jo_desc" style="min-height:60px" placeholder="e.g. Full-stack development role at a fintech startup in Toronto. Managing a team of 4 developers, leading product architecture…"></textarea>
<span class="field-hint">This helps confirm TEER classification and whether the offer qualifies for the 200-point bonus</span>
</div>
</div>
</div>
</div>
<!-- PROVINCE-SPECIFIC WORK/ELIGIBILITY QUESTIONS -->
<div id="pnp_work_section" style="display:none">
<!-- ON: Human Capital — needs EE profile + CLB7 -->
<div id="pnp_ws_ON" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Ontario OINP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Do you have an active Express Entry profile?<span class="fr-sub">Profil Entrée express actif ?</span></label>
<select id="f_pnp_ws_ON_ee"><option value="no">No</option><option value="yes">Yes — active</option><option value="plan">Planning to create one</option></select>
</div>
<div class="field-group"><label class="field-label">Is your occupation in OINP's in-demand list?</label>
<select id="f_pnp_ws_ON_occ"><option value="unsure">Not sure — Bibi will check</option><option value="yes">Yes</option><option value="no">No / not sure</option></select>
</div>
</div>
<div class="field-row c1">
<div class="field-group"><label class="field-label">Current employer / work permit status in Ontario (if any)<span class="fr-sub">Statut employeur / permis travail en Ontario</span></label>
<input type="text" id="f_pnp_ws_ON_employer" placeholder="e.g. Currently on PGWP with RBC, Toronto — applying for Employer Job Offer stream"></div>
</div>
</div>
<!-- BC: needs wage ≥ provincial median, BC job offer for most streams -->
<div id="pnp_ws_BC" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">BC PNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c3">
<div class="field-group"><label class="field-label">Do you have a BC employer job offer?<span class="fr-sub">Offre d'emploi en C.-B. ?</span></label>
<select id="f_pnp_ws_BC_jo"><option value="no">No</option><option value="yes">Yes — written offer</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Offered / current hourly wage (CAD)<span class="fr-sub">Salaire horaire offert (CAD)</span></label>
<select id="f_pnp_ws_BC_wage"><option value="">Select…</option><option value="u20">Under $20/hr</option><option value="20-28">$20–$28/hr</option><option value="28-40">$28–$40/hr (near median)</option><option value="40+">$40+/hr</option></select>
</div>
<div class="field-group"><label class="field-label">NOC category of BC role<span class="fr-sub">Catégorie CNP du poste</span></label>
<select id="f_pnp_ws_BC_noc"><option value="">Select…</option><option value="teer0">TEER 0 — Manager/Executive</option><option value="teer1">TEER 1 — Professional</option><option value="teer2">TEER 2 — Technical</option><option value="teer3">TEER 3 — Intermediate</option><option value="unsure">Not sure</option></select>
</div>
</div>
</div>
<!-- AB: must be working in AB or have AB job offer for Opportunity Stream -->
<div id="pnp_ws_AB" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Alberta AAIP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c3">
<div class="field-group"><label class="field-label">Are you currently working in Alberta?<span class="fr-sub">Travaillez-vous en Alberta ?</span></label>
<select id="f_pnp_ws_AB_status"><option value="no">No</option><option value="yes-wp">Yes — valid work permit</option><option value="yes-pr">Yes — already PR/citizen</option></select>
</div>
<div class="field-group"><label class="field-label">Do you have an Alberta job offer?<span class="fr-sub">Offre d'emploi en Alberta ?</span></label>
<select id="f_pnp_ws_AB_jo"><option value="no">No</option><option value="yes">Yes — from AB employer</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Is your role in a rural Alberta community?<span class="fr-sub">Poste dans une communauté rurale ?</span></label>
<select id="f_pnp_ws_AB_rural"><option value="no">No — urban</option><option value="yes">Yes — rural community</option><option value="unsure">Not sure</option></select>
</div>
</div>
</div>
<!-- MB: must demonstrate connection — job offer OR close relative in MB -->
<div id="pnp_ws_MB" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Manitoba MPNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Do you have a Manitoba job offer?<span class="fr-sub">Offre au Manitoba ?</span></label>
<select id="f_pnp_ws_MB_jo"><option value="no">No</option><option value="yes-skilled">Yes — skilled NOC role</option><option value="yes-other">Yes — semi-skilled</option></select>
</div>
<div class="field-group"><label class="field-label">Close relative in Manitoba? (parent/sibling/child)<span class="fr-sub">Proche parent au Manitoba ?</span></label>
<select id="f_pnp_ws_MB_rel"><option value="no">No</option><option value="yes-pr">Yes — PR or citizen</option><option value="yes-wp">Yes — on work/study permit</option></select>
</div>
</div>
<div class="cond-note">MPNP requires a <strong>connection to Manitoba</strong> — either a job offer or a close relative who is a PR/citizen. Without one of these, an overseas application is unlikely to succeed.</div>
</div>
<!-- SK: occupation match is critical -->
<div id="pnp_ws_SK" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Saskatchewan SINP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Occupation in Saskatchewan's in-demand list?<span class="fr-sub">Profession sur liste SK ?</span></label>
<select id="f_pnp_ws_SK_occ"><option value="unsure">Not sure — Bibi will check</option><option value="yes">Yes</option><option value="no">No</option></select>
</div>
<div class="field-group"><label class="field-label">Do you have a Saskatchewan job offer?<span class="fr-sub">Offre en Saskatchewan ?</span></label>
<select id="f_pnp_ws_SK_jo"><option value="no">No</option><option value="yes">Yes</option><option value="open">Seeking one</option></select>
</div>
</div>
</div>
<!-- NS: job offer + 1yr related exp -->
<div id="pnp_ws_NS" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Nova Scotia NSNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Nova Scotia employer job offer?</label>
<select id="f_pnp_ws_NS_jo"><option value="no">No</option><option value="yes">Yes — written offer</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">1+ year related work experience?<span class="fr-sub">1 an+ d'expérience pertinente ?</span></label>
<select id="f_pnp_ws_NS_exp"><option value="yes">Yes</option><option value="no">No / less than 1yr</option></select>
</div>
</div>
</div>
<!-- NB: job offer required for main stream -->
<div id="pnp_ws_NB" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">New Brunswick NBPNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">New Brunswick employer job offer?<span class="fr-sub">Offre au N.-B. ?</span></label>
<select id="f_pnp_ws_NB_jo"><option value="no">No</option><option value="yes">Yes</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Intend to live & work in New Brunswick long-term?</label>
<select id="f_pnp_ws_NB_intent"><option value="yes">Yes — committed to NB</option><option value="possibly">Possibly</option><option value="unsure">Unsure</option></select>
</div>
</div>
<div class="cond-note">NB places significant weight on <strong>genuine intent to settle</strong>. Applicants seen as using NB as a stepping stone to Ontario or Quebec are routinely declined.</div>
</div>
<!-- PE, NL: job offer or graduate status -->
<div id="pnp_ws_PE" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">PEI PNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">PEI employer job offer?<span class="fr-sub">Offre à l'Î.-P.-É. ?</span></label>
<select id="f_pnp_ws_PE_jo"><option value="no">No</option><option value="yes">Yes</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Did you graduate from a PEI institution?<span class="fr-sub">Diplômé d'un établissement de l'Î.-P.-É. ?</span></label>
<select id="f_pnp_ws_PE_grad"><option value="no">No</option><option value="yes">Yes</option></select>
</div>
</div>
</div>
<div id="pnp_ws_NL" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Newfoundland NLPNP — Additional Requirements</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Newfoundland employer job offer?<span class="fr-sub">Offre à T.-N.-L. ?</span></label>
<select id="f_pnp_ws_NL_jo"><option value="no">No</option><option value="yes">Yes — from NL employer</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Did you graduate from Memorial University or CNA?<span class="fr-sub">Diplômé Memorial / CNA ?</span></label>
<select id="f_pnp_ws_NL_grad"><option value="no">No</option><option value="yes">Yes</option></select>
</div>
</div>
</div>
<!-- QC: flag only — standard fields apply, French critical -->
<div id="pnp_ws_QC" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Quebec — Important Notes</span><div class="sep-line"></div></div>
<div style="background:rgba(204,51,51,0.07);border:1.5px solid rgba(204,51,51,0.25);border-radius:10px;padding:14px 16px;margin-bottom:16px">
<div style="font-size:12.5px;color:var(--ink-soft);line-height:1.7">
<strong>Quebec uses its own immigration system (QSWP/PEQ)</strong> — separate from IRCC's CRS. Your answers below are still collected in full. Bibi will assess your profile against Quebec's separate point grid and advise on CSQ eligibility. <strong>French proficiency is weighted very heavily.</strong>
</div>
</div>
<div class="field-row c2">
<div class="field-group"><label class="field-label">Do you have a Quebec employer job offer?<span class="fr-sub">Offre au Québec ?</span></label>
<select id="f_pnp_ws_QC_jo"><option value="no">No</option><option value="yes">Yes — from QC employer</option><option value="open">Seeking one</option></select>
</div>
<div class="field-group"><label class="field-label">Have you lived / worked / studied in Quebec before?<span class="fr-sub">Déjà vécu / travaillé au Québec ?</span></label>
<select id="f_pnp_ws_QC_ties"><option value="no">No prior Quebec ties</option><option value="studied">Studied in QC</option><option value="worked">Worked in QC</option><option value="lived">Lived in QC</option></select>
</div>
</div>
</div>
</div>
<!-- MAIN work history branch -->
<div id="wh_main" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6h-2.18c.07-.44.18-.86.18-1 0-2.21-1.79-4-4-4s-4 1.79-4 4c0 .14.11.56.18 1H8c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6-3c1.1 0 2 .9 2 2 0 .14-.11.56-.18 1h-3.64c-.07-.44-.18-.86-.18-1 0-1.1.9-2 2-2z" fill="white"/></svg></span> Work History — Principal Applicant</div>
<div class="br-note">IRCC only awards points for TEER 0, 1, 2 or 3 roles. List positions so Bibi can verify which years qualify. Start with most recent.</div>
<div id="jobs_main"></div>
<button class="btn-add-job" onclick="addJob('main')">+ Add position</button>
</div>
</div>
<!-- SPOUSE Section (only if married) -->
<div id="spouse_s2" style="display:none">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Spouse / Partner — Education</span><div class="sep-line"></div></div>
<label class="field-label" style="margin-bottom:10px;display:block">Spouse's highest credential</label>
<div class="radio-grid c3" style="margin-bottom:14px">
<label class="radio-card"><input type="radio" name="sp_edu" value="high-school"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>High School</span></label>
<label class="radio-card"><input type="radio" name="sp_edu" value="diploma"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zm-7-7H7v-2h4v2zm6 4H7v-2h10v2zm0-4h-4v-2h4v2z" fill="white"/></svg></span>Diploma<br><small style="font-size:10px;color:var(--muted)">1–2 yr</small></span></label>
<label class="radio-card"><input type="radio" name="sp_edu" value="bachelors"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>Bachelor's</span></label>
<label class="radio-card"><input type="radio" name="sp_edu" value="two-plus"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span>Two+ Degrees</span></label>
<label class="radio-card"><input type="radio" name="sp_edu" value="masters-phd"><span class="radio-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="white"/></svg></span>Master's / PhD</span></label>
<label class="radio-card"><input type="radio" name="sp_edu" value="none"><span class="radio-label">None / Unknown</span></label>
</div>
<div class="field-row c2" style="margin-bottom:4px">
<div class="field-group"><label class="field-label">Spouse's field of study<span class="fr-sub">Domaine d'études du conjoint</span></label><input type="text" id="f_sp_field" placeholder="e.g. Accounting, Medicine, IT"></div>
<div class="field-group"><label class="field-label">Canadian credential?<span class="fr-sub">Diplôme canadien ?</span></label><select id="f_sp_can_edu"><option value="no">No</option><option value="yes">Yes</option></select></div>
</div>
<div class="section-sep" style="margin-top:20px"><div class="sep-line"></div><span class="sep-title">Spouse / Partner — Work Experience</span><div class="sep-line"></div></div>
<div class="field-row c3">
<div class="field-group">
<label class="field-label">Spouse foreign work exp<span class="fr-sub">Exp. étrangère du conjoint</span></label>
<select id="f_sp_work_foreign" onchange="toggleWorkHistory('spouse', this.value)">
<option value="0">None</option><option value="1">1 year</option><option value="2-3">2–3 yrs</option>
<option value="4-5">4–5 yrs ⭐</option><option value="5+">5+ yrs ⭐</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Spouse Canadian work exp<span class="fr-sub">Exp. canadienne du conjoint</span></label>
<select id="f_sp_work_canada"><option value="0">None</option><option value="1">1 yr</option><option value="2-3">2–3 yrs</option><option value="4-5">4–5 yrs</option></select>
</div>
<div class="field-group">
<label class="field-label">Accompanying you?<span class="fr-sub">Vous accompagne ?</span></label>
<select id="f_sp_coming"><option value="yes">Yes — together</option><option value="later">Later — I go first</option><option value="no">No — staying</option></select>
</div>
</div>
<!-- SPOUSE work history branch -->
<div id="wh_spouse" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6h-2.18c.07-.44.18-.86.18-1 0-2.21-1.79-4-4-4s-4 1.79-4 4c0 .14.11.56.18 1H8c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6-3c1.1 0 2 .9 2 2 0 .14-.11.56-.18 1h-3.64c-.07-.44-.18-.86-.18-1 0-1.1.9-2 2-2z" fill="white"/></svg></span> Work History — Spouse / Partner</div>
<div class="br-note">Same as above — list roles so Bibi can verify TEER levels and qualifying years.</div>
<div id="jobs_spouse"></div>
<button class="btn-add-job" onclick="addJob('spouse')">+ Add spouse position</button>
</div>
</div>
</div>
<!-- Score not shown to applicant — calculated silently on submit -->
</div>
<div class="step-footer">
<button class="btn btn-back" onclick="goTo(1)">← Back</button>
<button class="btn btn-save" onclick="saveProgress()"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z" fill="white"/></svg></span> Save</button>
<button class="btn btn-next" onclick="goTo(3)">Continue →</button>
</div>
</div>
<!-- ═══════════════════════════ STEP 3 ═══════════════════════════ -->
<div class="step-card" id="step-3">
<div class="step-card-header">
<div class="step-icon s1" style="background:transparent;border:none"><span style="display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12.87 15.07l-2.54-2.51.03-.03A17.52 17.52 0 0014.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z" fill="white"/></svg></span></div>
<div><div class="step-title">Language Skills & Canadian Ties</div><div class="step-desc">Language is the single biggest CRS variable — up to 310 points. Individual band scores matter, not the overall.</div></div>
<div class="step-count">Step 3 of 4</div>
</div>
<div class="step-body">
<!-- PNP LANGUAGE CONTEXT BANNER -->
<div id="pnp_lang_banner" style="display:none;margin-bottom:16px">
<div style="border-radius:10px;padding:12px 16px;border:1.5px solid;font-size:12.5px;line-height:1.6" id="pnp_lang_banner_inner"></div>
</div>
<!-- ENGLISH -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">English Proficiency</span><div class="sep-line"></div></div>
<div class="field-row c2" style="margin-bottom:14px">
<div class="field-group">
<label class="field-label">Have you taken IELTS or CELPIP?<span class="fr-sub">Avez-vous passé IELTS ou CELPIP ?</span></label>
<select id="f_eng_test" onchange="toggleEngTest()">
<option value="no">Not yet</option>
<option value="ielts">Yes — IELTS General Training</option>
<option value="celpip">Yes — CELPIP General</option>
<option value="scheduled">Scheduled / upcoming</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Self-assessed English level<span class="fr-sub">Niveau d'anglais (auto-évalué)</span></label>
<select id="f_eng_self">
<option value="none">None / Basic</option><option value="moderate">Moderate (CLB 6–7)</option>
<option value="strong">Strong (CLB 8) ⭐</option><option value="excellent">Excellent (CLB 9+) ⭐⭐</option>
</select>
</div>
</div>
<!-- English bands branch -->
<div id="eng_bands_branch" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr" id="eng_bands_hdr"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zM8 15h8v2H8zm0-4h8v2H8zm0-4h4v2H8z" fill="white"/></svg></span> IELTS Band Scores (by component)</div>
<div id="eng_lapsed_warn" class="lapsed-warn" style="display:none"><strong>⚠ Test results over 2 years old are expired for IRCC purposes.</strong> You will need to retake before submitting an application. Bibi can advise on preparation.</div>
<div class="br-note">IRCC uses each individual component score to calculate your CLB level — your weakest band determines your overall CLB, not the average.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group">
<label class="field-label">Test date (month & year) <span class="req">*</span><span class="fr-sub">Date du test</span></label>
<input type="month" id="f_eng_date" onchange="checkLapsed('eng')">
</div>
<div class="field-group">
<label class="field-label">Test centre / city<span class="fr-sub">Centre / ville du test</span></label>
<input type="text" id="f_eng_centre" placeholder="e.g. Dakar, Dubai, Montréal…">
</div>
</div>
<div class="band-grid">
<div class="band-item"><div class="band-lbl">Listening</div>
<select id="f_eng_L"><option value="">–</option><option>4.0</option><option>4.5</option><option>5.0</option><option>5.5</option><option>6.0</option><option>6.5</option><option>7.0</option><option>7.5</option><option>8.0</option><option>8.5</option><option>9.0</option></select>
</div>
<div class="band-item"><div class="band-lbl">Reading</div>
<select id="f_eng_R"><option value="">–</option><option>4.0</option><option>4.5</option><option>5.0</option><option>5.5</option><option>6.0</option><option>6.5</option><option>7.0</option><option>7.5</option><option>8.0</option><option>8.5</option><option>9.0</option></select>
</div>
<div class="band-item"><div class="band-lbl">Writing</div>
<select id="f_eng_W"><option value="">–</option><option>4.0</option><option>4.5</option><option>5.0</option><option>5.5</option><option>6.0</option><option>6.5</option><option>7.0</option><option>7.5</option><option>8.0</option><option>8.5</option><option>9.0</option></select>
</div>
<div class="band-item"><div class="band-lbl">Speaking</div>
<select id="f_eng_S"><option value="">–</option><option>4.0</option><option>4.5</option><option>5.0</option><option>5.5</option><option>6.0</option><option>6.5</option><option>7.0</option><option>7.5</option><option>8.0</option><option>8.5</option><option>9.0</option></select>
</div>
</div>
<div id="eng_band_warn" class="band-lowest-warn" style="display:none"><strong>!</strong> Your lowest band score limits your overall CLB level — even if other scores are higher. Targeted practice on your weakest skill can yield significant CRS gains.</div>
</div>
</div>
<!-- FRENCH -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">French Proficiency (TEF Canada / TCF Canada)</span><div class="sep-line"></div></div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group">
<label class="field-label">French level (self-assessed)<span class="fr-sub">Niveau de français (auto-évalué)</span></label>
<select id="f_fr_self" onchange="toggleFrTest()">
<option value="none">None</option><option value="basic">Basic (A1–A2)</option>
<option value="intermediate">Intermediate (B1–B2)</option><option value="fluent">Fluent / Native (C1+) ⭐⭐</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Have you taken TEF / TCF Canada?<span class="fr-sub">Avez-vous passé TEF / TCF Canada ?</span></label>
<select id="f_fr_test" onchange="toggleFrTest()">
<option value="no">Not yet</option>
<option value="tef">Yes — TEF Canada</option>
<option value="tcf">Yes — TCF Canada</option>
<option value="scheduled">Scheduled</option>
</select>
</div>
</div>
<div class="cond-note"><strong>Francophone bonus:</strong> Strong French (C1+) adds up to 50 extra CRS points AND opens the Francophone Immigration stream — major advantage for applicants from DRC, Senegal, Mauritius, and Ivory Coast.</div>
<!-- French bands branch -->
<div id="fr_bands_branch" class="branch" style="display:none">
<div class="branch-inner br-green">
<div class="br-hdr" id="fr_bands_hdr"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zM8 15h8v2H8zm0-4h8v2H8zm0-4h4v2H8z" fill="white"/></svg></span> TEF Canada Band Scores (by component)</div>
<div id="fr_lapsed_warn" class="lapsed-warn" style="display:none"><strong>⚠ French test results over 2 years old are expired for IRCC.</strong> You will need to retake before applying.</div>
<div class="br-note">As with IELTS, IRCC uses each component separately (Listening, Reading, Writing, Speaking) — not the aggregate score. The lowest component determines your NCLC level.</div>
<div class="field-row c2" style="margin-bottom:12px">
<div class="field-group">
<label class="field-label">Test date (month & year)<span class="fr-sub">Date du test</span></label>
<input type="month" id="f_fr_date" onchange="checkLapsed('fr')">
</div>
<div class="field-group">
<label class="field-label">Confirm test type<span class="fr-sub">Confirmer le type de test</span></label>
<select id="f_fr_type"><option value="tef">TEF Canada</option><option value="tcf">TCF Canada</option></select>
</div>
</div>
<div class="band-grid">
<div class="band-item"><div class="band-lbl">Listening</div>
<select id="f_fr_L"><option value="">–</option><option value="A1">A1</option><option value="A2">A2</option><option value="B1">B1</option><option value="B2">B2</option><option value="C1">C1 ⭐</option><option value="C2">C2</option></select>
</div>
<div class="band-item"><div class="band-lbl">Reading</div>
<select id="f_fr_R"><option value="">–</option><option value="A1">A1</option><option value="A2">A2</option><option value="B1">B1</option><option value="B2">B2</option><option value="C1">C1 ⭐</option><option value="C2">C2</option></select>
</div>
<div class="band-item"><div class="band-lbl">Writing</div>
<select id="f_fr_W"><option value="">–</option><option value="A1">A1</option><option value="A2">A2</option><option value="B1">B1</option><option value="B2">B2</option><option value="C1">C1 ⭐</option><option value="C2">C2</option></select>
</div>
<div class="band-item"><div class="band-lbl">Speaking</div>
<select id="f_fr_S"><option value="">–</option><option value="A1">A1</option><option value="A2">A2</option><option value="B1">B1</option><option value="B2">B2</option><option value="C1">C1 ⭐</option><option value="C2">C2</option></select>
</div>
</div>
</div>
</div>
<!-- CANADIAN TIES -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Canadian Connections</span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group">
<label class="field-label">Family in Canada?<span class="fr-sub">Famille au Canada ?</span></label>
<select id="f_fam_in_canada" onchange="toggleFamProvince()">
<option value="no">No</option>
<option value="sibling">Yes — sibling (+15 CRS)</option>
<option value="other">Yes — other relative</option>
</select>
</div>
<div class="field-group">
<label class="field-label">Studied in Canada?<span class="fr-sub">A étudié au Canada ?</span></label>
<select id="f_studied_canada"><option value="no">No</option><option value="1yr">Yes — 1-year program</option><option value="2yr+">Yes — 2+ year program (+15 CRS)</option></select>
</div>
</div>
<!-- Family province branch -->
<div id="fam_province_branch" class="branch" style="display:none">
<div class="branch-inner br-gold">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span> Which province / city is your family member in?</div>
<div class="br-note"><strong>Note:</strong> Family ties in <strong>Quebec only count toward the +15 CRS sibling bonus if your intended destination is also Quebec.</strong> Family in all other provinces count regardless of where you plan to settle.</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group">
<label class="field-label">Province<span class="fr-sub">Province</span></label>
<select id="f_fam_province">
<option value="">Select…</option>
<option value="ON">Ontario</option><option value="BC">British Columbia</option><option value="AB">Alberta</option>
<option value="MB">Manitoba</option><option value="SK">Saskatchewan</option><option value="NS">Nova Scotia</option>
<option value="NB">New Brunswick</option><option value="NL">Newfoundland & Labrador</option>
<option value="PE">Prince Edward Island</option><option value="YT">Yukon</option><option value="NT">NWT</option>
<option value="QC">Quebec (see note above)</option>
</select>
</div>
<div class="field-group"><label class="field-label">City (optional)<span class="fr-sub">Ville (facultatif)</span></label><input type="text" id="f_fam_city" placeholder="e.g. Toronto, Calgary, Montréal…"></div>
</div>
</div>
</div>
</div>
<div class="step-footer">
<button class="btn btn-back" onclick="goTo(2)">← Back</button>
<button class="btn btn-save" onclick="saveProgress()"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z" fill="white"/></svg></span> Save</button>
<button class="btn btn-next" onclick="goTo(4)">Continue →</button>
</div>
</div>
<!-- ═══════════════════════════ STEP 4 ═══════════════════════════ -->
<div class="step-card" id="step-4">
<div class="step-card-header">
<div class="step-icon s1" style="background:transparent;border:none"><span style="display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z" fill="white"/></svg></span></div>
<div><div class="step-title">Final Details, Documents & Fees</div><div class="step-desc">Settlement readiness, background declaration, document uploads, and a transparent look at service fees.</div></div>
<div class="step-count">Step 4 of 4</div>
</div>
<div class="step-body">
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Settlement Readiness<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px;letter-spacing:0.3px">Préparation à l'installation</span></span><div class="sep-line"></div></div>
<div class="field-row c2">
<div class="field-group">
<label class="field-label">Funds available (CAD) <span class="req">*</span></label>
<select id="f_funds"><option value="">Select…</option><option value="u10k">Under $10,000</option><option value="10-25k">$10,000–$25,000</option><option value="25-50k">$25,000–$50,000 ✓</option><option value="50k+">$50,000+ ✓✓</option></select>
<span class="field-hint">IRCC requires proof of settlement funds</span>
</div>
<div class="field-group">
<label class="field-label">Target move date<span class="fr-sub">Date de déménagement</span></label>
<select id="f_timeline"><option value="">Select…</option><option value="asap">As soon as possible</option><option value="6-12m">6–12 months</option><option value="1-2yr">1–2 years</option><option value="3yr+">3+ years</option></select>
</div>
</div>
<div class="field-row c2">
<div class="field-group">
<label class="field-label">Preferred province / city<span class="fr-sub">Province / ville préférée</span></label>
<select id="f_province"><option value="">No preference</option><option value="ON">Ontario (Toronto / Ottawa)</option><option value="BC">BC (Vancouver)</option><option value="QC">Quebec (Montréal) — French</option><option value="AB">Alberta (Calgary)</option><option value="MB">Manitoba</option><option value="SK">Saskatchewan</option><option value="NS">Nova Scotia</option><option value="other">Other</option></select>
</div>
<div class="field-group">
<label class="field-label">Valid passport?<span class="fr-sub">Passeport valide ?</span></label>
<select id="f_passport"><option value="yes">Yes — valid</option><option value="expired">Expired — needs renewal</option><option value="no">No passport yet</option></select>
</div>
</div>
<!-- HEALTH & CRIMINAL -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Health & Background<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px;letter-spacing:0.3px">Santé & Contexte</span></span><div class="sep-line"></div></div>
<div class="field-group" style="margin-bottom:12px">
<label class="field-label">Known medical conditions requiring ongoing treatment?<span class="fr-sub">Conditions médicales nécessitant un traitement ?</span></label>
<select id="f_medical" onchange="toggleMedical()"><option value="no">No medical concerns</option><option value="yes">Yes — I have a condition</option><option value="unsure">Unsure / prefer to discuss</option></select>
</div>
<div id="medical_branch" class="branch" style="display:none">
<div class="branch-inner br-gold">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 3H5c-1.1 0-1.99.9-1.99 2L3 19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.93 0 3.5 1.57 3.5 3.5S13.93 13 12 13s-3.5-1.57-3.5-3.5S10.07 6 12 6zm7 13H5v-.23c0-.62.28-1.2.76-1.58C7.47 15.82 9.64 15 12 15s4.53.82 6.24 2.19c.48.38.76.97.76 1.58V19z" fill="white"/></svg></span> Medical Details (Confidential)</div>
<div class="br-note">A medical condition does not automatically disqualify you. Bibi will assess inadmissibility risk confidentially.</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Condition category<span class="fr-sub">Catégorie de condition</span></label>
<select id="f_med_type"><option value="">Select…</option><option value="chronic">Chronic illness (diabetes, hypertension…)</option><option value="mental">Mental health</option><option value="disability">Physical disability</option><option value="cardiac">Cardiovascular</option><option value="respiratory">Respiratory</option><option value="cancer">Cancer</option><option value="hiv">HIV/AIDS</option><option value="tb">Tuberculosis (TB)</option><option value="other">Other</option></select>
</div>
<div class="field-group"><label class="field-label">Treatment status<span class="fr-sub">Statut du traitement</span></label>
<select id="f_med_status"><option value="ongoing">Ongoing — regular treatment</option><option value="controlled">Controlled with medication</option><option value="remission">In remission / resolved</option><option value="unsure">Unsure</option></select>
</div>
</div>
<div class="field-group" style="margin-bottom:0"><label class="field-label">Additional notes<span class="fr-sub">Notes supplémentaires</span></label>
<textarea id="f_med_notes" style="min-height:60px" placeholder="e.g. Type 2 diabetes, managed with daily oral medication. No hospitalizations in 3 years…"></textarea>
</div>
</div>
</div>
<div class="field-group" style="margin-bottom:12px;margin-top:4px">
<label class="field-label"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 8C8 10 5.9 16.17 3.82 22h2.13l1.04-3h4.01l1.04 3h2.13C18.1 16.17 17 8 17 8zm-5 7.5L14 13l2 2.5h-4zm5-2.5l-2-2.5 2-2.5 2 2.5-2 2.5z" fill="white"/></svg></span> Criminal convictions in any country?</label>
<select id="f_criminal" onchange="toggleCriminal()"><option value="no">No criminal record</option><option value="minor">Yes — minor or old conviction</option><option value="yes">Yes — I have a record</option><option value="unsure">Unsure / prefer to discuss</option></select>
</div>
<div id="criminal_branch" class="branch" style="display:none">
<div class="branch-inner br-red">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 8C8 10 5.9 16.17 3.82 22h2.13l1.04-3h4.01l1.04 3h2.13C18.1 16.17 17 8 17 8zm-5 7.5L14 13l2 2.5h-4zm5-2.5l-2-2.5 2-2.5 2 2.5-2 2.5z" fill="white"/></svg></span> Criminal Record (Confidential)</div>
<div class="br-note">A criminal record does not automatically prevent immigration. Criminal Rehabilitation and Temporary Resident Permits are established options. Bibi will review confidentially.</div>
<div class="field-row c2" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Type of offence<span class="fr-sub">Type d'infraction</span></label>
<select id="f_crim_type"><option value="">Select…</option><option value="dui">DUI / Impaired driving</option><option value="assault">Assault (simple)</option><option value="drug-poss">Drug possession</option><option value="drug-traf">Drug trafficking</option><option value="fraud">Theft / Fraud</option><option value="domestic">Domestic violence</option><option value="traffic">Traffic / minor</option><option value="serious">Serious / violent</option><option value="other">Other</option></select>
</div>
<div class="field-group"><label class="field-label">When did it occur?<span class="fr-sub">Quand cela s'est-il produit ?</span></label>
<select id="f_crim_when"><option value="">Select…</option><option value="u5yr">Under 5 years ago</option><option value="5-10yr">5–10 years ago</option><option value="10yr+">Over 10 years ago</option></select>
</div>
</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Country where it occurred<span class="fr-sub">Pays</span></label><input type="text" id="f_crim_country" placeholder="e.g. UAE, France, Senegal…"></div>
<div class="field-group"><label class="field-label">Sentence served<span class="fr-sub">Peine purgée</span></label>
<select id="f_crim_sentence"><option value="fine">Fine only</option><option value="probation">Probation / community service</option><option value="prison-u6m">Prison under 6 months</option><option value="prison-6m+">Prison 6+ months</option><option value="pending">Charges pending</option></select>
</div>
</div>
</div>
</div>
<!-- DOCUMENT UPLOADS -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Document Uploads (Optional — Speeds Up Review)<span style="display:block;font-size:9px;color:rgba(255,255,255,0.22);font-style:italic;font-weight:400;margin-top:1px;letter-spacing:0.3px">Documents (Facultatif — accélère le traitement)</span></span><div class="sep-line"></div></div>
<div style="background:rgba(59,110,165,0.07);border:1px solid rgba(59,110,165,0.2);border-radius:10px;padding:12px 16px;margin-bottom:14px;font-size:12.5px;color:var(--ink-soft);line-height:1.6">
<strong>Please upload documents for both the Principal Applicant and Spouse / Partner (if married or common-law).</strong> This includes separate CVs, academic credentials, language test results, and passports where applicable. All files transmitted securely. PDF, JPG, PNG — max 10MB each.
</div>
<div class="upload-grid">
<div>
<div class="upload-label-txt">CV / Résumé</div>
<div class="file-drop" id="drop_cv">
<input type="file" accept=".pdf,.doc,.docx" onchange="handleUpload(event,'cv')">
<div class="fd-icon"><span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zm-7-7H7v-2h4v2zm6 4H7v-2h10v2zm0-4h-4v-2h4v2z" fill="white"/></svg></span></div><div class="fd-title">Drop CV here or click to browse</div><div class="fd-sub">PDF or Word · Max 10MB</div>
</div>
<div class="file-list" id="list_cv"></div>
</div>
<div>
<div class="upload-label-txt">Academic Qualifications</div>
<div class="file-drop" id="drop_acad">
<input type="file" accept=".pdf,.jpg,.jpeg,.png" multiple onchange="handleUpload(event,'acad')">
<div class="fd-icon"><span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z" fill="white"/></svg></span></div><div class="fd-title">Degrees, diplomas, transcripts</div><div class="fd-sub">Multiple files OK</div>
</div>
<div class="file-list" id="list_acad"></div>
</div>
<div>
<div class="upload-label-txt">Language Test Results</div>
<div class="file-drop" id="drop_lang">
<input type="file" accept=".pdf,.jpg,.jpeg,.png" onchange="handleUpload(event,'lang')">
<div class="fd-icon"><span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zm-7-7H7v-2h4v2zm6 4H7v-2h10v2zm0-4h-4v-2h4v2z" fill="white"/></svg></span></div><div class="fd-title">IELTS / CELPIP / TEF / TCF</div><div class="fd-sub">PDF or image</div>
</div>
<div class="file-list" id="list_lang"></div>
</div>
<div>
<div class="upload-label-txt">Passport / Bio Page</div>
<div class="file-drop" id="drop_pass">
<input type="file" accept=".pdf,.jpg,.jpeg,.png" onchange="handleUpload(event,'pass')">
<div class="fd-icon"><span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 4H4c-1.11 0-2 .89-2 2v12c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-.75c0-1.66 2.69-2.5 5-2.5s5 .84 5 2.5V17z" fill="white"/></svg></span></div><div class="fd-title">Photo / bio page only</div><div class="fd-sub">PDF or image</div>
</div>
<div class="file-list" id="list_pass"></div>
</div>
</div>
<!-- HOW DID YOU FIND US -->
<div class="section-sep"><div class="sep-line"></div><span class="sep-title">Last Few Questions</span><div class="sep-line"></div></div>
<div class="field-row c1">
<div class="field-group">
<label class="field-label">Your biggest question or concern about immigrating to Canada<span class="fr-sub">Votre principale question sur l'immigration</span></label>
<textarea id="f_notes" style="min-height:80px" placeholder="e.g. I'm not sure if my IELTS score is sufficient. I have 5 years IT experience but no Canadian experience…"></textarea>
<span class="field-hint">This helps Bibi prepare a personalised response</span>
</div>
</div>
<div class="field-row c1">
<div class="field-group">
<label class="field-label">How did you find us?<span class="fr-sub">Comment nous avez-vous trouvés ?</span></label>
<select id="f_source" onchange="toggleSource()">
<option value="">Select…</option>
<option value="google">Google Search</option><option value="facebook">Facebook</option>
<option value="instagram">Instagram</option><option value="linkedin">LinkedIn</option>
<option value="youtube">YouTube</option>
<option value="referral">Referred by a friend / family member</option>
<option value="agent">Immigration agent / partner</option>
<option value="other">Other</option>
</select>
</div>
</div>
<div id="referral_branch" class="branch" style="display:none">
<div class="branch-inner br-green">
<div class="br-hdr" data-placeholder="1"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 14H9c0-4.56 3.06-8.47 7.35-9.65L17 6c-3.38.93-6 4.02-6 8zm8-9.93V2l-4 4 4 4V7.07C21.88 8.11 24 11 24 14l-1.99 2C22.01 12.24 18.86 6.22 19 4.07zM9 2l-.35.02C4.67 2.55 2 6.36 2 10.5c0 2.39.97 4.56 2.53 6.15L3.05 18h7.04l.47-2H5.12c-1.28-1.29-2.12-3-2.12-4.5 0-3.31 2.24-6.12 5-7.14V7l4-4-4-4zm-5 12l-.05.05.05-.05z" fill="white"/></svg></span> Referral — Thank you!</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Referrer's full name <span class="req">*</span><span class="fr-sub">Nom complet du référent</span></label><input type="text" id="f_ref_name" placeholder="e.g. Fatou Diallo"></div>
<div class="field-group"><label class="field-label">Relationship<span class="fr-sub">Lien de parenté</span></label>
<select id="f_ref_rel"><option value="friend">Friend</option><option value="family">Family member</option><option value="colleague">Colleague</option><option value="former-client">Former CMS client</option><option value="community">Community / church</option></select>
</div>
</div>
</div>
</div>
<div id="agent_branch" class="branch" style="display:none">
<div class="branch-inner br-blue">
<div class="br-hdr"><span style="display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 14H9c0-4.56 3.06-8.47 7.35-9.65L17 6c-3.38.93-6 4.02-6 8zm8-9.93V2l-4 4 4 4V7.07C21.88 8.11 24 11 24 14l-1.99 2C22.01 12.24 18.86 6.22 19 4.07zM9 2l-.35.02C4.67 2.55 2 6.36 2 10.5c0 2.39.97 4.56 2.53 6.15L3.05 18h7.04l.47-2H5.12c-1.28-1.29-2.12-3-2.12-4.5 0-3.31 2.24-6.12 5-7.14V7l4-4-4-4zm-5 12l-.05.05.05-.05z" fill="white"/></svg></span> Partner / Agent Details</div>
<div class="field-row c2" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Agent / organisation name</label><input type="text" id="f_agent_name" placeholder="e.g. Global Pathways Agency"></div>
<div class="field-group"><label class="field-label">Agent's country</label><input type="text" id="f_agent_country" placeholder="e.g. Senegal, DRC, UAE…"></div>
</div>
</div>
</div>
<!-- ╔══════════════════════════════════╗
║ FEES TEASER ║
╚══════════════════════════════════╝ -->
<div class="fees-box">
<div class="fees-tag">Transparent Pricing</div>
<h3>This assessment is free.<br>Here's what comes next if you qualify.</h3>
<p>Working with a regulated RCIC is an investment — not a cost. Bibi's fee structure is transparent, fixed, and explained upfront. <strong style="color:rgba(255,255,255,0.75)">Serious applicants deserve to know what's involved before committing.</strong></p>
<div style="background:rgba(255,255,255,0.06);border:1px solid rgba(255,200,100,0.25);border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:12px;color:rgba(255,220,150,0.85);line-height:1.6">
<strong>Note:</strong> <strong>Professional fees shown are for RCIC services only.</strong> They exclude Government of Canada application fees, biometrics, medical exam fees, police certificate costs, IELTS/CELPIP/TEF test fees, and any third-party expenses. A full cost breakdown will be provided during your strategy consultation.
</div>
<div class="fees-grid">
<div class="fee-card"><div class="fee-card-name">Strategy Consultation</div><div class="fee-card-price">$150</div><div class="fee-card-note">1 hour · One-time</div></div>
<div class="fee-card"><div class="fee-card-name">Express Entry / PNP</div><div class="fee-card-price">$3,500+</div><div class="fee-card-note">Full service · CAD</div></div>
<div class="fee-card"><div class="fee-card-name">Study Permit</div><div class="fee-card-price">$1,200+</div><div class="fee-card-note">Application · CAD</div></div>
</div>
<div class="fees-links">
<a href="/fees" class="fees-link primary" target="_blank">View Full Fee Schedule</a>
<a href="/settlement-guide" class="fees-link ghost" target="_blank">Canada Settlement Cost Guide</a>
</div>
</div>
</div>
<div class="step-footer" style="flex-direction:column;gap:14px;align-items:stretch;">
<div style="display:flex;align-items:center;gap:10px;">
<button class="btn btn-back" onclick="goTo(3)" style="flex-shrink:0">← Back</button>
<button class="btn btn-submit" onclick="submitForm()" style="flex:1;justify-content:center">Submit My Free Assessment →</button>
</div>
<div style="text-align:center;font-size:11.5px;color:var(--muted);line-height:1.5">
Confidential & protected. By submitting you agree to be contacted by RCIC Bibi R Maudhoo (CICC #R415359). No spam. No third-party sharing.
</div>
</div>
</div>
<!-- SUCCESS CARD -->
<div class="step-card" id="step-success" style="display:none;">
<div class="success-card show">
<div class="success-check"><span style="display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;background:#2D7A4F;flex-shrink:0;vertical-align:middle"><svg width="42" height="42" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" fill="white"/></svg></span></div>
<h2>✅ Assessment Received!</h2>
<p style="font-size:16px;color:#1A1A2E;font-weight:500;margin-bottom:8px;">Thank you — your profile is in good hands.</p>
<p>Bibi R Maudhoo (RCIC #R415359) will personally review your submission and contact you within <strong>1–2 business days</strong> with your recommended immigration pathway and next steps.</p>
<p style="font-size:13px;color:#888;margin-top:-12px;">Check your spam folder if you don't hear back — and feel free to WhatsApp us at <strong>+1 437 419 2671</strong> for a faster response.</p>
<div class="next-box" style="margin-top:28px">
<div class="next-title">What Happens Next</div>
<div class="next-item">📬 Check your inbox — Bibi will be in touch personally once your profile has been reviewed</div>
<div class="next-item">📞 Want a faster response? <a href="https://wa.me/14374192671" target="_blank" style="color:var(--gold);font-weight:600">WhatsApp us directly →</a></div>
<div class="next-item">🌐 In the meantime, <a href="https://canadamigrationservices.com" style="color:var(--gold);font-weight:600">explore our website</a> to learn about the programs you may qualify for</div>
<div class="next-item">📖 Read our <a href="https://canadamigrationservices.com/blog" style="color:var(--gold);font-weight:600">immigration guides</a> — latest Express Entry draws, PNP updates and more</div>
</div>
<a href="https://canadamigrationservices.com" style="display:inline-block;margin-top:28px;background:#CC3333;color:#fff;padding:13px 32px;border-radius:8px;font-weight:600;font-size:15px;text-decoration:none;">← Back to Homepage</a>
</div>
</div>
</div><!-- /form-outer -->
<!-- SAVE MODAL -->
<div class="modal-overlay" id="saveModal">
<div class="modal">
<button class="modal-close" onclick="hideSaveModal()">✕</button>
<div class="modal-icon"><span style="display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="34" height="34" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z" fill="white"/></svg></span></div>
<h3>Save Your Progress</h3>
<p>Enter your email and we'll send a secure link to resume your assessment on any device, anytime.</p>
<input type="email" id="saveEmail" placeholder="your@email.com" style="width:100%;padding:11px 14px;border:1.5px solid var(--border);border-radius:10px;font-family:'Outfit',sans-serif;font-size:14px;outline:none;margin-bottom:14px">
<div id="saveCodeWrap" style="display:none">
<div class="resume-code" id="resumeCode">CMS-XXXX</div>
<p style="font-size:12px;color:var(--muted);margin-bottom:10px">Save this code too — resume without email if needed.</p>
</div>
<button class="btn btn-next" onclick="doSave()" style="width:100%;justify-content:center">Send Resume Link</button>
</div>
</div>
<div class="toast" id="toast"><span><span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;flex-shrink:0;vertical-align:middle"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" fill="white"/></svg></span></span><span id="toastTxt">Saved!</span></div>
<script>
let step = 1;
const pW = {1:'12%',2:'37%',3:'62%',4:'87%'};
const jobIdx = {main:0, spouse:0};
const uploads = {cv:[],acad:[],lang:[],pass:[]};
// ── NAV ──
function goTo(n) {
// Fully reset ALL steps before activating target (prevents stale active states)
for(let i=1;i<=4;i++){
const card=document.getElementById('step-'+i);
const ps=document.getElementById('ps-'+i);
if(card) card.classList.remove('active');
if(ps){
ps.classList.remove('active');
if(i<n) ps.classList.add('completed');
else ps.classList.remove('completed');
}
}
step=n;
const activeCard=document.getElementById('step-'+step);
if(activeCard) activeCard.classList.add('active');
const activePs=document.getElementById('ps-'+step);
if(activePs){ activePs.classList.remove('completed'); activePs.classList.add('active'); }
document.getElementById('progressFill').style.width=pW[step]||'100%';
document.querySelector('.progress-wrapper').scrollIntoView({behavior:'smooth',block:'start'});
autoSave();
}
// ── MARITAL ──
function toggleMarital(){
const v=document.getElementById('f_marital').value;
const show=v==='married';
document.getElementById('spouse_s1').style.display=show?'block':'none';
document.getElementById('spouse_s2').style.display=show?'block':'none';
}
// ── KIDS ──
function toggleKids(){
const v=document.getElementById('f_has_kids').value;
document.getElementById('kids_branch').style.display=v==='yes'?'block':'none';
if(v==='yes') renderKidsFields();
}
function renderKidsFields(){
const raw=document.getElementById('f_num_kids')?.value||'1';
const n=raw==='6'?6:parseInt(raw);
const cols=Math.min(n,4);
let h=`<div class="field-row" style="grid-template-columns:repeat(${cols},1fr);gap:10px;margin-bottom:0">`;
for(let i=1;i<=n;i++){
h+=`<div class="field-group"><label class="field-label">Child ${i} age</label>
<select id="kid_age_${i}"><option value="">Age…</option><option value="0-2">0–2</option><option value="3-5">3–5</option>
<option value="6-10">6–10</option><option value="11-14">11–14</option><option value="15-17">15–17</option>
<option value="18-21">18–21</option><option value="22+">22+</option></select></div>`;
}
h+='</div>';
document.getElementById('kids_ages_wrap').innerHTML=h;
}
// ── PATHWAY ──
document.addEventListener('change',e=>{
if(e.target.name==='pathway') togglePathway();
if(['f_eng_L','f_eng_R','f_eng_W','f_eng_S'].includes(e.target.id)) checkBandGap();
});
function togglePathway(){
const v=document.querySelector('input[name="pathway"]:checked')?.value;
document.getElementById('pw_pnp').style.display=v==='pnp'?'block':'none';
document.getElementById('pw_business').style.display=v==='business'?'block':'none';
document.getElementById('pw_study').style.display=v==='study'?'block':'none';
document.getElementById('pw_family').style.display=v==='family'?'block':'none';
// Update context banners across all steps when pathway changes
const prov = document.getElementById('f_pnp_province')?.value||'';
applyPNPContext(prov);
}
const PNP_PROVINCES=['ON','BC','AB','MB','SK','NS','NB','PE','NL','QC','unsure'];
function togglePNPProvince(){
const v=document.getElementById('f_pnp_province')?.value||'';
PNP_PROVINCES.forEach(p=>{ const el=document.getElementById('pnp_'+p); if(el) el.style.display='none'; });
if(v){ const show=document.getElementById('pnp_'+v); if(show) show.style.display='block'; }
applyPNPContext(v);
}
// ── PNP CONTEXT DATA — criteria per province ──
const PNP_CTX = {
ON:{
icon:`ON`, color:`rgba(59,110,165,0.1)`, border:`rgba(59,110,165,0.3)`, titleColor:`#3B6EA5`,
title:`Ontario OINP — What matters most`,
body:`<strong>Education:</strong> Bachelor's degree minimum for Human Capital stream. <strong>Language:</strong> CLB 7 English required; CLB 7 French opens the French-Speaking stream (+significant advantage). <strong>Work:</strong> 1+ yr skilled work experience (TEER 0–3). <strong>Job offer</strong> from an Ontario employer unlocks the Employer Job Offer stream — no minimum CRS needed.`,
langNote:`<strong>Ontario:</strong> CLB 7 English minimum for most streams. CLB 7+ French qualifies you for the French-Speaking Skilled Worker stream — a major advantage for francophone applicants. Both IELTS/CELPIP and TEF scores accepted.`,
langColor:`rgba(59,110,165,0.1)`, langBorder:`rgba(59,110,165,0.3)`
},
BC:{
icon:`BC`, color:`rgba(45,122,79,0.08)`, border:`rgba(45,122,79,0.3)`, titleColor:`#2D7A4F`,
title:`BC PNP — What matters most`,
body:`<strong>Education:</strong> Relevant to your occupation. <strong>Language:</strong> CLB 4 minimum for most streams; CLB 7+ strongly preferred. <strong>Work:</strong> 2+ years directly related experience. <strong>Wage:</strong> Must meet or exceed BC's provincial median wage for your NOC. <strong>Job offer</strong> from a BC employer required for Skills Immigration stream.`,
langNote:`<strong>BC PNP:</strong> CLB 4 is the floor; CLB 7+ significantly strengthens your application. Your scores will be reviewed against BC's stream-specific language tables.`,
langColor:`rgba(45,122,79,0.08)`, langBorder:`rgba(45,122,79,0.3)`
},
AB:{
icon:`AB`, color:`rgba(200,148,74,0.08)`, border:`rgba(200,148,74,0.3)`, titleColor:`#8B5E1A`,
title:`Alberta AAIP — What matters most`,
body:`<strong>Opportunity Stream:</strong> Must be currently working in AB with a valid work permit AND a job offer. CLB 4 minimum. <strong>Express Entry Stream:</strong> Invitation-only — IRCC notifies eligible candidates from EE pool. <strong>Rural Renewal:</strong> Job offer in a rural AB community. <strong>Language:</strong> CLB 4–7 depending on stream.`,
langNote:`<strong>Alberta AAIP:</strong> CLB 4 minimum for Opportunity Stream; CLB 7 for Express Entry Stream. If you are applying from outside Alberta, Express Entry or Rural stream are the primary options.`,
langColor:`rgba(200,148,74,0.08)`, langBorder:`rgba(200,148,74,0.3)`
},
MB:{
icon:`MB`, color:`rgba(59,110,165,0.08)`, border:`rgba(59,110,165,0.25)`, titleColor:`#3B6EA5`,
title:`Manitoba MPNP — What matters most`,
body:`<strong>Connection required:</strong> A Manitoba job offer OR a close relative (PR/citizen) in MB is mandatory for overseas applicants. <strong>Education:</strong> Relevant post-secondary credential. <strong>Language:</strong> CLB 4 minimum; CLB 7+ preferred. <strong>Skilled Workers in MB</strong> stream requires you to be already working in Manitoba.`,
langNote:`<strong>Manitoba MPNP:</strong> CLB 4 is the minimum. Higher scores significantly increase your points total. Francophone applicants may also qualify for Canada's Francophone Immigration stream, which has separate language benchmarks.`,
langColor:`rgba(59,110,165,0.08)`, langBorder:`rgba(59,110,165,0.25)`
},
SK:{
icon:`SK`, color:`rgba(200,148,74,0.08)`, border:`rgba(200,148,74,0.25)`, titleColor:`#8B5E1A`,
title:`Saskatchewan SINP — What matters most`,
body:`<strong>Occupation match:</strong> Your occupation must appear on Saskatchewan's in-demand occupation list OR you need a SK job offer. <strong>Education:</strong> Credential relevant to your NOC. <strong>Language:</strong> CLB 4 minimum (CLB 6+ preferred). <strong>Express Entry:</strong> Requires active EE profile — SINP notifies candidates directly.`,
langNote:`<strong>Saskatchewan SINP:</strong> CLB 4 minimum for International Skilled Worker; CLB 6 preferred. Express Entry stream requires CLB 7+.`,
langColor:`rgba(200,148,74,0.08)`, langBorder:`rgba(200,148,74,0.25)`
},
NS:{
icon:`NS`, color:`rgba(45,122,79,0.08)`, border:`rgba(45,122,79,0.25)`, titleColor:`#2D7A4F`,
title:`Nova Scotia NSNP — What matters most`,
body:`<strong>Skilled Worker stream:</strong> Job offer from NS employer + 1 year related experience + CLB 4. <strong>Labour Market Priorities:</strong> Invitation only from EE pool. <strong>Physician stream:</strong> Job offer from NS Health Authority. <strong>Entrepreneur:</strong> Recent NS grad with viable business plan.`,
langNote:`<strong>Nova Scotia NSNP:</strong> CLB 4 minimum for Skilled Worker stream. CLB 5–7 for Labour Market stream. Healthcare professionals should note that NS has a dedicated physician stream with separate language requirements.`,
langColor:`rgba(45,122,79,0.08)`, langBorder:`rgba(45,122,79,0.25)`
},
NB:{
icon:`NB`, color:`rgba(59,110,165,0.08)`, border:`rgba(59,110,165,0.25)`, titleColor:`#3B6EA5`,
title:`New Brunswick NBPNP — What matters most`,
body:`<strong>Skilled Workers:</strong> Job offer from NB employer + genuine intent to settle in NB (this is strictly assessed). <strong>Express Entry Labour Market:</strong> Linked to EE pool. <strong>Entrepreneurial:</strong> CAD $500k net worth + 3 yrs management. <strong>Language:</strong> CLB 4–7 by stream. <strong>⚠️ Intent:</strong> NB will decline applicants seen as using NB as a gateway to other provinces.`,
langNote:`<strong>New Brunswick NBPNP:</strong> CLB 4 minimum. Francophone applicants have a significant advantage — NB is Canada's only officially bilingual province and actively recruits French speakers.`,
langColor:`rgba(59,110,165,0.08)`, langBorder:`rgba(59,110,165,0.25)`
},
PE:{
icon:`PE`, color:`rgba(200,148,74,0.08)`, border:`rgba(200,148,74,0.25)`, titleColor:`#8B5E1A`,
title:`PEI PNP — What matters most`,
body:`<strong>Labour Impact:</strong> Job offer from PEI employer. <strong>Critical Worker:</strong> Job offer + 6mths PEI work exp. <strong>International Graduate:</strong> Graduate from UPEI or Holland College + job offer. <strong>Express Entry:</strong> Linked to EE. <strong>Language:</strong> CLB 4–6 depending on stream.`,
langNote:`<strong>PEI PNP:</strong> CLB 4 minimum for most streams. CLB 6+ for Express Entry stream. PEI is a small province — demonstrate genuine community ties where possible.`,
langColor:`rgba(200,148,74,0.08)`, langBorder:`rgba(200,148,74,0.25)`
},
NL:{
icon:`NL`, color:`rgba(45,122,79,0.08)`, border:`rgba(45,122,79,0.25)`, titleColor:`#2D7A4F`,
title:`Newfoundland NLPNP — What matters most`,
body:`<strong>Skilled Worker:</strong> Job offer from NL employer + NOC TEER 0–3. <strong>International Graduate:</strong> Graduate from Memorial University or CNA — job offer preferred. <strong>Express Entry:</strong> Active EE profile required. <strong>Language:</strong> CLB 4 minimum; CLB 7 for Express Entry.`,
langNote:`<strong>Newfoundland NLPNP:</strong> CLB 4 minimum for Skilled Worker; CLB 7 for Express Entry Skilled Worker. NL actively recruits healthcare and trades workers.`,
langColor:`rgba(45,122,79,0.08)`, langBorder:`rgba(45,122,79,0.25)`
},
QC:{
icon:`QC`, color:`rgba(204,51,51,0.07)`, border:`rgba(204,51,51,0.3)`, titleColor:`#CC3333`,
title:`Quebec — Separate immigration system (QSWP)`,
body:`<strong>Quebec uses its own point grid</strong> — not CRS. Your profile below is still fully collected and Bibi will assess it against Quebec's criteria. <strong>French is critical</strong> — almost all Quebec streams require at least B2 French. <strong>Education</strong> maps to Quebec's "training factor" (0–26 pts). <strong>Job offer</strong> from a Quebec employer adds significant points. A <strong>CSQ (Certificat de Sélection du Québec)</strong> must be obtained before IRCC can process the PR application.`,
langNote:`<strong>Quebec QSWP:</strong> French proficiency is the single most important factor. NCLC 7+ (B2) is effectively the minimum. English adds bonus points. TEF Canada / TCF Canada are accepted for French; IELTS / CELPIP for English. Bibi will map your scores to Quebec's language grid.`,
langColor:`rgba(204,51,51,0.07)`, langBorder:`rgba(204,51,51,0.3)`
}
};
function applyPNPContext(province){
const isPNP = document.querySelector('input[name="pathway"]:checked')?.value === 'pnp';
// ── Step 2 banner ──
const banner = document.getElementById('pnp_context_banner');
const bannerInner = document.getElementById('pnp_banner_inner');
const bannerTitle = document.getElementById('pnp_banner_title');
const bannerBody = document.getElementById('pnp_banner_body');
const bannerIcon = document.getElementById('pnp_banner_icon');
if(banner){
if(isPNP && province && PNP_CTX[province]){
const ctx = PNP_CTX[province];
banner.style.display = 'block';
bannerInner.style.background = ctx.color;
bannerInner.style.borderColor = ctx.border;
bannerTitle.style.color = ctx.titleColor;
bannerTitle.textContent = ctx.title;
bannerBody.innerHTML = ctx.body;
bannerIcon.innerHTML = '<span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:#1a1a1a;flex-shrink:0"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="white"/></svg></span>';
} else if(isPNP && !province){
banner.style.display = 'block';
bannerInner.style.background = 'rgba(200,148,74,0.08)';
bannerInner.style.borderColor = 'rgba(200,148,74,0.3)';
bannerTitle.style.color = '#8B5E1A';
bannerTitle.textContent = ' Provincial Nominee — select your province in Step 1';
bannerBody.innerHTML = 'Once you select a province, province-specific criteria and requirements will appear here throughout the form.';
bannerIcon.textContent = '';
} else {
banner.style.display = 'none';
}
}
// ── Step 2 province work sections ──
const ws = document.getElementById('pnp_work_section');
if(ws){
ws.style.display = isPNP && province && province !== 'unsure' ? 'block' : 'none';
PNP_PROVINCES.forEach(p=>{
const el = document.getElementById('pnp_ws_'+p);
if(el) el.style.display = (isPNP && p === province) ? 'block' : 'none';
});
}
// ── Step 3 language banner ──
const lb = document.getElementById('pnp_lang_banner');
const lbi = document.getElementById('pnp_lang_banner_inner');
if(lb && lbi){
if(isPNP && province && PNP_CTX[province]){
const ctx = PNP_CTX[province];
lb.style.display = 'block';
lbi.style.background = ctx.langColor;
lbi.style.border = '1.5px solid '+ctx.langBorder;
lbi.innerHTML = ctx.langNote;
} else {
lb.style.display = 'none';
}
}
// ── Step 2 header subtitle update ──
const stepDesc = document.querySelector('#step-2 .step-desc');
if(stepDesc){
if(isPNP && province && PNP_CTX[province]){
const name = document.getElementById('f_pnp_province')?.options[document.getElementById('f_pnp_province')?.selectedIndex]?.text || 'Province';
stepDesc.textContent = name+' selected — province-specific criteria shown below alongside standard CRS factors.';
} else {
stepDesc.textContent = 'The two biggest CRS factors. If married, spouse details are captured here too.';
}
}
}
// ── WORK HISTORY ──
function toggleWorkHistory(who, val){
// Show work history for ALL work experience values (1yr, 2-3yrs, 4-5yrs, 5+) for both PA and spouse
const show = val && val !== '0';
document.getElementById('wh_'+who).style.display=show?'block':'none';
if(show && document.getElementById('jobs_'+who).children.length===0) addJob(who);
}
function addJob(who){
jobIdx[who]++;
const n=jobIdx[who];
const el=document.createElement('div');
el.className='job-card'; el.id='job_'+who+'_'+n;
el.innerHTML=`<div class="job-card-hdr"><span class="job-card-num">Position ${n}</span><button class="btn-remove-job" onclick="removeJob('${who}',${n})">✕</button></div>
<div class="field-row c3" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">Job Title</label><input type="text" id="jt_${who}_${n}" placeholder="e.g. Software Engineer"></div>
<div class="field-group"><label class="field-label">Employer<span class="fr-sub">Employeur</span></label><input type="text" id="je_${who}_${n}" placeholder="e.g. Société Générale"></div>
<div class="field-group"><label class="field-label">Country<span class="fr-sub">Pays</span></label><input type="text" id="jc_${who}_${n}" placeholder="e.g. Senegal, UAE"></div>
</div>
<div class="field-row c3" style="margin-bottom:10px">
<div class="field-group"><label class="field-label">From (month/year)<span class="fr-sub">De (mois/année)</span></label><input type="month" id="jf_${who}_${n}"></div>
<div class="field-group"><label class="field-label">To (month/year)<span class="fr-sub">À (mois/année)</span></label><input type="month" id="jto_${who}_${n}"></div>
<div class="field-group"><label class="field-label">Hours / week<span class="fr-sub">Heures / semaine</span></label>
<select id="jh_${who}_${n}"><option value="ft">Full-time (30+ hrs)</option><option value="pt">Part-time</option></select>
</div>
</div>
<div class="field-row c1" style="margin-bottom:0">
<div class="field-group"><label class="field-label">Brief description of duties<span class="fr-sub">Description brève des tâches</span></label>
<textarea id="jd_${who}_${n}" style="min-height:60px" placeholder="e.g. Led a team of 6 engineers developing core banking software. Managed architecture, delivery timelines and vendor relations…"></textarea>
<span class="field-hint">Helps Bibi verify TEER level — determines which years earn CRS points</span>
</div>
</div>`;
document.getElementById('jobs_'+who).appendChild(el);
}
function removeJob(who,n){const el=document.getElementById('job_'+who+'_'+n);if(el)el.remove();}
// ── LANGUAGE TESTS ──
function toggleEngTest(){
const v=document.getElementById('f_eng_test').value;
const show=v==='ielts'||v==='celpip';
document.getElementById('eng_bands_branch').style.display=show?'block':'none';
if(show) document.getElementById('eng_bands_hdr').textContent=v==='celpip'?'CELPIP Band Scores (by component)':'IELTS Band Scores (by component)';
}
function toggleFrTest(){
const taken=document.getElementById('f_fr_test').value;
// Only show band scores if a test has actually been taken
const show=taken==='tef'||taken==='tcf';
document.getElementById('fr_bands_branch').style.display=show?'block':'none';
if(show){
const h=taken==='tcf'?'TCF Canada Band Scores (by component)':'TEF Canada Band Scores (by component)';
document.getElementById('fr_bands_hdr').textContent=h;
}
}
function checkLapsed(lang){
const dateId=lang==='eng'?'f_eng_date':'f_fr_date';
const warnId=lang==='eng'?'eng_lapsed_warn':'fr_lapsed_warn';
const val=document.getElementById(dateId)?.value;
if(!val) return;
const d=new Date(val+'-01');
const cutoff=new Date(); cutoff.setFullYear(cutoff.getFullYear()-2);
document.getElementById(warnId).style.display=d<cutoff?'block':'none';
}
function checkBandGap(){
const ids=['f_eng_L','f_eng_R','f_eng_W','f_eng_S'];
const scores=ids.map(id=>parseFloat(document.getElementById(id)?.value)||0).filter(v=>v>0);
const gap=scores.length>=2?Math.max(...scores)-Math.min(...scores):0;
document.getElementById('eng_band_warn').style.display=gap>=1.0?'block':'none';
}
// ── FAMILY PROVINCE ──
function toggleFamProvince(){
const v=document.getElementById('f_fam_in_canada').value;
document.getElementById('fam_province_branch').style.display=(v==='sibling'||v==='other')?'block':'none';
}
// ── HEALTH/CRIMINAL ──
function toggleMedical(){const v=document.getElementById('f_medical').value;document.getElementById('medical_branch').style.display=(v==='yes'||v==='unsure')?'block':'none';}
function toggleCriminal(){const v=document.getElementById('f_criminal').value;document.getElementById('criminal_branch').style.display=(v==='yes'||v==='minor'||v==='unsure')?'block':'none';}
function toggleSource(){
const v=document.getElementById('f_source').value;
document.getElementById('referral_branch').style.display=v==='referral'?'block':'none';
document.getElementById('agent_branch').style.display=v==='agent'?'block':'none';
}
// ── FILE UPLOAD ──
function handleUpload(e,cat){
Array.from(e.target.files).forEach(f=>{
if(f.size>10*1024*1024){showToast('File too large (max 10MB)');return;}
uploads[cat].push(f.name);
const div=document.createElement('div');div.className='file-tag';
div.innerHTML=`<span style="font-size:11px;opacity:0.6">↗</span><span class="file-tag-name">${f.name}</span><span class="file-tag-size">${(f.size/1048576).toFixed(1)}MB</span>
<button class="file-tag-rm" onclick="removeUpload('${cat}','${f.name}',this)">✕</button>`;
document.getElementById('list_'+cat).appendChild(div);
});
if(e.target.files.length) showToast(e.target.files.length+' file(s) added');
}
function removeUpload(cat,name,btn){uploads[cat]=uploads[cat].filter(n=>n!==name);btn.closest('.file-tag').remove();}
// ── SCORE ──
function calcScore(){
// Score calculated silently — NOT displayed to applicant, used only in buildSummary()
// No DOM writes here — all score elements are hidden to prevent client disputes
}
// Score calculated at submit only — no live display
// ── SUCCESS SUMMARY ──
function buildSummary(){
const aM={'18-24':100,'25-29':110,'30-34':105,'35-39':99,'40-44':80,'45+':60};
const eM={'high-school':28,'1yr-diploma':84,'2yr-diploma':91,'bachelors':112,'two-plus':119,'masters-phd':135};
const wfM={'1':25,'2-3':50,'4-5':69,'5+':80};
const wcM={'1':40,'2-3':53,'4-5':64};
const engM={'none':0,'moderate':69,'strong':103,'excellent':124};
const frM={'none':0,'basic':0,'intermediate':15,'fluent':50};
const a=aM[document.getElementById('f_age')?.value]||0;
const e=eM[document.querySelector('input[name="edu"]:checked')?.value]||0;
const wf=wfM[document.getElementById('f_work_foreign')?.value]||0;
const wc=wcM[document.getElementById('f_work_canada')?.value]||0;
const jo=document.getElementById('f_job_offer')?.value==='teer1'?200:document.getElementById('f_job_offer')?.value==='other'?50:0;
const eng=engM[document.getElementById('f_eng_self')?.value]||0;
const fr=frM[document.getElementById('f_fr_self')?.value]||0;
const total=Math.min(a+e+wf+wc+jo+eng+fr,600);
const set=(id,v)=>{document.getElementById(id).textContent=v||'–';};
set('ss_age',a); set('ss_edu',e); set('ss_work',wf+wc||0); set('ss_job',jo||'–');
set('ss_eng',eng||'–'); set('ss_fr',fr||'–'); set('ss_total',total||'–');
}
// ── AUTOSAVE ──
function autoSave(){try{localStorage.setItem('cms_v2',JSON.stringify({...snap(),step,ts:Date.now(),v:2}));}catch(e){}}
function snap(){
return {
fname:g('f_fname'),lname:g('f_lname'),email:g('f_email'),phone:g('f_phone'),
country:g('f_country'),age:g('f_age'),marital:g('f_marital'),has_kids:g('f_has_kids'),
sp_name:g('f_sp_name'),sp_age:g('f_sp_age'),num_kids:g('f_num_kids'),
pathway:gr('pathway'),
pnp_province:g('f_pnp_province'),pnp_ties:g('f_pnp_ties'),pnp_reason:g('f_pnp_reason'),
pnp_ON_stream:g('f_pnp_ON_stream'),pnp_ON_ee:g('f_pnp_ON_ee'),
pnp_BC_stream:g('f_pnp_BC_stream'),pnp_BC_jo:g('f_pnp_BC_jo'),
pnp_AB_working:g('f_pnp_AB_working'),pnp_AB_stream:g('f_pnp_AB_stream'),
pnp_MB_ties:g('f_pnp_MB_ties'),pnp_MB_stream:g('f_pnp_MB_stream'),
pnp_SK_occ:g('f_pnp_SK_occ'),pnp_SK_stream:g('f_pnp_SK_stream'),
pnp_NS_jo:g('f_pnp_NS_jo'),pnp_NS_health:g('f_pnp_NS_health'),
pnp_NB_stream:g('f_pnp_NB_stream'),pnp_PE_stream:g('f_pnp_PE_stream'),
pnp_NL_stream:g('f_pnp_NL_stream'),pnp_QC_stream:g('f_pnp_QC_stream'),pnp_QC_french:g('f_pnp_QC_french'),
biz_stream:g('f_biz_stream'),biz_mgmt:g('f_biz_mgmt'),biz_networth:g('f_biz_networth'),
biz_invest:g('f_biz_invest'),biz_desc:g('f_biz_desc'),
study_status:g('f_study_status'),study_level:g('f_study_level'),study_field:g('f_study_field'),study_budget:g('f_study_budget'),
fam_role:g('f_fam_role'),fam_rel:g('f_fam_rel'),fam_status:g('f_fam_status'),fam_years:g('f_fam_years'),
edu:gr('edu'),field:g('f_field'),can_edu:g('f_can_edu'),
jo_employer:g('f_jo_employer'),jo_title:g('f_jo_title'),jo_noc:g('f_jo_noc'),jo_type:g('f_jo_type'),jo_lmia:g('f_jo_lmia'),jo_desc:g('f_jo_desc'),
work_foreign:g('f_work_foreign'),work_canada:g('f_work_canada'),job_offer:g('f_job_offer'),
sp_edu:gr('sp_edu'),sp_field:g('f_sp_field'),sp_can_edu:g('f_sp_can_edu'),
sp_work_foreign:g('f_sp_work_foreign'),sp_work_canada:g('f_sp_work_canada'),sp_coming:g('f_sp_coming'),
eng_test:g('f_eng_test'),eng_self:g('f_eng_self'),eng_date:g('f_eng_date'),eng_centre:g('f_eng_centre'),
eng_L:g('f_eng_L'),eng_R:g('f_eng_R'),eng_W:g('f_eng_W'),eng_S:g('f_eng_S'),
fr_self:g('f_fr_self'),fr_test:g('f_fr_test'),fr_date:g('f_fr_date'),fr_type:g('f_fr_type'),
fr_L:g('f_fr_L'),fr_R:g('f_fr_R'),fr_W:g('f_fr_W'),fr_S:g('f_fr_S'),
fam_in_canada:g('f_fam_in_canada'),fam_province:g('f_fam_province'),fam_city:g('f_fam_city'),studied_canada:g('f_studied_canada'),
funds:g('f_funds'),timeline:g('f_timeline'),province:g('f_province'),passport:g('f_passport'),
medical:g('f_medical'),med_type:g('f_med_type'),med_status:g('f_med_status'),med_notes:g('f_med_notes'),
criminal:g('f_criminal'),crim_type:g('f_crim_type'),crim_when:g('f_crim_when'),crim_country:g('f_crim_country'),crim_sentence:g('f_crim_sentence'),
notes:g('f_notes'),source:g('f_source'),ref_name:g('f_ref_name'),ref_rel:g('f_ref_rel'),
agent_name:g('f_agent_name'),agent_country:g('f_agent_country'),
};
}
function g(id){return document.getElementById(id)?.value||'';}
function gr(name){return document.querySelector(`input[name="${name}"]:checked`)?.value||'';}
function s(id,v){const el=document.getElementById(id);if(el&&v)el.value=v;}
function sr(name,v){const r=document.querySelector(`input[name="${name}"][value="${v}"]`);if(r)r.checked=true;}
// ── RESTORE ──
window.addEventListener('load',()=>{
const raw=localStorage.getItem('cms_v2');
if(!raw) return;
try{
const d=JSON.parse(raw);
// Clear any stale session saved before the navigation fix (v field missing = old broken save)
if(!d.v || d.v < 2){ localStorage.removeItem('cms_v2'); return; }
s('f_fname',d.fname);s('f_lname',d.lname);s('f_email',d.email);s('f_phone',d.phone);
s('f_country',d.country);s('f_age',d.age);
if(d.marital){s('f_marital',d.marital);toggleMarital();}
if(d.has_kids){s('f_has_kids',d.has_kids);toggleKids();}
if(d.num_kids) s('f_num_kids',d.num_kids);
s('f_sp_name',d.sp_name);s('f_sp_age',d.sp_age);
if(d.pathway){sr('pathway',d.pathway);togglePathway();}
if(d.pnp_province){s('f_pnp_province',d.pnp_province);togglePNPProvince();}
s('f_pnp_ties',d.pnp_ties);s('f_pnp_reason',d.pnp_reason);
s('f_pnp_ON_stream',d.pnp_ON_stream);s('f_pnp_ON_ee',d.pnp_ON_ee);
s('f_pnp_BC_stream',d.pnp_BC_stream);s('f_pnp_BC_jo',d.pnp_BC_jo);
s('f_pnp_AB_working',d.pnp_AB_working);s('f_pnp_AB_stream',d.pnp_AB_stream);
s('f_pnp_MB_ties',d.pnp_MB_ties);s('f_pnp_MB_stream',d.pnp_MB_stream);
s('f_pnp_SK_occ',d.pnp_SK_occ);s('f_pnp_SK_stream',d.pnp_SK_stream);
s('f_pnp_NS_jo',d.pnp_NS_jo);s('f_pnp_NS_health',d.pnp_NS_health);
s('f_pnp_NB_stream',d.pnp_NB_stream);s('f_pnp_PE_stream',d.pnp_PE_stream);
s('f_pnp_NL_stream',d.pnp_NL_stream);s('f_pnp_QC_stream',d.pnp_QC_stream);s('f_pnp_QC_french',d.pnp_QC_french);
s('f_pnp_ws_ON_ee',d.pnp_ws_ON_ee);s('f_pnp_ws_ON_occ',d.pnp_ws_ON_occ);s('f_pnp_ws_ON_employer',d.pnp_ws_ON_employer);
s('f_pnp_ws_BC_jo',d.pnp_ws_BC_jo);s('f_pnp_ws_BC_wage',d.pnp_ws_BC_wage);s('f_pnp_ws_BC_noc',d.pnp_ws_BC_noc);
s('f_pnp_ws_AB_status',d.pnp_ws_AB_status);s('f_pnp_ws_AB_jo',d.pnp_ws_AB_jo);s('f_pnp_ws_AB_rural',d.pnp_ws_AB_rural);
s('f_pnp_ws_MB_jo',d.pnp_ws_MB_jo);s('f_pnp_ws_MB_rel',d.pnp_ws_MB_rel);
s('f_pnp_ws_SK_occ',d.pnp_ws_SK_occ);s('f_pnp_ws_SK_jo',d.pnp_ws_SK_jo);
s('f_pnp_ws_NS_jo',d.pnp_ws_NS_jo);s('f_pnp_ws_NS_exp',d.pnp_ws_NS_exp);
s('f_pnp_ws_NB_jo',d.pnp_ws_NB_jo);s('f_pnp_ws_NB_intent',d.pnp_ws_NB_intent);
s('f_pnp_ws_PE_jo',d.pnp_ws_PE_jo);s('f_pnp_ws_PE_grad',d.pnp_ws_PE_grad);
s('f_pnp_ws_NL_jo',d.pnp_ws_NL_jo);s('f_pnp_ws_NL_grad',d.pnp_ws_NL_grad);
s('f_pnp_ws_QC_jo',d.pnp_ws_QC_jo);s('f_pnp_ws_QC_ties',d.pnp_ws_QC_ties);
s('f_biz_stream',d.biz_stream);s('f_biz_mgmt',d.biz_mgmt);s('f_biz_networth',d.biz_networth);
s('f_biz_invest',d.biz_invest);s('f_biz_desc',d.biz_desc);
s('f_study_status',d.study_status);s('f_study_level',d.study_level);
s('f_study_field',d.study_field);s('f_study_budget',d.study_budget);
s('f_fam_role',d.fam_role);s('f_fam_rel',d.fam_rel);s('f_fam_status',d.fam_status);s('f_fam_years',d.fam_years);
if(d.edu) sr('edu',d.edu);
s('f_field',d.field);s('f_can_edu',d.can_edu);
if(d.job_offer){s('f_job_offer',d.job_offer);toggleJobOffer();}s('f_jo_employer',d.jo_employer);s('f_jo_title',d.jo_title);s('f_jo_noc',d.jo_noc);s('f_jo_type',d.jo_type);s('f_jo_lmia',d.jo_lmia);s('f_jo_desc',d.jo_desc);
if(d.work_foreign){s('f_work_foreign',d.work_foreign);toggleWorkHistory('main',d.work_foreign);}
s('f_work_canada',d.work_canada);s('f_job_offer',d.job_offer);
if(d.sp_edu) sr('sp_edu',d.sp_edu);
s('f_sp_field',d.sp_field);s('f_sp_can_edu',d.sp_can_edu);
if(d.sp_work_foreign){s('f_sp_work_foreign',d.sp_work_foreign);toggleWorkHistory('spouse',d.sp_work_foreign);}
s('f_sp_work_canada',d.sp_work_canada);s('f_sp_coming',d.sp_coming);
if(d.eng_test){s('f_eng_test',d.eng_test);toggleEngTest();}
s('f_eng_self',d.eng_self);s('f_eng_date',d.eng_date);s('f_eng_centre',d.eng_centre);
s('f_eng_L',d.eng_L);s('f_eng_R',d.eng_R);s('f_eng_W',d.eng_W);s('f_eng_S',d.eng_S);
if(d.fr_self){s('f_fr_self',d.fr_self);toggleFrTest();}
if(d.fr_test){s('f_fr_test',d.fr_test);toggleFrTest();}
s('f_fr_date',d.fr_date);s('f_fr_type',d.fr_type);
s('f_fr_L',d.fr_L);s('f_fr_R',d.fr_R);s('f_fr_W',d.fr_W);s('f_fr_S',d.fr_S);
if(d.fam_in_canada){s('f_fam_in_canada',d.fam_in_canada);toggleFamProvince();}
s('f_fam_province',d.fam_province);s('f_fam_city',d.fam_city);s('f_studied_canada',d.studied_canada);
s('f_funds',d.funds);s('f_timeline',d.timeline);s('f_province',d.province);s('f_passport',d.passport);
if(d.medical){s('f_medical',d.medical);toggleMedical();}
s('f_med_type',d.med_type);s('f_med_status',d.med_status);s('f_med_notes',d.med_notes);
if(d.criminal){s('f_criminal',d.criminal);toggleCriminal();}
s('f_crim_type',d.crim_type);s('f_crim_when',d.crim_when);s('f_crim_country',d.crim_country);s('f_crim_sentence',d.crim_sentence);
s('f_notes',d.notes);
if(d.source){s('f_source',d.source);toggleSource();}
s('f_ref_name',d.ref_name);s('f_ref_rel',d.ref_rel);
s('f_agent_name',d.agent_name);s('f_agent_country',d.agent_country);
// Clear stale saves from older versions
['cms_crs_v','cms_crs_v2','cms_crs_lang'].forEach(k=>localStorage.removeItem(k));
if(d.step&&d.step>1&&d.step<=4){showToast('Welcome back! Progress restored');setTimeout(()=>goTo(d.step),700);}
}catch(e){}
});
// ── JOB OFFER BRANCH ──
function toggleJobOffer(){
const v=document.getElementById('f_job_offer')?.value;
document.getElementById('job_offer_branch').style.display=(v==='teer1'||v==='other')?'block':'none';
}
// ── HARD RESET (clears localStorage and reloads to step 1) ──
function hardReset(){
localStorage.removeItem('cms_v2');
// Reset all steps visually
for(let i=1;i<=4;i++){
const card=document.getElementById('step-'+i);
const ps=document.getElementById('ps-'+i);
if(card) card.classList.remove('active');
if(ps){ ps.classList.remove('active','completed'); }
}
step=1;
document.getElementById('step-1').classList.add('active');
document.getElementById('ps-1').classList.add('active');
document.getElementById('progressFill').style.width='12%';
showToast('Form reset — starting fresh');
}
// ── SAVE MODAL ──
function showSaveModal(){const e=g('f_email');if(e)document.getElementById('saveEmail').value=e;document.getElementById('saveModal').classList.add('open');}
function hideSaveModal(){document.getElementById('saveModal').classList.remove('open');}
function doSave(){
const email=document.getElementById('saveEmail').value;
if(!email){alert('Please enter your email.');return;}
const code='CMS-'+Math.random().toString(36).substr(2,4).toUpperCase();
document.getElementById('resumeCode').textContent=code;
document.getElementById('saveCodeWrap').style.display='block';
autoSave();showToast('Resume link sent to '+email);
setTimeout(hideSaveModal,3000);
}
function saveProgress(){autoSave();showToast('Progress saved');}
document.getElementById('saveModal').addEventListener('click',e=>{if(e.target===document.getElementById('saveModal'))hideSaveModal();});
// ── TOAST ──
function showToast(msg){const t=document.getElementById('toast');document.getElementById('toastTxt').textContent=msg;t.classList.add('show');setTimeout(()=>t.classList.remove('show'),3200);}
// ── SUBMIT ──
function submitForm(){
try { autoSave(); } catch(e){}
try { buildSummary(); } catch(e){}
// ── Hide current step, show success ──
for(let i=1;i<=4;i++){
const c=document.getElementById('step-'+i);
if(c){ c.classList.remove('active'); c.style.display='none'; }
}
try{ document.getElementById('saveBanner').style.display='none'; }catch(e){}
try{ document.getElementById('progressFill').style.width='100%'; }catch(e){}
for(let i=1;i<=4;i++){
document.getElementById('ps-'+i)?.classList.add('completed');
document.getElementById('ps-'+i)?.classList.remove('active');
}
// ── Show success screen ──
const successEl = document.getElementById('step-success');
if(successEl){
successEl.style.display='block';
successEl.style.visibility='visible';
successEl.style.opacity='1';
}
try{ localStorage.removeItem('cms_v2'); }catch(e){}
window.scrollTo({top:0, behavior:'smooth'});
// ── Collect form data ──
const g = id => { try{ return document.getElementById(id)?.value||''; }catch(e){return '';} };
let score='';
try{ score=calcCRS(); }catch(e){}
const emailData = {
to_email: 'info@canadamigrationservices.com',
to_name: 'Bibi R Maudhoo',
full_name: g('f_name') || 'Not provided',
email: g('f_email') || 'Not provided',
phone: g('f_phone') || 'Not provided',
whatsapp: g('f_whatsapp') || 'Not provided',
age: g('f_age') || 'Not provided',
nationality: g('f_nationality') || 'Not provided',
country_residence: g('f_country_residence') || 'Not provided',
marital: g('f_marital') || 'Not provided',
pathway: g('f_pathway') || 'Not provided',
crs_score: score || 'Calculated on review',
preferred_lang: g('f_lang') || 'Not provided',
education: g('f_education') || 'Not provided',
work_foreign: g('f_work_foreign') || 'None',
work_canada: g('f_work_canada') || 'None',
job_offer: g('f_job_offer') || 'No',
eng_test: g('f_eng_test') || 'Not provided',
fr_test: g('f_fr_test') || 'Not taken',
notes: g('f_notes') || 'None',
submission_date: new Date().toLocaleString('en-CA', {timeZone:'America/Toronto'}),
form_version: 'CMS CRS Form v4',
};
// ── Send email via EmailJS ──
try{
if(EMAILJS_PUBLIC_KEY && EMAILJS_PUBLIC_KEY !== 'YOUR_PUBLIC_KEY'){
emailjs.init(EMAILJS_PUBLIC_KEY);
emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, emailData)
.then(() => console.log('✅ Assessment email sent to info@canadamigrationservices.com'))
.catch(err => console.error('EmailJS error:', err));
}
}catch(e){ console.error('EmailJS setup error:',e); }
}
</script>
</body>
</html>