<style id="elementor-post-4110">.elementor-4110 .elementor-element.elementor-element-00f4daf{--display:flex;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-4110 .elementor-element.elementor-element-c75048a{width:100%;max-width:100%;}</style>{"id":4110,"date":"2026-09-07T08:02:48","date_gmt":"2026-09-07T08:02:48","guid":{"rendered":"https:\/\/azimilaw.ca\/es\/?page_id=4110"},"modified":"2026-09-07T08:04:02","modified_gmt":"2026-09-07T08:04:02","slug":"case-review","status":"publish","type":"page","link":"https:\/\/azimilaw.ca\/es\/case-review\/","title":{"rendered":"case-review"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4110\" class=\"elementor elementor-4110\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-00f4daf e-con-full e-flex e-con e-parent\" data-id=\"00f4daf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c75048a elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"c75048a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<meta charset=\"utf-8\">\n<title>Evaluaci\u00f3n de su Caso<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,500&family=DM+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n<style>\n  :root{\n    \/* Tokens below are pulled directly from azimilaw.ca's own :root (--navy, --gold, --border, etc.)\n       so this component inherits the site's real design system instead of a reinterpretation of it. *\/\n    --navy-950:#0b1d38;\n    --navy-800:#152e5c;\n    --navy-700:#1e3d6e;\n    --navy-line: rgba(255,255,255,0.14);\n    --cream-50:#faf8f4;\n    --cream-100:#f7f0e2;\n    --cream-200:#ddd5c0;\n    --gold-600:#b8933e;\n    --gold-500:#9a7a30;\n    --gold-300:#d4ad62;\n    --gold-tint:rgba(184,147,62,0.14);\n    --ink-900:#1a1a1a;\n    --ink-700:#3a3a3a;\n    --ink-500:#6a6a6a;\n    --ink-on-navy:#EDEAE1;\n    --ink-on-navy-dim:#B9BFCB;\n\n    --crit-600:#c0392b;\n    --crit-100:#fdecea;\n    --crit-line:#f0bcb5;\n    --warn-600:#a5680f;\n    --warn-100:#faf1de;\n    --warn-line:#e6cd9c;\n    --good-600:#1a7a4a;\n    --good-100:#e8f5ed;\n    --good-line:#a9d9bf;\n    --info-600:#3e5a85;\n    --info-100:#e4e9f1;\n    --info-line:#b7c4da;\n\n    \/* azimilaw.ca uses a per-component radius scale, not one global value:\n       buttons 3px, cards 8px, form inputs 10px, icon roundels a true circle. *\/\n    --radius-btn:3px;\n    --radius-lg:8px;\n    --radius-md:10px;\n    --radius-sm:8px;\n    --shadow-card: none;\n    --shadow-card-hover: 0 8px 32px rgba(0,0,0,0.1);\n    --shadow-panel: 0 16px 40px -18px rgba(11,29,56,0.45);\n  }\n\n  *{box-sizing:border-box;}\n  .case-tool, .case-tool *{ text-wrap:pretty; }\n  .case-tool svg{ width:1em; height:1em; flex:none; display:inline-block; vertical-align:-0.15em; }\n  .case-tool{\n    background:var(--cream-50);\n    color:var(--ink-900);\n    font-family:\"DM Sans\", ui-sans-serif, system-ui, sans-serif;\n    font-size:15.5px;\n    line-height:1.55;\n    max-width:1140px;\n    margin:0 auto;\n    padding:56px 24px 72px;\n  }\n  .case-tool h1, .case-tool h2, .case-tool h3{\n    font-family:\"Cormorant Garamond\", ui-serif, Georgia, serif;\n    font-weight:500;\n    color:var(--navy-950);\n    margin:0;\n    text-wrap:balance;\n  }\n  .case-tool .accent-italic{ font-style:italic; color:var(--gold-600); font-weight:500; }\n  .case-tool button{ font-family:inherit; }\n  .case-tool a{ text-decoration:none; }\n  .case-tool [hidden]{ display:none !important; }\n\n  \/* ---------- Header ---------- *\/\n  .ct-header{ text-align:center; max-width:680px; margin:0 auto 40px; }\n  .ct-eyebrow{\n    display:inline-flex; align-items:center; gap:8px;\n    border:1px solid var(--gold-600); color:var(--gold-600);\n    font-size:12px; letter-spacing:0.12em; text-transform:uppercase;\n    font-weight:500; padding:6px 14px; border-radius:5px; margin-bottom:18px;\n  }\n  .ct-eyebrow svg{ width:13px; height:13px; flex:none; }\n  .ct-header h2{ font-size:clamp(28px,4vw,38px); line-height:1.15; margin-bottom:14px; }\n  .ct-header p{ color:var(--ink-500); font-size:16px; margin:0; }\n\n  .ct-preselect-note{\n    max-width:680px; margin:28px auto 0; display:flex; align-items:center; gap:8px;\n    justify-content:center; background:var(--gold-tint); border:1px solid var(--gold-500);\n    border-radius:var(--radius-sm); padding:12px 18px; font-size:13.4px; color:var(--ink-700);\n  }\n  .ct-preselect-note svg{ width:15px; height:15px; color:var(--gold-600); flex:none; }\n  .ct-preselect-note strong{ color:var(--navy-950); }\n\n  \/* ---------- Consent gate ---------- *\/\n  .ct-consent{\n    max-width:680px; margin:32px auto 0; background:var(--cream-100); border:1px solid var(--cream-200);\n    border-radius:var(--radius-sm); padding:18px 20px;\n  }\n  .ct-consent-label{ display:flex; align-items:flex-start; gap:12px; cursor:pointer; }\n  .ct-consent-label input[type=\"checkbox\"]{\n    position:absolute; opacity:0; width:20px; height:20px; margin:0; cursor:pointer;\n  }\n  .ct-consent-mark{\n    flex:none; width:20px; height:20px; border-radius:5px; border:1.5px solid var(--ink-500);\n    background:#fff; display:flex; align-items:center; justify-content:center; margin-top:1px;\n  }\n  .ct-consent-mark svg{ width:12px; height:12px; color:#fff; opacity:0; }\n  .ct-consent-label input:checked ~ .ct-consent-mark{ background:var(--gold-600); border-color:var(--gold-600); }\n  .ct-consent-label input:checked ~ .ct-consent-mark svg{ opacity:1; }\n  .ct-consent-label input:focus-visible ~ .ct-consent-mark{ outline:2.5px solid var(--gold-600); outline-offset:2px; }\n  .ct-consent-text{ font-size:13.4px; line-height:1.55; color:var(--ink-700); }\n  .ct-consent-warning{\n    margin:12px 0 0; padding-top:12px; border-top:1px solid var(--cream-200);\n    font-size:13px; font-weight:600; color:var(--crit-600);\n  }\n\n  \/* ---------- Practice picker ---------- *\/\n  .ct-picker{\n    display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:24px;\n  }\n  .ct-picker.is-disabled{ opacity:0.5; }\n  .ct-picker.is-disabled .ct-pick-card{ cursor:not-allowed; }\n  .ct-picker.is-disabled .ct-pick-card:hover{ transform:none; border-color:var(--cream-200); box-shadow:none; }\n  .ct-pick-card{\n    text-align:left; background:#fff; border:1px solid var(--cream-200);\n    border-radius:var(--radius-lg); padding:22px 20px 20px;\n    cursor:pointer; box-shadow:var(--shadow-card);\n    transition:transform .15s ease, border-color .15s ease, box-shadow .15s ease;\n    display:flex; flex-direction:column; gap:10px;\n  }\n  .ct-pick-card:hover{ transform:translateY(-2px); border-color:var(--gold-500); box-shadow:var(--shadow-card-hover); }\n  .ct-pick-card:focus-visible{ outline:2.5px solid var(--gold-600); outline-offset:2px; }\n  .ct-pick-icon{\n    width:44px; height:44px; border-radius:50%; background:var(--cream-100);\n    display:flex; align-items:center; justify-content:center; color:var(--gold-600);\n  }\n  .ct-pick-icon svg{ width:19px; height:19px; }\n  .ct-pick-card h3{ font-size:19px; }\n  .ct-pick-card p{ margin:0; color:var(--ink-500); font-size:13.6px; line-height:1.5; }\n  .ct-pick-arrow{ margin-top:auto; display:flex; align-items:center; gap:6px; color:var(--navy-950); font-weight:600; font-size:13px; }\n  .ct-pick-arrow svg{ width:14px; height:14px; transition:transform .15s ease; }\n  .ct-pick-card:hover .ct-pick-arrow svg{ transform:translateX(3px); }\n\n  .ct-call-fallback{ text-align:center; color:var(--ink-700); font-size:14.5px; margin-top:26px; }\n  .ct-call-fallback a{ color:var(--gold-600); font-weight:600; display:inline-flex; align-items:center; gap:5px; }\n  .ct-call-fallback a:hover{ color:var(--navy-950); }\n  .ct-footnote{ text-align:center; color:var(--ink-500); font-size:12.5px; margin-top:14px; }\n  .ct-footnote svg{ width:12px; height:12px; vertical-align:-1.5px; margin-right:5px; }\n  .ct-legal-note svg, .ct-snapshot-foot svg{ margin-right:5px; vertical-align:-0.1em; }\n\n  \/* ---------- Console (question + snapshot) ---------- *\/\n  .ct-console{ display:grid; grid-template-columns:1fr 320px; gap:22px; align-items:start; }\n  .ct-back-link{\n    grid-column:1\/-1; display:inline-flex; align-items:center; gap:6px; width:fit-content;\n    background:none; border:none; color:var(--ink-500); font-size:13px; font-weight:600;\n    cursor:pointer; padding:4px 2px; margin-bottom:-4px;\n  }\n  .ct-back-link:hover{ color:var(--navy-950); }\n  .ct-back-link svg{ width:13px; height:13px; }\n\n  .ct-form-panel{\n    background:#fff; border:1px solid var(--cream-200); border-radius:var(--radius-lg);\n    padding:30px 30px 26px; box-shadow:var(--shadow-card);\n  }\n  .ct-progress-row{ display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }\n  .ct-progress-label{ font-size:11.5px; letter-spacing:.09em; text-transform:uppercase; color:var(--ink-500); font-weight:600; }\n  .ct-progress-track{ height:4px; background:var(--cream-200); border-radius:99px; overflow:hidden; margin-bottom:26px; }\n  .ct-progress-fill{ height:100%; background:linear-gradient(90deg,var(--gold-500),var(--gold-600)); border-radius:99px; transition:width .3s ease; }\n\n  .ct-step-kicker{ font-size:12px; font-weight:600; color:var(--gold-600); letter-spacing:.06em; text-transform:uppercase; margin-bottom:6px;}\n  .ct-step-q{ font-size:22px; margin-bottom:4px; }\n  .ct-step-hint{ color:var(--ink-500); font-size:13.4px; margin:6px 0 20px; }\n\n  .ct-options{ display:flex; flex-direction:column; gap:9px; margin-bottom:6px; }\n  .ct-option{\n    display:flex; align-items:flex-start; gap:11px; text-align:left;\n    border:1.5px solid var(--cream-200); border-radius:var(--radius-md);\n    padding:13px 15px; cursor:pointer; background:#fff;\n    transition:border-color .12s ease, background .12s ease;\n  }\n  .ct-option:hover{ border-color:var(--gold-500); background:var(--gold-tint); }\n  .ct-option:focus-visible{ outline:2.5px solid var(--gold-600); outline-offset:1px; }\n  .ct-option.is-selected{ border-color:var(--gold-600); background:var(--gold-tint); }\n  .ct-option-mark{\n    flex:none; width:17px; height:17px; border-radius:99px; border:1.5px solid var(--ink-500);\n    margin-top:2px; display:flex; align-items:center; justify-content:center;\n  }\n  .ct-option.checkbox-type .ct-option-mark{ border-radius:5px; }\n  .ct-option.is-selected .ct-option-mark{ border-color:var(--gold-600); background:var(--gold-600); }\n  .ct-option-mark svg{ width:10px; height:10px; color:#fff; opacity:0; }\n  .ct-option.is-selected .ct-option-mark svg{ opacity:1; }\n  .ct-option-text strong{ display:block; font-size:14.5px; font-weight:600; color:var(--ink-900); }\n  .ct-option-text span{ display:block; font-size:12.8px; color:var(--ink-500); margin-top:1px; }\n\n  .ct-field{ margin-bottom:18px; }\n  .ct-field label.ct-label{ display:block; font-size:13.4px; font-weight:600; color:var(--ink-700); margin-bottom:7px; }\n  .ct-input, .ct-textarea, .ct-select{\n    width:100%; height:48px; border:1px solid #ddd; border-radius:var(--radius-md);\n    padding:0 14px; font-family:inherit; font-size:15px; color:var(--ink-900); background:#fff;\n  }\n  .ct-input:focus, .ct-textarea:focus, .ct-select:focus{ outline:2.5px solid var(--gold-600); outline-offset:1px; border-color:var(--gold-600); }\n  .ct-textarea{ height:auto; resize:vertical; min-height:84px; padding:12px 14px; }\n  .ct-contact-grid{ display:grid; grid-template-columns:1fr 1fr; gap:14px 16px; margin-bottom:16px; }\n  .ct-contact-grid .full{ grid-column:1\/-1; }\n\n  \/* ---------- Verificaci\u00f3n de correo electr\u00f3nico ---------- *\/\n  .ct-verify{ max-width:640px; margin:0 auto; }\n  .ct-otp-input{ font-size:22px; letter-spacing:.35em; text-align:center; font-family:ui-monospace,\"SFMono-Regular\",Menlo,monospace; }\n  .ct-otp-error{ color:var(--crit-600); font-size:13px; font-weight:600; margin:-6px 0 4px; }\n  .ct-otp-resend{ background:none; border:none; color:var(--gold-600); font-weight:600; font-size:13px; cursor:pointer; padding:0; }\n  .ct-otp-resend:hover{ color:var(--navy-950); }\n  .ct-otp-resend:disabled{ opacity:.5; cursor:not-allowed; }\n\n  .ct-nav-row{ display:flex; align-items:center; justify-content:space-between; margin-top:26px; padding-top:20px; border-top:1px solid var(--cream-200); }\n  .ct-btn{\n    font-weight:500; font-size:14.4px; border-radius:var(--radius-btn); cursor:pointer; border:1.5px solid transparent;\n    padding:12px 24px; display:inline-flex; align-items:center; gap:8px; transition:background .2s ease, border-color .2s ease, transform .2s ease;\n  }\n  .ct-btn:active{ transform:translateY(1px); }\n  .ct-btn:disabled{ opacity:.4; cursor:not-allowed; }\n  .ct-btn-primary{ background:var(--gold-600); color:#fff; }\n  .ct-btn-primary:hover:not(:disabled){ background:var(--gold-500); transform:translateY(-1px); }\n  .ct-btn-ghost{ background:transparent; color:var(--ink-700); border-color:var(--cream-200); }\n  .ct-btn-ghost:hover{ border-color:var(--ink-500); }\n  .ct-btn svg{ width:14px; height:14px; }\n  .ct-req-note{ font-size:12px; color:var(--ink-500); }\n\n  \/* ---------- Snapshot sidebar ---------- *\/\n  .ct-snapshot{\n    position:sticky; top:20px; background:var(--navy-950); color:var(--ink-on-navy);\n    border-radius:var(--radius-lg); padding:24px 22px; box-shadow:var(--shadow-panel);\n    background-image: radial-gradient(circle at 100% 0%, var(--navy-700), transparent 55%);\n  }\n  .ct-snapshot-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }\n  .ct-snapshot-title{ font-size:11px; letter-spacing:.1em; text-transform:uppercase; font-weight:700; color:var(--gold-300); }\n  .ct-tier-caption{ font-size:11.5px; line-height:1.5; color:var(--ink-on-navy-dim); margin:0 0 16px; }\n  .ct-banner-note{ font-style:italic; opacity:0.85; margin-top:8px !important; }\n  .ct-tier-chip{\n    font-size:11px; font-weight:700; letter-spacing:.03em; padding:4px 10px; border-radius:5px;\n    display:inline-flex; align-items:center; gap:5px;\n  }\n  .ct-tier-chip svg{ width:10px; height:10px; }\n  .ct-tier-chip.tier-critical{ background:var(--crit-100); color:var(--crit-600); }\n  .ct-tier-chip.tier-urgent{ background:var(--warn-100); color:var(--warn-600); }\n  .ct-tier-chip.tier-strong{ background:var(--good-100); color:var(--good-600); }\n  .ct-tier-chip.tier-standard{ background:var(--info-100); color:var(--info-600); }\n  .ct-tier-chip.tier-pending{ background:rgba(255,255,255,0.12); color:var(--ink-on-navy-dim); }\n\n  .ct-deadline-box{\n    background:rgba(255,255,255,0.06); border:1px solid var(--navy-line); border-radius:var(--radius-md);\n    padding:14px 15px; margin-bottom:16px;\n  }\n  .ct-deadline-box .dl-label{ font-size:11.5px; color:var(--ink-on-navy-dim); text-transform:uppercase; letter-spacing:.05em; font-weight:600; margin-bottom:6px; }\n  .ct-deadline-box .dl-value{ font-family:\"DM Sans\"; font-variant-numeric:tabular-nums; font-size:26px; font-weight:700; color:#fff; line-height:1; }\n  .ct-deadline-box .dl-value small{ font-size:13px; font-weight:500; color:var(--ink-on-navy-dim); margin-left:5px; }\n  .ct-deadline-box .dl-sub{ font-size:12.4px; color:var(--ink-on-navy-dim); margin-top:6px; line-height:1.5; }\n\n  .ct-snapshot-empty{ font-size:13px; color:var(--ink-on-navy-dim); line-height:1.6; }\n  .ct-facts{ list-style:none; margin:0 0 6px; padding:0; display:flex; flex-direction:column; gap:9px; }\n  .ct-facts li{ font-size:13px; display:flex; gap:8px; align-items:flex-start; color:var(--ink-on-navy-dim); line-height:1.45; }\n  .ct-facts li svg{ width:13px; height:13px; flex:none; margin-top:2px; color:var(--gold-300); }\n  .ct-facts li b{ color:#fff; font-weight:600; }\n\n  .ct-snapshot-foot{ margin-top:18px; padding-top:16px; border-top:1px solid var(--navy-line); font-size:11.6px; color:var(--ink-on-navy-dim); line-height:1.55; }\n\n  \/* ---------- Results ---------- *\/\n  .ct-results{ }\n  .ct-banner{\n    border-radius:var(--radius-lg); padding:28px 30px; margin-bottom:22px; border:1px solid;\n    display:flex; gap:18px; align-items:flex-start;\n  }\n  .ct-banner.tier-critical{ background:var(--crit-100); border-color:var(--crit-line); }\n  .ct-banner.tier-urgent{ background:var(--warn-100); border-color:var(--warn-line); }\n  .ct-banner.tier-strong{ background:var(--good-100); border-color:var(--good-line); }\n  .ct-banner.tier-standard{ background:var(--info-100); border-color:var(--info-line); }\n  .ct-banner-icon{ flex:none; width:44px; height:44px; border-radius:99px; display:flex; align-items:center; justify-content:center; background:#fff; }\n  .ct-banner.tier-critical .ct-banner-icon{ color:var(--crit-600); }\n  .ct-banner.tier-urgent .ct-banner-icon{ color:var(--warn-600); }\n  .ct-banner.tier-strong .ct-banner-icon{ color:var(--good-600); }\n  .ct-banner.tier-standard .ct-banner-icon{ color:var(--info-600); }\n  .ct-banner-icon svg{ width:22px; height:22px; }\n  .ct-banner-label{ font-size:11.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; margin-bottom:5px; }\n  .ct-banner.tier-critical .ct-banner-label{ color:var(--crit-600); }\n  .ct-banner.tier-urgent .ct-banner-label{ color:var(--warn-600); }\n  .ct-banner.tier-strong .ct-banner-label{ color:var(--good-600); }\n  .ct-banner.tier-standard .ct-banner-label{ color:var(--info-600); }\n  .ct-banner h2{ font-size:24px; margin-bottom:6px; }\n  .ct-banner p{ margin:0; color:var(--ink-700); font-size:14.5px; }\n\n  .ct-results-grid{ display:grid; grid-template-columns:1.3fr 1fr; gap:20px; align-items:start; }\n  .ct-card{ background:#fff; border:1px solid var(--cream-200); border-radius:var(--radius-lg); padding:24px 26px; box-shadow:var(--shadow-card); }\n  .ct-card h3{ font-size:16px; margin-bottom:14px; display:flex; align-items:center; gap:8px; }\n  .ct-card h3 svg{ width:16px; height:16px; color:var(--gold-600); }\n  .ct-rationale{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:12px; }\n  .ct-rationale li{ display:flex; gap:10px; font-size:14px; line-height:1.55; color:var(--ink-700); }\n  .ct-rationale li svg{ width:15px; height:15px; flex:none; margin-top:3px; color:var(--good-600); }\n  .ct-rationale li.warn svg{ color:var(--warn-600); }\n  .ct-rationale li.crit svg{ color:var(--crit-600); }\n\n  .ct-summary-list{ list-style:none; margin:0; padding:0; font-size:13.4px; }\n  .ct-summary-list li{ display:flex; justify-content:space-between; gap:14px; padding:9px 0; border-bottom:1px solid var(--cream-100); }\n  .ct-summary-list li:last-child{ border-bottom:none; }\n  .ct-summary-list .k{ color:var(--ink-500); flex:none; width:44%; }\n  .ct-summary-list .v{ color:var(--ink-900); font-weight:600; text-align:right; }\n\n  .ct-cta-row{ display:flex; flex-direction:column; gap:9px; margin-top:18px; }\n  .ct-cta-btn{\n    display:flex; align-items:center; justify-content:center; gap:9px; width:100%;\n    padding:13px 16px; border-radius:var(--radius-btn); font-weight:500; font-size:14.4px; cursor:pointer; border:1.5px solid transparent;\n    transition:background .2s ease, transform .2s ease;\n  }\n  .ct-cta-btn:hover{ transform:translateY(-1px); }\n  .ct-cta-btn svg{ width:16px; height:16px; }\n  .ct-cta-call{ background:var(--gold-600); color:#fff; }\n  .ct-cta-call:hover{ background:var(--gold-500); }\n  .ct-cta-email{ background:var(--navy-950); color:#fff; }\n  .ct-cta-email:hover{ background:var(--navy-700); }\n  .ct-cta-secondary{ display:flex; gap:9px; }\n  .ct-cta-secondary button{ flex:1; background:#fff; border-color:var(--cream-200); color:var(--ink-700); font-weight:500; font-size:13px; padding:10px; border-radius:var(--radius-btn); }\n  .ct-cta-secondary button:hover{ border-color:var(--ink-500); }\n  .ct-copy-flash{ font-size:12px; color:var(--good-600); font-weight:600; text-align:center; margin-top:2px; }\n\n  .ct-restart{ text-align:center; margin-top:28px; }\n  .ct-restart button{ background:none; border:none; color:var(--ink-500); font-size:13px; font-weight:600; cursor:pointer; text-decoration:underline; text-underline-offset:3px; }\n  .ct-restart button:hover{ color:var(--navy-950); }\n\n  .ct-legal-note{ font-size:12px; color:var(--ink-500); line-height:1.6; margin-top:20px; padding-top:18px; border-top:1px solid var(--cream-200); }\n  .ct-legal-note-head{ font-weight:600; color:var(--ink-700); margin:0 0 8px; }\n  .ct-legal-note-intro{ margin:0 0 12px; }\n  .ct-legal-note ul{ margin:0; padding-left:18px; display:flex; flex-direction:column; gap:7px; }\n  .ct-legal-note li{ padding-left:2px; }\n  .ct-legal-note strong{ color:var(--ink-700); font-weight:600; }\n\n  @media (max-width:860px){\n    .ct-picker{ grid-template-columns:1fr; }\n    .ct-console{ grid-template-columns:1fr; }\n    .ct-snapshot{ position:static; order:-1; }\n    .ct-results-grid{ grid-template-columns:1fr; }\n    .ct-contact-grid{ grid-template-columns:1fr; }\n    .case-tool{ padding:36px 16px 56px; }\n    .ct-form-panel{ padding:22px 18px 20px; }\n    .ct-banner{ flex-direction:column; }\n  }\n\n  @media (prefers-reduced-motion: reduce){\n    .case-tool *{ transition:none !important; animation:none !important; }\n  }\n<\/style>\n\n<div class=\"case-tool\" id=\"caseTool\"><\/div>\n<noscript>\n  <div class=\"case-tool\">\n    <div class=\"ct-header\">\n      <h2 style=\"font-family:'Cormorant Garamond',serif; font-weight:500; color:#0b1d38; font-size:32px;\">\u00bfNo est\u00e1 seguro de qu\u00e9 hacer a continuaci\u00f3n? Obtenga un pr\u00f3ximo paso claro.<\/h2>\n      <p>Azimi Law ayuda a clientes de Ontario en asuntos de Lesiones Personales, Litigios de Inmigraci\u00f3n y Litigios Civiles. Habilite JavaScript para usar nuestra herramienta interactiva de evaluaci\u00f3n de caso, o cont\u00e1ctenos directamente:<\/p>\n    <\/div>\n    <ul style=\"max-width:640px; margin:24px auto; padding:0; list-style:none;\">\n      <li style=\"padding:12px 0; border-bottom:1px solid #ddd5c0;\"><strong>Lesiones Personales<\/strong> \u2014 accidentes automovil\u00edsticos, resbalones y ca\u00eddas, muerte injusta, y beneficios de seguro o discapacidad denegados.<\/li>\n      <li style=\"padding:12px 0; border-bottom:1px solid #ddd5c0;\"><strong>Litigios de Inmigraci\u00f3n<\/strong> \u2014 rechazos, expulsiones, detenci\u00f3n, inadmisibilidad, demoras injustificadas (mandamus), y apelaciones ante la IRB o la Corte Federal (Federal Court).<\/li>\n      <li style=\"padding:12px 0;\"><strong>Litigios Civiles<\/strong> \u2014 disputas contractuales, de propiedad, comerciales y de difamaci\u00f3n.<\/li>\n    <\/ul>\n    <p style=\"text-align:center;\"><a href=\"tel:+14169004128\" style=\"color:#b8933e; font-weight:600;\">Llame al 416-900-4128<\/a> o <a href=\"mailto:info@azimilaw.ca\" style=\"color:#b8933e; font-weight:600;\">env\u00ede un correo a info@azimilaw.ca<\/a><\/p>\n    <p style=\"text-align:center; font-size:12.5px; color:#6a6a6a;\">Los abogados de Azimi Law est\u00e1n autorizados por el Colegio de Abogados de Ontario (Law Society of Ontario). Las consultas son gratuitas para asuntos de Lesiones Personales; los asuntos de Litigios de Inmigraci\u00f3n y Litigios Civiles generalmente se manejan con honorarios fijos o un retainer \u2014 pregunte al llamar.<\/p>\n  <\/div>\n<\/noscript>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"ItemList\",\n  \"name\": \"Servicios Legales \u2014 Azimi Law\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"Service\",\n      \"position\": 1,\n      \"name\": \"Derecho de Lesiones Personales\",\n      \"description\": \"Accidentes automovil\u00edsticos, resbalones y ca\u00eddas, muerte injusta, y reclamos de beneficios de seguro o discapacidad denegados en Ontario.\",\n      \"provider\": { \"@type\": \"LegalService\", \"name\": \"Azimi Law\", \"url\": \"https:\/\/azimilaw.ca\", \"telephone\": \"+1-416-900-4128\" },\n      \"areaServed\": { \"@type\": \"State\", \"name\": \"Ontario\" }\n    },\n    {\n      \"@type\": \"Service\",\n      \"position\": 2,\n      \"name\": \"Litigios de Inmigraci\u00f3n\",\n      \"description\": \"Rechazos, expulsiones, detenci\u00f3n, determinaciones de inadmisibilidad, demoras injustificadas (mandamus), y apelaciones ante la IRB o la Corte Federal (Federal Court) de Canad\u00e1.\",\n      \"provider\": { \"@type\": \"LegalService\", \"name\": \"Azimi Law\", \"url\": \"https:\/\/azimilaw.ca\", \"telephone\": \"+1-416-900-4128\" },\n      \"areaServed\": { \"@type\": \"Country\", \"name\": \"Canada\" }\n    },\n    {\n      \"@type\": \"Service\",\n      \"position\": 3,\n      \"name\": \"Litigios Civiles\",\n      \"description\": \"Disputas contractuales, de propiedad, comerciales y de difamaci\u00f3n en Ontario.\",\n      \"provider\": { \"@type\": \"LegalService\", \"name\": \"Azimi Law\", \"url\": \"https:\/\/azimilaw.ca\", \"telephone\": \"+1-416-900-4128\" },\n      \"areaServed\": { \"@type\": \"State\", \"name\": \"Ontario\" }\n    }\n  ]\n}\n<\/script>\n\n<script>\n(function(){\n  \"use strict\";\n\n  \/* ============ ICONS ============ *\/\n  const I = {\n    shield:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z\"\/><\/svg>',\n    car:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 17h14M5 17a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm14 0a2 2 0 1 0 4 0 2 2 0 0 0-4 0ZM3 17V11l2-5h14l2 5v6\"\/><path d=\"M5 11h14\"\/><\/svg>',\n    globe:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18Z\"\/><\/svg>',\n    scale:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3v18M5 8l-3 6a4 4 0 0 0 6 0l-3-6Zm14 0l-3 6a4 4 0 0 0 6 0l-3-6ZM5 8h14M8 21h8\"\/><\/svg>',\n    arrow:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>',\n    back:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M19 12H5M11 6l-6 6 6 6\"\/><\/svg>',\n    check:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg>',\n    lock:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\/><path d=\"M8 10V7a4 4 0 0 1 8 0v3\"\/><\/svg>',\n    alert:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 9v4M12 17h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\"\/><\/svg>',\n    clock:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 3\"\/><\/svg>',\n    dot:'<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><circle cx=\"12\" cy=\"12\" r=\"5\"\/><\/svg>',\n    phone:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1.9.3 1.9.6 2.7a2 2 0 0 1-.4 2.1L8.1 9.7a16 16 0 0 0 6.2 6.2l1.2-1.2a2 2 0 0 1 2.1-.4c.9.3 1.8.5 2.7.6a2 2 0 0 1 1.7 2Z\"\/><\/svg>',\n    mail:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"\/><path d=\"m2 7 10 6 10-6\"\/><\/svg>',\n    copy:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>',\n    print:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9V2h12v7M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"\/><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"\/><\/svg>',\n    doc:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\"\/><path d=\"M14 2v6h6M9 13h6M9 17h6\"\/><\/svg>'\n  };\n\n  \/* ============ HELPERS ============ *\/\n  function todayISO(){ const d=new Date(); d.setHours(0,0,0,0); return d.toISOString().slice(0,10); }\n  function daysBetween(fromISO, toDate){\n    if(!fromISO) return null;\n    const a = new Date(fromISO+'T00:00:00');\n    const b = toDate || new Date();\n    return Math.round((b.setHours(0,0,0,0), b - a)\/86400000);\n  }\n  function fmtDate(iso){\n    if(!iso) return '\u2014';\n    const d = new Date(iso+'T00:00:00');\n    return d.toLocaleDateString('es-CA', {year:'numeric', month:'short', day:'numeric'});\n  }\n  function esc(s){ return String(s==null?'':s).replace(\/[&<>\"']\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c])); }\n  function el(html){ const t=document.createElement('template'); t.innerHTML=html.trim(); return t.content.firstElementChild; }\n\n  \/* ============ PRACTICE + SUBTYPE CONFIG ============ *\/\n  const PRACTICES = [\n    { id:'pi', icon:'shield', title:'Lesiones Personales', blurb:'Accidentes automovil\u00edsticos, ca\u00eddas, y beneficios de seguro o discapacidad denegados.' },\n    { id:'imm', icon:'globe', title:'Litigios de Inmigraci\u00f3n', blurb:'Rechazos, expulsiones, detenci\u00f3n, demoras injustificadas, y apelaciones ante la IRB o la Corte Federal (Federal Court).' },\n    { id:'civil', icon:'scale', title:'Litigios Civiles', blurb:'Disputas contractuales, de propiedad, comerciales y de difamaci\u00f3n \u2014 incluyendo reclamos en su contra.' }\n  ];\n\n  const SUBTYPES = {\n    pi: [\n      { id:'car', title:'Accidente automovil\u00edstico', blurb:'Como conductor, pasajero, peat\u00f3n o ciclista' },\n      { id:'fall', title:'Resbal\u00f3n, tropiezo o ca\u00edda', blurb:'En la propiedad de otra persona, una acera, o en condiciones invernales' },\n      { id:'benefits-denied', title:'Beneficios de seguro o discapacidad denegados', blurb:'Beneficios por accidente, discapacidad a largo plazo, o CPP-D' },\n      { id:'wrongful-death', title:'P\u00e9rdida de un familiar', blurb:'Un reclamo por muerte injusta en nombre de la familia o del patrimonio' },\n      { id:'other', title:'Otra lesi\u00f3n o accidente', blurb:'Algo que no aparece en la lista anterior' }\n    ],\n    imm: [\n      { id:'detained', title:'Actualmente detenido', blurb:'Por la CBSA o la IRCC \u2014 urgente por tiempo' },\n      { id:'removal', title:'Orden de expulsi\u00f3n o deportaci\u00f3n', blurb:'Se ha emitido una orden, o hay una fecha de expulsi\u00f3n fijada' },\n      { id:'inadmissibility', title:'Determinaci\u00f3n de inadmisibilidad', blurb:'Un informe, audiencia, u orden de expulsi\u00f3n basada en criminalidad, tergiversaci\u00f3n, u otros motivos similares' },\n      { id:'refusal', title:'Visa, permiso o estatus rechazado', blurb:'Estudios, trabajo, visitante, residencia permanente, o ciudadan\u00eda' },\n      { id:'delayed', title:'Solicitud tarda demasiado', blurb:'IRCC ha excedido significativamente su tiempo de procesamiento publicado y usted quiere forzar una decisi\u00f3n (mandamus)' },\n      { id:'sponsorship', title:'Patrocinio rechazado', blurb:'C\u00f3nyuge\/pareja, padre\/madre, o hijo dependiente' },\n      { id:'refugee', title:'Asunto de refugiado o asilo', blurb:'Reclamo pendiente, decisi\u00f3n de la RPD\/RAD, o Corte Federal (Federal Court)' },\n      { id:'appealing', title:'Ya estoy apelando, necesito ayuda', blurb:'Tiene un asunto en curso ante la IAD, la RAD, o la Corte Federal (Federal Court)' },\n      { id:'other-imm', title:'Otro asunto de inmigraci\u00f3n', blurb:'Algo que no aparece en la lista anterior' }\n    ],\n    civil: [\n      { id:'served', title:'Me han notificado una demanda', blurb:'Alguien lo est\u00e1 demandando \u2014 esto es urgente por tiempo' },\n      { id:'contract', title:'Disputa contractual', blurb:'Un acuerdo, factura, o contrato que sali\u00f3 mal' },\n      { id:'property', title:'Disputa de propiedad o arrendamiento', blurb:'Asunto entre propietario\/inquilino, bienes ra\u00edces, o de l\u00edmites de terreno' },\n      { id:'defamation', title:'Difamaci\u00f3n', blurb:'Se dijo o public\u00f3 algo falso y perjudicial sobre usted' },\n      { id:'business', title:'Disputa comercial o de sociedad', blurb:'Entre copropietarios, socios, o una relaci\u00f3n comercial' },\n      { id:'other-civil', title:'Otro asunto civil', blurb:'Algo que no aparece en la lista anterior' }\n    ]\n  };\n\n  const YESNO = [ {v:'yes', l:'S\u00ed'}, {v:'no', l:'No'} ];\n  const YESNOUNSURE = [ {v:'yes', l:'S\u00ed'}, {v:'no', l:'No'}, {v:'unsure', l:'No estoy seguro'} ];\n\n  const INJURY_OPTIONS = [\n    {v:'fracture', l:'Hueso roto o fractura'},\n    {v:'head-tbi', l:'Lesi\u00f3n en la cabeza o conmoci\u00f3n cerebral'},\n    {v:'spinal', l:'Lesi\u00f3n de columna o espalda'},\n    {v:'surgery', l:'Requiri\u00f3 cirug\u00eda'},\n    {v:'psych', l:'Impacto psicol\u00f3gico (ansiedad, TEPT, etc.)'},\n    {v:'soft-tissue', l:'Solo tejido blando (esguince, latigazo cervical, moretones)'},\n    {v:'none-yet', l:'Sin diagn\u00f3stico todav\u00eda \/ a\u00fan en evaluaci\u00f3n'}\n  ];\n  const TREATMENT_OPTIONS = [\n    {v:'none', l:'Sin tratamiento todav\u00eda'},\n    {v:'er-walkin', l:'Solo sala de emergencias o cl\u00ednica sin cita'},\n    {v:'ongoing', l:'Fisioterapia o atenci\u00f3n quiropr\u00e1ctica continua'},\n    {v:'specialist', l:'Referido a un especialista'},\n    {v:'hospitalized', l:'Hospitalizado'}\n  ];\n  const WORK_OPTIONS = [\n    {v:'none', l:'Sin tiempo perdido'},\n    {v:'some-days', l:'Unos pocos d\u00edas perdidos'},\n    {v:'weeks-plus', l:'Semanas o m\u00e1s perdidas'},\n    {v:'unable', l:'Incapaz de regresar al trabajo'}\n  ];\n\n  function step(id, opts){ return Object.assign({id}, opts); }\n\n  const CONTACT_STEP = step('contact', {\n    type:'contact',\n    kicker:'\u00daltimo paso',\n    q:'\u00bfC\u00f3mo debemos contactarlo?',\n    hint:'Solo usaremos esto para dar seguimiento a su situaci\u00f3n. Una vez que verifique su correo electr\u00f3nico, esto se env\u00eda directamente a Azimi Law junto con su resumen, para que un miembro del equipo pueda contactarlo \u2014 incluso si usted no llama, env\u00eda un correo, o copia la informaci\u00f3n. Proporcionar esta informaci\u00f3n no crea una relaci\u00f3n abogado-cliente con Azimi Law.'\n  });\n\n  const FLOWS = {\n    \/* ---------------- PERSONAL INJURY ---------------- *\/\n    car: [\n      step('role', {type:'radio', kicker:'Accidente automovil\u00edstico', q:'\u00bfCu\u00e1l fue su rol en el accidente?', options:[\n        {v:'driver', l:'Conductor'}, {v:'passenger', l:'Pasajero'}, {v:'pedestrian', l:'Peat\u00f3n'}, {v:'cyclist', l:'Ciclista'}\n      ]}),\n      step('accidentDate', {type:'date', kicker:'Accidente automovil\u00edstico', q:'\u00bfEn qu\u00e9 fecha ocurri\u00f3 el accidente?', max:true}),\n      step('policeReportFiled', {type:'radio', q:'\u00bfSe present\u00f3 un informe policial?', options:YESNOUNSURE}),\n      step('faultStatus', {type:'radio', q:'Seg\u00fan lo que usted sabe, \u00bfqui\u00e9n tuvo la culpa?', options:[\n        {v:'not-at-fault', l:'El otro conductor (yo no tuve la culpa)'}, {v:'partial', l:'La culpa puede ser compartida'}, {v:'unsure', l:'No estoy seguro'}, {v:'at-fault', l:'Yo tuve la culpa'}\n      ]}),\n      step('injuryList', {type:'checkbox', q:'\u00bfQu\u00e9 lesiones sufri\u00f3? Seleccione todas las que apliquen.', options:INJURY_OPTIONS}),\n      step('treatmentLevel', {type:'radio', q:'\u00bfQu\u00e9 tratamiento m\u00e9dico ha recibido?', options:TREATMENT_OPTIONS}),\n      step('missedWork', {type:'radio', q:'\u00bfEsto ha afectado su capacidad para trabajar?', options:WORK_OPTIONS}),\n      step('filedOCF1', {type:'radio', q:'\u00bfHa presentado una solicitud de Beneficios por Accidente (OCF-1) a una aseguradora?', hint:'Esto es independiente de un reclamo por culpa \u2014 aplica incluso si usted no tuvo la culpa.', options:YESNOUNSURE.concat([{v:'no-info', l:'No s\u00e9 qu\u00e9 es eso'}])}),\n      step('hasLawyer', {type:'radio', q:'\u00bfYa tiene un abogado para este accidente?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    fall: [\n      step('fallLocation', {type:'radio', kicker:'Resbal\u00f3n, tropiezo o ca\u00edda', q:'\u00bfD\u00f3nde ocurri\u00f3 la ca\u00edda?', options:[\n        {v:'private-business', l:'Propiedad privada o un negocio (tienda, restaurante, arrendador)'},\n        {v:'municipal', l:'Una acera o calle p\u00fablica'},\n        {v:'winter-ice', l:'Superficie helada o cubierta de nieve \u2014 ubicaci\u00f3n no clara'},\n        {v:'not-sure', l:'No estoy seguro'}\n      ]}),\n      step('fallDate', {type:'date', kicker:'Resbal\u00f3n, tropiezo o ca\u00edda', q:'\u00bfEn qu\u00e9 fecha ocurri\u00f3 la ca\u00edda?'}),\n      step('hazardReported', {type:'radio', q:'\u00bfSe report\u00f3 el peligro al propietario, gerente, o municipio?', options:YESNOUNSURE}),\n      step('injuryList', {type:'checkbox', q:'\u00bfQu\u00e9 lesiones sufri\u00f3? Seleccione todas las que apliquen.', options:INJURY_OPTIONS}),\n      step('treatmentLevel', {type:'radio', q:'\u00bfQu\u00e9 tratamiento m\u00e9dico ha recibido?', options:TREATMENT_OPTIONS}),\n      step('missedWork', {type:'radio', q:'\u00bfEsto ha afectado su capacidad para trabajar?', options:WORK_OPTIONS}),\n      step('hasLawyer', {type:'radio', q:'\u00bfYa tiene un abogado para este asunto?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    'benefits-denied': [\n      step('policyType', {type:'radio', kicker:'Beneficios denegados', q:'\u00bfQu\u00e9 tipo de beneficio fue denegado?', options:[\n        {v:'group-ltd', l:'Discapacidad a largo plazo a trav\u00e9s de mi empleador'},\n        {v:'individual', l:'Una p\u00f3liza individual de seguro por discapacidad'},\n        {v:'sabs', l:'Beneficios estatutarios por accidente (relacionados con un accidente automovil\u00edstico)'},\n        {v:'cpp-d', l:'CPP por Discapacidad'}\n      ]}),\n      step('denialDate', {type:'date', q:'\u00bfQu\u00e9 fecha aparece en la carta de denegaci\u00f3n?'}),\n      step('deadlineNoted', {type:'radio', q:'\u00bfLa carta de denegaci\u00f3n menciona un plazo de apelaci\u00f3n?', options:YESNOUNSURE}),\n      step('appealed', {type:'radio', q:'\u00bfYa ha presentado una apelaci\u00f3n?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    other: [\n      step('incidentDate', {type:'date', kicker:'Lesi\u00f3n o accidente', q:'\u00bfEn qu\u00e9 fecha ocurri\u00f3 esto?'}),\n      step('description', {type:'textarea', q:'Describa brevemente lo que ocurri\u00f3.', hint:'Unas pocas oraciones son suficientes \u2014 un abogado har\u00e1 seguimiento para m\u00e1s detalles.'}),\n      step('injuryList', {type:'checkbox', q:'\u00bfQu\u00e9 lesiones sufri\u00f3? Seleccione todas las que apliquen.', options:INJURY_OPTIONS}),\n      step('treatmentLevel', {type:'radio', q:'\u00bfQu\u00e9 tratamiento m\u00e9dico ha recibido?', options:TREATMENT_OPTIONS}),\n      step('missedWork', {type:'radio', q:'\u00bfEsto ha afectado su capacidad para trabajar?', options:WORK_OPTIONS}),\n      CONTACT_STEP\n    ],\n    'wrongful-death': [\n      step('relationship', {type:'radio', kicker:'P\u00e9rdida de un familiar', q:'\u00bfCu\u00e1l es su relaci\u00f3n con la persona que falleci\u00f3?', options:[\n        {v:'spouse-partner', l:'C\u00f3nyuge o pareja (incluyendo uni\u00f3n de hecho)'}, {v:'child', l:'Hijo\/a'}, {v:'parent', l:'Padre\/madre'},\n        {v:'grandparent', l:'Abuelo\/a'}, {v:'grandchild', l:'Nieto\/a'}, {v:'sibling', l:'Hermano\/a'},\n        {v:'estate-representative', l:'Representante del patrimonio o albacea'}, {v:'other-family', l:'Otro familiar'}\n      ]}),\n      step('dateOfDeath', {type:'date', q:'\u00bfEn qu\u00e9 fecha ocurri\u00f3 el fallecimiento?'}),\n      step('causeOfDeath', {type:'radio', q:'\u00bfQu\u00e9 caus\u00f3 el fallecimiento?', options:[\n        {v:'car-accident', l:'Un accidente automovil\u00edstico'}, {v:'medical-negligence', l:'Presunta negligencia m\u00e9dica'},\n        {v:'workplace-accident', l:'Un accidente laboral'}, {v:'criminal-act-assault', l:'Un acto criminal o agresi\u00f3n'}, {v:'other-accident-negligence', l:'Otro accidente o negligencia'}\n      ]}),\n      step('workplaceFaultParty', {type:'radio', q:'\u00bfEl propio empleador de la persona (o un compa\u00f1ero de trabajo) fue el responsable, o fue alguien sin relaci\u00f3n con su trabajo \u2014 una empresa distinta, un miembro del p\u00fablico, equipo defectuoso fabricado por un fabricante externo, etc.?', hint:'Esto cambia qu\u00e9 v\u00eda de compensaci\u00f3n est\u00e1 disponible \u2014 no siempre es una demanda directa y sencilla.', skipIf:s=>s.causeOfDeath!=='workplace-accident', options:[\n        {v:'own-employer-coworker', l:'Su propio empleador o un compa\u00f1ero de trabajo'}, {v:'outside-party', l:'Alguien sin relaci\u00f3n con su trabajo'}, {v:'not-sure', l:'No estoy seguro'}\n      ]}),\n      step('claimStarted', {type:'radio', q:'\u00bfYa se ha iniciado una demanda o reclamo de seguro, ya sea por usted, otro familiar, o el patrimonio?', options:YESNO}),\n      CONTACT_STEP\n    ],\n\n    \/* ---------------- IMMIGRATION ---------------- *\/\n    detained: [\n      step('facility', {type:'text', kicker:'Detenido \u2014 urgente', q:'\u00bfEn qu\u00e9 centro o ciudad est\u00e1 detenida la persona, si lo sabe?', hint:'D\u00e9jelo en blanco si no est\u00e1 seguro \u2014 lo ayudaremos a averiguarlo.', optional:true}),\n      step('detainedSince', {type:'radio', q:'\u00bfCu\u00e1nto tiempo lleva detenida la persona?', options:[\n        {v:'today', l:'Hoy'}, {v:'few-days', l:'Unos pocos d\u00edas'}, {v:'week-plus', l:'Una semana o m\u00e1s'}, {v:'unsure', l:'No estoy seguro'}\n      ]}),\n      CONTACT_STEP\n    ],\n    removal: [\n      step('removalDateKnown', {type:'radio', kicker:'Orden de expulsi\u00f3n', q:'\u00bfHay una fecha de expulsi\u00f3n programada?', options:[\n        {v:'yes', l:'S\u00ed, hay una fecha fijada'}, {v:'no', l:'No, pero se ha emitido una orden'}, {v:'unsure', l:'No estoy seguro'}\n      ]}),\n      step('removalDate', {type:'date', q:'\u00bfCu\u00e1l es la fecha de expulsi\u00f3n programada?', skipIf:s=>s.removalDateKnown!=='yes'}),\n      step('orderIssuedDate', {type:'date', q:'\u00bfEn qu\u00e9 fecha se emiti\u00f3 la orden de expulsi\u00f3n, si lo sabe?', optional:true}),\n      step('stayFiled', {type:'radio', q:'\u00bfYa se ha presentado una suspensi\u00f3n (stay) de la expulsi\u00f3n?', options:YESNOUNSURE.concat([{v:'no-info', l:'No s\u00e9 qu\u00e9 es eso'}])}),\n      CONTACT_STEP\n    ],\n    inadmissibility: [\n      step('stage', {type:'radio', kicker:'Inadmisibilidad', q:'\u00bfEn qu\u00e9 etapa se encuentra esto actualmente?', options:[\n        {v:'letter', l:'Recibi\u00f3 una carta de equidad procesal o un informe de inadmisibilidad'},\n        {v:'hearing', l:'Referido a una audiencia de admisibilidad (Divisi\u00f3n de Inmigraci\u00f3n)'},\n        {v:'removal-order', l:'Ya fue declarado inadmisible \u2014 se emiti\u00f3 una orden de expulsi\u00f3n'},\n        {v:'overcome', l:'Tratando de superar u obtener una exenci\u00f3n para una determinaci\u00f3n de inadmisibilidad anterior'},\n        {v:'unsure', l:'No estoy seguro \u2014 solo me dijeron que podr\u00eda ser inadmisible'}\n      ]}),\n      step('ground', {type:'radio', q:'\u00bfQu\u00e9 motivo est\u00e1 involucrado, si lo sabe?', options:[\n        {v:'misrepresentation', l:'Tergiversaci\u00f3n (misrepresentation)'}, {v:'criminality', l:'Criminalidad o criminalidad grave'},\n        {v:'security-rights-sanctions', l:'Seguridad, derechos humanos\/internacionales, o sanciones'},\n        {v:'health', l:'Motivos de salud'}, {v:'financial', l:'Motivos financieros'}, {v:'other', l:'Otro motivo'}, {v:'unsure', l:'No estoy seguro'}\n      ]}),\n      step('decisionDate', {type:'date', q:'\u00bfQu\u00e9 fecha aparece en la carta, informe, o decisi\u00f3n?'}),\n      step('convictionLocation', {type:'radio', q:'\u00bfLa condena subyacente ocurri\u00f3 en Canad\u00e1, o fuera de Canad\u00e1?', hint:'Una condena o acto ocurrido fuera de Canad\u00e1 se eval\u00faa de manera diferente \u2014 esto afecta qu\u00e9 prueba legal se aplica.', skipIf:s=>s.ground!=='criminality', options:[\n        {v:'in-canada', l:'En Canad\u00e1'}, {v:'outside-canada', l:'Fuera de Canad\u00e1'}, {v:'unsure', l:'No estoy seguro'}\n      ]}),\n      step('criminalSentence', {type:'radio', q:'\u00bfQu\u00e9 sentencia se impuso por el delito relevante, si lo sabe?', hint:'Una sentencia condicional (cumplida en la comunidad, por ejemplo arresto domiciliario) se trata de manera diferente que el tiempo en prisi\u00f3n para este prop\u00f3sito.', skipIf:s=>s.ground!=='criminality' || s.convictionLocation==='outside-canada', options:[\n        {v:'under-6-months', l:'Menos de 6 meses de prisi\u00f3n'}, {v:'six-months-or-more', l:'6 meses o m\u00e1s de prisi\u00f3n'}, {v:'conditional', l:'Una sentencia condicional (cumplida en la comunidad)'}, {v:'not-sure', l:'No estoy seguro'}\n      ]}),\n      CONTACT_STEP\n    ],\n    refusal: [\n      step('refusalType', {type:'radio', kicker:'Rechazo', q:'\u00bfQu\u00e9 fue rechazado?', options:[\n        {v:'study', l:'Permiso de estudios'}, {v:'work', l:'Permiso de trabajo'}, {v:'visitor', l:'Visa de visitante \/ eTA'},\n        {v:'pr-economic', l:'Residencia permanente \u2014 categor\u00eda econ\u00f3mica'}, {v:'pr-family', l:'Residencia permanente \u2014 categor\u00eda familiar'}, {v:'citizenship', l:'Solicitud de ciudadan\u00eda'}\n      ]}),\n      step('decisionDate', {type:'date', q:'\u00bfQu\u00e9 fecha aparece en la carta de rechazo o decisi\u00f3n?'}),\n      step('decisionLocation', {type:'radio', q:'\u00bfLa decisi\u00f3n se tom\u00f3 dentro de Canad\u00e1 o en una oficina de visas en el extranjero?', skipIf:s=>s.refusalType==='citizenship', options:[\n        {v:'in-canada', l:'Dentro de Canad\u00e1'}, {v:'outside-canada', l:'Fuera de Canad\u00e1 (oficina de visas en el extranjero)'}, {v:'unsure', l:'No estoy seguro'}\n      ]}),\n      step('wantChallenge', {type:'radio', q:'\u00bfQu\u00e9 le gustar\u00eda hacer?', options:[\n        {v:'judicial-review', l:'Impugnar la decisi\u00f3n (revisi\u00f3n judicial)'}, {v:'reapply', l:'Volver a presentar la solicitud'}, {v:'unsure', l:'A\u00fan no estoy seguro'}\n      ]}),\n      CONTACT_STEP\n    ],\n    delayed: [\n      step('applicationType', {type:'radio', kicker:'Solicitud demorada', q:'\u00bfQu\u00e9 tipo de solicitud est\u00e1 demorada?', options:[\n        {v:'pr-economic', l:'Residencia permanente \u2014 categor\u00eda econ\u00f3mica'}, {v:'pr-family', l:'Residencia permanente \u2014 categor\u00eda familiar (a\u00fan no rechazada)'},\n        {v:'citizenship', l:'Solicitud de ciudadan\u00eda'}, {v:'work', l:'Permiso de trabajo'}, {v:'study', l:'Permiso de estudios'},\n        {v:'trp', l:'Permiso de residente temporal'}, {v:'other', l:'Otro tipo de solicitud'}\n      ]}),\n      step('submittedDate', {type:'date', q:'\u00bfCu\u00e1ndo present\u00f3 esta solicitud?'}),\n      step('checkedProcessingTimes', {type:'radio', q:'\u00bfHa revisado los tiempos de procesamiento publicados por IRCC para este tipo de solicitud y confirmado que ya los ha superado significativamente?', hint:'Esto se verifica en el propio sitio web de IRCC seg\u00fan el tipo de solicitud \u2014 es el punto de partida para demostrar que la demora es realmente injustificada, no solo m\u00e1s lenta de lo que esperaba.', options:YESNOUNSURE}),\n      step('sentStatusInquiry', {type:'radio', q:'\u00bfYa le ha enviado a IRCC una solicitud de estatus o ha pedido actualizaciones (por ejemplo, a trav\u00e9s del portal en l\u00ednea o un formulario web)?', hint:'Antes de acudir a la Corte Federal, generalmente se espera que el solicitante primero haya pedido una actualizaci\u00f3n directamente a IRCC.', options:YESNO}),\n      step('explanationGiven', {type:'radio', q:'\u00bfIRCC le ha dado alguna explicaci\u00f3n sobre la demora?', options:[\n        {v:'no-explanation', l:'No \u2014 no se dio ninguna explicaci\u00f3n'}, {v:'security-check', l:'S\u00ed \u2014 una verificaci\u00f3n de seguridad o antecedentes en curso'},\n        {v:'additional-docs', l:'S\u00ed \u2014 han pedido m\u00e1s documentos o informaci\u00f3n'}, {v:'other-reason', l:'S\u00ed \u2014 alguna otra raz\u00f3n'}, {v:'not-sure', l:'No estoy seguro'}\n      ]}),\n      step('hasLawyer', {type:'radio', q:'\u00bfYa tiene un abogado para esta solicitud?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    sponsorship: [\n      step('sponsorshipType', {type:'radio', kicker:'Patrocinio rechazado', q:'\u00bfQu\u00e9 tipo de patrocinio fue rechazado?', options:[\n        {v:'spouse-partner', l:'C\u00f3nyuge o pareja'}, {v:'parent-grandparent', l:'Padre\/madre o abuelo\/a'}, {v:'dependent-child', l:'Hijo dependiente'}\n      ]}),\n      step('refusalDate', {type:'date', q:'\u00bfQu\u00e9 fecha aparece en la carta de rechazo?'}),\n      step('reason', {type:'textarea', q:'\u00bfQu\u00e9 motivo se dio para el rechazo, si alguno?', optional:true}),\n      CONTACT_STEP\n    ],\n    refugee: [\n      step('stage', {type:'radio', kicker:'Refugiado \/ asilo', q:'\u00bfEn qu\u00e9 etapa se encuentra el asunto actualmente?', options:[\n        {v:'claim-pending', l:'Reclamo presentado, a\u00fan pendiente'},\n        {v:'rpd-rejected', l:'Rechazado por la Divisi\u00f3n de Protecci\u00f3n de Refugiados (RPD)'},\n        {v:'rad-rejected', l:'Rechazado por la Divisi\u00f3n de Apelaci\u00f3n de Refugiados (RAD)'},\n        {v:'fc-judicial-review', l:'Ya en la Corte Federal (Federal Court) para revisi\u00f3n judicial'}\n      ]}),\n      step('decisionDate', {type:'date', q:'\u00bfQu\u00e9 fecha aparece en la decisi\u00f3n m\u00e1s reciente?', skipIf:s=>s.stage==='claim-pending'}),\n      step('radEligible', {type:'radio', q:'\u00bfLa decisi\u00f3n de la RPD dice algo como \"sin fundamento cre\u00edble\", \"manifiestamente infundada\", inelegible bajo el Acuerdo de Tercer Pa\u00eds Seguro, o que el reclamo fue retirado o abandonado?', hint:'Algunas determinaciones eliminan por completo el derecho a apelar ante la RAD \u2014 vale la pena revisar el texto exacto de la decisi\u00f3n.', skipIf:s=>s.stage!=='rpd-rejected', options:[\n        {v:'yes', l:'S\u00ed, una de esas'}, {v:'no', l:'No, ninguna de esas'}, {v:'unsure', l:'No estoy seguro \u2014 no lo he revisado con detalle'}\n      ]}),\n      CONTACT_STEP\n    ],\n    appealing: [\n      step('stage', {type:'radio', kicker:'Apelaci\u00f3n en curso', q:'\u00bfEn qu\u00e9 etapa se encuentra?', options:[\n        {v:'iad', l:'Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD)'}, {v:'rad', l:'Divisi\u00f3n de Apelaci\u00f3n de Refugiados (RAD)'}, {v:'federal-court', l:'Corte Federal (Federal Court)'}, {v:'other', l:'Otro tribunal o proceso'}\n      ]}),\n      step('filedDate', {type:'date', q:'\u00bfEn qu\u00e9 fecha present\u00f3 la apelaci\u00f3n?', optional:true}),\n      step('hasCounsel', {type:'radio', q:'\u00bfActualmente tiene un abogado o consultor que lo represente?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    'other-imm': [\n      step('description', {type:'textarea', kicker:'Asunto de inmigraci\u00f3n', q:'Describa brevemente su situaci\u00f3n.'}),\n      step('relevantDate', {type:'date', q:'\u00bfHay alguna fecha clave que debamos conocer (una carta, plazo, o decisi\u00f3n)?', optional:true}),\n      CONTACT_STEP\n    ],\n\n    \/* ---------------- CIVIL ---------------- *\/\n    served: [\n      step('servedDate', {type:'date', kicker:'Notificado de una demanda', q:'\u00bfEn qu\u00e9 fecha fue notificado?'}),\n      step('servedWhere', {type:'radio', q:'\u00bfD\u00f3nde fue notificado?', options:[\n        {v:'ontario', l:'En Ontario'}, {v:'elsewhere-canada', l:'En otro lugar de Canad\u00e1 o los Estados Unidos'}, {v:'outside-canada', l:'Fuera de Canad\u00e1 y los Estados Unidos'}\n      ]}),\n      step('filedResponse', {type:'radio', q:'\u00bfHa presentado un Aviso de Intenci\u00f3n de Defenderse (Notice of Intent to Defend) o una Contestaci\u00f3n de Demanda (Statement of Defence)?', options:YESNO}),\n      CONTACT_STEP\n    ],\n    contract: civilDisputeSteps('Disputa contractual', true),\n    property: [\n      step('propertyMatterType', {type:'radio', kicker:'Disputa de propiedad o arrendamiento', q:'\u00bfQu\u00e9 tipo de asunto de propiedad es este?', options:[\n        {v:'residential-tenancy', l:'Asunto residencial entre propietario e inquilino (renta, desalojo, reparaciones, etc.)'},\n        {v:'commercial-lease', l:'Disputa de arrendamiento comercial'},\n        {v:'other-property', l:'Compra de bienes ra\u00edces, l\u00edmite de terreno, u otro asunto de propiedad'}\n      ]}),\n      step('tenancyRole', {type:'radio', q:'\u00bfEs usted el inquilino o el propietario?', skipIf:s=>s.propertyMatterType!=='residential-tenancy', options:[\n        {v:'tenant', l:'Inquilino'}, {v:'landlord', l:'Propietario'}\n      ]}),\n      step('tenancyStatus', {type:'radio', q:'\u00bfEl inquilino todav\u00eda vive en la unidad, o ya se mud\u00f3?', skipIf:s=>s.propertyMatterType!=='residential-tenancy', options:[\n        {v:'in-possession', l:'Todav\u00eda vive ah\u00ed'}, {v:'vacated', l:'Ya se mud\u00f3'}, {v:'unsure', l:'No estoy seguro \/ no aplica'}\n      ]}),\n      step('tenancyIssue', {type:'radio', q:'\u00bfDe qu\u00e9 se trata el problema?', skipIf:s=>s.propertyMatterType!=='residential-tenancy', options:[\n        {v:'arrears-eviction', l:'Renta atrasada o un aviso de desalojo'}, {v:'repairs-maintenance', l:'Reparaciones o mantenimiento'},\n        {v:'illegal-charges', l:'Un aumento de renta ilegal o un cargo ilegal'}, {v:'damage-after-move-out', l:'Da\u00f1o a la propiedad o renta impaga despu\u00e9s de la mudanza'}, {v:'other-tenancy', l:'Algo m\u00e1s'}\n      ]}),\n      step('tenancyIssueDate', {type:'date', q:'\u00bfCu\u00e1ndo ocurri\u00f3 este problema, o cu\u00e1ndo recibi\u00f3 el aviso correspondiente?', skipIf:s=>s.propertyMatterType!=='residential-tenancy'}),\n      step('landIssueType', {type:'radio', q:'\u00bfSe trata de qui\u00e9n es due\u00f1o o tiene derecho a poseer el terreno mismo \u2014 una invasi\u00f3n de l\u00edmites, posesi\u00f3n disputada, o una servidumbre \u2014 o se trata de una transacci\u00f3n de bienes ra\u00edces (una compra, venta, o acuerdo que sali\u00f3 mal)?', hint:'Los reclamos de l\u00edmites y posesi\u00f3n corren bajo un plazo muy distinto al de una disputa de transacci\u00f3n.', skipIf:s=>s.propertyMatterType!=='other-property', options:[\n        {v:'boundary-possession', l:'L\u00edmite, posesi\u00f3n, o una servidumbre'}, {v:'transaction', l:'Una compra, venta, o transacci\u00f3n'}, {v:'not-sure', l:'No estoy seguro'}\n      ]}),\n      step('issueDate', {type:'date', kicker:'Disputa de propiedad o arrendamiento', q:'\u00bfCu\u00e1ndo ocurri\u00f3 el problema, o cu\u00e1ndo lo descubri\u00f3?', skipIf:s=>s.propertyMatterType==='residential-tenancy'}),\n      step('writtenAgreement', {type:'radio', q:'\u00bfHay un contrato de arrendamiento o acuerdo escrito involucrado?', skipIf:s=>s.propertyMatterType==='residential-tenancy', options:YESNO.concat([{v:'na', l:'No aplica'}])}),\n      step('disputeValue', {type:'radio', q:'Aproximadamente, \u00bfcu\u00e1l es el valor de la disputa?', skipIf:s=>s.propertyMatterType==='residential-tenancy', options:[\n        {v:'under-50k', l:'Menos de $50,000'}, {v:'50k-200k', l:'$50,000 \u2013 $200,000'}, {v:'over-200k', l:'M\u00e1s de $200,000'}, {v:'non-monetary', l:'No se trata principalmente de dinero'}\n      ]}),\n      step('demandSent', {type:'radio', q:'\u00bfHa enviado una carta de exigencia (demand letter) o intentado resolver esto directamente?', skipIf:s=>s.propertyMatterType==='residential-tenancy', options:YESNO}),\n      CONTACT_STEP\n    ],\n    business: civilDisputeSteps('Disputa comercial o de sociedad', true),\n    'other-civil': civilDisputeSteps('Asunto civil', true),\n    defamation: [\n      step('publicationType', {type:'radio', kicker:'Difamaci\u00f3n', q:'\u00bfC\u00f3mo se hizo la declaraci\u00f3n?', options:[\n        {v:'newspaper-broadcast', l:'Peri\u00f3dico, TV, o transmisi\u00f3n de radio'},\n        {v:'online-social', l:'En l\u00ednea o redes sociales'},\n        {v:'spoken', l:'Hablada, a una o m\u00e1s personas'},\n        {v:'other', l:'De otra manera'}\n      ]}),\n      step('issueDate', {type:'date', q:'\u00bfCu\u00e1ndo se enter\u00f3 por primera vez de la declaraci\u00f3n?'}),\n      step('disputeValue', {type:'radio', q:'Aproximadamente, \u00bfen cu\u00e1nto estimar\u00eda el da\u00f1o o los perjuicios?', options:[\n        {v:'under-50k', l:'Menos de $50,000'}, {v:'50k-200k', l:'$50,000 \u2013 $200,000'}, {v:'over-200k', l:'M\u00e1s de $200,000'}, {v:'non-monetary', l:'No estoy seguro \/ no se trata principalmente de dinero'}\n      ]}),\n      step('demandSent', {type:'radio', q:'\u00bfHa enviado una exigencia de retractaci\u00f3n o intentado resolver esto directamente?', options:YESNO}),\n      CONTACT_STEP\n    ]\n  };\n\n  function civilDisputeSteps(label, hasContract){\n    const s = [\n      step('issueDate', {type:'date', kicker:label, q:'\u00bfCu\u00e1ndo ocurri\u00f3 el problema, o cu\u00e1ndo lo descubri\u00f3?'}),\n    ];\n    if(hasContract){\n      s.push(step('constructionInvolved', {type:'radio', q:'\u00bfEsto involucra construcci\u00f3n, renovaci\u00f3n, o el suministro de materiales a una propiedad espec\u00edfica \u2014 por ejemplo un contratista, subcontratista, o proveedor sin pagar?', hint:'Esto puede activar un plazo de gravamen de construcci\u00f3n (construction lien) mucho m\u00e1s corto que los 2 a\u00f1os habituales.', options:YESNOUNSURE}));\n      s.push(step('writtenAgreement', {type:'radio', q:'\u00bfHay un contrato o arrendamiento escrito involucrado?', options:YESNO.concat([{v:'na', l:'No aplica'}])}));\n      s.push(step('arbitrationClause', {type:'radio', q:'\u00bfEse acuerdo menciona arbitraje, o dice que las disputas deben resolverse fuera de los tribunales?', hint:'Una cl\u00e1usula as\u00ed puede exigir arbitraje privado en lugar de una demanda \u2014 vale la pena revisar la letra peque\u00f1a.', skipIf:s=>s.writtenAgreement!=='yes', options:[\n        {v:'yes', l:'S\u00ed, menciona algo as\u00ed'}, {v:'no', l:'No'}, {v:'not-sure', l:'No estoy seguro \u2014 no lo he revisado con detalle'}\n      ]}));\n      s.push(step('consumerContract', {type:'radio', q:'\u00bfUsted trataba con ellos como consumidor individual (una compra personal, membres\u00eda de tel\u00e9fono o gimnasio, etc.), o como empresa?', hint:'La ley de Ontario trata las cl\u00e1usulas de arbitraje de manera muy diferente para los consumidores que para las empresas.', skipIf:s=>s.arbitrationClause!=='yes' && s.arbitrationClause!=='not-sure', options:[\n        {v:'consumer', l:'Como consumidor individual'}, {v:'business', l:'Como empresa'}, {v:'not-sure', l:'No estoy seguro'}\n      ]}));\n    }\n    s.push(step('disputeValue', {type:'radio', q:'Aproximadamente, \u00bfcu\u00e1l es el valor de la disputa?', options:[\n      {v:'under-50k', l:'Menos de $50,000'}, {v:'50k-200k', l:'$50,000 \u2013 $200,000'}, {v:'over-200k', l:'M\u00e1s de $200,000'}, {v:'non-monetary', l:'No se trata principalmente de dinero'}\n    ]}));\n    s.push(step('demandSent', {type:'radio', q:'\u00bfHa enviado una carta de exigencia o intentado resolver esto directamente?', options:YESNO}));\n    s.push(CONTACT_STEP);\n    return s;\n  }\n\n  \/* ============ SCORING ============ *\/\n  const LIMITATION_DAYS = 730;\n\n  function tierMeta(tier){\n    return {\n      critical:{label:'Cr\u00edtico por tiempo', chipIcon:I.alert, banner:{icon:I.alert, label:'Cr\u00edtico por tiempo'}},\n      urgent:{label:'Urgente', chipIcon:I.clock, banner:{icon:I.clock, label:'Plazo por vencer'}},\n      strong:{label:'Listo para conversar', chipIcon:I.check, banner:{icon:I.check, label:'Vale la pena revisar ahora'}},\n      standard:{label:'Vale la pena revisarlo', chipIcon:I.dot, banner:{icon:I.scale, label:'Vale la pena una conversaci\u00f3n'}},\n      pending:{label:'En curso', chipIcon:I.dot, banner:{icon:I.dot, label:'En curso'}}\n    }[tier];\n  }\n\n  function score(practice, subtype, a){\n    const today = new Date();\n    switch(subtype){\n\n      case 'car': {\n        const days = daysBetween(a.accidentDate, new Date());\n        const bullets = [];\n        let tier = 'standard';\n        let deadline = null;\n        const severe = (a.injuryList||[]).some(v=>['fracture','head-tbi','spinal','surgery','psych'].includes(v));\n        const softOnly = (a.injuryList||[]).length && (a.injuryList||[]).every(v=>v==='soft-tissue');\n\n        if(days!=null && days>LIMITATION_DAYS){\n          tier='critical';\n          bullets.push({t:'crit', text:`Ha pasado aproximadamente ${Math.round(days\/365)} a\u00f1os desde el accidente \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os de Ontario probablemente ya pas\u00f3. Existen excepciones (descubribilidad, menores de edad, incapacidad) \u2014 esto necesita la atenci\u00f3n inmediata de un abogado, no una autoevaluaci\u00f3n.`});\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo de 2 a\u00f1os para un reclamo civil (tort) \u2014 probablemente ya pas\u00f3', urgent:true, value:'Plazo vencido'};\n        } else if(days!=null){\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo est\u00e1ndar para iniciar una demanda por este accidente', remaining: LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n        }\n\n        if(a.filedOCF1==='no' || a.filedOCF1==='no-info'){\n          if(tier!=='critical') tier='urgent';\n          bullets.push({t:'warn', text:'El tr\u00e1mite de Beneficios por Accidente corre en su propio plazo corto, independiente de cualquier reclamo por culpa \u2014 el Calendario de Beneficios Estatutarios por Accidente de Ontario (Statutory Accident Benefits Schedule) generalmente espera un aviso pronto a su aseguradora y la presentaci\u00f3n de la solicitud OCF-1 poco despu\u00e9s de recibirla de ellos. Si esto no se ha iniciado, un abogado puede ayudarlo a ponerlo en marcha correctamente \u2014 la demora puede afectar lo que est\u00e1 disponible.'});\n        } else if(a.filedOCF1==='unsure'){\n          bullets.push({t:'warn', text:'No estaba seguro de si se present\u00f3 una solicitud de Beneficios por Accidente \u2014 vale la pena confirmarlo pronto, ya que corre en su propio plazo corto, independiente de cualquier reclamo por culpa.'});\n        }\n\n        if(severe){\n          bullets.push({t:'good', text:'Las lesiones descritas (fractura, lesi\u00f3n de cabeza\/columna, cirug\u00eda, o un impacto psicol\u00f3gico significativo) pueden quedar fuera del l\u00edmite de la Gu\u00eda de Lesiones Menores (Minor Injury Guideline) de Ontario, lo cual puede afectar el valor de un reclamo \u2014 esto depende de la documentaci\u00f3n m\u00e9dica, que un abogado revisar\u00eda.'});\n          if(tier==='standard') tier='strong';\n        } else if(softOnly){\n          bullets.push({t:'good', text:'Las lesiones de solo tejido blando a menudo se tratan bajo la Gu\u00eda de Lesiones Menores ($3,500 de l\u00edmite) a menos que un proveedor de tratamiento documente una excepci\u00f3n \u2014 de todos modos vale la pena que un abogado lo confirme.'});\n        }\n\n        if(a.faultStatus==='not-at-fault'){\n          bullets.push({t:'good', text:'Usted cree que el otro conductor tuvo la culpa \u2014 una responsabilidad clara generalmente fortalece un reclamo.'});\n          if(tier==='standard') tier='strong';\n        } else if(a.faultStatus==='partial'){\n          bullets.push({t:'good', text:'La culpa compartida no impide un reclamo en Ontario \u2014 los da\u00f1os generalmente se distribuyen proporcionalmente, no se eliminan.'});\n        }\n\n        if(a.hasLawyer==='yes'){\n          bullets.push({t:'warn', text:'Usted mencion\u00f3 que ya tiene un abogado para este asunto \u2014 tratar\u00edamos esto como una revisi\u00f3n de segunda opini\u00f3n en lugar de una nueva representaci\u00f3n.'});\n        }\n\n        if(!bullets.length) bullets.push({t:'good', text:'Nada en sus respuestas descarta esto \u2014 los detalles que ha dado son suficientes para que un abogado haga una primera revisi\u00f3n adecuada.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'fall': {\n        const days = daysBetween(a.fallDate, new Date());\n        const bullets = [];\n        let tier = 'standard';\n        let deadline = null;\n        const severe = (a.injuryList||[]).some(v=>['fracture','head-tbi','spinal','surgery','psych'].includes(v));\n\n        if(a.fallLocation==='municipal'){\n          if(days!=null && days<=10){\n            tier='critical';\n            bullets.push({t:'crit', text:`Las ca\u00eddas en una acera o calle p\u00fablica generalmente requieren un aviso por escrito al municipio dentro de 10 d\u00edas bajo la Ley Municipal (Municipal Act). Quedan aproximadamente ${10-days} d\u00eda(s) \u2014 esto debe enviarse de inmediato.`});\n            deadline = {label:'Plazo de aviso municipal', sub:'Aviso por escrito de 10 d\u00edas al municipio', remaining:10-days, unit:'d\u00edas restantes', urgent:true};\n          } else if(days!=null){\n            tier='critical';\n            bullets.push({t:'crit', text:'La ventana de aviso municipal de 10 d\u00edas probablemente ya pas\u00f3. Los tribunales a veces pueden excusar un aviso tard\u00edo cuando hay una explicaci\u00f3n razonable y no hay perjuicio para el municipio \u2014 pero esto necesita atenci\u00f3n legal inmediata.'});\n            deadline = {label:'Plazo de aviso municipal', sub:'Ventana de 10 d\u00edas \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n          }\n        } else if(a.fallLocation==='winter-ice' || a.fallLocation==='not-sure'){\n          tier='critical';\n          if(days!=null && days<=10){\n            bullets.push({t:'crit', text:`Dependiendo de exactamente d\u00f3nde ocurri\u00f3 esto y qui\u00e9n era responsable de despejarlo, puede aplicar un plazo de aviso tan corto como 10 d\u00edas (una acera o calle municipal) o 60 d\u00edas (un contratista privado de remoci\u00f3n de nieve, bajo la Ley de Responsabilidad de los Ocupantes \/ Occupiers' Liability Act) \u2014 y cu\u00e1l aplica no siempre es claro. Quedan aproximadamente ${10-days} d\u00eda(s) bajo la posibilidad m\u00e1s corta, as\u00ed que no espere para averiguar qu\u00e9 r\u00e9gimen aplica antes de actuar.`});\n            deadline = {label:'Posible plazo de aviso corto', sub:'Tan corto como 10 d\u00edas (municipal) \u2014 confirme urgentemente qu\u00e9 r\u00e9gimen aplica', remaining:10-days, unit:'d\u00edas restantes, en el peor de los casos', urgent:true};\n          } else if(days!=null && days<=60){\n            bullets.push({t:'crit', text:'Dependiendo de exactamente d\u00f3nde ocurri\u00f3 esto, puede aplicar un plazo de aviso tan corto como 10 d\u00edas (una acera o calle municipal) o 60 d\u00edas (un contratista privado de remoci\u00f3n de nieve, bajo la Ley de Responsabilidad de los Ocupantes). Si aplica la ventana municipal m\u00e1s corta, probablemente ya pas\u00f3 \u2014 esto necesita que un abogado determine qu\u00e9 r\u00e9gimen aplica sin m\u00e1s demora.'});\n            deadline = {label:'Posible plazo de aviso corto', sub:'10 d\u00edas (municipal) o 60 d\u00edas (contratista privado) \u2014 confirme urgentemente', remaining:60-days, unit:'d\u00edas restantes, escenario m\u00e1s largo', urgent:true};\n          } else if(days!=null){\n            bullets.push({t:'crit', text:'Dependiendo de exactamente d\u00f3nde ocurri\u00f3 esto y qui\u00e9n era responsable de despejarlo, un plazo de aviso corto (10 d\u00edas si es municipal, 60 d\u00edas si un contratista privado de remoci\u00f3n de nieve era responsable) puede ya haber pasado. Un abogado debe confirmar de inmediato si aplica alguno de los dos reg\u00edmenes de aviso y si existe alguna excepci\u00f3n.'});\n            deadline = {label:'Posible plazo de aviso corto', sub:'10\u201360 d\u00edas dependiendo de qui\u00e9n era responsable \u2014 probablemente ya pas\u00f3', value:'Posiblemente vencido', urgent:true};\n          }\n        } else if(days!=null && days>LIMITATION_DAYS){\n          tier='critical';\n          bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde la ca\u00edda \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de Ontario puede haber pasado. Pueden aplicar excepciones \u2014 un abogado debe confirmarlo de inmediato.'});\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo de 2 a\u00f1os \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n        } else if(days!=null){\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo est\u00e1ndar para iniciar una demanda por esta ca\u00edda', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n          bullets.push({t:'warn', text:'Si el hielo o la nieve tuvo alg\u00fan papel en esta ca\u00edda, puede aplicar un plazo de aviso separado de 60 d\u00edas bajo la Ley de Responsabilidad de los Ocupantes (Occupiers\u2019 Liability Act) al propietario o a su contratista de remoci\u00f3n de nieve \u2014 vale la pena mencionarlo a un abogado aunque no fue el tipo de ubicaci\u00f3n principal que seleccion\u00f3.'});\n        }\n\n        if(a.hazardReported==='no'){\n          bullets.push({t:'warn', text:'El peligro no fue reportado en su momento \u2014 esto no es fatal para un reclamo, pero la documentaci\u00f3n de la condici\u00f3n (fotos, testigos) se vuelve m\u00e1s importante.'});\n        } else if(a.hazardReported==='yes'){\n          bullets.push({t:'good', text:'El peligro fue reportado en su momento, lo cual ayuda a establecer que el propietario o el municipio ten\u00eda conocimiento de la condici\u00f3n.'});\n        }\n\n        if(severe){\n          bullets.push({t:'good', text:'Las lesiones descritas son m\u00e1s significativas que un moret\u00f3n o esguince menor \u2014 generalmente una base m\u00e1s s\u00f3lida para un reclamo.'});\n          if(tier==='standard') tier='strong';\n        }\n\n        if(a.hasLawyer==='yes'){\n          bullets.push({t:'warn', text:'Usted mencion\u00f3 que ya tiene un abogado \u2014 tratar\u00edamos esto como una revisi\u00f3n de segunda opini\u00f3n.'});\n        }\n\n        if(!bullets.length) bullets.push({t:'good', text:'Nada en sus respuestas descarta esto \u2014 vale la pena una primera revisi\u00f3n de un abogado.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'benefits-denied': {\n        const bullets = [];\n        let tier = 'standard';\n        let deadline = null;\n\n        if(a.policyType==='cpp-d'){\n          const days = daysBetween(a.denialDate, new Date());\n          const remaining = days==null ? null : 90-days;\n          if(remaining!=null){\n            if(remaining<=0){\n              tier='critical';\n              bullets.push({t:'crit', text:'El CPP por Discapacidad corre en un plazo mucho m\u00e1s corto que una denegaci\u00f3n de seguro privado \u2014 la ventana est\u00e1ndar de 90 d\u00edas para solicitar una reconsideraci\u00f3n (o para apelar una decisi\u00f3n de reconsideraci\u00f3n ante el Tribunal de Seguridad Social (Social Security Tribunal)) probablemente ya se cerr\u00f3. A veces todav\u00eda se puede aceptar una solicitud tard\u00eda, pero generalmente nunca m\u00e1s de 1 a\u00f1o despu\u00e9s de la decisi\u00f3n, y solo en circunstancias limitadas. Esto necesita un abogado de inmediato.'});\n            } else if(remaining<=10){\n              tier='critical';\n              bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) en la ventana est\u00e1ndar de 90 d\u00edas para impugnar esta decisi\u00f3n del CPP por Discapacidad.`});\n            } else {\n              tier='urgent';\n              bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas en la ventana est\u00e1ndar de 90 d\u00edas para impugnar esta decisi\u00f3n del CPP por Discapacidad \u2014 esto avanza mucho m\u00e1s r\u00e1pido que una denegaci\u00f3n de seguro t\u00edpica.`});\n            }\n            deadline = {label:'Ventana de reconsideraci\u00f3n \/ apelaci\u00f3n del CPP-D', sub:'90 d\u00edas desde esta decisi\u00f3n \u2014 un proceso federal con su propio plazo, no la regla de 2 a\u00f1os de Ontario', remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=10};\n          }\n          bullets.push({t:'good', text:'Las disputas del CPP por Discapacidad pasan por un proceso federal de dos etapas, no por el sistema judicial de Ontario \u2014 primero una solicitud de reconsideraci\u00f3n ante Service Canada, y luego, si a\u00fan se deniega, una apelaci\u00f3n ante el Tribunal de Seguridad Social (Social Security Tribunal) \u2014 y cada etapa generalmente tiene su propio plazo de 90 d\u00edas.'});\n        } else {\n          const days = daysBetween(a.denialDate, new Date());\n          if(days!=null && days>LIMITATION_DAYS){\n            tier='critical';\n            bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde la denegaci\u00f3n \u2014 el plazo de prescripci\u00f3n para impugnarla puede haber pasado. Un abogado debe confirmar de inmediato si aplica alguna excepci\u00f3n.'});\n            deadline = {label:'Plazo de prescripci\u00f3n', sub:'2 a\u00f1os desde la fecha de denegaci\u00f3n \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n          } else if(days!=null){\n            deadline = {label:'Plazo de prescripci\u00f3n', sub:'Plazo est\u00e1ndar para impugnar esta denegaci\u00f3n', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n          }\n        }\n\n        if(a.deadlineNoted==='yes' && a.appealed!=='yes'){\n          if(tier!=='critical') tier='urgent';\n          bullets.push({t:'warn', text: a.policyType==='cpp-d'\n            ? 'Su carta de decisi\u00f3n menciona un plazo y usted todav\u00eda no ha apelado \u2014 d\u00edganos la fecha exacta en lugar de depender de la estimaci\u00f3n general de 90 d\u00edas indicada arriba.'\n            : 'Su carta de denegaci\u00f3n menciona un plazo de apelaci\u00f3n y usted todav\u00eda no ha apelado \u2014 ese plazo interno suele ser mucho m\u00e1s corto que el plazo de prescripci\u00f3n de 2 a\u00f1os. D\u00edganos la fecha exacta.'});\n        }\n        if(a.appealed==='yes'){\n          bullets.push({t:'good', text:'Ya ha presentado una apelaci\u00f3n \u2014 revisar\u00edamos el estado actual y si el siguiente paso necesita un abogado.'});\n        }\n        if(a.policyType==='group-ltd' || a.policyType==='individual'){\n          bullets.push({t:'good', text:'Una denegaci\u00f3n inicial no siempre es la \u00faltima palabra de la aseguradora \u2014 un abogado puede evaluar si vale la pena presentar una apelaci\u00f3n o una demanda seg\u00fan sus hechos espec\u00edficos.'});\n          if(tier==='standard') tier='strong';\n          bullets.push({t:'good', text:'Algunas p\u00f3lizas de LTD o discapacidad establecen un plazo m\u00e1s corto (a veces enmarcado como 1 a\u00f1o) para demandar por una denegaci\u00f3n \u2014 los tribunales de Ontario generalmente han sostenido que las p\u00f3lizas grupales de LTD no pueden contratar fuera del plazo est\u00e1ndar de 2 a\u00f1os de esta manera, por lo que un plazo corto impreso en la p\u00f3liza a menudo tampoco es la \u00faltima palabra. De todos modos vale la pena que un abogado confirme su p\u00f3liza espec\u00edfica en lugar de asumir en un sentido u otro.'});\n        }\n        if(!bullets.length) bullets.push({t:'good', text:'Vale la pena que un abogado revise directamente la carta de denegaci\u00f3n \u2014 las aseguradoras no siempre aciertan la primera vez.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'other': {\n        const days = daysBetween(a.incidentDate, new Date());\n        const bullets = [];\n        let tier = 'standard';\n        let deadline = null;\n        if(days!=null && days>LIMITATION_DAYS){\n          tier='critical';\n          bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde que esto ocurri\u00f3 \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de Ontario puede haber pasado. Un abogado debe confirmar de inmediato si aplica alguna excepci\u00f3n.'});\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo de 2 a\u00f1os \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n        } else if(days!=null){\n          deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo est\u00e1ndar para iniciar un reclamo', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n        }\n        bullets.push({t:'good', text:'Usted ha dado suficiente informaci\u00f3n para una primera revisi\u00f3n \u2014 un abogado confirmar\u00e1 qu\u00e9 tipo de reclamo, si alguno, esto respalda.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'wrongful-death': {\n        const days = daysBetween(a.dateOfDeath, new Date());\n        const bullets = [];\n        let tier = 'standard';\n        let deadline = null;\n        const isWorkplace = a.causeOfDeath==='workplace-accident';\n        const wsibElectionApplies = isWorkplace && (a.workplaceFaultParty==='outside-party' || a.workplaceFaultParty==='not-sure');\n\n        if(wsibElectionApplies && days!=null){\n          const wsiaRemaining = 90-days;\n          tier='critical';\n          if(wsiaRemaining>=0){\n            bullets.push({t:'crit', text:`Las muertes laborales causadas por alguien fuera del propio empleador de la persona generalmente todav\u00eda se pueden perseguir como una demanda \u2014 pero la ley de Ontario exige elegir entre los beneficios del WSIB (la Junta de Seguridad y Seguros del Trabajo) y demandar a esa parte dentro de aproximadamente 3 meses desde el fallecimiento, firmando y devolviendo un formulario espec\u00edfico. Quedan aproximadamente ${wsiaRemaining} d\u00eda(s). Esto es independiente de, y mucho m\u00e1s corto que, el plazo judicial habitual de 2 a\u00f1os.`});\n          } else {\n            bullets.push({t:'crit', text:'La ventana de aproximadamente 3 meses para elegir entre los beneficios del WSIB y demandar a una parte externa probablemente ya pas\u00f3. Perder este plazo sin solicitar una extensi\u00f3n generalmente se trata como una elecci\u00f3n autom\u00e1tica de demandar \u2014 lo cual puede significar perder los beneficios de sobreviviente del WSIB por defecto, incluso sin haberlo pretendido. Esto necesita un abogado de inmediato; todav\u00eda podr\u00edan ser posibles algunas extensiones.'});\n          }\n          deadline = {label:'Plazo de elecci\u00f3n del WSIB', sub:'Aproximadamente 3 meses desde el fallecimiento \u2014 la inacci\u00f3n puede resultar por defecto en la p\u00e9rdida de los beneficios de sobreviviente del WSIB', remaining:Math.max(wsiaRemaining,0), unit: wsiaRemaining>=0?'d\u00edas restantes':'d\u00edas de retraso \u2014 pregunte sobre una extensi\u00f3n', urgent:true};\n        } else if(days!=null && days>LIMITATION_DAYS){\n          tier='critical';\n          bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde el fallecimiento. El reclamo propio del patrimonio en particular est\u00e1 sujeto a un l\u00edmite estricto de 2 a\u00f1os con muy poco margen para excepciones \u2014 el reclamo de la familia bajo la Ley de Derecho de Familia (Family Law Act) tiene algo m\u00e1s de flexibilidad, pero ambos necesitan la revisi\u00f3n inmediata de un abogado.'});\n          deadline = {label:'Plazo del reclamo del patrimonio \/ familia', sub:'Generalmente 2 a\u00f1os desde la fecha del fallecimiento \u2014 probablemente ya pas\u00f3 para el reclamo del patrimonio', value:'Plazo vencido', urgent:true};\n        } else if(days!=null){\n          deadline = {label:'Plazo del reclamo del patrimonio \/ familia', sub:'Generalmente 2 a\u00f1os desde la fecha del fallecimiento \u2014 el reclamo propio del patrimonio tiene poco margen para excepciones una vez que esto pasa', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n        }\n\n        if(isWorkplace){\n          if(a.workplaceFaultParty==='own-employer-coworker'){\n            bullets.push({t:'warn', text:'Debido a que esto fue causado por el propio empleador de la persona o un compa\u00f1ero de trabajo, la Ley de Seguridad y Seguros del Trabajo de Ontario (Workplace Safety and Insurance Act) generalmente impide demandarlos directamente \u2014 los beneficios de sobreviviente del WSIB son la v\u00eda en su lugar. Un reclamo contra un tercero genuinamente independiente (una empresa totalmente distinta, por ejemplo) todav\u00eda puede ser posible y vale la pena explorarlo, pero demandar al empleador mismo generalmente no es una opci\u00f3n.'});\n          } else {\n            bullets.push({t:'warn', text:'Las reglas del WSIB (la Junta de Seguridad y Seguros del Trabajo) pueden afectar qu\u00e9 v\u00eda de compensaci\u00f3n est\u00e1 realmente disponible aqu\u00ed \u2014 esto vale la pena una conversaci\u00f3n urgente sin importar c\u00f3mo resulte la cuesti\u00f3n de responsabilidad anterior.'});\n          }\n        }\n\n        bullets.push({t:'good', text:'Bajo la Ley de Derecho de Familia de Ontario (Family Law Act), un c\u00f3nyuge o pareja, hijos, nietos, padres, abuelos, y hermanos de la persona fallecida pueden, cada uno, potencialmente presentar un reclamo por p\u00e9rdida de gu\u00eda, cuidado y compa\u00f1\u00eda, gastos funerarios y de bolsillo, y otras p\u00e9rdidas \u2014 esto generalmente corre en paralelo, no en lugar de, un reclamo presentado por el patrimonio.'});\n\n        if(a.causeOfDeath==='car-accident'){\n          bullets.push({t:'warn', text:'Como se trat\u00f3 de un accidente automovil\u00edstico, los beneficios por accidente (un beneficio por muerte y gastos funerarios) tambi\u00e9n pueden estar disponibles a trav\u00e9s del seguro. Para accidentes ocurridos el 1 de julio de 2026 o despu\u00e9s, estos beneficios ya no son autom\u00e1ticamente obligatorios en todas las p\u00f3lizas \u2014 las p\u00f3lizas nuevas generalmente necesitan que se opte por esta cobertura, mientras que las p\u00f3lizas que se renuevan generalmente la mantienen a menos que haya sido rechazada \u2014 y la elegibilidad tambi\u00e9n depende de la relaci\u00f3n del fallecido con la p\u00f3liza. Un accidente anterior al 1 de julio de 2026 generalmente todav\u00eda se rige por las reglas anteriores, totalmente obligatorias, sin importar cu\u00e1ndo se resuelva el reclamo. Esto corre en su propio plazo de aviso corto, independiente del reclamo judicial de la familia \u2014 vale la pena verificarlo pronto.'});\n        } else if(a.causeOfDeath==='medical-negligence'){\n          bullets.push({t:'warn', text:'Un reclamo por negligencia m\u00e9dica sigue el mismo plazo de 2 a\u00f1os que cualquier otro reclamo aqu\u00ed \u2014 no hay un plazo separado y m\u00e1s largo para demandar a un m\u00e9dico u hospital. Si se present\u00f3 una queja ante el Colegio de M\u00e9dicos y Cirujanos de Ontario (College of Physicians and Surgeons of Ontario, CPSO), ese proceso no pausa este plazo \u2014 una trampa com\u00fan es esperar el resultado del Colegio antes de hablar con un abogado, momento en el cual el plazo judicial ya podr\u00eda haber desaparecido.'});\n        }\n        if(a.relationship==='estate-representative'){\n          bullets.push({t:'warn', text:'Como representante del patrimonio, tenga presente que el reclamo propio del patrimonio (por lo que el fallecido podr\u00eda haber reclamado de haber sobrevivido) tiene un l\u00edmite de 2 a\u00f1os desde la fecha del fallecimiento con casi ninguna flexibilidad \u2014 independiente del reclamo de la familia bajo la Ley de Derecho de Familia.'});\n        }\n        if(a.relationship==='spouse-partner'){\n          bullets.push({t:'good', text:'Si no estaban casados, calificar como \"c\u00f3nyuge\" para este tipo de reclamo generalmente depende de cu\u00e1nto tiempo vivieron juntos y si tuvieron un hijo en com\u00fan \u2014 la prueba exacta no es \u00fanica para todos los casos, as\u00ed que vale la pena que un abogado confirme que usted califica en lugar de asumirlo en un sentido u otro.'});\n        }\n        if(a.claimStarted==='yes'){\n          bullets.push({t:'good', text:'Usted mencion\u00f3 que ya se inici\u00f3 un reclamo \u2014 revisar\u00edamos su estado actual y confirmar\u00edamos que todos los familiares elegibles y el patrimonio est\u00e9n debidamente incluidos.'});\n        }\n        return {tier, bullets, deadline};\n      }\n\n      \/* ---- Immigration ---- *\/\n      case 'detained': {\n        const scheduleText = {\n          'today': 'Las revisiones de detenci\u00f3n de inmigraci\u00f3n siguen un calendario establecido bajo la Ley de Inmigraci\u00f3n y Protecci\u00f3n de los Refugiados (Immigration and Refugee Protection Act) \u2014 la primera revisi\u00f3n ocurre dentro de las 48 horas de la detenci\u00f3n. Si la detenci\u00f3n comenz\u00f3 hoy, esa revisi\u00f3n probablemente se acerca muy pronto, y la representaci\u00f3n legal antes de ella importa.',\n          'few-days': 'Las revisiones de detenci\u00f3n de inmigraci\u00f3n siguen un calendario establecido bajo la Ley de Inmigraci\u00f3n y Protecci\u00f3n de los Refugiados \u2014 una primera revisi\u00f3n ocurre dentro de las 48 horas, luego una segunda revisi\u00f3n dentro de los siguientes 7 d\u00edas. Si han pasado unos d\u00edas, la revisi\u00f3n de 7 d\u00edas podr\u00eda ser la pr\u00f3xima.',\n          'week-plus': 'Las revisiones de detenci\u00f3n de inmigraci\u00f3n siguen un calendario establecido bajo la Ley de Inmigraci\u00f3n y Protecci\u00f3n de los Refugiados \u2014 despu\u00e9s de las dos primeras revisiones (48 horas, luego 7 d\u00edas), las revisiones contin\u00faan cada 30 d\u00edas. La representaci\u00f3n continua importa en cada una.',\n          'unsure': 'Las revisiones de detenci\u00f3n de inmigraci\u00f3n siguen un calendario establecido bajo la Ley de Inmigraci\u00f3n y Protecci\u00f3n de los Refugiados: una primera revisi\u00f3n dentro de las 48 horas de la detenci\u00f3n, una segunda dentro de los siguientes 7 d\u00edas, y luego cada 30 d\u00edas despu\u00e9s de eso.'\n        };\n        return {\n          tier:'critical',\n          bullets:[\n            {t:'crit', text: scheduleText[a.detainedSince] || scheduleText['unsure']},\n            {t:'warn', text:'Por favor llame en lugar de esperar una devoluci\u00f3n de llamada \u2014 esta es la \u00fanica situaci\u00f3n en la que los minutos importan.'}\n          ],\n          deadline:{label:'Estado', sub:'Se recomienda contacto legal inmediato', value:'Llame ahora', urgent:true}\n        };\n      }\n\n      case 'removal': {\n        const bullets = []; let tier='urgent'; let deadline=null;\n        if(a.removalDateKnown==='yes' && a.removalDate){\n          const daysUntil = -daysBetween(a.removalDate, new Date());\n          if(daysUntil<=14){\n            tier='critical';\n            bullets.push({t:'crit', text:`La fecha de expulsi\u00f3n est\u00e1 aproximadamente a ${Math.max(daysUntil,0)} d\u00eda(s). Una suspensi\u00f3n (stay) de la expulsi\u00f3n, si no se ha presentado todav\u00eda, debe presentarse de inmediato.`});\n          } else if(daysUntil<=30){\n            tier='urgent';\n            bullets.push({t:'warn', text:`La fecha de expulsi\u00f3n est\u00e1 aproximadamente a ${daysUntil} d\u00edas \u2014 todav\u00eda hay tiempo para actuar, pero una moci\u00f3n de suspensi\u00f3n y cualquier solicitud subyacente toman tiempo para prepararse adecuadamente.`});\n          } else {\n            tier='strong';\n            bullets.push({t:'good', text:`La fecha de expulsi\u00f3n est\u00e1 a aproximadamente ${daysUntil} d\u00edas \u2014 suficiente margen para preparar adecuadamente una moci\u00f3n de suspensi\u00f3n o una impugnaci\u00f3n si es necesario.`});\n          }\n          deadline = {label:'Fecha de expulsi\u00f3n programada', sub: fmtDate(a.removalDate), remaining: daysUntil>=0?daysUntil:0, unit:'d\u00edas restantes', urgent: daysUntil<=14};\n        } else {\n          bullets.push({t:'warn', text:'Todav\u00eda no hay una fecha de expulsi\u00f3n programada, pero una orden de expulsi\u00f3n existente puede ejecutarse sin mucho aviso adicional \u2014 es mejor no esperar a que aparezca una fecha.'});\n        }\n        if(a.stayFiled==='yes'){\n          bullets.push({t:'good', text:'Ya se ha presentado una suspensi\u00f3n \u2014 revisar\u00edamos su estado actual y los pr\u00f3ximos pasos.'});\n        } else if(a.stayFiled==='no-info'){\n          bullets.push({t:'warn', text:'Una suspensi\u00f3n de la expulsi\u00f3n es una moci\u00f3n separada y de tiempo limitado para pausar la ejecuci\u00f3n \u2014 vale la pena entender sus opciones ahora, antes de que se fije una fecha.'});\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'inadmissibility': {\n        const bullets = []; let tier='urgent'; let deadline=null;\n        const domesticSerious = a.ground==='criminality' && a.convictionLocation!=='outside-canada' && a.criminalSentence==='six-months-or-more';\n        const foreignConviction = a.ground==='criminality' && a.convictionLocation==='outside-canada';\n        const appealLikelyBarred = domesticSerious || a.ground==='security-rights-sanctions';\n        const appealUncertain = foreignConviction && !appealLikelyBarred;\n\n        if(a.ground==='criminality' && a.criminalSentence==='conditional'){\n          bullets.push({t:'good', text:'Una sentencia condicional \u2014 cumplida en la comunidad, como arresto domiciliario, en lugar de en prisi\u00f3n \u2014 generalmente no cuenta como un \"per\u00edodo de prisi\u00f3n\" para la regla que puede impedir una apelaci\u00f3n ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD), incluso a los 6 meses o m\u00e1s. Esta es una distinci\u00f3n importante que vale la pena confirmar con un abogado en lugar de asumir lo peor.'});\n        }\n\n        if(a.stage==='letter'){\n          bullets.push({t:'warn', text:'Responder a una carta de equidad procesal o un informe de inadmisibilidad suele ser la mejor oportunidad para detener el asunto antes de que llegue a una audiencia u orden de expulsi\u00f3n. No hay un plazo fijo establecido por ley para esto \u2014 la fecha espec\u00edfica indicada en su carta controla, as\u00ed que d\u00edganos esa fecha exacta.'});\n        } else if(a.stage==='hearing'){\n          bullets.push({t:'warn', text:'Una audiencia de admisibilidad ante la Divisi\u00f3n de Inmigraci\u00f3n puede terminar en una orden de expulsi\u00f3n \u2014 la representaci\u00f3n antes y durante la audiencia afecta significativamente tanto el resultado como los derechos de apelaci\u00f3n, si los hay, que sobreviven a ella.'});\n        } else if(a.stage==='removal-order'){\n          const days = daysBetween(a.decisionDate, new Date());\n          const windowDays = (appealLikelyBarred || appealUncertain) ? 15 : 30;\n          const remaining = days==null ? null : windowDays - days;\n          if(appealLikelyBarred){\n            bullets.push({t:'warn', text:'Seg\u00fan lo que nos ha contado, este tipo de determinaci\u00f3n generalmente elimina el derecho a apelar ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD) \u2014 la v\u00eda habitual en su lugar es una revisi\u00f3n judicial ante la Corte Federal (Federal Court), que corre en un plazo mucho m\u00e1s corto (aproximadamente 15 d\u00edas desde la decisi\u00f3n, no 30).'});\n          } else if(appealUncertain){\n            bullets.push({t:'warn', text:'Para una condena o acto ocurrido fuera de Canad\u00e1, si sobrevive el derecho de apelaci\u00f3n ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD) depende de la pena m\u00e1xima para el delito en el lugar donde ocurri\u00f3 \u2014 no de la sentencia realmente cumplida \u2014 as\u00ed que no es seguro asumir que aplica la ventana habitual de apelaci\u00f3n de 30 d\u00edas. Trate la ventana m\u00e1s corta de revisi\u00f3n judicial de 15 d\u00edas como el plazo m\u00e1s seguro hasta que un abogado confirme cu\u00e1l aplica.'});\n          } else {\n            bullets.push({t:'warn', text:'Si usted tiene derecho de apelaci\u00f3n, generalmente debe llegar a la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD) dentro de aproximadamente 30 d\u00edas de la decisi\u00f3n \u2014 vale la pena confirmar pronto si este tipo de determinaci\u00f3n todav\u00eda conlleva un derecho de apelaci\u00f3n en su caso.'});\n          }\n          if(remaining!=null){\n            if(remaining<=0){ tier='critical'; bullets.push({t:'crit', text:`La ventana t\u00edpica de ${windowDays} d\u00edas probablemente ya se cerr\u00f3 \u2014 esto necesita revisi\u00f3n inmediata.`}); }\n            else if(remaining<=5){ tier='critical'; bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) en la ventana t\u00edpica de ${windowDays} d\u00edas.`}); }\n            deadline = {label: appealLikelyBarred?'Ventana de revisi\u00f3n judicial (apelaci\u00f3n probablemente impedida)':(appealUncertain?'Ventana de revisi\u00f3n judicial (apelaci\u00f3n incierta \u2014 use el plazo m\u00e1s corto)':'Ventana de apelaci\u00f3n ante la IAD (si est\u00e1 disponible)'), sub:`Aproximadamente ${windowDays} d\u00edas desde la decisi\u00f3n`, remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=5};\n          }\n        } else if(a.stage==='overcome'){\n          tier='standard';\n          bullets.push({t:'good', text:'Puede haber v\u00edas para manejar o superar una inadmisibilidad anterior \u2014 por ejemplo un permiso de residencia temporal, una solicitud humanitaria y compasiva, o en algunos casos de criminalidad una solicitud de rehabilitaci\u00f3n \u2014 pero cu\u00e1l aplica, y si usted siquiera es elegible, depende en gran medida del motivo espec\u00edfico y de cu\u00e1nto tiempo ha pasado.'});\n        } else {\n          bullets.push({t:'warn', text:'Las determinaciones de inadmisibilidad son de alto riesgo y f\u00e1ciles de malinterpretar sin ver la carta o el aviso real \u2014 vale la pena que un abogado revise el documento espec\u00edfico en lugar de adivinar lo que significa.'});\n        }\n\n        if(a.ground==='misrepresentation'){\n          bullets.push({t:'crit', text:'Una determinaci\u00f3n de tergiversaci\u00f3n normalmente conlleva una prohibici\u00f3n de 5 a\u00f1os para volver a solicitar la residencia permanente, adem\u00e1s de cualquier orden de expulsi\u00f3n, y tambi\u00e9n puede conllevar sanciones monetarias importantes en algunos casos posteriores a la obtenci\u00f3n del estatus. Dado lo que est\u00e1 en juego, generalmente vale la pena combatirlo en la etapa m\u00e1s temprana posible \u2014 idealmente antes de que se emita una determinaci\u00f3n formal.'});\n          if(tier==='standard') tier='urgent';\n        } else if(domesticSerious && a.stage!=='removal-order'){\n          bullets.push({t:'warn', text:'Una sentencia de 6 meses o m\u00e1s (entre otros criterios que activan la \"criminalidad grave\") generalmente elimina el derecho a apelar una orden de expulsi\u00f3n resultante ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD), dejando la revisi\u00f3n judicial ante la Corte Federal (Federal Court) \u2014 en un plazo mucho m\u00e1s corto \u2014 como la v\u00eda principal para impugnarla.'});\n        } else if(foreignConviction && a.stage!=='removal-order'){\n          bullets.push({t:'warn', text:'Para una condena o acto ocurrido fuera de Canad\u00e1, los derechos de apelaci\u00f3n se eval\u00faan seg\u00fan la pena m\u00e1xima para el delito en el lugar donde ocurri\u00f3, no la sentencia realmente cumplida \u2014 as\u00ed que una sentencia leve o inexistente no necesariamente preserva un derecho de apelaci\u00f3n. Esto necesita que un abogado eval\u00fae el delito espec\u00edfico.'});\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'refusal': {\n        const days = daysBetween(a.decisionDate, new Date());\n        const bullets = []; let tier='standard'; let deadline=null;\n        if(a.wantChallenge==='reapply'){\n          tier='strong';\n          bullets.push({t:'good', text:'Volver a presentar la solicitud no conlleva el mismo plazo fijo que una revisi\u00f3n judicial, pero abordar cuidadosamente los motivos del rechazo la primera vez importa \u2014 un abogado puede revisar la carta de rechazo antes de que usted vuelva a presentarla.'});\n        } else {\n          const isCitizenship = a.refusalType==='citizenship';\n          const windowDays = isCitizenship ? 30 : (a.decisionLocation==='outside-canada' ? 60 : 15);\n          const remaining = days==null ? null : windowDays - days;\n          if(isCitizenship){\n            bullets.push({t:'warn', text:'Impugnar una decisi\u00f3n de ciudadan\u00eda sigue su propio proceso, independiente de la mayor\u00eda de los rechazos de inmigraci\u00f3n \u2014 todav\u00eda requiere autorizaci\u00f3n (leave) de la Corte Federal (Federal Court), pero con un plazo fijo de 30 d\u00edas en lugar de la divisi\u00f3n de 15\/60 d\u00edas que aplica a los rechazos de visa, permiso, y residencia permanente.'});\n          }\n          if(remaining!=null){\n            if(remaining<=0){\n              tier='critical';\n              bullets.push({t:'crit', text:`La ventana t\u00edpica de ${windowDays} d\u00edas para solicitar autorizaci\u00f3n (leave) para revisi\u00f3n judicial probablemente ya se cerr\u00f3. ${isCitizenship ? 'Se puede solicitar una extensi\u00f3n \"por razones especiales\", pero' : 'Existen extensiones pero son discrecionales y rara vez se otorgan \u2014'} esto necesita un abogado hoy mismo.`});\n            } else if(remaining<=5){\n              tier='critical';\n              bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) en la ventana t\u00edpica de ${windowDays} d\u00edas para solicitar revisi\u00f3n judicial.`});\n            } else if(remaining<=15){\n              tier='urgent';\n              bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas en la ventana t\u00edpica de ${windowDays} d\u00edas para solicitar revisi\u00f3n judicial \u2014 esto necesita avanzar r\u00e1pido.`});\n            } else {\n              tier='strong';\n              bullets.push({t:'good', text:`Quedan aproximadamente ${remaining} d\u00edas en la ventana t\u00edpica de ${windowDays} d\u00edas para solicitar revisi\u00f3n judicial \u2014 suficiente tiempo para preparar una solicitud adecuada.`});\n            }\n            deadline = {label:'Ventana de revisi\u00f3n judicial', sub: isCitizenship ? '30 d\u00edas desde la decisi\u00f3n \u2014 los asuntos de ciudadan\u00eda siguen su propio calendario, no la regla de 15\/60 d\u00edas de inmigraci\u00f3n' : `${windowDays} d\u00edas desde la decisi\u00f3n (decisi\u00f3n tomada ${a.decisionLocation==='outside-canada'?'fuera de':'dentro de'} Canad\u00e1)`, remaining: Math.max(remaining,0), unit:'d\u00edas restantes', urgent: remaining<=5};\n          }\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'delayed': {\n        const days = daysBetween(a.submittedDate, new Date());\n        const bullets = []; let tier='standard';\n\n        if(a.checkedProcessingTimes==='no' || a.checkedProcessingTimes==='not-sure'){\n          bullets.push({t:'warn', text:'Una solicitud de mandamus (pedirle a la Corte Federal que obligue a tomar una decisi\u00f3n) generalmente necesita demostrar que la demora es injustificada en comparaci\u00f3n con lo que normalmente toma este tipo de solicitud \u2014 revisar los tiempos de procesamiento publicados por IRCC para su tipo de solicitud es el primer paso, el m\u00e1s sencillo, para ayudar a demostrar eso.'});\n        } else if(days!=null){\n          tier='urgent';\n          bullets.push({t:'warn', text:`Han pasado aproximadamente ${days} d\u00edas desde que present\u00f3 la solicitud \u2014 vale la pena confirmar exactamente cu\u00e1nto ha superado el tiempo de procesamiento publicado por IRCC, ya que el tama\u00f1o de esa diferencia importa.`});\n        }\n\n        if(a.sentStatusInquiry==='no'){\n          bullets.push({t:'warn', text:'Generalmente se espera que un solicitante le haya pedido a IRCC directamente una actualizaci\u00f3n de estatus antes de acudir a la Corte Federal \u2014 enviar una (y conservar un registro de ello) suele ser un buen siguiente paso, sin importar lo que decida hacer despu\u00e9s.'});\n        } else {\n          bullets.push({t:'good', text:'Usted ya le pidi\u00f3 a IRCC una actualizaci\u00f3n de estatus \u2014 ese registro ayuda a demostrar que intent\u00f3 resolver esto antes de acudir a la Corte Federal.'});\n        }\n\n        if(a.explanationGiven==='security-check'){\n          bullets.push({t:'warn', text:'Una verificaci\u00f3n de seguridad o de antecedentes en curso es el tipo de explicaci\u00f3n que los tribunales a veces han considerado como una raz\u00f3n leg\u00edtima para la demora, no como algo injustificado \u2014 esto no descarta la posibilidad de obtener una soluci\u00f3n, pero es un patr\u00f3n de hechos materialmente diferente que requiere una revisi\u00f3n cuidadosa.'});\n        } else if(a.explanationGiven==='no-explanation'){\n          bullets.push({t:'good', text:'La ausencia de una explicaci\u00f3n para la demora tiende a apoyar el argumento de que es injustificada, en lugar de haber sido causada por algo atribuible a usted o por un proceso declarado como una verificaci\u00f3n de seguridad.'});\n        } else if(a.explanationGiven==='additional-docs'){\n          bullets.push({t:'warn', text:'Si a\u00fan no ha entregado todo lo que IRCC solicit\u00f3, eso puede contar como una demora de la que usted es responsable, no IRCC \u2014 vale la pena confirmar que su expediente est\u00e9 completamente al d\u00eda antes de proceder con esto.'});\n        }\n\n        if(a.checkedProcessingTimes==='yes' && a.sentStatusInquiry==='yes' && (a.explanationGiven==='no-explanation' || a.explanationGiven==='other-reason') && days!=null && days>180){\n          tier='strong';\n          bullets.push({t:'good', text:'Seg\u00fan lo que nos ha contado, est\u00e1n presentes los elementos que los tribunales buscan: una demora m\u00e1s larga de lo que el proceso normalmente requiere, ninguna explicaci\u00f3n clara por parte de IRCC, y pasos que usted ya ha tomado \u2014 esto parece ser un candidato razonablemente s\u00f3lido para una solicitud de mandamus, pero un abogado debe confirmar los detalles.'});\n        }\n\n        if(!bullets.length) bullets.push({t:'good', text:'Vale la pena que un abogado revise si la demora es lo suficientemente injustificada como para respaldar una solicitud de mandamus.'});\n\n        const deadline = {label:'Sin plazo fijo \u2014 pero el tiempo sigue importando', sub:'A diferencia de la mayor\u00eda de los asuntos migratorios, no existe un n\u00famero fijo de d\u00edas para presentar una solicitud de mandamus. Pero una demora injustificada generalmente fortalece el caso mientras m\u00e1s contin\u00faa, y esperar demasiado despu\u00e9s de decidir actuar puede jugar en su contra.', value:'En curso \u2014 act\u00fae sin demora injustificada de su parte'};\n        return {tier, bullets, deadline};\n      }\n\n      case 'sponsorship': {\n        const days = daysBetween(a.refusalDate, new Date());\n        const bullets = []; let tier='standard'; let deadline=null;\n        const remaining = days==null ? null : 30-days;\n        if(remaining!=null){\n          if(remaining<=0){ tier='critical'; bullets.push({t:'crit', text:'La ventana t\u00edpica de 30 d\u00edas para apelar un rechazo de patrocinio ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD) probablemente ya se cerr\u00f3. Esto necesita revisi\u00f3n inmediata \u2014 pueden aplicar excepciones limitadas.'}); }\n          else if(remaining<=5){ tier='critical'; bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) para presentar una apelaci\u00f3n ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD).`}); }\n          else if(remaining<=10){ tier='urgent'; bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas para presentar una apelaci\u00f3n ante la Divisi\u00f3n de Apelaciones de Inmigraci\u00f3n (IAD).`}); }\n          else { tier='strong'; bullets.push({t:'good', text:`Quedan aproximadamente ${remaining} d\u00edas para apelar \u2014 suficiente tiempo para preparar el expediente adecuadamente.`}); }\n          deadline = {label:'Ventana de apelaci\u00f3n de la IAD', sub:'30 d\u00edas desde la fecha de rechazo', remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=5};\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'refugee': {\n        const bullets = []; let tier='standard'; let deadline=null;\n        if(a.stage==='claim-pending'){\n          tier='strong';\n          bullets.push({t:'good', text:'Con un reclamo todav\u00eda pendiente, este es un buen momento para asegurarse de que su relato, evidencia, y preparaci\u00f3n para la audiencia sean s\u00f3lidos antes de que se tome una decisi\u00f3n \u2014 no despu\u00e9s.'});\n        } else {\n          const noRadAppeal = a.stage==='rpd-rejected' && (a.radEligible==='yes' || a.radEligible==='unsure');\n          const windowDays = 15;\n          const label = a.stage==='rpd-rejected'\n            ? (noRadAppeal ? 'revisi\u00f3n judicial ante la Corte Federal (Federal Court)' : 'aviso de apelaci\u00f3n ante la RAD')\n            : (a.stage==='rad-rejected' ? 'revisi\u00f3n judicial ante la Corte Federal (Federal Court)' : null);\n          if(a.stage==='rpd-rejected' && a.radEligible==='yes'){\n            bullets.push({t:'crit', text:'Una determinaci\u00f3n como esta generalmente elimina el derecho a apelar ante la Divisi\u00f3n de Apelaci\u00f3n de Refugiados (RAD) por completo \u2014 la revisi\u00f3n m\u00e1s amplia y basada en documentos de la RAD no est\u00e1 disponible, y la revisi\u00f3n judicial ante la Corte Federal (Federal Court) (un proceso m\u00e1s estricto y discrecional) es la \u00fanica v\u00eda, con el mismo plazo de 15 d\u00edas.'});\n          } else if(a.stage==='rpd-rejected' && a.radEligible==='unsure'){\n            bullets.push({t:'warn', text:'Si usted tiene o no derecho a apelar ante la Divisi\u00f3n de Apelaci\u00f3n de Refugiados (RAD) depende del texto espec\u00edfico de la decisi\u00f3n de la RPD \u2014 algunas determinaciones eliminan ese derecho por completo y lo env\u00edan directamente a revisi\u00f3n judicial ante la Corte Federal (Federal Court) en su lugar. Hasta que eso se confirme, trate la ventana de 15 d\u00edas como el plazo vigente de cualquier manera.'});\n          }\n          const days = daysBetween(a.decisionDate, new Date());\n          if(label && days!=null){\n            const remaining = windowDays-days;\n            if(remaining<=0){ tier='critical'; bullets.push({t:'crit', text:`La ventana t\u00edpica de ${windowDays} d\u00edas para presentar la solicitud de ${label} probablemente ya se cerr\u00f3 \u2014 esto necesita revisi\u00f3n inmediata.`}); }\n            else if(remaining<=5){ tier='critical'; bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) para presentar la solicitud de ${label}.`}); }\n            else { tier='urgent'; bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas para presentar la solicitud de ${label}.`}); }\n            deadline = {label, sub:`${windowDays} d\u00edas desde la decisi\u00f3n`, remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=5};\n          } else if(a.stage==='fc-judicial-review'){\n            tier='strong';\n            bullets.push({t:'good', text:'Ya en la Corte Federal (Federal Court) \u2014 revisar\u00edamos el estado actual de la presentaci\u00f3n y los pr\u00f3ximos pasos.'});\n          }\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'appealing': {\n        const bullets = []; let tier='standard';\n        if(a.hasCounsel==='no'){\n          tier='urgent';\n          bullets.push({t:'warn', text:'Usted se est\u00e1 representando a s\u00ed mismo en una apelaci\u00f3n activa \u2014 estos procesos conllevan plazos procesales estrictos que son f\u00e1ciles de perder sin un abogado que los siga de cerca.'});\n        } else {\n          bullets.push({t:'good', text:'Usted ya cuenta con representaci\u00f3n \u2014 tratar\u00edamos esto como una revisi\u00f3n de segunda opini\u00f3n de su estrategia actual.'});\n        }\n        return {tier, bullets, deadline:null};\n      }\n\n      case 'other-imm':\n        return {tier:'standard', bullets:[{t:'good', text:'Vale la pena la revisi\u00f3n de un abogado para identificar qu\u00e9 proceso aplica y si hay alg\u00fan plazo en curso.'}], deadline:null};\n\n      \/* ---- Civil ---- *\/\n      case 'served': {\n        const days = daysBetween(a.servedDate, new Date());\n        const windowDays = a.servedWhere==='ontario'?20 : a.servedWhere==='elsewhere-canada'?40 : 60;\n        const remaining = days==null?null:windowDays-days;\n        const bullets = []; let tier='urgent'; let deadline=null;\n        if(a.filedResponse==='yes'){\n          tier='strong';\n          bullets.push({t:'good', text:'Usted ya ha presentado una respuesta \u2014 revisar\u00edamos su estrategia de defensa y los pr\u00f3ximos pasos procesales.'});\n        } else if(remaining!=null){\n          if(remaining<=0){ tier='critical'; bullets.push({t:'crit', text:'La ventana t\u00edpica para responder probablemente ya pas\u00f3 \u2014 usted podr\u00eda estar en riesgo de un juicio en rebeld\u00eda (default judgment). Esto necesita atenci\u00f3n inmediata.'}); }\n          else if(remaining<=5){ tier='critical'; bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) para presentar una defensa antes de arriesgarse a un juicio en rebeld\u00eda.`}); }\n          else { tier='urgent'; bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas en la ventana t\u00edpica de ${windowDays} d\u00edas para responder.`}); }\n        }\n        if(remaining!=null){\n          deadline = {label:'Plazo para responder', sub:`${windowDays} d\u00edas \u2014 notificado ${a.servedWhere==='ontario'?'en Ontario':a.servedWhere==='elsewhere-canada'?'en otro lugar de Canad\u00e1':'fuera de Canad\u00e1'}`, remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=5};\n        }\n        return {tier, bullets, deadline};\n      }\n\n      case 'contract': case 'business': case 'other-civil': {\n        const days = daysBetween(a.issueDate, new Date());\n        const bullets = []; let tier='standard'; let deadline=null;\n        const constructionFlag = a.constructionInvolved==='yes' || a.constructionInvolved==='unsure';\n\n        if(constructionFlag && days!=null){\n          const lienRemaining = 60-days;\n          tier='critical';\n          if(lienRemaining>=0){\n            bullets.push({t:'crit', text:`El trabajo de construcci\u00f3n tiene su propio plazo, mucho m\u00e1s corto: un gravamen (lien) para asegurar el pago contra la propiedad generalmente debe preservarse dentro de 60 d\u00edas desde el \u00faltimo trabajo o material suministrado (no 2 a\u00f1os), y luego iniciarse formalmente en los tribunales dentro de 90 d\u00edas adicionales despu\u00e9s de eso. Quedan aproximadamente ${lienRemaining} d\u00eda(s) para preservarlo \u2014 el reclamo de pago subyacente todav\u00eda puede existir aunque se pierda esta ventana, pero la garant\u00eda contra la propiedad generalmente se pierde.`});\n          } else {\n            bullets.push({t:'crit', text:'La ventana de aproximadamente 60 d\u00edas para preservar un gravamen de construcci\u00f3n probablemente ya pas\u00f3 \u2014 esa garant\u00eda contra la propiedad generalmente se pierde una vez que vence este plazo, aunque el reclamo de pago subyacente en s\u00ed todav\u00eda puede perseguirse bajo el plazo est\u00e1ndar de 2 a\u00f1os. Un abogado debe confirmarlo de inmediato.'});\n          }\n          deadline = {label:'Plazo del gravamen de construcci\u00f3n', sub:'~60 d\u00edas para preservarlo, luego ~90 m\u00e1s para perfeccionarlo \u2014 mucho m\u00e1s corto que la regla de 2 a\u00f1os a continuaci\u00f3n', remaining:Math.max(lienRemaining,0), unit: lienRemaining>=0?'d\u00edas restantes':'d\u00edas de retraso', urgent:true};\n        } else if(days!=null && days>LIMITATION_DAYS){\n          tier='critical';\n          bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde que surgi\u00f3 o se descubri\u00f3 este problema \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de Ontario puede haber pasado. Un abogado debe confirmar de inmediato si aplica alguna excepci\u00f3n.'});\n          deadline={label:'Plazo de prescripci\u00f3n de Ontario', sub:'2 a\u00f1os desde el descubrimiento \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n        } else if(days!=null){\n          if(days>LIMITATION_DAYS-30){ tier='urgent'; bullets.push({t:'warn', text:'Usted se est\u00e1 acercando al plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os \u2014 esto debe avanzar r\u00e1pido.'}); }\n          deadline={label:'Plazo de prescripci\u00f3n de Ontario', sub:'2 a\u00f1os desde el descubrimiento del problema', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n        }\n        if(a.arbitrationClause==='yes' && a.consumerContract==='consumer'){\n          bullets.push({t:'good', text:'La Ley de Protecci\u00f3n al Consumidor de Ontario (Consumer Protection Act) generalmente hace que las cl\u00e1usulas de arbitraje (y las prohibiciones de unirse a una demanda colectiva) sean inaplicables contra un consumidor individual \u2014 as\u00ed que a pesar de lo que diga el acuerdo, es probable que usted todav\u00eda tenga derecho a demandar en los tribunales. Las empresas no reciben esta protecci\u00f3n, as\u00ed que esto depende de que usted haya estado tratando con ellos como consumidor personal, no como empresa.'});\n        } else if(a.arbitrationClause==='yes'){\n          bullets.push({t:'warn', text:'Si el acuerdo tiene una cl\u00e1usula de arbitraje v\u00e1lida, los tribunales de Ontario generalmente pausar\u00e1n o desestimar\u00e1n una demanda presentada en incumplimiento de ella y enviar\u00e1n la disputa a arbitraje privado en su lugar \u2014 un proceso significativamente diferente (y a menudo m\u00e1s costoso y menos p\u00fablico) que ir a los tribunales. Los contratos de consumo a menudo no pueden hacer cumplir esto contra un individuo, pero los acuerdos entre empresas generalmente s\u00ed pueden \u2014 vale la pena confirmar exactamente qu\u00e9 exige esa cl\u00e1usula y en qu\u00e9 categor\u00eda cae usted.'});\n        } else if(a.arbitrationClause==='not-sure'){\n          bullets.push({t:'warn', text:'Que esto termine en los tribunales o en arbitraje privado puede depender enteramente de un texto que la mayor\u00eda de la gente pasa por alto \u2014 y de si usted estaba tratando como consumidor o como empresa, ya que la ley de Ontario trata estos casos de manera muy diferente. Vale la pena que un abogado revise el acuerdo antes de asumir cualquiera de los dos caminos.'});\n        }\n        if(a.disputeValue==='over-200k' || a.disputeValue==='50k-200k'){\n          bullets.push({t:'good', text:'El valor descrito cae dentro de la jurisdicci\u00f3n de la Corte Superior (Superior Court), donde la participaci\u00f3n de un abogado normalmente tiene el mayor impacto.'});\n          if(tier==='standard') tier='strong';\n        } else if(a.disputeValue==='under-50k'){\n          bullets.push({t:'good', text:'A este valor, el Tribunal de Reclamos Menores de Ontario (Small Claims Court) (jurisdicci\u00f3n hasta $50,000) puede ser una opci\u00f3n m\u00e1s r\u00e1pida y de menor costo, que vale la pena discutir junto con un reclamo civil completo.'});\n        }\n        if(a.writtenAgreement==='yes'){\n          bullets.push({t:'good', text:'Un acuerdo por escrito generalmente hace que los t\u00e9rminos \u2014 y cualquier incumplimiento \u2014 sean m\u00e1s f\u00e1ciles de probar.'});\n        }\n        if(a.demandSent==='yes'){\n          bullets.push({t:'good', text:'Usted ya intent\u00f3 resolver esto directamente \u2014 ese registro ayuda si esto avanza m\u00e1s.'});\n        }\n        if(!bullets.length) bullets.push({t:'good', text:'Vale la pena la revisi\u00f3n de un abogado para confirmar la solidez del reclamo y el mejor pr\u00f3ximo paso.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'property': {\n        const bullets = []; let tier='standard'; let deadline=null;\n        if(a.propertyMatterType==='residential-tenancy'){\n          tier='urgent';\n          bullets.push({t:'crit', text:'Las disputas residenciales entre propietario e inquilino en Ontario generalmente van a la Junta de Propietarios e Inquilinos (Landlord and Tenant Board), no a los tribunales ordinarios \u2014 la Junta tiene sus propios formularios, per\u00edodos de aviso, y plazos que son muy diferentes a los de una demanda ordinaria (y usualmente mucho m\u00e1s cortos que el plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os).'});\n          if(a.tenancyIssue==='illegal-charges'){\n            bullets.push({t:'warn', text:'Los reclamos para recuperar un aumento de renta ilegal o un cargo ilegal generalmente est\u00e1n sujetos a una ventana de aproximadamente 1 a\u00f1o en la Junta, no 2 a\u00f1os \u2014 vale la pena actuar r\u00e1pido en esto en lugar de asumir que aplica el plazo civil est\u00e1ndar.'});\n          } else if(a.tenancyIssue==='arrears-eviction'){\n            bullets.push({t:'crit', text:'Los asuntos de desalojo y renta atrasada avanzan seg\u00fan el propio calendario de aviso y audiencia de la Junta, que puede ser r\u00e1pido \u2014 si usted recibi\u00f3 un aviso o una solicitud, d\u00edganos la fecha exacta que aparece en \u00e9l en lugar de depender de una estimaci\u00f3n general.'});\n          } else if(a.tenancyIssue==='damage-after-move-out' && a.tenancyStatus==='vacated'){\n            bullets.push({t:'good', text:'Como el inquilino ya se mud\u00f3, un reclamo por da\u00f1o a la propiedad o renta impaga a menudo puede ir al Tribunal de Reclamos Menores (Small Claims Court) en lugar de a la Junta \u2014 esta es una de las pocas situaciones en las que el sistema judicial ordinario realmente est\u00e1 disponible.'});\n            if(tier==='urgent') tier='strong';\n          }\n        } else if(a.propertyMatterType==='other-property' && (a.landIssueType==='boundary-possession' || a.landIssueType==='not-sure')){\n          tier='strong';\n          bullets.push({t:'good', text:'Las disputas de l\u00edmites, posesi\u00f3n, y servidumbres generalmente no siguen para nada el plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os \u2014 una ley mucho m\u00e1s antigua y separada (la Ley de Prescripci\u00f3n de Bienes Ra\u00edces \/ Real Property Limitations Act) rige los reclamos para recuperar o disputar un terreno, con un plazo general de 10 a\u00f1os en lugar de 2. Eso es m\u00e1s margen que la mayor\u00eda de los reclamos civiles, pero es un conjunto de reglas genuinamente distinto, y vale la pena confirmarlo con un abogado en lugar de asumir cualquiera de los dos plazos.'});\n          if(a.demandSent==='yes'){\n            bullets.push({t:'good', text:'Usted ya intent\u00f3 resolver esto directamente \u2014 ese registro ayuda si esto avanza m\u00e1s.'});\n          }\n        } else {\n          const days = daysBetween(a.issueDate, new Date());\n          if(days!=null && days>LIMITATION_DAYS){\n            tier='critical';\n            bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde que surgi\u00f3 o se descubri\u00f3 este problema \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de Ontario puede haber pasado. Un abogado debe confirmar de inmediato si aplica alguna excepci\u00f3n.'});\n            deadline={label:'Plazo de prescripci\u00f3n de Ontario', sub:'2 a\u00f1os desde el descubrimiento \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n          } else if(days!=null){\n            if(days>LIMITATION_DAYS-30){ tier='urgent'; bullets.push({t:'warn', text:'Usted se est\u00e1 acercando al plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os \u2014 esto debe avanzar r\u00e1pido.'}); }\n            deadline={label:'Plazo de prescripci\u00f3n de Ontario', sub:'2 a\u00f1os desde el descubrimiento del problema', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n          }\n          if(a.propertyMatterType==='commercial-lease'){\n            bullets.push({t:'good', text:'Los arrendamientos comerciales no est\u00e1n cubiertos por la Junta de Propietarios e Inquilinos (Landlord and Tenant Board) \u2014 esto generalmente avanza a trav\u00e9s del sistema judicial ordinario, como otras disputas contractuales.'});\n          }\n          if(a.disputeValue==='over-200k' || a.disputeValue==='50k-200k'){\n            bullets.push({t:'good', text:'El valor descrito cae dentro de la jurisdicci\u00f3n de la Corte Superior (Superior Court), donde la participaci\u00f3n de un abogado normalmente tiene el mayor impacto.'});\n            if(tier==='standard') tier='strong';\n          } else if(a.disputeValue==='under-50k'){\n            bullets.push({t:'good', text:'A este valor, el Tribunal de Reclamos Menores de Ontario (Small Claims Court) (jurisdicci\u00f3n hasta $50,000) puede ser una opci\u00f3n m\u00e1s r\u00e1pida y de menor costo, que vale la pena discutir junto con un reclamo civil completo.'});\n          }\n          if(a.demandSent==='yes'){\n            bullets.push({t:'good', text:'Usted ya intent\u00f3 resolver esto directamente \u2014 ese registro ayuda si esto avanza m\u00e1s.'});\n          }\n        }\n        if(!bullets.length) bullets.push({t:'good', text:'Vale la pena la revisi\u00f3n de un abogado para confirmar la solidez del reclamo y el mejor pr\u00f3ximo paso.'});\n        return {tier, bullets, deadline};\n      }\n\n      case 'defamation': {\n        const days = daysBetween(a.issueDate, new Date());\n        const bullets = []; let tier='standard'; let deadline=null;\n        if(a.publicationType==='newspaper-broadcast'){\n          const remaining = days==null?null:42-days;\n          if(remaining!=null){\n            if(remaining<=0){ tier='critical'; bullets.push({t:'crit', text:'La Ley de Difamaci\u00f3n e Injuria de Ontario (Libel and Slander Act) exige un aviso por escrito dentro de 6 semanas para una declaraci\u00f3n de peri\u00f3dico o transmisi\u00f3n \u2014 esa ventana probablemente ya se cerr\u00f3, lo cual puede impedir el reclamo por completo. Esto necesita un abogado de inmediato.'}); }\n            else if(remaining<=10){ tier='critical'; bullets.push({t:'crit', text:`Solo quedan aproximadamente ${remaining} d\u00eda(s) en la estricta ventana de aviso de 6 semanas exigida por la Ley de Difamaci\u00f3n e Injuria de Ontario para declaraciones de peri\u00f3dico o transmisi\u00f3n.`}); }\n            else { tier='urgent'; bullets.push({t:'warn', text:`Quedan aproximadamente ${remaining} d\u00edas en la ventana de aviso de 6 semanas \u2014 mucho m\u00e1s corta de lo que la mayor\u00eda de la gente espera para un reclamo civil.`}); }\n            deadline={label:'Aviso bajo la Libel and Slander Act', sub:'Aviso por escrito de 6 semanas, luego 3 meses para demandar', remaining:Math.max(remaining,0), unit:'d\u00edas restantes', urgent:remaining<=10};\n          }\n        } else if(a.publicationType==='online-social'){\n          tier='urgent';\n          bullets.push({t:'warn', text:'Las reglas cortas de aviso y prescripci\u00f3n para declaraciones de peri\u00f3dico o transmisi\u00f3n han sido extendidas por los tribunales a las ediciones en l\u00ednea de un peri\u00f3dico o transmisor establecido, pero una publicaci\u00f3n independiente en redes sociales o un blog generalmente se trata bajo el plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os en su lugar \u2014 aunque esa l\u00ednea no siempre es clara, y un abogado debe confirmar pronto qu\u00e9 r\u00e9gimen aplica a su situaci\u00f3n en lugar de asumir uno u otro.'});\n          if(days!=null && days>LIMITATION_DAYS){\n            tier='critical';\n            bullets.push({t:'crit', text:'Tambi\u00e9n han pasado m\u00e1s de 2 a\u00f1os desde que usted se enter\u00f3 de la declaraci\u00f3n, lo cual plantea una preocupaci\u00f3n de prescripci\u00f3n separada.'});\n          }\n        } else {\n          if(days!=null && days>LIMITATION_DAYS){\n            tier='critical';\n            bullets.push({t:'crit', text:'Han pasado m\u00e1s de 2 a\u00f1os desde que usted se enter\u00f3 de la declaraci\u00f3n \u2014 el plazo de prescripci\u00f3n est\u00e1ndar de Ontario puede haber pasado. Un abogado debe confirmar de inmediato si aplica alguna excepci\u00f3n.'});\n            deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo de 2 a\u00f1os \u2014 probablemente ya pas\u00f3', value:'Plazo vencido', urgent:true};\n          } else if(days!=null){\n            deadline = {label:'Plazo de prescripci\u00f3n de Ontario', sub:'Plazo est\u00e1ndar para iniciar un reclamo \u2014 las reglas cortas de aviso de peri\u00f3dico\/transmisi\u00f3n no aplican a una declaraci\u00f3n puramente hablada', remaining:LIMITATION_DAYS-days, unit:'d\u00edas restantes'};\n          }\n          bullets.push({t:'good', text:'El requisito corto de aviso de 6 semanas de Ontario es espec\u00edfico para declaraciones de peri\u00f3dico y transmisi\u00f3n \u2014 una declaraci\u00f3n puramente hablada generalmente se rige por el plazo de prescripci\u00f3n est\u00e1ndar de 2 a\u00f1os en su lugar, no uno m\u00e1s corto.'});\n        }\n        if(a.disputeValue==='over-200k' || a.disputeValue==='50k-200k'){\n          bullets.push({t:'good', text:'El da\u00f1o descrito sugiere perjuicios significativos, lo cual importa para c\u00f3mo se persigue un reclamo de difamaci\u00f3n.'});\n        }\n        return {tier, bullets, deadline};\n      }\n    }\n    return {tier:'standard', bullets:[{t:'good', text:'Vale la pena la revisi\u00f3n de un abogado.'}], deadline:null};\n  }\n\n  const BANNER_COPY = {\n    critical: {headline:'Esto necesita la atenci\u00f3n de un abogado en este momento.', sub:'Seg\u00fan sus respuestas, existe un riesgo real de que un plazo haya pasado o est\u00e9 por vencer. Por favor llame en lugar de esperar una devoluci\u00f3n de llamada.'},\n    urgent:   {headline:'Esto parece urgente por tiempo.', sub:'Hay un plazo corriendo de fondo en su situaci\u00f3n. Contactarnos esta semana mantiene sus opciones abiertas.'},\n    strong:   {headline:'Esto parece valer la pena una consulta esta misma semana.', sub:'Seg\u00fan lo que ha compartido, los hechos respaldan una revisi\u00f3n de caso adecuada por uno de nuestros abogados.'},\n    standard: {headline:'Esto vale la pena una conversaci\u00f3n.', sub:'Nada de lo que nos ha contado descarta esto \u2014 una breve llamada le dir\u00e1 d\u00f3nde se encuentra.'}\n  };\n\n  \/* ============ FIELD LABELS (for snapshot + summary) ============ *\/\n  const OPTION_LABELS = {}; \/\/ filled lazily by scanning flows\n\n  function buildOptionLabelIndex(){\n    Object.values(FLOWS).forEach(steps=>steps.forEach(s=>{\n      if(s.options) s.options.forEach(o=>{ OPTION_LABELS[s.id+'::'+o.v]=o.l; });\n    }));\n  }\n  buildOptionLabelIndex();\n\n  function labelFor(stepId, value){\n    return OPTION_LABELS[stepId+'::'+value] || value;\n  }\n\n  \/* ============ STATE ============ *\/\n  const state = { view:'intro', practice:null, subtype:null, stepIndex:0, answers:{}, contact:{name:'',phone:'',email:'',bestTime:'',dataConsent:false}, agreed:false, verify:{busy:false,error:'',verifiedEmail:'',token:''} };\n  const LEAD_ENDPOINT = '\/wp-json\/azimi\/v1\/lead';\n  const VERIFY_SEND_ENDPOINT = '\/wp-json\/azimi\/v1\/verify\/send';\n  const VERIFY_CHECK_ENDPOINT = '\/wp-json\/azimi\/v1\/verify\/check';\n\n  function getFlow(){ return (FLOWS[state.subtype]||[]).filter(s => !s.skipIf || !s.skipIf(state.answers)); }\n  function currentStep(){ return getFlow()[state.stepIndex]; }\n\n  function isValidEmail(v){ return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test((v||'').trim()); }\n\n  function isAnswered(s){\n    if(s.optional) return true;\n    if(s.type==='contact') return !!(state.contact.name.trim() && isValidEmail(state.contact.email) && state.contact.dataConsent);\n    if(s.type==='checkbox') return (state.answers[s.id]||[]).length>0;\n    if(s.type==='textarea' || s.type==='text') return !!(state.answers[s.id]||'').trim();\n    return state.answers[s.id]!=null && state.answers[s.id]!=='';\n  }\n\n  function hasValue(s){\n    if(s.type==='checkbox') return (state.answers[s.id]||[]).length>0;\n    if(s.type==='textarea' || s.type==='text' || s.type==='date') return !!(state.answers[s.id]||'').toString().trim();\n    return state.answers[s.id]!=null && state.answers[s.id]!=='';\n  }\n\n  \/* ============ RENDER ============ *\/\n  const root = document.getElementById('caseTool');\n\n  function render(){\n    if(state.view==='intro') return renderIntro();\n    if(state.view==='subtype') return renderSubtype();\n    if(state.view==='steps') return renderSteps();\n    if(state.view==='verify') return renderVerify();\n    if(state.view==='results') return renderResults();\n  }\n\n  function renderIntro(){\n    const preselected = state.practice ? PRACTICES.find(p=>p.id===state.practice) : null;\n    root.innerHTML = `\n      <div class=\"ct-header\">\n        <span class=\"ct-eyebrow\">${I.doc}Herramienta de Evaluaci\u00f3n de Caso<\/span>\n        <h2>Sepa d\u00f3nde se encuentra. <span class=\"accent-italic\">En dos minutos, gratis.<\/span><\/h2>\n        <p>Responda algunas preguntas sobre su accidente, asunto de inmigraci\u00f3n, o disputa. Lo guiaremos a trav\u00e9s de lo que aplica a su situaci\u00f3n \u2014 los plazos, el proceso, y sus opciones \u2014 y lo dirigiremos hacia el siguiente paso correcto.<\/p>\n      <\/div>\n      ${preselected ? `<p class=\"ct-preselect-note\">${I.check} Retomando donde lo dej\u00f3: <strong>${preselected.title}<\/strong>. Confirme abajo para continuar, o elija un asunto diferente abajo.<\/p>` : ''}\n      <div class=\"ct-consent\" id=\"ctConsent\">\n        <label class=\"ct-consent-label\">\n          <input type=\"checkbox\" id=\"ctAgree\" ${state.agreed?'checked':''}>\n          <span class=\"ct-consent-mark\">${I.check}<\/span>\n          <span class=\"ct-consent-text\">Entiendo que esta es una herramienta interactiva de autoevaluaci\u00f3n que ofrece informaci\u00f3n general solamente, usando categor\u00edas simplificadas que pueden no coincidir con mi situaci\u00f3n real \u2014 no proporciona asesor\u00eda legal y no es un sustituto de ella. Usarla no crea una relaci\u00f3n abogado-cliente con Azimi Law, y Azimi Law no me debe ning\u00fan deber de cuidado al proporcionarla. No debo basarme en ning\u00fan nivel, plazo, o resultado que me muestre \u2014 cualquier confianza depositada es bajo mi propio riesgo \u2014 y no debo demorar en buscar asesor\u00eda legal bas\u00e1ndome en lo que me indique. Si mi situaci\u00f3n es urgente, debo llamar a Azimi Law o a otro abogado de inmediato en lugar de completar esta herramienta. Azimi Law no es responsable de c\u00f3mo yo use o me base en la informaci\u00f3n que proporciona, incluyendo cualquier plazo que pueda perder, y enviar esta herramienta no obliga a Azimi Law a responder ni a aceptar mi caso. Entiendo que la ley est\u00e1 sujeta a cambios y que esta herramienta refleja la ley solo a partir de la fecha indicada en ella. Entiendo que todav\u00eda necesito hablar directamente con un abogado \u2014 en Azimi Law o en otro lugar \u2014 para obtener asesor\u00eda real sobre mi situaci\u00f3n espec\u00edfica.<\/span>\n        <\/label>\n        <p class=\"ct-consent-warning\" id=\"ctConsentWarning\" hidden>Por favor marque la casilla de arriba antes de continuar \u2014 necesitamos que confirme que entiende esto primero.<\/p>\n      <\/div>\n      <div class=\"ct-picker ${state.agreed?'':'is-disabled'}\" id=\"ctPicker\">\n        ${PRACTICES.map(p=>`\n          <button type=\"button\" class=\"ct-pick-card\" data-practice=\"${p.id}\">\n            <div class=\"ct-pick-icon\">${I[p.icon]}<\/div>\n            <h3>${p.title}<\/h3>\n            <p>${p.blurb}<\/p>\n            <span class=\"ct-pick-arrow\">Comenzar ${I.arrow}<\/span>\n          <\/button>\n        `).join('')}\n      <\/div>\n      <p class=\"ct-call-fallback\">\u00bfPrefiere hablar con alguien ahora mismo? <a href=\"tel:+14169004128\">${I.phone} Llame al 416-900-4128<\/a>. Las consultas son gratuitas para asuntos de Lesiones Personales; Litigios de Inmigraci\u00f3n y Litigios Civiles generalmente son con honorarios fijos o un retainer \u2014 pregunte al llamar.<\/p>\n      <p class=\"ct-footnote\">Sus respuestas permanecen en esta pesta\u00f1a del navegador mientras las responde. Cerca del final, le pediremos su informaci\u00f3n de contacto y un correo electr\u00f3nico verificado para que Azimi Law pueda dar seguimiento. Esta es una herramienta interactiva que ofrece informaci\u00f3n general solamente, basada en la ley y los procedimientos de Ontario vigentes al 4 de septiembre de 2026 (la ley est\u00e1 sujeta a cambios) \u2014 no asesor\u00eda legal, y no un sustituto de hablar con un abogado. Completarla no crea una relaci\u00f3n abogado-cliente. Los abogados de Azimi Law est\u00e1n autorizados por el Colegio de Abogados de Ontario (Law Society of Ontario).<\/p>\n    `;\n    root.querySelector('#ctAgree').addEventListener('change', (e)=>{\n      state.agreed = e.target.checked;\n      root.querySelector('#ctPicker').classList.toggle('is-disabled', !state.agreed);\n      if(state.agreed){\n        root.querySelector('#ctConsentWarning').hidden = true;\n        if(state.practice){\n          state.subtype = null; state.stepIndex = 0; state.answers = {};\n          state.view = 'subtype';\n          render();\n        }\n      }\n    });\n    root.querySelectorAll('[data-practice]').forEach(btn=>{\n      btn.addEventListener('click', ()=>{\n        state.practice = btn.getAttribute('data-practice');\n        if(!state.agreed){\n          root.querySelector('#ctConsentWarning').hidden = false;\n          root.querySelector('#ctConsent').scrollIntoView({behavior:'smooth', block:'center'});\n          return;\n        }\n        state.subtype = null; state.stepIndex = 0; state.answers = {};\n        state.view = 'subtype';\n        render();\n      });\n    });\n  }\n\n  function renderSubtype(){\n    const p = PRACTICES.find(x=>x.id===state.practice);\n    root.innerHTML = `\n      <div class=\"ct-header\" style=\"margin-bottom:28px;\">\n        <span class=\"ct-eyebrow\">${I[p.icon]}${p.title}<\/span>\n        <h2 style=\"font-size:clamp(24px,3.4vw,32px);\">\u00bfCu\u00e1l describe mejor su situaci\u00f3n?<\/h2>\n      <\/div>\n      <button type=\"button\" class=\"ct-back-link\" id=\"ctBackToIntro\">${I.back} Elegir un tipo de asunto diferente<\/button>\n      <div class=\"ct-picker\" style=\"grid-template-columns:repeat(2,1fr); margin-top:14px;\">\n        ${SUBTYPES[state.practice].map(s=>`\n          <button type=\"button\" class=\"ct-pick-card\" data-subtype=\"${s.id}\" style=\"flex-direction:row; align-items:center; gap:14px;\">\n            <div style=\"flex:1;\">\n              <h3 style=\"font-size:16.5px; margin-bottom:3px;\">${s.title}<\/h3>\n              <p>${s.blurb}<\/p>\n            <\/div>\n            <span style=\"color:var(--gold-600);\">${I.arrow}<\/span>\n          <\/button>\n        `).join('')}\n      <\/div>\n    `;\n    root.querySelector('#ctBackToIntro').addEventListener('click', ()=>{ state.view='intro'; render(); });\n    root.querySelectorAll('[data-subtype]').forEach(btn=>{\n      btn.addEventListener('click', ()=>{\n        state.subtype = btn.getAttribute('data-subtype');\n        state.stepIndex = 0; state.answers = {};\n        state.view = 'steps';\n        render();\n      });\n    });\n  }\n\n  function renderSteps(){\n    const flow = getFlow();\n    const s = flow[state.stepIndex];\n    const total = flow.length;\n    const pct = Math.round(((state.stepIndex)\/(total))*100);\n\n    root.innerHTML = `\n      <div class=\"ct-console\">\n        <button type=\"button\" class=\"ct-back-link\" id=\"ctBack\">${I.back} ${state.stepIndex===0? 'Cambiar tipo de asunto' : 'Atr\u00e1s'}<\/button>\n        <div class=\"ct-form-panel\">\n          <div class=\"ct-progress-row\">\n            <span class=\"ct-progress-label\">Paso ${state.stepIndex+1} de ${total}<\/span>\n            <span class=\"ct-progress-label\">${pct}%<\/span>\n          <\/div>\n          <div class=\"ct-progress-track\"><div class=\"ct-progress-fill\" style=\"width:${pct}%\"><\/div><\/div>\n          <div id=\"ctStepBody\"><\/div>\n          <div class=\"ct-nav-row\">\n            <span class=\"ct-req-note\">${s.optional ? 'Opcional' : ''}<\/span>\n            <button type=\"button\" class=\"ct-btn ct-btn-primary\" id=\"ctNext\" ${isAnswered(s)?'':'disabled'}>\n              ${state.stepIndex===total-1? 'Ver mi resumen de caso' : 'Continuar'} ${I.arrow}\n            <\/button>\n          <\/div>\n        <\/div>\n        <aside class=\"ct-snapshot\" id=\"ctSnapshot\"><\/aside>\n      <\/div>\n    `;\n\n    renderStepBody(s);\n    renderSnapshot();\n\n    root.querySelector('#ctBack').addEventListener('click', ()=>{\n      if(state.stepIndex===0){ state.view='subtype'; }\n      else { state.stepIndex--; }\n      render();\n    });\n    root.querySelector('#ctNext').addEventListener('click', ()=>{\n      if(state.stepIndex < total-1){ state.stepIndex++; render(); }\n      else { proceedFromContact(); }\n    });\n  }\n\n  function proceedFromContact(){\n    const email = (state.contact.email||'').trim().toLowerCase();\n    if(state.verify.verifiedEmail && state.verify.token && state.verify.verifiedEmail.toLowerCase()===email){\n      \/\/ este correo ya fue verificado antes en esta sesi\u00f3n \u2014 no hace falta reenviar un c\u00f3digo\n      submitLeadToBackend();\n      state.view='results';\n      render();\n      return;\n    }\n    state.verify.error = '';\n    state.verify.token = '';\n    state.view = 'verify';\n    sendVerificationCode();\n  }\n\n  function postJSON(url, payload){\n    return fetch(url, {\n      method:'POST',\n      credentials:'same-origin',\n      headers:{'Content-Type':'application\/json'},\n      body: JSON.stringify(payload)\n    }).then(function(r){ return r.json().catch(function(){ return {ok:false}; }); });\n  }\n\n  function sendVerificationCode(){\n    state.verify.busy = true; state.verify.error = ''; render();\n    postJSON(VERIFY_SEND_ENDPOINT, {email: state.contact.email}).then(function(res){\n      state.verify.busy = false;\n      if(!res || !res.ok){\n        state.verify.error = (res && res.error==='rate_limited')\n          ? 'Demasiados intentos \u2014 espere unos minutos e intente de nuevo.'\n          : 'No pudimos enviar un c\u00f3digo en este momento. Intente de nuevo en un momento, o ll\u00e1menos directamente al 416-900-4128.';\n      }\n      render();\n    }).catch(function(){\n      state.verify.busy = false;\n      state.verify.error = 'No pudimos conectar con nuestro servidor. Verifique su conexi\u00f3n e intente de nuevo, o ll\u00e1menos directamente al 416-900-4128.';\n      render();\n    });\n  }\n\n  function checkVerificationCode(code){\n    state.verify.busy = true; state.verify.error = ''; render();\n    postJSON(VERIFY_CHECK_ENDPOINT, {email: state.contact.email, code: code}).then(function(res){\n      state.verify.busy = false;\n      if(res && res.ok){\n        state.verify.verifiedEmail = state.contact.email;\n        state.verify.token = res.token;\n        submitLeadToBackend();\n        state.view = 'results';\n        render();\n      } else {\n        const messages = {\n          wrong_code: 'Ese c\u00f3digo no coincide \u2014 verif\u00edquelo e intente de nuevo.',\n          too_many_attempts: 'Demasiados intentos incorrectos. Solicite un nuevo c\u00f3digo.',\n          expired_or_not_found: 'Ese c\u00f3digo ha expirado. Solicite uno nuevo.',\n          rate_limited: 'Demasiados intentos \u2014 espere unos minutos e intente de nuevo.'\n        };\n        state.verify.error = (res && messages[res.error]) || 'Ese c\u00f3digo no funcion\u00f3 \u2014 intente de nuevo.';\n        render();\n      }\n    }).catch(function(){\n      state.verify.busy = false;\n      state.verify.error = 'No pudimos conectar con nuestro servidor. Verifique su conexi\u00f3n e intente de nuevo.';\n      render();\n    });\n  }\n\n  function submitLeadToBackend(){\n    const r = score(state.practice, state.subtype, state.answers);\n    const meta = tierMeta(r.tier);\n    const p = PRACTICES.find(x=>x.id===state.practice);\n    const subtypeObj = SUBTYPES[state.practice].find(x=>x.id===state.subtype);\n\n    const dateStep = getFlow().find(s=>s.type==='date');\n    const incidentDate = dateStep ? (state.answers[dateStep.id] || null) : null;\n\n    let deadlineDate = null, deadlineBasis = null;\n    if(r.deadline){\n      deadlineBasis = r.deadline.label + (r.deadline.sub ? ' \u2014 ' + r.deadline.sub : '') + (r.deadline.value ? ' (' + r.deadline.value + ')' : '');\n      if(typeof r.deadline.remaining === 'number'){\n        const d = new Date(); d.setDate(d.getDate() + r.deadline.remaining);\n        deadlineDate = d.toISOString().slice(0,10);\n      }\n    }\n\n    postJSON(LEAD_ENDPOINT, {\n      email: state.contact.email,\n      name: state.contact.name,\n      phone: state.contact.phone,\n      consent: true,\n      source: 'Case Review \u2014 ' + p.title + ': ' + subtypeObj.title,\n      practice_area: p.title,\n      matter_type: subtypeObj.title,\n      language: 'es',\n      incident_date: incidentDate,\n      deadline_date: deadlineDate,\n      deadline_basis: deadlineBasis,\n      tier: meta.label,\n      summary: buildPlainSummary(r,p,subtypeObj),\n      verified_token: state.verify.token\n    }).catch(function(){ \/* silencioso \u2014 un fallo de red no debe bloquear al visitante de ver sus resultados *\/ });\n  }\n\n  function renderVerify(){\n    const email = state.contact.email;\n    root.innerHTML = `\n      <div class=\"ct-verify\">\n        <button type=\"button\" class=\"ct-back-link\" id=\"ctVerifyBack\">${I.back} Editar su correo electr\u00f3nico<\/button>\n        <div class=\"ct-form-panel\">\n          <div class=\"ct-step-kicker\">Casi listo<\/div>\n          <h2 class=\"ct-step-q\">Confirme su correo electr\u00f3nico<\/h2>\n          <p class=\"ct-step-hint\">${state.verify.busy && !state.verify.verifiedEmail ? 'Enviando un c\u00f3digo\u2026' : 'Enviamos un c\u00f3digo de 6 d\u00edgitos a <strong>'+esc(email)+'<\/strong>. Ingr\u00e9selo a continuaci\u00f3n para ver sus resultados \u2014 esto confirma que realmente podemos contactarlo.'}<\/p>\n          <div class=\"ct-field\">\n            <input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" maxlength=\"6\" class=\"ct-input ct-otp-input\" id=\"ctOtpInput\" placeholder=\"123456\" autocomplete=\"one-time-code\" ${state.verify.busy?'disabled':''}>\n          <\/div>\n          ${state.verify.error ? `<p class=\"ct-otp-error\">${esc(state.verify.error)}<\/p>` : ''}\n          <div class=\"ct-nav-row\">\n            <button type=\"button\" class=\"ct-otp-resend\" id=\"ctOtpResend\" ${state.verify.busy?'disabled':''}>Reenviar c\u00f3digo<\/button>\n            <button type=\"button\" class=\"ct-btn ct-btn-primary\" id=\"ctOtpVerify\" ${state.verify.busy?'disabled':''}>${state.verify.busy?'Un momento\u2026':'Verificar y continuar'} ${I.arrow}<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n    root.querySelector('#ctVerifyBack').addEventListener('click', ()=>{\n      state.verify.error = '';\n      state.view = 'steps';\n      render();\n    });\n    root.querySelector('#ctOtpResend').addEventListener('click', ()=> sendVerificationCode());\n    const input = root.querySelector('#ctOtpInput');\n    const verifyBtn = root.querySelector('#ctOtpVerify');\n    const doVerify = ()=>{\n      const code = (input.value||'').replace(\/[^0-9]\/g,'');\n      if(code.length!==6){ state.verify.error = 'Por favor ingrese el c\u00f3digo de 6 d\u00edgitos.'; render(); return; }\n      checkVerificationCode(code);\n    };\n    verifyBtn.addEventListener('click', doVerify);\n    input.addEventListener('keydown', function(e){ if(e.key==='Enter'){ doVerify(); } });\n    if(!state.verify.busy) input.focus();\n  }\n\n  function renderStepBody(s){\n    const body = root.querySelector('#ctStepBody');\n    let html = `${s.kicker?`<div class=\"ct-step-kicker\">${esc(s.kicker)}<\/div>`:''}<h2 class=\"ct-step-q\">${esc(s.q)}<\/h2>${s.hint?`<p class=\"ct-step-hint\">${esc(s.hint)}<\/p>`:'<div style=\"margin-bottom:18px;\"><\/div>'}`;\n\n    if(s.type==='radio'){\n      html += `<div class=\"ct-options\">${s.options.map(o=>`\n        <button type=\"button\" class=\"ct-option ${state.answers[s.id]===o.v?'is-selected':''}\" data-value=\"${esc(o.v)}\">\n          <span class=\"ct-option-mark\">${I.check}<\/span>\n          <span class=\"ct-option-text\"><strong>${esc(o.l)}<\/strong><\/span>\n        <\/button>`).join('')}<\/div>`;\n    } else if(s.type==='checkbox'){\n      html += `<div class=\"ct-options\">${s.options.map(o=>{\n        const sel = (state.answers[s.id]||[]).includes(o.v);\n        return `<button type=\"button\" class=\"ct-option checkbox-type ${sel?'is-selected':''}\" data-value=\"${esc(o.v)}\">\n          <span class=\"ct-option-mark\">${I.check}<\/span>\n          <span class=\"ct-option-text\"><strong>${esc(o.l)}<\/strong><\/span>\n        <\/button>`;\n      }).join('')}<\/div>`;\n    } else if(s.type==='date'){\n      html += `<div class=\"ct-field\"><input type=\"date\" class=\"ct-input\" id=\"ctFieldInput\" value=\"${esc(state.answers[s.id]||'')}\" max=\"${todayISO()}\"><\/div>`;\n    } else if(s.type==='text'){\n      html += `<div class=\"ct-field\"><input type=\"text\" class=\"ct-input\" id=\"ctFieldInput\" value=\"${esc(state.answers[s.id]||'')}\" placeholder=\"Escriba su respuesta\"><\/div>`;\n    } else if(s.type==='textarea'){\n      html += `<div class=\"ct-field\"><textarea class=\"ct-textarea\" id=\"ctFieldInput\" placeholder=\"Escriba aqu\u00ed\">${esc(state.answers[s.id]||'')}<\/textarea><\/div>`;\n    } else if(s.type==='contact'){\n      const c = state.contact;\n      html += `<div class=\"ct-contact-grid\">\n        <div class=\"ct-field full\"><label class=\"ct-label\">Nombre completo (obligatorio)<\/label><input type=\"text\" class=\"ct-input\" id=\"ctName\" value=\"${esc(c.name)}\" placeholder=\"Juan P\u00e9rez\"><\/div>\n        <div class=\"ct-field\"><label class=\"ct-label\">Correo electr\u00f3nico (obligatorio \u2014 enviaremos un c\u00f3digo para confirmarlo)<\/label><input type=\"email\" class=\"ct-input\" id=\"ctEmail\" value=\"${esc(c.email)}\" placeholder=\"nombre@correo.com\"><\/div>\n        <div class=\"ct-field\"><label class=\"ct-label\">Tel\u00e9fono (opcional)<\/label><input type=\"tel\" class=\"ct-input\" id=\"ctPhone\" value=\"${esc(c.phone)}\" placeholder=\"416-555-0123\"><\/div>\n        <div class=\"ct-field full\"><label class=\"ct-label\">Mejor horario para contactarlo (opcional)<\/label><input type=\"text\" class=\"ct-input\" id=\"ctBestTime\" value=\"${esc(c.bestTime)}\" placeholder=\"Tardes entre semana\"><\/div>\n      <\/div>\n      <div class=\"ct-consent\" style=\"margin:0 0 4px;\">\n        <label class=\"ct-consent-label\">\n          <input type=\"checkbox\" id=\"ctDataConsent\" ${c.dataConsent?'checked':''}>\n          <span class=\"ct-consent-mark\">${I.check}<\/span>\n          <span class=\"ct-consent-text\">Acepto que Azimi Law puede contactarme usando la informaci\u00f3n anterior sobre mi situaci\u00f3n, y puede almacenarla \u2014 junto con mis respuestas \u2014 en el sistema de gesti\u00f3n de casos del despacho.<\/span>\n        <\/label>\n      <\/div>`;\n    }\n    body.innerHTML = html;\n\n    if(s.type==='radio'){\n      body.querySelectorAll('.ct-option').forEach(btn=>{\n        btn.addEventListener('click', ()=>{\n          state.answers[s.id] = btn.getAttribute('data-value');\n          render();\n        });\n      });\n    } else if(s.type==='checkbox'){\n      body.querySelectorAll('.ct-option').forEach(btn=>{\n        btn.addEventListener('click', ()=>{\n          const v = btn.getAttribute('data-value');\n          const arr = state.answers[s.id] = state.answers[s.id] || [];\n          const idx = arr.indexOf(v);\n          if(idx>-1) arr.splice(idx,1); else arr.push(v);\n          render();\n        });\n      });\n    } else if(s.type==='date' || s.type==='text' || s.type==='textarea'){\n      const input = body.querySelector('#ctFieldInput');\n      input.addEventListener('input', ()=>{\n        state.answers[s.id] = input.value;\n        root.querySelector('#ctNext').disabled = !isAnswered(s);\n        renderSnapshot();\n      });\n    } else if(s.type==='contact'){\n      const bind = (id, key) => {\n        const input = body.querySelector('#'+id);\n        input.addEventListener('input', ()=>{\n          state.contact[key] = input.value;\n          root.querySelector('#ctNext').disabled = !isAnswered(s);\n        });\n      };\n      bind('ctName','name'); bind('ctPhone','phone'); bind('ctEmail','email'); bind('ctBestTime','bestTime');\n      const consentBox = body.querySelector('#ctDataConsent');\n      consentBox.addEventListener('change', ()=>{\n        state.contact.dataConsent = consentBox.checked;\n        root.querySelector('#ctNext').disabled = !isAnswered(s);\n      });\n    }\n  }\n\n  function renderSnapshot(){\n    const panel = root.querySelector('#ctSnapshot');\n    if(!panel) return;\n    const answeredSteps = getFlow().slice(0, state.stepIndex+1).filter(s=>s.type!=='contact' && hasValue(s));\n    let tierBlock = '';\n    let deadlineBlock = '';\n\n    if(answeredSteps.length>=2){\n      const r = score(state.practice, state.subtype, state.answers);\n      const meta = tierMeta(r.tier);\n      tierBlock = `<span class=\"ct-tier-chip tier-${r.tier}\">${meta.chipIcon}${meta.label}<\/span>`;\n      if(r.deadline){\n        deadlineBlock = `<div class=\"ct-deadline-box\">\n          <div class=\"dl-label\">${esc(r.deadline.label)}<\/div>\n          <div class=\"dl-value\">${r.deadline.value ? esc(r.deadline.value) : (r.deadline.remaining + '<small>'+esc(r.deadline.unit)+'<\/small>')}<\/div>\n          <div class=\"dl-sub\">${esc(r.deadline.sub)}<\/div>\n        <\/div>`;\n      }\n    } else {\n      tierBlock = `<span class=\"ct-tier-chip tier-pending\">${I.dot}Reuniendo informaci\u00f3n<\/span>`;\n    }\n\n    const facts = answeredSteps.slice(-5).reverse().map(s=>{\n      let v = state.answers[s.id];\n      if(Array.isArray(v)) v = v.map(x=>labelFor(s.id,x)).join(', ');\n      else if(s.type==='date') v = fmtDate(v);\n      else if(s.type==='radio') v = labelFor(s.id, v);\n      if(s.type==='textarea' && v && v.length>60) v = v.slice(0,60)+'\u2026';\n      return `<li>${I.check}<span><b>${esc(v)}<\/b> \u2014 ${esc(s.q)}<\/span><\/li>`;\n    }).join('');\n\n    panel.innerHTML = `\n      <div class=\"ct-snapshot-head\">\n        <span class=\"ct-snapshot-title\">Resumen del Caso<\/span>\n        ${tierBlock}\n      <\/div>\n      <p class=\"ct-tier-caption\">Esto refleja qu\u00e9 tan urgente por tiempo parece su situaci\u00f3n y cu\u00e1nto nos ha contado \u2014 no es una evaluaci\u00f3n de sus probabilidades de \u00e9xito. Solo un abogado puede evaluar eso.<\/p>\n      ${deadlineBlock}\n      ${facts ? `<ul class=\"ct-facts\">${facts}<\/ul>` : `<p class=\"ct-snapshot-empty\">A medida que responda, construiremos aqu\u00ed un resumen en vivo \u2014 incluyendo cualquier plazo que aplique a su situaci\u00f3n.<\/p>`}\n      <div class=\"ct-snapshot-foot\">Esta es una lectura preliminar de una herramienta interactiva, basada en la ley de Ontario vigente al 4 de septiembre de 2026 (sujeta a cambios) y \u00fanicamente en lo que usted ha ingresado \u2014 no es asesor\u00eda legal, y no es un sustituto de ella. No se base en esto \u2014 un abogado confirma todo antes de que se tome cualquier decisi\u00f3n.<\/div>\n    `;\n  }\n\n  function renderResults(){\n    const r = score(state.practice, state.subtype, state.answers);\n    const meta = tierMeta(r.tier);\n    const copy = BANNER_COPY[r.tier];\n    const p = PRACTICES.find(x=>x.id===state.practice);\n    const subtypeObj = SUBTYPES[state.practice].find(x=>x.id===state.subtype);\n\n    const summaryRows = getFlow().filter(s=>s.type!=='contact').map(s=>{\n      let v = state.answers[s.id];\n      if(v==null || v==='' || (Array.isArray(v)&&!v.length)) return '';\n      if(Array.isArray(v)) v = v.map(x=>labelFor(s.id,x)).join(', ');\n      else if(s.type==='date') v = fmtDate(v);\n      else if(s.type==='radio') v = labelFor(s.id, v);\n      return `<li><span class=\"k\">${esc(s.q)}<\/span><span class=\"v\">${esc(v)}<\/span><\/li>`;\n    }).join('');\n\n    root.innerHTML = `\n      <div class=\"ct-results\">\n        <button type=\"button\" class=\"ct-back-link\" id=\"ctBackEdit\">${I.back} Editar mis respuestas<\/button>\n        <div class=\"ct-banner tier-${r.tier}\" style=\"margin-top:14px;\">\n          <div class=\"ct-banner-icon\">${meta.banner.icon}<\/div>\n          <div>\n            <div class=\"ct-banner-label\">${meta.banner.label} \u2014 ${p.title} \u00b7 ${subtypeObj.title}<\/div>\n            <h2>${esc(copy.headline)}<\/h2>\n            <p>${esc(copy.sub)}<\/p>\n            <p class=\"ct-banner-note\">Esto refleja el momento y la integridad de la informaci\u00f3n, no una evaluaci\u00f3n de sus probabilidades de \u00e9xito \u2014 solo un abogado que revise su expediente completo puede evaluar eso.<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"ct-results-grid\">\n          <div class=\"ct-card\">\n            <h3>${I.scale} Lo que estamos observando<\/h3>\n            <ul class=\"ct-rationale\">\n              ${r.bullets.map(b=>`<li class=\"${b.t==='crit'?'crit':b.t==='warn'?'warn':''}\">${b.t==='crit'?I.alert:b.t==='warn'?I.clock:I.check}<span>${b.text}<\/span><\/li>`).join('')}\n            <\/ul>\n            ${r.deadline ? `<div class=\"ct-deadline-box\" style=\"background:var(--cream-100); border-color:var(--cream-200); margin-top:18px;\">\n              <div class=\"dl-label\" style=\"color:var(--ink-500);\">${esc(r.deadline.label)}<\/div>\n              <div class=\"dl-value\" style=\"color:var(--navy-950);\">${r.deadline.value?esc(r.deadline.value):(r.deadline.remaining+'<small style=\\\"color:var(--ink-500)\\\">'+esc(r.deadline.unit)+'<\/small>')}<\/div>\n              <div class=\"dl-sub\" style=\"color:var(--ink-500);\">${esc(r.deadline.sub)}<\/div>\n            <\/div>` : ''}\n            <div class=\"ct-legal-note\">\n              <p class=\"ct-legal-note-head\">Por favor lea esto antes de basarse en cualquier cosa mostrada arriba:<\/p>\n              <p class=\"ct-legal-note-intro\">Esta es una herramienta interactiva de autoevaluaci\u00f3n. Analiza su situaci\u00f3n en su conjunto \u2014 qui\u00e9n puede ser elegible para presentar un reclamo, qu\u00e9 tribunal o corte realmente lo maneja, qu\u00e9 plazos pueden aplicar, y cu\u00e1les son sus opciones \u2014 bas\u00e1ndose \u00fanicamente en lo que usted le indic\u00f3. Por favor lea cada punto a continuaci\u00f3n antes de basarse en lo que le muestra:<\/p>\n              <ul>\n                <li><strong>No es asesor\u00eda legal.<\/strong> Esta herramienta no proporciona asesor\u00eda legal, no sustituye la asesor\u00eda legal, y no reemplaza hablar con un abogado. Es informaci\u00f3n legal general solamente. Completarla no crea una relaci\u00f3n abogado-cliente con Azimi Law, y ning\u00fan abogado de Azimi Law ha revisado sus respuestas espec\u00edficas.<\/li>\n                <li><strong>Los resultados se generan autom\u00e1ticamente.<\/strong> El nivel, el plazo, y los puntos que ve son producidos por un sistema automatizado basado en reglas, seg\u00fan sus respuestas \u2014 no son revisados, redactados, ni aprobados por un abogado antes de mostr\u00e1rselos.<\/li>\n                <li><strong>No se base en ning\u00fan resultado.<\/strong> No debe basarse en el nivel, el plazo, ni ning\u00fan otro resultado que le muestre esta herramienta. No es una garant\u00eda de que usted tenga un reclamo, de que alg\u00fan reclamo tendr\u00e1 \u00e9xito, ni de ning\u00fan resultado. Solo un abogado con licencia que revise su expediente completo puede evaluar realmente su situaci\u00f3n.<\/li>\n                <li><strong>Ning\u00fan deber de cuidado.<\/strong> Azimi Law no le debe ning\u00fan deber de cuidado por poner esta herramienta a su disposici\u00f3n o por lo que le muestra, y no asume ninguna responsabilidad hacia usted, a menos y hasta que Azimi Law acepte por escrito representarlo.<\/li>\n                <li><strong>Cualquier confianza depositada es bajo su propio riesgo.<\/strong> Cualquier decisi\u00f3n que tome, o acci\u00f3n u omisi\u00f3n que realice, bas\u00e1ndose en esta herramienta es enteramente bajo su propio riesgo. Dicha confianza no es razonable, no es previsible, y no es invitada ni inducida por Azimi Law.<\/li>\n                <li><strong>Las respuestas son categor\u00edas simplificadas, no sus hechos reales.<\/strong> Las preguntas de esta herramienta utilizan opciones simplificadas de opci\u00f3n m\u00faltiple que no pueden capturar cada detalle de una situaci\u00f3n real. La opci\u00f3n que parece m\u00e1s cercana a sus circunstancias puede no coincidir realmente con ellas, y peque\u00f1as diferencias en los hechos pueden cambiar significativamente la respuesta.<\/li>\n                <li><strong>No demore en buscar asesor\u00eda.<\/strong> Nada en esta herramienta debe interpretarse como una raz\u00f3n para esperar antes de hablar con un abogado. Si le preocupa un plazo, contacte a un abogado de inmediato en lugar de basarse en lo que aqu\u00ed se muestra.<\/li>\n                <li><strong>Si su situaci\u00f3n es urgente, llame ahora en su lugar.<\/strong> Si enfrenta un plazo inminente, detenci\u00f3n, expulsi\u00f3n, o cualquier otra situaci\u00f3n urgente, no complete esta herramienta \u2014 llame directamente a Azimi Law al 416-900-4128 o contacte a un abogado de inmediato.<\/li>\n                <li>Esta herramienta refleja la ley y los procedimientos generales de Ontario tal como se encontraban vigentes el <strong>4 de septiembre de 2026<\/strong>. <strong>La ley est\u00e1 sujeta a cambios<\/strong> en cualquier momento despu\u00e9s de esa fecha, esta herramienta no se actualiza autom\u00e1ticamente para reflejar dichos cambios, y puede no tener en cuenta todas las excepciones, modificaciones recientes, o decisiones judiciales que pudieran afectar su situaci\u00f3n. Tampoco aborda la ley federal, la ley de otras provincias, ni la ley de otros pa\u00edses que tambi\u00e9n puedan aplicarle.<\/li>\n                <li>El resultado depende enteramente de la exactitud e integridad de lo que usted ingres\u00f3. Respuestas incompletas, inexactas, o desactualizadas producir\u00e1n un resultado inexacto, y usted es responsable de verificar de forma independiente cualquier cosa que esta herramienta le haya indicado.<\/li>\n                <li><strong>Los plazos siguen corriendo de todos modos.<\/strong> Usar esta herramienta no pausa, extiende, ni preserva de ninguna otra manera ning\u00fan plazo legal o per\u00edodo de prescripci\u00f3n, ni pone a Azimi Law en conocimiento de ning\u00fan reclamo o posible reclamo. Usted sigue siendo el \u00fanico y total responsable de identificar y cumplir con cada plazo que le aplique, se mencione o no aqu\u00ed.<\/li>\n                <li>Nada de lo que usted ingrese o env\u00ede a trav\u00e9s de esta herramienta se trata como confidencial o sujeto a privilegio abogado-cliente a menos y hasta que Azimi Law acepte por escrito representarlo.<\/li>\n                <li><strong>Ninguna transmisi\u00f3n en l\u00ednea es completamente segura.<\/strong> Aunque Azimi Law toma medidas razonables para proteger la informaci\u00f3n enviada a trav\u00e9s de esta herramienta, ning\u00fan m\u00e9todo de transmisi\u00f3n por internet es completamente seguro, y Azimi Law no puede garantizar la seguridad de ninguna informaci\u00f3n que usted env\u00ede a trav\u00e9s de ella.<\/li>\n                <li>Una vez que verifique su correo electr\u00f3nico en el paso de contacto, su nombre, informaci\u00f3n de contacto, y este resumen se env\u00edan a Azimi Law y se agregan al sistema de gesti\u00f3n de casos del despacho para que alguien pueda dar seguimiento \u2014 esto ocurre autom\u00e1ticamente en ese momento y no requiere que usted haga clic por separado en Llamar, Enviar correo, o Copiar.<\/li>\n                <li><strong>Enviar esta herramienta no obliga a Azimi Law a responder ni a aceptar su caso.<\/strong> Azimi Law no garantiza que responder\u00e1 dentro de ning\u00fan plazo en particular, y no tiene ninguna obligaci\u00f3n de aceptarlo como cliente. La decisi\u00f3n de aceptar cualquier asunto queda enteramente a discreci\u00f3n de Azimi Law, incluso despu\u00e9s de una verificaci\u00f3n de conflictos y una conversaci\u00f3n adicional.<\/li>\n                <li><strong>Sin garant\u00eda de que esta herramienta funcione correctamente.<\/strong> Azimi Law no garantiza que esta herramienta est\u00e9 disponible, ininterrumpida, segura, o libre de errores, fallas, o problemas t\u00e9cnicos, y no es responsable de ninguna p\u00e9rdida derivada de una falla t\u00e9cnica, interrupci\u00f3n, o visualizaci\u00f3n incorrecta de informaci\u00f3n.<\/li>\n                <li><strong>Solo para su uso personal.<\/strong> Esta herramienta est\u00e1 destinada \u00fanicamente al uso por un adulto, sobre su propia situaci\u00f3n. No est\u00e1 destinada a que se base en ella nadie m\u00e1s que la persona que la complet\u00f3 personalmente \u2014 incluyendo un amigo, familiar, o cualquier persona a quien se le muestren los resultados despu\u00e9s. Si est\u00e1 tratando de ayudar a alguien m\u00e1s, esa persona (o su tutor, si es menor de edad) debe usar la herramienta o contactar a Azimi Law directamente.<\/li>\n                <li><strong>La versi\u00f3n en ingl\u00e9s prevalece.<\/strong> Esta herramienta est\u00e1 disponible en ingl\u00e9s, espa\u00f1ol, y persa (farsi). Si existe alg\u00fan conflicto o diferencia de significado entre la versi\u00f3n en ingl\u00e9s y una versi\u00f3n traducida, la versi\u00f3n en ingl\u00e9s prevalece.<\/li>\n                <li>Azimi Law puede actualizar, corregir, o discontinuar esta herramienta en cualquier momento sin previo aviso, y no garantiza que est\u00e9 actualizada, completa, sea exacta, o est\u00e9 libre de errores. En la mayor medida permitida por la ley, esta herramienta y todo lo que le muestra se proporciona \"tal cual\" (as-is) y \"seg\u00fan disponibilidad\", sin garant\u00eda de ning\u00fan tipo, y Azimi Law renuncia a toda responsabilidad \u2014 ya sea contractual, extracontractual (incluyendo negligencia), o de otro tipo \u2014 por cualquier p\u00e9rdida o da\u00f1o que surja de, o est\u00e9 relacionado con, su uso de, o su confianza en, esta herramienta.<\/li>\n                <li><strong>Este descargo de responsabilidad es el acuerdo completo que rige su uso de esta herramienta.<\/strong> Ninguna otra declaraci\u00f3n \u2014 ya sea hecha por tel\u00e9fono, correo electr\u00f3nico, en persona, o en cualquier otro lugar de este sitio web \u2014 lo modifica o complementa, a menos que Azimi Law lo confirme por escrito.<\/li>\n                <li><strong>Si alguna parte de este descargo de responsabilidad no es exigible, el resto sigue aplicando.<\/strong> La invalidez o inexigibilidad de cualquier disposici\u00f3n de este descargo de responsabilidad no afecta la validez o exigibilidad de ninguna otra disposici\u00f3n.<\/li>\n                <li>Su uso de esta herramienta, y cualquier cosa que surja de o est\u00e9 relacionada con ella, se rige por las leyes de la Provincia de Ontario y las leyes federales de Canad\u00e1 aplicables en Ontario, sin importar los principios de conflicto de leyes.<\/li>\n                <li><strong>Usted todav\u00eda debe hablar con un abogado \u2014 en Azimi Law o en otro lugar \u2014 para obtener asesor\u00eda real sobre su situaci\u00f3n espec\u00edfica.<\/strong> Esta herramienta es un punto de partida para esa conversaci\u00f3n, no un sustituto de ella.<\/li>\n              <\/ul>\n            <\/div>\n          <\/div>\n\n          <div>\n            <div class=\"ct-card\" style=\"margin-bottom:16px;\">\n              <h3>${I.doc} Su resumen<\/h3>\n              <ul class=\"ct-summary-list\">\n                <li><span class=\"k\">Asunto<\/span><span class=\"v\">${esc(p.title)} \u2014 ${esc(subtypeObj.title)}<\/span><\/li>\n                <li><span class=\"k\">Nombre<\/span><span class=\"v\">${esc(state.contact.name||'\u2014')}<\/span><\/li>\n                <li><span class=\"k\">Tel\u00e9fono<\/span><span class=\"v\">${esc(state.contact.phone||'\u2014')}<\/span><\/li>\n                <li><span class=\"k\">Correo electr\u00f3nico<\/span><span class=\"v\">${esc(state.contact.email||'\u2014')}<\/span><\/li>\n                ${summaryRows}\n              <\/ul>\n            <\/div>\n\n            <div class=\"ct-card\">\n              <h3>${I.phone} D\u00e9 el siguiente paso<\/h3>\n              <div class=\"ct-cta-row\">\n                <a class=\"ct-cta-btn ct-cta-call\" href=\"tel:+14169004128\">${I.phone} Llame al 416-900-4128<\/a>\n                <button type=\"button\" class=\"ct-cta-btn ct-cta-email\" id=\"ctEmailBtn\">${I.mail} Enviar este resumen por correo a Azimi Law<\/button>\n                <div class=\"ct-cta-secondary\">\n                  <button type=\"button\" id=\"ctCopyBtn\">${I.copy} Copiar resumen<\/button>\n                  <button type=\"button\" id=\"ctPrintBtn\">${I.print} Imprimir \/ guardar como PDF<\/button>\n                <\/div>\n                <div class=\"ct-copy-flash\" id=\"ctCopyFlash\" hidden>Copiado al portapapeles.<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"ct-restart\"><button type=\"button\" id=\"ctRestart\">Comenzar una nueva evaluaci\u00f3n<\/button><\/div>\n      <\/div>\n    `;\n\n    root.querySelector('#ctBackEdit').addEventListener('click', ()=>{ state.view='steps'; state.stepIndex = getFlow().length-1; render(); });\n    root.querySelector('#ctRestart').addEventListener('click', ()=>{\n      state.view='intro'; state.practice=null; state.subtype=null; state.stepIndex=0; state.answers={};\n      state.contact={name:'',phone:'',email:'',bestTime:'',dataConsent:false};\n      state.verify={busy:false,error:'',verifiedEmail:'',token:''};\n      render();\n    });\n    root.querySelector('#ctEmailBtn').addEventListener('click', ()=> emailSummary(r,p,subtypeObj));\n    root.querySelector('#ctCopyBtn').addEventListener('click', ()=> copySummary(r,p,subtypeObj));\n    root.querySelector('#ctPrintBtn').addEventListener('click', ()=> window.print());\n  }\n\n  function buildPlainSummary(r,p,subtypeObj){\n    const meta = tierMeta(r.tier);\n    let out = `AZIMI LAW \u2014 RESUMEN DEL CASO\\n`;\n    out += `Asunto: ${p.title} \u2014 ${subtypeObj.title}\\n`;\n    out += `Se\u00f1al: ${meta.label}\\n`;\n    if(r.deadline) out += `Plazo clave: ${r.deadline.label} \u2014 ${r.deadline.value || (r.deadline.remaining+' '+r.deadline.unit)} (${r.deadline.sub})\\n`;\n    out += `\\nContacto\\nNombre: ${state.contact.name||'\u2014'}\\nTel\u00e9fono: ${state.contact.phone||'\u2014'}\\nCorreo electr\u00f3nico: ${state.contact.email||'\u2014'}\\nMejor horario: ${state.contact.bestTime||'\u2014'}\\n`;\n    out += `\\nDetalles\\n`;\n    getFlow().filter(s=>s.type!=='contact').forEach(s=>{\n      let v = state.answers[s.id];\n      if(v==null || v==='' || (Array.isArray(v)&&!v.length)) return;\n      if(Array.isArray(v)) v = v.map(x=>labelFor(s.id,x)).join(', ');\n      else if(s.type==='date') v = fmtDate(v);\n      else if(s.type==='radio') v = labelFor(s.id, v);\n      out += `- ${s.q} ${v}\\n`;\n    });\n    out += `\\nGenerado el ${fmtDate(todayISO())} \u2014 resumen preliminar solamente, no es asesor\u00eda legal.`;\n    return out;\n  }\n\n  function emailSummary(r,p,subtypeObj){\n    const subject = `Resumen del Caso \u2014 ${p.title}: ${subtypeObj.title}`;\n    const body = buildPlainSummary(r,p,subtypeObj);\n    window.location.href = `mailto:info@azimilaw.ca?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n  }\n\n  function copySummary(r,p,subtypeObj){\n    const text = buildPlainSummary(r,p,subtypeObj);\n    const flash = root.querySelector('#ctCopyFlash');\n    const show = ()=>{ if(flash){ flash.hidden=false; setTimeout(()=>flash.hidden=true, 2200); } };\n    if(navigator.clipboard && navigator.clipboard.writeText){\n      navigator.clipboard.writeText(text).then(show).catch(show);\n    } else {\n      const ta = document.createElement('textarea'); ta.value=text; document.body.appendChild(ta); ta.select();\n      try{ document.execCommand('copy'); }catch(e){}\n      document.body.removeChild(ta); show();\n    }\n  }\n\n  (function preselectFromURL(){\n    try{\n      const requested = new URLSearchParams(window.location.search).get('practice');\n      if(requested && PRACTICES.some(p=>p.id===requested)) state.practice = requested;\n    }catch(e){}\n  })();\n  render();\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Evaluaci\u00f3n de su Caso \u00bfNo est\u00e1 seguro de qu\u00e9 hacer a continuaci\u00f3n? Obtenga un pr\u00f3ximo paso claro. Azimi Law ayuda a clientes de Ontario en asuntos de Lesiones Personales, Litigios de Inmigraci\u00f3n y Litigios Civiles. Habilite JavaScript para usar nuestra herramienta interactiva de evaluaci\u00f3n de caso, o cont\u00e1ctenos directamente: Lesiones Personales \u2014 accidentes automovil\u00edsticos, resbalones [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-4110","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/pages\/4110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/comments?post=4110"}],"version-history":[{"count":4,"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/pages\/4110\/revisions"}],"predecessor-version":[{"id":4114,"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/pages\/4110\/revisions\/4114"}],"wp:attachment":[{"href":"https:\/\/azimilaw.ca\/es\/wp-json\/wp\/v2\/media?parent=4110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}