{"id":12013,"date":"2026-09-14T19:11:49","date_gmt":"2026-09-15T02:11:49","guid":{"rendered":"https:\/\/www.702duischool.com\/?page_id=12013"},"modified":"2026-09-15T22:40:18","modified_gmt":"2026-09-16T05:40:18","slug":"702-dui-navigator","status":"publish","type":"page","link":"https:\/\/www.702duischool.com\/es\/702-dui-navigator\/","title":{"rendered":"Navegador para casos de DUI (702)"},"content":{"rendered":"<section id=\"dnv2-PFugMlqj\" class=\"dnv2-app\" data-dnv2=\"{&quot;ajax&quot;:&quot;https:\/\/www.702duischool.com\/wp-admin\/admin-ajax.php&quot;,&quot;nonce&quot;:&quot;&quot;,&quot;guest_nonce&quot;:&quot;17d0db7ad9&quot;,&quot;signed&quot;:false,&quot;authorized&quot;:false,&quot;admin&quot;:false,&quot;states&quot;:{&quot;AL&quot;:&quot;Alabama&quot;,&quot;AK&quot;:&quot;Alaska&quot;,&quot;AZ&quot;:&quot;Arizona&quot;,&quot;AR&quot;:&quot;Arkansas&quot;,&quot;CA&quot;:&quot;California&quot;,&quot;CO&quot;:&quot;Colorado&quot;,&quot;CT&quot;:&quot;Connecticut&quot;,&quot;DE&quot;:&quot;Delaware&quot;,&quot;DC&quot;:&quot;District of Columbia&quot;,&quot;FL&quot;:&quot;Florida&quot;,&quot;GA&quot;:&quot;Georgia&quot;,&quot;HI&quot;:&quot;Hawaii&quot;,&quot;ID&quot;:&quot;Idaho&quot;,&quot;IL&quot;:&quot;Illinois&quot;,&quot;IN&quot;:&quot;Indiana&quot;,&quot;IA&quot;:&quot;Iowa&quot;,&quot;KS&quot;:&quot;Kansas&quot;,&quot;KY&quot;:&quot;Kentucky&quot;,&quot;LA&quot;:&quot;Louisiana&quot;,&quot;ME&quot;:&quot;Maine&quot;,&quot;MD&quot;:&quot;Maryland&quot;,&quot;MA&quot;:&quot;Massachusetts&quot;,&quot;MI&quot;:&quot;Michigan&quot;,&quot;MN&quot;:&quot;Minnesota&quot;,&quot;MS&quot;:&quot;Mississippi&quot;,&quot;MO&quot;:&quot;Missouri&quot;,&quot;MT&quot;:&quot;Montana&quot;,&quot;NE&quot;:&quot;Nebraska&quot;,&quot;NV&quot;:&quot;Nevada&quot;,&quot;NH&quot;:&quot;New Hampshire&quot;,&quot;NJ&quot;:&quot;New Jersey&quot;,&quot;NM&quot;:&quot;New Mexico&quot;,&quot;NY&quot;:&quot;New York&quot;,&quot;NC&quot;:&quot;North Carolina&quot;,&quot;ND&quot;:&quot;North Dakota&quot;,&quot;OH&quot;:&quot;Ohio&quot;,&quot;OK&quot;:&quot;Oklahoma&quot;,&quot;OR&quot;:&quot;Oregon&quot;,&quot;PA&quot;:&quot;Pennsylvania&quot;,&quot;RI&quot;:&quot;Rhode Island&quot;,&quot;SC&quot;:&quot;South Carolina&quot;,&quot;SD&quot;:&quot;South Dakota&quot;,&quot;TN&quot;:&quot;Tennessee&quot;,&quot;TX&quot;:&quot;Texas&quot;,&quot;UT&quot;:&quot;Utah&quot;,&quot;VT&quot;:&quot;Vermont&quot;,&quot;VA&quot;:&quot;Virginia&quot;,&quot;WA&quot;:&quot;Washington&quot;,&quot;WV&quot;:&quot;West Virginia&quot;,&quot;WI&quot;:&quot;Wisconsin&quot;,&quot;WY&quot;:&quot;Wyoming&quot;},&quot;programs&quot;:{&quot;unknown&quot;:&quot;Not sure \/ not specified&quot;,&quot;dui_education&quot;:&quot;DUI education&quot;,&quot;traffic_safety&quot;:&quot;Traffic safety school&quot;,&quot;victim_panel&quot;:&quot;Victim impact panel&quot;,&quot;evaluation&quot;:&quot;Substance-use evaluation&quot;,&quot;treatment&quot;:&quot;Treatment \/ counseling&quot;},&quot;research&quot;:true,&quot;terms&quot;:&quot;https:\/\/www.702duischool.com\/navigator-service-terms\/&quot;,&quot;privacy&quot;:&quot;https:\/\/www.702duischool.com\/navigator-privacy-notice\/&quot;}\">\n    <header class=\"dnv2-hero\"><div class=\"dnv2-hero-top\"><div class=\"dnv2-eyebrow\">702 \/ DUI NAVIGATOR<\/div><div class=\"dnv2-language-bar\"><span>Site language<\/span><div class=\"dnv2-language-control\"><div class=\"trp-shortcode-switcher__wrapper\"\r\n     style=\"--bg:#ffffff;--bg-hover:#0000000d;--text:#143852;--text-hover:#1d2327;--border:1px solid #1438521a;--border-width:1px;--border-color:#1438521a;--border-radius:5px;--flag-radius:2px;--flag-size:18px;--aspect-ratio:4\/3;--font-size:14px;--transition-duration:0.2s\"\r\n     role=\"group\"\r\n     data-open-mode=\"hover\">\r\n\r\n    \r\n        <!-- ANCHOR (in-flow only; sizing\/borders; inert) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-anchor trp-open-on-hover\"\r\n             aria-hidden=\"true\"\r\n             inert\r\n             data-no-translation>\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <a class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation href=\"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages\/12013#TRPLINKPROCESSED\" title=\"Espa\u00f1ol de M\u00e9xico\"><img decoding=\"async\" src=\"https:\/\/www.702duischool.com\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/es_MX.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/><span class=\"trp-language-item-name\">Espa\u00f1ol de M\u00e9xico<\/span><\/a>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n            <\/div>\r\n\r\n        <!-- OVERLAY (positioned; interactive surface) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-overlay trp-open-on-hover\"\r\n             role=\"navigation\"\r\n             aria-label=\"Selector de idioma del sitio web\"\r\n             data-no-translation\r\n        >\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <div class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation role=\"button\" aria-expanded=\"false\" tabindex=\"0\" aria-label=\"Cambiar idioma\" aria-controls=\"trp-shortcode-dropdown-6aad0a83b0150\"><img decoding=\"async\" src=\"https:\/\/www.702duischool.com\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/es_MX.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/><span class=\"trp-language-item-name\">Espa\u00f1ol de M\u00e9xico<\/span><\/div>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n    \r\n            <div class=\"trp-switcher-dropdown-list\"\r\n                 id=\"trp-shortcode-dropdown-6aad0a83b0150\"\r\n                 role=\"group\"\r\n                 aria-label=\"Idiomas disponibles\"\r\n                 hidden\r\n                 inert\r\n            >\r\n                                                            <a class=\"trp-language-item\" href=\"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages\/12013#TRPLINKPROCESSED\" title=\"English\">\r\n                            <img decoding=\"async\" src=\"https:\/\/www.702duischool.com\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/en_US.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/>                                                            <span class=\"trp-language-item-name\" data-no-translation>English<\/span>\r\n                                                                                <\/a>\r\n                                                <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div><\/div><\/div>\n      <h2 class=\"dnv2-hero-title\">Your paperwork.<br><span>A clearer next step.<\/span><\/h2>\n      <h2 class=\"dnv2-compact-title\" hidden>Your Navigator workspace.<\/h2>\n      <p class=\"dnv2-hero-intro\">Upload your paperwork or paste the instructions you received. Navigator helps you review the details, spot questions to clarify, and explore official program resources.<\/p>\n      <div class=\"dnv2-steps\" aria-label=\"Navigator workflow\"><span data-step=\"1\" aria-current=\"step\">01 &nbsp; Add your information<\/span><span data-step=\"2\">02 &nbsp; Review your paperwork<\/span><span data-step=\"3\">03 &nbsp; Organize your plan<\/span><\/div>\n    <\/header>\n    <div class=\"dnv2-notice\"><strong>Information, not legal advice.<\/strong> This is an AI-assisted paperwork organizer\u2014not a law firm, DUI school, clinical evaluator or certificate provider. Check the review against your original instructions and clarify anything uncertain with the issuing office.<\/div>\n        <div class=\"dnv2-card dnv2-auth-shell\">\n      <div class=\"dnv2-auth-layout\">\n        <div class=\"dnv2-auth-copy\">\n          <div class=\"dnv2-section-label\">PAID ACCESS REQUIRED<\/div><h3>Purchase first. Then start your private review.<\/h3>\n          <p>Navigator access is unlocked after payment. If you already purchased, sign in with the account used at checkout.<\/p>\n          <ul><li>Your paperwork is not submitted before payment.<\/li><li>Your original uploads are not added to the public Media Library.<\/li><li>Payment is handled securely through WooCommerce\/Stripe.<\/li><\/ul>\n          <p><a class=\"dnv2-btn\" href=\"https:\/\/www.702duischool.com\/es\/producto\/702-navigator-paperwork-organizer\/\">Purchase Navigator Access \u2192<\/a><\/p>\n        <\/div>\n        <div class=\"dnv2-auth-box\">\n          <div class=\"dnv2-auth-tabs\" role=\"tablist\" aria-label=\"Account options\">\n            <button type=\"button\" class=\"active\" data-auth-view=\"register\" role=\"tab\" aria-selected=\"true\">Create account<\/button>\n            <button type=\"button\" data-auth-view=\"login\" role=\"tab\" aria-selected=\"false\">Sign in<\/button>\n          <\/div>\n          <form class=\"dnv2-auth-form dnv2-register-form\" data-auth-form=\"register\">\n            <label>Email address<input type=\"email\" name=\"email\" autocomplete=\"email\" required><\/label>\n            <label>Create password<input type=\"password\" name=\"password\" autocomplete=\"new-password\" minlength=\"10\" required><span class=\"dnv2-small\">At least 10 characters.<\/span><\/label>\n            <label>Confirm password<input type=\"password\" name=\"confirm\" autocomplete=\"new-password\" minlength=\"10\" required><\/label>\n            <label class=\"dnv2-check\"><input type=\"checkbox\" name=\"agree\" value=\"1\" required><span>I agree to the <a href=\"https:\/\/www.702duischool.com\/navigator-service-terms\/\" target=\"_blank\" rel=\"noopener\">Service Terms<\/a> and <a href=\"https:\/\/www.702duischool.com\/navigator-privacy-notice\/\" target=\"_blank\" rel=\"noopener\">Privacy Notice<\/a>.<\/span><\/label>\n            <button class=\"dnv2-btn\" type=\"submit\">Create my secure account <span aria-hidden=\"true\">\u2192<\/span><\/button>\n          <\/form>\n          <form class=\"dnv2-auth-form dnv2-login-form\" data-auth-form=\"login\" hidden>\n            <label>Email or username<input type=\"text\" name=\"identifier\" autocomplete=\"username\" required><\/label>\n            <label>Password<input type=\"password\" name=\"password\" autocomplete=\"current-password\" required><\/label>\n            <div class=\"dnv2-actions\"><button class=\"dnv2-btn\" type=\"submit\">Sign in <span aria-hidden=\"true\">\u2192<\/span><\/button><a class=\"dnv2-auth-link\" href=\"https:\/\/www.702duischool.com\/es\/navigator-account\/lost-password\/\">Forgot password?<\/a><\/div>\n          <\/form>\n          <div class=\"dnv2-auth-status\" role=\"status\" aria-live=\"polite\"><\/div>\n        <\/div>\n      <\/div>\n      <p class=\"dnv2-small dnv2-auth-note\">No paperwork is uploaded until you are signed in. This account step protects saved reports; it is not a course enrollment.<\/p>\n    <\/div>\n        <footer class=\"dnv2-footer\">702 DUI Navigator \u00b7 AI-assisted paperwork organization. Check against your originals. <a href=\"https:\/\/www.702duischool.com\/navigator-service-terms\/\" rel=\"noreferrer\">Service terms<\/a> \u00b7 <a href=\"mailto:contact@702duischool.com\">Support<\/a><\/footer>\n<\/section>\n<style>.dnv2-app{--navy:#13243c;--ink:#203149;--muted:#62738b;--teal:#007c80;--border:#dbe4ee;--bg:#f2f6fa;max-width:1080px;margin:24px auto;color:var(--ink);font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;font-size:16px;line-height:1.6;text-align:left;box-sizing:border-box}\n.dnv2-app *{box-sizing:border-box}.dnv2-app [hidden]{display:none!important}.dnv2-hero{padding:36px;border-radius:20px;background:var(--navy);color:#fff}.dnv2-eyebrow{font-size:12px;letter-spacing:2px;font-weight:800;color:#91dee0}.dnv2-hero h2{font-size:clamp(30px,4.6vw,48px);font-weight:750;letter-spacing:-1.2px;color:#fff;line-height:1.13;margin:18px 0}.dnv2-hero h2 span{color:#9cdee1}.dnv2-hero p{max-width:700px;color:#d2dfed;font-size:17px}.dnv2-steps{display:flex;flex-wrap:wrap;gap:10px 26px;font-size:12px;font-weight:650;border-top:1px solid #3f5065;padding-top:18px;margin-top:24px}.dnv2-notice{padding:16px 20px;margin:14px 0;border:1px solid var(--border);border-radius:12px;font-size:13px;background:#fff}.dnv2-tabs{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:18px 0}.dnv2-tabs button{font:inherit;padding:8px 16px;border:1px solid var(--border);background:#fff;border-radius:9px;color:var(--ink);cursor:pointer}.dnv2-tabs button.active{background:var(--navy);color:#fff}.dnv2-mode{margin-left:auto;font-size:12px;color:var(--muted)}.dnv2-card{background:#fff;border:1px solid var(--border);border-radius:16px;margin:16px 0;padding:26px}.dnv2-section-label{font-weight:800;font-size:11px;letter-spacing:1.5px;color:var(--teal)}.dnv2-card h3,.dnv2-result h3{font:750 23px\/1.3 system-ui;color:var(--navy);margin:8px 0 12px}.dnv2-muted{color:var(--muted);font-size:14px}.dnv2-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px}.dnv2-app label{display:block;font-size:14px;font-weight:650;margin:12px 0}.dnv2-app input:not([type=checkbox]),.dnv2-app select,.dnv2-app textarea{display:block;box-sizing:border-box;width:100%;max-width:none;background:#fff;border:1px solid #b8c7d6;border-radius:9px;padding:11px 12px;margin:6px 0 0;color:var(--ink);font:400 16px\/1.4 system-ui;box-shadow:none;height:auto}.dnv2-app textarea{resize:vertical;min-height:80px}.dnv2-app :focus-visible{outline:3px solid #5fbec4;outline-offset:3px}.dnv2-upload{background:var(--bg);border:1px dashed #94a9be;border-radius:12px;padding:16px;margin:18px 0}.dnv2-upload p{font-size:12px;color:var(--muted)}.dnv2-filelist{display:flex;flex-wrap:wrap;gap:8px}.dnv2-file{border-radius:8px;border:1px solid var(--border);background:#fff;padding:8px;font-size:12px;max-width:220px;overflow-wrap:anywhere}.dnv2-file img{max-width:85px;max-height:75px;display:block}.dnv2-privacy{border-block:1px solid var(--border);padding:12px 0;font-size:13px}.dnv2-privacy summary{cursor:pointer;font-weight:700}.dnv2-check{display:flex!important;gap:10px;align-items:flex-start;font-weight:450!important}.dnv2-check input{margin-top:5px!important;flex:0 0 auto;width:17px;height:17px}.dnv2-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:16px}.dnv2-btn{display:inline-flex;align-items:center;justify-content:center;gap:12px;border:1px solid var(--teal);border-radius:9px;padding:12px 18px;background:var(--teal);color:#fff!important;font:700 15px\/1.4 system-ui;text-decoration:none!important;cursor:pointer;box-shadow:none;min-height:44px}.dnv2-btn.secondary{background:#fff;color:var(--ink)!important;border-color:#bdcbd8}.dnv2-btn.danger{background:#fff;border-color:#b64249;color:#a02030!important}.dnv2-app button:disabled{opacity:.5;cursor:wait}.dnv2-alert{background:#fff3de;border-left:4px solid #b97713;padding:14px 18px;margin:16px 0;border-radius:8px;overflow-wrap:anywhere}.dnv2-alert.success{background:#eaf7f2;border-color:#15815b}.dnv2-loading{display:flex;align-items:center;gap:16px;background:#eaf5f6;border:1px solid #b1d7da;border-radius:12px;padding:20px}.dnv2-loading p{margin:3px 0 0;font-size:13px}.dnv2-spinner{height:26px;width:26px;flex:0 0 26px;border:3px solid #aecacc;border-top-color:var(--teal);border-radius:50%;animation:dnv2-spin 1s linear infinite}@keyframes dnv2-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.dnv2-spinner{animation:none}}.dnv2-statgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:18px 0}.dnv2-stat{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:14px}.dnv2-stat strong{display:block;font-size:26px;color:var(--navy)}.dnv2-stat span{font-size:12px;color:var(--muted)}.dnv2-quote{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bg);border-left:3px solid #75a4b1;border-radius:4px;margin:12px 0;padding:14px;font-size:14px;font-weight:400}.dnv2-source{font-size:12px;color:var(--muted)}.dnv2-item{border:1px solid var(--border);padding:18px;border-radius:12px;margin:12px 0}.dnv2-item h4{margin:0;font:700 18px\/1.4 system-ui;color:var(--ink)}.dnv2-badge{display:inline-block;font-size:11px;font-weight:750;padding:3px 9px;border-radius:12px;background:#edf3f8;color:#304760;margin-bottom:8px}.dnv2-warning{background:#fff8ea;border-left:3px solid #be8c35;padding:12px;margin:12px 0;font-size:14px}.dnv2-comparison{display:grid;grid-template-columns:1fr 1fr;gap:12px}.dnv2-providergrid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.dnv2-provider{border:1px solid var(--border);border-radius:12px;padding:18px;overflow-wrap:anywhere}.dnv2-provider h4{margin:6px 0;font-size:18px}.dnv2-provider p{font-size:13px;margin:8px 0}.dnv2-provider a,.dnv2-resources a{color:#00676b;text-decoration:underline;font-weight:650}.dnv2-history-list{display:grid;gap:10px}.dnv2-history-item{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid var(--border);border-radius:10px;padding:14px;background:#fff}.dnv2-history-item span{display:block;font-size:13px;color:var(--muted)}.dnv2-progress{height:10px;background:#e1e9f0;border-radius:8px;overflow:hidden}.dnv2-progress>span{display:block;height:100%;background:var(--teal)}.dnv2-question-answer{border-left:3px solid #7eabb0;padding:12px 16px;background:var(--bg);margin:12px 0;white-space:pre-wrap}.dnv2-footer{padding:18px 4px;font-size:12px;color:var(--muted)}.dnv2-footer a{color:inherit}.dnv2-small{font-size:12px}.dnv2-live-note{font-size:12px;color:var(--muted);margin:6px 0}.dnv2-app progress{width:100%;height:10px}.dnv2-app a{overflow-wrap:anywhere}\n@media(max-width:680px){.dnv2-hero{padding:24px}.dnv2-card{padding:18px}.dnv2-grid,.dnv2-providergrid,.dnv2-comparison{grid-template-columns:1fr}.dnv2-mode{margin-left:0;width:100%}.dnv2-statgrid{gap:6px}.dnv2-stat{padding:10px}.dnv2-stat strong{font-size:22px}.dnv2-history-item{align-items:flex-start;flex-direction:column}}\n\/* 2.0.1: scope theme resets to the Navigator, never the surrounding site. *\/\n.dnv2-app p{margin:0 0 12px;line-height:1.6;overflow-wrap:anywhere}\n.dnv2-app h2,.dnv2-app h3,.dnv2-app h4{clear:none}\n.dnv2-app h4{font:700 17px\/1.4 system-ui;color:var(--ink);margin:8px 0}\n.dnv2-app dl,.dnv2-app dt,.dnv2-app dd{padding:0;margin:0}\n.dnv2-app .dnv2-hero p{margin:0;max-width:740px}\n.dnv2-app .dnv2-hero{padding:30px 36px}\n.dnv2-app .dnv2-steps{line-height:1.5}\n.dnv2-app .dnv2-steps span{opacity:.76}\n.dnv2-app .dnv2-steps [aria-current=step]{opacity:1;color:#a5e6e7}\n.dnv2-app.dnv2-compact .dnv2-hero{padding:20px 28px;border-radius:16px}\n.dnv2-app .dnv2-compact-title{font-size:28px;letter-spacing:-.6px;line-height:1.2;margin:8px 0 0}\n.dnv2-app.dnv2-compact .dnv2-steps{margin-top:14px;padding-top:12px}\n.dnv2-app[data-view=history] .dnv2-steps{display:none}\n.dnv2-app .dnv2-notice{padding:13px 18px;line-height:1.65}\n.dnv2-app .dnv2-card{padding:24px 26px}\n.dnv2-app .dnv2-loading{position:relative;z-index:2;scroll-margin-top:110px;margin:14px 0}\n.dnv2-app .dnv2-loading-copy{margin:4px 0 0;font-size:13px}\n.dnv2-app .dnv2-loading:focus{outline:2px solid #8ec7cc;outline-offset:2px}\n.dnv2-app .dnv2-report-heading,.dnv2-app .dnv2-history-heading,.dnv2-app .dnv2-alert,.dnv2-app .dnv2-task-form,.dnv2-app .dnv2-qa-panel,.dnv2-app .dnv2-intake-panel h3{scroll-margin-top:110px}\n.dnv2-app .dnv2-summary{font-size:15px;line-height:1.7;margin-bottom:16px;max-width:85ch}\n.dnv2-app .dnv2-statgrid{margin:14px 0}\n.dnv2-app .dnv2-stat{padding:12px 16px}\n.dnv2-app .dnv2-stat strong{font-size:25px;line-height:1.3}\n.dnv2-app .dnv2-stat span{font-size:13px}\n.dnv2-app .dnv2-next-hint{margin-bottom:12px;color:var(--muted);font-size:13px}\n.dnv2-app .dnv2-details{border-top:1px solid var(--border);padding:12px 0;margin-top:12px;font-size:14px}\n.dnv2-app .dnv2-details summary{display:list-item;cursor:pointer;font-weight:700;color:var(--ink);padding:4px 0;line-height:1.6;list-style-position:inside}\n.dnv2-app .dnv2-details[open]>summary{margin-bottom:12px}\n.dnv2-app .dnv2-comparison{gap:24px;margin:0}\n.dnv2-app .dnv2-comparison h4{font-size:14px;margin:0 0 10px}\n.dnv2-app .dnv2-comparison dl>div{display:grid;grid-template-columns:minmax(120px,1fr) 1.4fr;gap:10px;padding:5px 0;border-bottom:1px solid #edf1f5}\n.dnv2-app .dnv2-comparison dt{font-size:12px;font-weight:500;color:var(--muted)}\n.dnv2-app .dnv2-comparison dd{font-size:13px;color:var(--ink);overflow-wrap:anywhere}\n.dnv2-app .dnv2-document{padding:8px 0;border-bottom:1px solid #edf1f5}\n.dnv2-app .dnv2-document strong{font-size:13px;font-weight:650;display:block}\n.dnv2-app .dnv2-document span{display:block;font-size:12px;color:var(--muted)}\n.dnv2-app .dnv2-warning p{margin:0 0 4px}\n.dnv2-app .dnv2-warning{padding:12px 14px}\n.dnv2-app .dnv2-question-label{font-size:13px;margin-top:16px;font-weight:650}\n.dnv2-app .dnv2-question-list{padding:0 0 0 20px;margin:8px 0 0;list-style:disc outside;line-height:1.65;font-size:14px}\n.dnv2-app .dnv2-question-list li{padding:0 0 0 3px;margin:0 0 10px;display:list-item}\n.dnv2-app .dnv2-question-list li::marker{color:var(--teal)}\n.dnv2-app .dnv2-selection-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin:18px 0 10px}\n.dnv2-app .dnv2-selection-toolbar .dnv2-actions{margin:0;gap:8px}\n.dnv2-app .dnv2-selection-toolbar .dnv2-btn{padding:8px 14px;font-size:13px;min-height:40px}\n.dnv2-app .dnv2-selected-count{font-size:13px;font-weight:650;color:var(--muted)}\n.dnv2-app .dnv2-item{padding:16px 18px;margin:12px 0}\n.dnv2-app .dnv2-item-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;margin-bottom:8px}\n.dnv2-app .dnv2-item-meta .dnv2-badge{margin:0}\n.dnv2-app .dnv2-item-choice{margin:8px 0;font-size:16px;line-height:1.45}\n.dnv2-app .dnv2-explanation{font-size:14px;margin:0 0 10px}\n.dnv2-app .dnv2-quote{margin:10px 0 12px;padding:12px 14px;line-height:1.6;font-style:normal}\n.dnv2-app .dnv2-quote:before,.dnv2-app .dnv2-quote:after{display:none}\n.dnv2-app .dnv2-item>.dnv2-small:last-child{margin-bottom:0}\n.dnv2-app .dnv2-date-note{padding:10px 12px;border-left:3px solid #be8c35;background:#fff8ea;margin:10px 0;font-size:14px}\n.dnv2-app .dnv2-date-note span{display:block;font-size:12px;color:#6e5b34;margin-top:3px}\n.dnv2-app .dnv2-directory-choice{margin-top:24px;padding-top:20px;border-top:1px solid var(--border)}\n.dnv2-app .dnv2-directory-choice>p{font-size:14px}\n.dnv2-app .dnv2-directory-choice>.dnv2-small{font-size:12px;color:var(--muted)}\n.dnv2-app .dnv2-review-submit{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}\n.dnv2-app .dnv2-manage{padding:14px 18px;border:1px solid var(--border);background:#fafbfd;border-radius:12px;margin:16px 0}\n.dnv2-app .dnv2-manage p{margin:12px 0 0;color:var(--muted)}\n.dnv2-app .dnv2-history-item{padding:16px 18px}\n.dnv2-app .dnv2-history-item .dnv2-badge{display:inline-block;margin:8px 0 0;font-size:11px}\n.dnv2-app .dnv2-history-item button>span{display:inline;color:inherit}\n.dnv2-app .dnv2-history-item strong{font-size:15px}\n.dnv2-app .dnv2-empty{padding:14px 0}\n.dnv2-app .dnv2-progress{margin:12px 0 18px}\n.dnv2-app .dnv2-task-form{border:1px solid var(--border);border-radius:12px;margin:16px 0;padding:18px}\n.dnv2-app .dnv2-task-form .dnv2-item{border:0;padding:0;margin:6px 0}\n.dnv2-app .dnv2-task-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}\n.dnv2-app .dnv2-task-heading h4{margin:0;font-size:17px}\n.dnv2-app .dnv2-task-heading .dnv2-badge{white-space:nowrap;margin:0}\n.dnv2-app .dnv2-task-form .dnv2-details{margin:6px 0;padding:8px 0;font-size:13px}\n.dnv2-app .dnv2-inline-feedback{padding-left:10px;color:#126444;font-size:13px}\n.dnv2-app .dnv2-task-form hr{display:none}\n.dnv2-app .dnv2-question-answer{white-space:normal;overflow-wrap:anywhere}\n.dnv2-app .dnv2-question-answer p{white-space:pre-wrap;margin:8px 0}\n.dnv2-app button:disabled{cursor:not-allowed}\n.dnv2-app.dnv2-is-busy button:disabled{cursor:wait}\n.dnv2-app .dnv2-footer{line-height:1.6}\n@media(max-width:680px){\n .dnv2-app{margin:16px auto;font-size:15px}\n .dnv2-app .dnv2-hero{padding:24px 20px}\n .dnv2-app.dnv2-compact .dnv2-hero{padding:18px 20px}\n .dnv2-app .dnv2-compact-title{font-size:25px}\n .dnv2-app .dnv2-card{padding:20px 18px}\n .dnv2-app .dnv2-steps{gap:8px 16px;font-size:11px}\n .dnv2-app .dnv2-stat{padding:10px 8px}\n .dnv2-app .dnv2-stat span{font-size:11px}\n .dnv2-app .dnv2-stat strong{font-size:23px}\n .dnv2-app .dnv2-comparison{gap:16px}\n .dnv2-app .dnv2-task-form{padding:14px}\n .dnv2-app .dnv2-task-heading{display:block}\n .dnv2-app .dnv2-task-heading .dnv2-badge{margin-top:8px}\n .dnv2-app .dnv2-review-submit .dnv2-btn{width:100%}\n .dnv2-app .dnv2-loading{scroll-margin-top:90px}\n .dnv2-app .dnv2-report-heading,.dnv2-app .dnv2-history-heading,.dnv2-app .dnv2-alert,.dnv2-app .dnv2-qa-panel,.dnv2-app .dnv2-intake-panel h3{scroll-margin-top:90px}\n}\n\/* 2.0.2: compact evidence review; no changes to the rest of the theme. *\/\n.dnv2-app .dnv2-dates-overview{border-top:1px solid var(--border);margin:18px 0 14px;padding-top:14px}\n.dnv2-app .dnv2-dates-overview h4{margin:0 0 10px;font-size:15px}\n.dnv2-app .dnv2-date-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}\n.dnv2-app .dnv2-date-list li{display:grid;gap:4px;background:#f4f8fa;border-left:3px solid #6ca8ac;padding:12px 14px;border-radius:5px;margin:0;min-width:0;overflow-wrap:anywhere}\n.dnv2-app .dnv2-date-list strong{font-size:16px;color:var(--navy)}\n.dnv2-app .dnv2-date-list span{font-size:13px;line-height:1.5}\n.dnv2-app .dnv2-date-list small{font-size:11px;color:var(--muted)}\n.dnv2-app .dnv2-date-caption{font-size:12px;color:var(--muted);margin:8px 0 0}\n.dnv2-app .dnv2-jump-actions{margin:10px 0;gap:8px}\n.dnv2-app .dnv2-jump-actions button{padding:8px 12px;font-size:13px;min-height:40px}\n.dnv2-app .dnv2-item{padding:14px 16px}\n.dnv2-app .dnv2-item .dnv2-item-choice{font-size:15px;margin:8px 0}\n.dnv2-app .dnv2-item .dnv2-quote{margin:8px 0;padding:10px 12px;font-size:14px}\n.dnv2-app .dnv2-item-facts{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12px;color:var(--muted);margin:8px 0 0}\n.dnv2-app .dnv2-item-facts>div{max-width:100%;overflow-wrap:anywhere}\n.dnv2-app .dnv2-item-facts .dnv2-date-note{padding:0;margin:0;border:0;background:transparent;font-size:12px}\n.dnv2-app .dnv2-date-note{background:#f3f8fa;border-left-color:#75a4b1}\n.dnv2-app .dnv2-explanation-details{border:0;margin:6px 0 0;padding:0}\n.dnv2-app .dnv2-explanation-details summary{font-size:12px;color:var(--muted);min-height:32px;display:list-item}\n.dnv2-app .dnv2-explanation-details[open]>summary{margin-bottom:4px}\n.dnv2-app .dnv2-explanation{font-size:13px;margin:0}\n.dnv2-app .dnv2-info-topic{border:1px solid var(--border);border-radius:12px;padding:12px 18px;background:#fafcfd;margin:10px 0}\n.dnv2-app .dnv2-info-topic summary{font-size:14px}\n.dnv2-app .dnv2-topic-message{padding:8px 0}\n.dnv2-app .dnv2-topic-message + .dnv2-topic-message{border-top:1px solid var(--border)}\n.dnv2-app .dnv2-topic-message p{margin:0 0 4px;font-size:14px}\n.dnv2-app .dnv2-warning h4{font-size:15px;margin:0 0 4px}\n.dnv2-app .dnv2-warning .dnv2-topic-message{padding:2px 0}\n.dnv2-app .dnv2-suggestion{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;background:#edf7f6;border:1px solid #bcdad7;border-radius:10px;margin:12px 0}\n.dnv2-app .dnv2-suggestion strong{font-size:14px}\n.dnv2-app .dnv2-suggestion p{font-size:12px;margin:3px 0 0}\n.dnv2-app .dnv2-suggestion button{font-size:13px;padding:9px 12px;flex-shrink:0}\n.dnv2-app .dnv2-suggestion-feedback{color:#15564f}\n.dnv2-app .dnv2-submit-hint{font-size:12px;color:var(--muted);margin:3px 0 0}\n.dnv2-app .dnv2-selection-heading,.dnv2-app .dnv2-directory-choice h3{scroll-margin-top:110px}\n.dnv2-app .dnv2-language-bar{display:flex;align-items:center;justify-content:flex-end;gap:12px;font-size:12px;color:var(--muted);margin-bottom:12px;position:relative;z-index:4}\n.dnv2-app .dnv2-language-control{position:relative;max-width:100%;min-height:40px}\n.dnv2-app .dnv2-language-bar .trp-language-switcher{margin:0}\n\/* Hide only known floating controls after a real inline replacement exists on this page. *\/\nbody.dnv2-inline-language #trp-floater-ls,body.dnv2-inline-language .trp-floating-switcher,body.dnv2-inline-language .trp-language-switcher:has(> .trp-floating-switcher){display:none!important}\n@media(max-width:680px){\n .dnv2-app .dnv2-date-list{grid-template-columns:1fr}\n .dnv2-app .dnv2-date-list li{padding:10px 12px}\n .dnv2-app .dnv2-item{padding:12px}\n .dnv2-app .dnv2-suggestion{display:block;padding:12px}\n .dnv2-app .dnv2-suggestion button{margin-top:10px;width:100%}\n .dnv2-app .dnv2-selection-heading,.dnv2-app .dnv2-directory-choice h3{scroll-margin-top:90px}\n .dnv2-app .dnv2-review-submit>div{width:100%}\n .dnv2-app .dnv2-language-bar{gap:6px}\n}\n.dnv2-app .dnv2-hero-top{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}\n.dnv2-app .dnv2-hero-top .dnv2-language-bar{margin:0;color:#d2dfed;justify-content:flex-end}\n.dnv2-app .dnv2-hero-top .dnv2-language-bar>span{display:none}\n.dnv2-app .dnv2-auth-shell{padding:28px}\n.dnv2-app .dnv2-auth-layout{display:grid;grid-template-columns:minmax(0,.95fr) minmax(320px,1.05fr);gap:34px;align-items:start}\n.dnv2-app .dnv2-auth-copy h3{font-size:26px;margin-top:8px}\n.dnv2-app .dnv2-auth-copy ul{margin:18px 0 0;padding-left:20px;color:var(--muted);font-size:14px}\n.dnv2-app .dnv2-auth-copy li{margin:8px 0}\n.dnv2-app .dnv2-auth-box{border:1px solid var(--border);border-radius:14px;background:#f9fbfd;padding:18px}\n.dnv2-app .dnv2-auth-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:#eaf0f5;padding:5px;border-radius:10px;margin-bottom:14px}\n.dnv2-app .dnv2-auth-tabs button{border:0;border-radius:7px;background:transparent;color:var(--ink);padding:10px 12px;font:700 14px\/1.2 system-ui;cursor:pointer}\n.dnv2-app .dnv2-auth-tabs button.active{background:#fff;color:var(--navy);box-shadow:0 1px 4px rgba(19,36,60,.12)}\n.dnv2-app .dnv2-auth-form label{margin:10px 0}\n.dnv2-app .dnv2-auth-form .dnv2-btn{width:100%;margin-top:8px}\n.dnv2-app .dnv2-auth-link{font-size:13px;font-weight:650;color:#00676b}\n.dnv2-app .dnv2-auth-status{min-height:22px;margin-top:12px;font-size:13px;color:#a02030}\n.dnv2-app .dnv2-auth-status.success{color:#126444}\n.dnv2-app .dnv2-auth-note{margin:20px 0 0!important;padding-top:14px;border-top:1px solid var(--border)}\n@media(max-width:760px){\n .dnv2-app .dnv2-hero-top{display:block}\n .dnv2-app .dnv2-hero-top .dnv2-language-bar{justify-content:flex-start;margin-top:10px}\n .dnv2-app .dnv2-auth-layout{grid-template-columns:1fr;gap:18px}\n .dnv2-app .dnv2-auth-shell{padding:20px 18px}\n}\n\n.dnv2-app .dnv2-pdf-ready{border:2px solid #95cfd1;background:#f3faf9}\n.dnv2-app .dnv2-pdf-ready .dnv2-btn{font-size:17px;padding:14px 22px}\n.dnv2-app .dnv2-mail-choice{border:1px solid var(--border);background:var(--bg);padding:14px 18px;border-radius:12px;margin:18px 0}\n.dnv2-app .dnv2-mail-choice .dnv2-check{margin:0 0 8px}\n.dnv2-app .dnv2-pdf-bottom{justify-content:center;margin:24px 0}\n@media(max-width:680px){.dnv2-app .dnv2-pdf-ready .dnv2-actions,.dnv2-app .dnv2-pdf-ready .dnv2-btn,.dnv2-app .dnv2-pdf-bottom .dnv2-btn{width:100%}}<\/style><script>(function () {\n  'use strict';\n  const E = value => String(value ?? '').replace(\/[&<>\"']\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n  const safeURL = (s, external = true) => {\n    try {\n      const u = new URL(s, location.origin);\n      if (!['https:', 'http:'].includes(u.protocol) || u.username || u.password) return '';\n      if (!external && u.origin !== location.origin) return '';\n      return u.href;\n    } catch (_) { return ''; }\n  };\n  const link = (url, title) => {\n    const u = safeURL(url);\n    return u ? `<a href=\"${E(u)}\" target=\"_blank\" rel=\"noopener noreferrer\" referrerpolicy=\"no-referrer\">${E(title)}<\/a>` : E(title);\n  };\n  const fmt = t => t ? new Date(Number(t) * 1000).toLocaleString() : '';\n  const randomID = () => {\n    const a = new Uint8Array(16); crypto.getRandomValues(a);\n    return Array.from(a, x => x.toString(16).padStart(2, '0')).join('');\n  };\n  \/\/ Applies only to service status\/errors, NEVER to customer excerpts or citations.\n  const serviceMessage = value => {\n    const text = String(value ?? '');\n    if (!\/openai|api key|wp-config|openssl|hkdf|dnv2_openai|dui702_openai\/i.test(text)) return text;\n    if (\/timeout|timed out|could not be reached\/i.test(text)) return '702 DUI Navigator could not finish this request in time. Check My reports before submitting again.';\n    if (\/structured|incomplete|did not finish\/i.test(text)) return '702 DUI Navigator could not produce a complete review. Try a clearer document or fewer pages.';\n    return '702 DUI Navigator is temporarily unavailable. Please try again later or contact support.';\n  };\n  function start() { document.querySelectorAll('.dnv2-app:not([data-ready])').forEach(mount); }\n  function mount(root) {\n    root.dataset.ready = '1';\n    const C = JSON.parse(root.dataset.dnv2);\n    const languageBar=root.querySelector('.dnv2-language-bar');\n    if(languageBar && languageBar.querySelector('a')) document.body.classList.add('dnv2-inline-language');\n    if (!C.signed) {\n      const status=root.querySelector('.dnv2-auth-status');\n      const tabs=Array.from(root.querySelectorAll('[data-auth-view]'));\n      const forms=Array.from(root.querySelectorAll('[data-auth-form]'));\n      const showAuth=mode=>{\n        tabs.forEach(b=>{const on=b.dataset.authView===mode;b.classList.toggle('active',on);b.setAttribute('aria-selected',on?'true':'false');});\n        forms.forEach(f=>f.hidden=f.dataset.authForm!==mode);\n        if(status){status.textContent='';status.classList.remove('success');}\n      };\n      tabs.forEach(b=>b.addEventListener('click',()=>showAuth(b.dataset.authView)));\n      forms.forEach(f=>f.addEventListener('submit',async e=>{\n        e.preventDefault(); if(!f.reportValidity()) return;\n        const button=f.querySelector('button[type=submit]'); button.disabled=true;\n        if(status){status.textContent=f.dataset.authForm==='register'?'Creating your secure account\u2026':'Signing you in\u2026';status.classList.remove('success');}\n        const fd=new FormData(f); fd.set('action','dnv2_auth');fd.set('nonce',C.guest_nonce);fd.set('mode',f.dataset.authForm);\n        try{\n          const response=await fetch(C.ajax,{method:'POST',body:fd,credentials:'same-origin',cache:'no-store'});\n          const j=await response.json();\n          if(!j.success) throw Error(j.data?.message||'Account request did not finish.');\n          if(status){status.textContent=j.data?.message||'Account ready. Loading Navigator\u2026';status.classList.add('success');}\n          window.setTimeout(()=>location.reload(),350);\n        }catch(err){if(status){status.textContent=err.message;status.classList.remove('success');}button.disabled=false;}\n      }));\n      return;\n    }\n    if (!C.authorized) return;\n    const $ = s => root.querySelector(s), $$ = s => Array.from(root.querySelectorAll(s));\n    const form = $('.dnv2-intake'), result = $('.dnv2-result'), history = $('.dnv2-history');\n    const panel = $('.dnv2-intake-panel'), alertBox = $('.dnv2-alert'), loading = $('.dnv2-loading');\n    let current = null, busy = false, requestID = randomID(), images = [], pendingFocus = null, slowTimer = null;\n    let disabledBefore = new Map(), questionDraft = '', enabled = true;\n    const titleTarget = () => result.querySelector('.dnv2-report-heading') || result;\n    function focusNode(node, scroll = true) {\n      if (!node || !node.isConnected) return;\n      if (!node.hasAttribute('tabindex') && !node.matches('button,input,textarea,select,a,summary')) node.tabIndex = -1;\n      node.focus({preventScroll: true});\n      if (scroll) node.scrollIntoView({behavior: 'auto', block: 'start'});\n    }\n    function requestFocus(node, scroll = true) {\n      if (busy) { pendingFocus = {node, scroll}; return; }\n      focusNode(node, scroll);\n    }\n    function alert(text, success = false, shouldFocus = false) {\n      alertBox.textContent = serviceMessage(text);\n      alertBox.classList.toggle('success', success);\n      alertBox.hidden = !text;\n      alertBox.setAttribute('role', success ? 'status' : 'alert');\n      if (text && shouldFocus) requestFocus(alertBox);\n    }\n    function disableBusyControls() {\n      $$('button,input,select,textarea').forEach(el => {\n        if (!disabledBefore.has(el)) disabledBefore.set(el, el.disabled);\n        el.disabled = true;\n      });\n    }\n    function wait(yes, title = '702 DUI Navigator is working\u2026', bringIntoView = false) {\n      const wasBusy = busy; busy = yes;\n      loading.hidden = !yes; root.classList.toggle('dnv2-is-busy', yes);\n      clearTimeout(slowTimer);\n      if (yes) {\n        $('.dnv2-loading-title').textContent = title;\n        $('.dnv2-loading-copy').textContent = 'Please keep this page open. Your results will appear when this request finishes.';\n        disableBusyControls();\n        slowTimer = setTimeout(() => {\n          $('.dnv2-loading-copy').textContent = 'Still waiting for a response. Please do not resubmit. If the request times out, check My reports first.';\n        }, 60000);\n        if (!wasBusy && bringIntoView) focusNode(loading);\n      } else {\n        disabledBefore.forEach((wasDisabled, el) => { if (el.isConnected) el.disabled = wasDisabled; });\n        disabledBefore = new Map();\n        form.querySelector('button[type=submit]').disabled = !enabled;\n        const qb = result.querySelector('.dnv2-question button[type=submit]');\n        if (qb && current && current.questions_left <= 0) qb.disabled = true;\n        if (pendingFocus) { const f = pendingFocus; pendingFocus = null; focusNode(f.node, f.scroll); }\n      }\n    }\n    async function api(op, values = {}, timeout = 230000) {\n      const fd = values instanceof FormData ? values : new FormData();\n      if (!(values instanceof FormData)) Object.entries(values).forEach(([k,v]) => fd.append(k, typeof v === 'object' ? JSON.stringify(v) : String(v)));\n      fd.set('action','dnv2'); fd.set('nonce',C.nonce); fd.set('op',op);\n      const abort = new AbortController(), timer = setTimeout(() => abort.abort(), timeout);\n      try {\n        const response = await fetch(C.ajax, {method:'POST', body:fd, credentials:'same-origin', cache:'no-store', signal:abort.signal});\n        let j;\n        try { j = await response.json(); }\n        catch (_) { throw Error('702 DUI Navigator did not receive a readable response. Check My reports before starting another analysis. Contact support if the problem continues.'); }\n        if (!j.success) throw Error(j.data?.message || 'The request did not finish. Please try again.');\n        return j.data;\n      } catch (e) {\n        if (e.name === 'AbortError') throw Error('The browser stopped waiting, but your report may still finish. Check My reports before starting another analysis.');\n        throw e;\n      } finally { clearTimeout(timer); }\n    }\n    function show(which) {\n      panel.hidden = which !== 'new'; history.hidden = which !== 'history'; result.hidden = which !== 'result';\n      root.dataset.view = which;\n      root.classList.toggle('dnv2-compact', which !== 'new');\n      const compactTitle = $('.dnv2-compact-title');\n      compactTitle.hidden = which === 'new'; $('.dnv2-hero-title').hidden = which !== 'new';\n      $('.dnv2-hero-intro').hidden = which !== 'new';\n      compactTitle.textContent = which === 'history' ? 'Your saved reports.' : current?.access ? 'Your Navigator workspace.' : 'Review your paperwork.';\n      const active = which === 'result' ? 'history' : which;\n      $$('.dnv2-tabs button').forEach(b => {\n        const isActive = b.dataset.act === active;\n        b.classList.toggle('active', isActive);\n        if (isActive) b.setAttribute('aria-current', 'page'); else b.removeAttribute('aria-current');\n      });\n      const step = which === 'new' ? '1' : which === 'history' ? '' : current?.access ? '3' : '2';\n      $$('.dnv2-steps [data-step]').forEach(el => {\n        if (el.dataset.step === step) el.setAttribute('aria-current','step'); else el.removeAttribute('aria-current');\n      });\n    }\n    const source = (p,i) => `${p.manifest?.[i.source_id]?.label || i.source_id}${i.page ? ' \u00b7 page ' + i.page : ''}`;\n    const stateOptions = selected => Object.entries(C.states).map(([k,v]) => `<option value=\"${E(k)}\" ${k === selected ? 'selected' : ''}>${E(v)}<\/option>`).join('');\n    const programOptions = selected => Object.entries(C.programs).map(([k,v]) => `<option value=\"${E(k)}\" ${k === selected ? 'selected' : ''}>${E(v)}<\/option>`).join('');\n    const dateNotice = i => i.deadline_text ? `<div class=\"dnv2-date-note\"><strong>${i.source_id === 'M1' ? 'Date in your text' : 'Date in the source'}:<\/strong> ${E(i.deadline_text)}<\/div>` : '';\n    function quotedItem(p, i, review = false) {\n      return `<article class=\"dnv2-item\" id=\"${E(root.id + '-' + i.id)}\">\n        <div class=\"dnv2-item-meta\"><span class=\"dnv2-badge\">${i.source_id === 'M1' ? 'From your entry' : 'From uploaded paperwork'}<\/span><span class=\"dnv2-source\">${E(source(p,i))}<\/span><\/div>\n        ${review ? `<label class=\"dnv2-check dnv2-item-choice\"><input type=\"checkbox\" name=\"selected\" value=\"${E(i.id)}\" ${i.confirmed ? 'checked' : ''}><span><strong>${E(i.title)}<\/strong><\/span><\/label>` : `<h4>${E(i.title)}<\/h4>`}\n        <blockquote class=\"dnv2-quote\">${E(i.quote)}<\/blockquote>\n        ${i.deadline_text || i.program_text ? `<div class=\"dnv2-item-facts\">${dateNotice(i)}${i.program_text ? `<div><strong>Program mentioned:<\/strong> ${E(i.program_text)}<\/div>` : ''}<\/div>` : ''}\n        ${i.explanation ? `<details class=\"dnv2-details dnv2-explanation-details\"><summary>Explanation<\/summary><p class=\"dnv2-explanation\">${E(i.explanation)}<\/p><\/details>` : ''}\n      <\/article>`;\n    }\n    function topicModel(p) {\n      if (p.review_topics && Array.isArray(p.review_topics.groups)) return p.review_topics;\n      \/\/ Compatibility with a saved response from an older page\/server cache. Keep notes intact.\n      const messages = [...(p.discrepancies || []).map(d => ({text:d.message,source_ids:d.source_ids || [],evidence:[]})),\n        ...(p.questions || []).map(q => ({text:q,source_ids:[],evidence:[]}))];\n      const seen = new Set(), unique = messages.filter(m => {const k=JSON.stringify([m.text.trim(),m.source_ids]);if(seen.has(k))return false;seen.add(k);return true;});\n      const groups = unique.length ? [{type:'legacy_note',title:'Earlier analysis notes',informational:true,messages:unique}] : [];\n      for (const id of p.unreadable || []) groups.push({type:'unreadable_source',title:'Unreadable material',informational:false,messages:[{text:'This source could not be read. Try a clearer copy or enter the relevant text.',source_ids:[id],evidence:[]}]});\n      return {legacy:true,groups};\n    }\n    function conciseSummary(p) {\n      const n=p.items.length, d=p.items.filter(i => i.deadline_text).length;\n      if (!n) return 'No readable instruction was found in this analysis. Try a clearer copy or enter the relevant instruction text.';\n      const sourceNames = Object.keys(p.manifest || {});\n      const where = sourceNames.length === 1 && sourceNames[0] === 'M1' ? 'your entry' : 'the material you submitted';\n      return `Navigator found ${n} item${n === 1 ? '' : 's'} to review${d ? ` and ${d} date mention${d === 1 ? '' : 's'}` : ''} in ${where}. Check the excerpts below, then organize the items you want to keep.`;\n    }\n    function dateOverview(p) {\n      const dated=p.items.filter(i => i.deadline_text);\n      if (!dated.length) return '';\n      return `<section class=\"dnv2-dates-overview\" aria-label=\"Dates mentioned in your material\"><h4>${dated.length > 1 ? 'Dates to keep track of' : 'Date mentioned in your material'}<\/h4>\n        <ul class=\"dnv2-date-list\">${dated.map(i => `<li><strong>${E(i.deadline_text)}<\/strong><span>${E(i.title)}<\/span><small>${E(source(p,i))}<\/small><\/li>`).join('')}<\/ul>\n        <p class=\"dnv2-small dnv2-date-caption\">Copied wording, shown in source order\u2014not calculated or verified deadlines.${dated.length > 1 ? ' Separate actions can have different dates; a date difference alone does not establish a conflict.' : ''}<\/p><\/section>`;\n    }\n    function topicBody(p,g) {\n      return g.messages.map(m => `<div class=\"dnv2-topic-message\"><p>${E(m.text)}<\/p>\n        ${m.source_ids?.length ? `<div class=\"dnv2-source\">${m.source_ids.map(id => E(p.manifest?.[id]?.label || id)).join(' \u00b7 ')}<\/div>` : ''}\n        ${m.evidence?.length ? `<details class=\"dnv2-details\"><summary>Supporting excerpts<\/summary>${m.evidence.map(e => `<div><span class=\"dnv2-source\">${E(source(p,e))}<\/span><blockquote class=\"dnv2-quote\">${E(e.quote)}<\/blockquote><\/div>`).join('')}<\/details>` : ''}<\/div>`).join('');\n    }\n    function topicsHTML(p,model) {\n      if (!model.groups.length) return '';\n      const active=model.groups.filter(g=>!g.informational), info=model.groups.filter(g=>g.informational);\n      let html='';\n      if(active.length) html+=`<section class=\"dnv2-card dnv2-attention\"><div class=\"dnv2-section-label\">REVIEW BEFORE CONTINUING<\/div><h3>${active.length === 1 ? 'One thing to confirm' : 'A few things to confirm'}<\/h3>${active.map(g=>`<article class=\"dnv2-warning\"><h4>${E(g.title)}<\/h4>${topicBody(p,g)}<\/article>`).join('')}<\/section>`;\n      if(info.length) html+=`<section class=\"dnv2-info-topics\">${info.map(g=>`<details class=\"dnv2-details dnv2-info-topic\"><summary>${E(g.title)}${g.messages.length>1 ? ` <span class=\"dnv2-small\">(${g.messages.length} notes)<\/span>` : ''}<\/summary>${g.type==='legacy_note'?'<p class=\"dnv2-small\">Saved with earlier reading rules. These original comments have not been re-evaluated. Run a new analysis with the original material to apply the updated reading rules.<\/p>':''}${topicBody(p,g)}<\/details>`).join('')}<\/section>`;\n      return html;\n    }\n    function suggestionHTML(p) {\n      if (!p.suggestion || p.suggestion==='unknown' || !C.programs[p.suggestion]) return '<p class=\"dnv2-small\">No clear directory category was identified. Leave the selection unknown when your instructions do not name one.<\/p>';\n      return `<div class=\"dnv2-suggestion\"><div><strong>Suggested directory category: ${E(C.programs[p.suggestion])}<\/strong><p class=\"dnv2-small\">A search suggestion based on your wording\u2014not a course requirement or equivalence decision.<\/p><\/div><button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"use-suggestion\">Use this search category<\/button><\/div><p class=\"dnv2-suggestion-feedback dnv2-small\" role=\"status\"><\/p>`;\n    }\n    function contextDetails(p) {\n      const facts = [['Case \/ requirement state', C.states[p.context.case_state] || 'Not provided'], ['Residence state', C.states[p.context.residence_state] || 'Not provided'], ['License state', C.states[p.context.license_state] || 'Not provided'], ['Court \/ agency', p.context.court || 'Not provided'], ['County', p.context.county || 'Not provided']];\n      return `<details class=\"dnv2-details dnv2-context-details\"><summary>Your answers &amp; source documents<\/summary>\n        <div class=\"dnv2-comparison\"><div><h4>Your form answers<\/h4><dl>${facts.map(([k,v]) => `<div><dt>${E(k)}<\/dt><dd>${E(v)}<\/dd><\/div>`).join('')}<\/dl><\/div>\n        <div><h4>Source documents<\/h4>${p.documents.map(d => `<div class=\"dnv2-document\"><strong>${E(p.manifest?.[d.source_id]?.label || d.source_id)}<\/strong><span>${E(d.document_type.replaceAll('_',' '))} \u00b7 ${E(C.states[d.state] || 'State not identified')}<\/span>${d.issuer ? `<span>${E(d.issuer)}<\/span>` : ''}<\/div>`).join('') || '<p class=\"dnv2-muted\">No document type was identified.<\/p>'}<\/div><\/div>\n        ${p.summary ? `<details class=\"dnv2-details\"><summary>Original analysis summary<\/summary><p>${E(p.summary)}<\/p><\/details>` : ''}\n      <\/details>`;\n    }\n    function pdfReady(p) {\n      const d=p.delivery || {};\n      return `<section class=\"dnv2-card dnv2-pdf-ready\"><div class=\"dnv2-section-label\">TAKE YOUR PLAN WITH YOU<\/div>\n        <h3>Your Navigator plan is ready.<\/h3><p>Save a PDF copy to your phone or computer. You do not need to finish the task tracker first.<\/p>\n        <div class=\"dnv2-actions\"><button class=\"dnv2-btn\" type=\"button\" data-act=\"pdf\">Download My Plan (PDF)<\/button>${d.enabled && d.email ? '<button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"email-pdf\">Email me a PDF copy<\/button>' : ''}<\/div>\n        ${d.email && d.enabled ? `<p class=\"dnv2-small\">Email copies go only to your signed-in account: <strong>${E(d.email)}<\/strong>.<\/p>` : ''}\n        ${d.message ? `<p class=\"dnv2-small dnv2-delivery-status\" role=\"status\">${E(d.message)}<\/p>` : ''}\n        <p class=\"dnv2-small\">Includes saved reviewed excerpts, notes, review comments and available resources. Save edited tasks before exporting. Your online workspace remains below.<\/p><\/section>`;\n    }\n    function mailChoice(p) {\n      const d=p.delivery || {};if(!d.enabled || !d.email) return '';\n      return `<div class=\"dnv2-mail-choice\"><label class=\"dnv2-check\"><input type=\"checkbox\" name=\"email_pdf\" value=\"1\"><span>Email my PDF plan to <strong>${E(d.email)}<\/strong> after payment. I confirm this is my mailbox and agree to receive my sensitive report as an unencrypted attachment.<\/span><\/label><p class=\"dnv2-small\">Optional. Download is available either way. Mail services keep separate copies; report deletion cannot recall an email. We never use addresses found in your paperwork.<\/p><\/div>`;\n    }\n    function savePDF(data) {\n      if(data.mime!=='application\/pdf' || typeof data.base64!=='string' || data.base64.length>4000000) throw Error('The PDF response was not valid. Please try again.');\n      const raw=atob(data.base64);if(!raw.startsWith('%PDF-'))throw Error('No complete PDF was returned. Please try again.');\n      const bytes=new Uint8Array(raw.length);for(let i=0;i<raw.length;i++)bytes[i]=raw.charCodeAt(i);\n      download(bytes,'702-Navigator-Plan.pdf','application\/pdf');\n    }\n    function footerActions() {\n      return `<details class=\"dnv2-details dnv2-manage\"><summary>Report options &amp; deletion<\/summary>\n        <div class=\"dnv2-actions\"><button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"refresh\">Refresh report<\/button><button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"history\">My reports<\/button><button class=\"dnv2-btn danger\" type=\"button\" data-act=\"erase\">Delete report content<\/button><\/div>\n        <p class=\"dnv2-small\">Deletion is permanent in the active application. It does not issue a refund or erase separate financial records or backups.<\/p><\/details>`;\n    }\n    function render(p, target = 'start') {\n      current = p; show('result');\n      if (['processing','researching'].includes(p.status) && !p.items) {\n        result.innerHTML = `<div class=\"dnv2-card\"><h3 class=\"dnv2-report-heading\" tabindex=\"-1\">Your report is still processing.<\/h3><p>702 DUI Navigator has received your request. Check for the saved result without submitting it again.<\/p><button class=\"dnv2-btn\" data-act=\"refresh\">Check report status<\/button><\/div>`;\n      } else if (!p.items) {\n        const heading = p.status === 'expired' ? 'Report expired' : p.status === 'erased' ? 'Report deleted' : p.status === 'failed' ? 'The analysis did not finish' : 'This request was interrupted';\n        result.innerHTML = `<div class=\"dnv2-card\"><h3 class=\"dnv2-report-heading\" tabindex=\"-1\">${heading}<\/h3><p>No usable report is available from this request. Try a clearer upload or fewer pages, or contact support.<\/p><button class=\"dnv2-btn\" data-act=\"new\">Start a new analysis<\/button> <button class=\"dnv2-btn secondary\" data-act=\"history\">My reports<\/button><\/div>${footerActions()}`;\n      } else {\n        const picked = p.items.filter(i => i.confirmed), done = picked.filter(i => i.status === 'done').length;\n        const topics = topicModel(p), needs = topics.groups.filter(g => !g.informational).length;\n        const legacyCount = topics.groups.filter(g => g.type === 'legacy_note').reduce((n,g) => n+g.messages.length,0);\n        let html = `<section class=\"dnv2-card dnv2-overview\"><div class=\"dnv2-section-label\">${p.access ? 'YOUR WORKSPACE' : 'YOUR PAPERWORK REVIEW'}<\/div>\n          <h3 class=\"dnv2-report-heading\" tabindex=\"-1\">${p.access ? 'Your paperwork, organized.' : 'Here\u2019s what Navigator found.'}<\/h3>\n          <p class=\"dnv2-summary\">${E(conciseSummary(p))}<\/p>\n          <div class=\"dnv2-statgrid\"><div class=\"dnv2-stat\"><strong>${p.items.length}<\/strong><span>Items found<\/span><\/div><div class=\"dnv2-stat\"><strong>${p.items.filter(i => i.deadline_text).length}<\/strong><span>Date mentions<\/span><\/div><div class=\"dnv2-stat\"><strong>${topics.legacy ? legacyCount+needs : needs}<\/strong><span>${topics.legacy ? 'Saved review notes' : 'Things to confirm'}<\/span><\/div><\/div>\n          ${dateOverview(p)}\n          <p class=\"dnv2-small dnv2-next-hint\">${p.access ? 'Update your tasks below. Progress reflects what you mark done.' : p.reviewed ? 'Your selections are saved. Continue to available resources and your workspace below.' : 'Check the quoted items, confirm your directory category when known, then save your review.'}<\/p>\n          ${!p.reviewed && p.items.length ? '<div class=\"dnv2-actions dnv2-jump-actions\"><button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"jump-items\">Review items \u2193<\/button><button class=\"dnv2-btn secondary\" type=\"button\" data-act=\"jump-program\">Program resources \u2193<\/button><\/div>' : ''}\n          ${contextDetails(p)}<\/section>`;\n        if(p.access) html += pdfReady(p);\n        html += topicsHTML(p,topics);\n        if (!p.reviewed) {\n          html += `<form class=\"dnv2-review\" method=\"post\"><section class=\"dnv2-card\"><h3 class=\"dnv2-selection-heading\" tabindex=\"-1\">Review and select your items<\/h3><p class=\"dnv2-muted\">Keep the excerpts you checked against your original information. Selection records your review\u2014not verified compliance.<\/p>\n            <div class=\"dnv2-selection-toolbar\"><div class=\"dnv2-actions\"><button type=\"button\" class=\"dnv2-btn secondary\" data-act=\"select-all\">Select all<\/button><button type=\"button\" class=\"dnv2-btn secondary\" data-act=\"clear-selection\">Clear selection<\/button><\/div><span class=\"dnv2-selected-count\" aria-live=\"polite\"><\/span><\/div>\n            ${p.items.map(i => quotedItem(p,i,true)).join('')}\n            ${!p.items.length ? '<p>No readable instruction was found. Try a clearer upload; there is no reviewed content to purchase.<\/p>' : ''}\n            <div class=\"dnv2-directory-choice\"><h3 tabindex=\"-1\">Find program resources<\/h3><p>Confirm the directory category mentioned in your instructions, or leave it unknown.<\/p>\n            ${suggestionHTML(p)}\n            <div class=\"dnv2-grid\"><label>State for the program<select name=\"search_state\">${stateOptions(p.selection.state)}<\/select><\/label><label>Directory category to search<select name=\"program\">${programOptions(p.selection.program || 'unknown')}<\/select><\/label><label>Preferred class format<select name=\"delivery\"><option value=\"any\">Any \/ verify directly<\/option><option value=\"online\">Live online<\/option><option value=\"in_person\">In person<\/option><\/select><\/label><\/div><\/div>\n            <label class=\"dnv2-check\"><input type=\"checkbox\" name=\"ack\" value=\"1\" required><span>I checked the selected excerpts against my information. I understand that a directory listing is not court acceptance.<\/span><\/label>\n            <div class=\"dnv2-review-submit\"><div><span class=\"dnv2-selected-count\"><\/span><p class=\"dnv2-submit-hint dnv2-small\" aria-live=\"polite\"><\/p><\/div><button class=\"dnv2-btn\" type=\"submit\">${C.research ? 'Save review & find resources' : 'Save my review'} <span aria-hidden=\"true\">\u2192<\/span><\/button><\/div>\n          <\/section><\/form>`;\n        } else if (!p.access) {\n          html += `<section class=\"dnv2-card\"><h3>Your selections are saved<\/h3><p>${picked.length} item${picked.length === 1 ? '' : 's'} selected. Your source excerpts and date text remain available below.<\/p>\n            <div class=\"dnv2-warning\">${E(serviceMessage(p.research_note))}<\/div><p>${p.provider_count} sourced provider listing${p.provider_count === 1 ? '' : 's'} found. ${p.research_at ? 'Source check: ' + E(fmt(p.research_at)) : ''}<\/p>\n            <p>Your workspace adds task tracking, notes, calendar exports for dates you confirm, official resources, provider listings where found, report downloads, and up to five questions about reviewed excerpts. A provider match is not guaranteed.<\/p>\n            ${p.can_buy ? mailChoice(p) : ''}\n            <div class=\"dnv2-actions\">${p.can_buy ? `<button class=\"dnv2-btn\" data-act=\"buy\">Unlock my workspace \u00b7 ${E(p.price)}<\/button>` : '<p>Checkout is unavailable for this report. Empty or unreviewed results are not offered for purchase.<\/p>'}${C.research ? '<button class=\"dnv2-btn secondary\" data-act=\"research\">Check official sources<\/button>' : ''}<\/div>\n            <\/section><section class=\"dnv2-card\"><h3>Your reviewed excerpts<\/h3>${picked.map(i => quotedItem(p,i)).join('')}<\/section>`;\n        } else {\n          const percent = picked.length ? Math.round(done \/ picked.length * 100) : 0;\n          html += `<section class=\"dnv2-card\"><h3>Your progress<\/h3><p><strong>${done} of ${picked.length}<\/strong> tasks marked done by you. This is not verified legal compliance.<\/p>\n            <div class=\"dnv2-progress\" role=\"progressbar\" aria-label=\"Tasks marked done by you\" aria-valuenow=\"${percent}\" aria-valuemin=\"0\" aria-valuemax=\"100\"><span style=\"width:${percent}%\"><\/span><\/div>\n            <div class=\"dnv2-actions\"><button class=\"dnv2-btn secondary\" data-act=\"download\">Download text copy<\/button><button class=\"dnv2-btn secondary\" data-act=\"print\">Print \/ Save as PDF<\/button><button class=\"dnv2-btn secondary\" data-act=\"calendar\">Add confirmed dates to calendar<\/button><\/div>\n            <p class=\"dnv2-small\">Report access until ${E(fmt(p.expires_at))}. Original uploads are not kept as an archive.<\/p><\/section>`;\n          html += `<section class=\"dnv2-card\"><h3>Your tasks<\/h3><p class=\"dnv2-muted\">These cards organize the excerpts you reviewed. Calendar dates start blank\u2014enter only dates you independently confirmed.<\/p>\n            ${picked.map(i => `<form class=\"dnv2-task-form\" data-task=\"${E(i.id)}\" method=\"post\" tabindex=\"-1\">\n              <div class=\"dnv2-task-heading\"><h4>${E(i.title)}<\/h4><span class=\"dnv2-badge\">${E({not_started:'Not started',in_progress:'In progress',done:'Marked done by you'}[i.status] || 'Not started')}<\/span><\/div>\n              ${dateNotice(i)}<details class=\"dnv2-details\"><summary>View the source excerpt<\/summary>${quotedItem(p,i)}<\/details>\n              <div class=\"dnv2-grid\"><label>Your task status<select name=\"status\">${[['not_started','Not started'],['in_progress','In progress'],['done','Marked done by me']].map(([k,v]) => `<option value=\"${k}\" ${i.status === k ? 'selected' : ''}>${v}<\/option>`).join('')}<\/select><\/label><label>Date you confirmed<input type=\"date\" name=\"date\" value=\"${E(i.confirmed_date)}\" min=\"2000-01-01\" max=\"2099-12-31\"><\/label><\/div>\n              <label class=\"dnv2-check\"><input type=\"checkbox\" name=\"date_ack\" value=\"1\"><span>I independently confirmed any calendar date entered here. It was not calculated by this tool.<\/span><\/label>\n              <label>My notes<textarea name=\"notes\" maxlength=\"1000\" rows=\"2\">${E(i.notes)}<\/textarea><\/label>\n              <button class=\"dnv2-btn secondary\" type=\"submit\">Save task<\/button><span class=\"dnv2-inline-feedback\" role=\"status\"><\/span>\n            <\/form>`).join('') || '<p>No reviewed tasks are selected for this report.<\/p>'}<\/section>`;\n          const research = p.research || {providers:[],resources:[],note:'Not yet checked.',checked_at:0};\n          const stale = research.checked_at && research.checked_at < Date.now()\/1000 - 86400;\n          html += `<section class=\"dnv2-card\"><div class=\"dnv2-section-label\">OFFICIAL-SOURCE LOOKUP<\/div><h3>Providers &amp; official resources<\/h3><p>${E(serviceMessage(research.note))}<\/p>\n            <p class=\"dnv2-muted\">${E(C.states[p.selection.state])} \u00b7 ${E(C.programs[p.selection.program])} \u00b7 ${E({any:'Any format \/ verify directly',online:'Live online',in_person:'In person'}[p.selection.delivery] || p.selection.delivery)}<\/p>\n            ${C.research ? '<button class=\"dnv2-btn secondary\" data-act=\"research\">Check official sources<\/button>' : ''}<p class=\"dnv2-live-note\">${research.checked_at ? 'Source check: ' + E(fmt(research.checked_at)) : 'No successful source check recorded.'}${C.research ? ' Recent checks may reuse the saved result for up to one hour.' : ''}<\/p>\n            ${stale ? '<div class=\"dnv2-warning\">The saved check is over 24 hours old. Check the sources again before relying on individual provider listings. Official links remain below.<\/div>' : `<div class=\"dnv2-providergrid\">${research.providers.map(v => `<article class=\"dnv2-provider\"><span class=\"dnv2-badge\">Official listing evidence<\/span><h4>${E(v.name)}<\/h4><p>${E(v.verification)}<\/p>${v.address ? `<p>${E(v.address)}<\/p>` : ''}${v.phone ? `<p>Phone as listed: ${E(v.phone)}<\/p>` : ''}${v.license_reference ? `<p>License \/ reference shown: ${E(v.license_reference)}<\/p>` : ''}<p>${E(v.program_quote)}<\/p><p>${E(v.delivery_quote)}<\/p><div class=\"dnv2-actions\">${link(v.listing_url,'Check official listing')}${v.website ? link(v.website,'Provider website') : ''}<\/div><p class=\"dnv2-small\">Confirm availability and case-specific acceptance directly.<\/p><\/article>`).join('')}<\/div>`}\n            <div class=\"dnv2-resources\"><h4>Official resources<\/h4>${research.resources.map(v => `<p>${link(v.url,v.title)}<\/p>`).join('') || '<p>No official URLs were verified in this lookup.<\/p>'}<\/div><\/section>`;\n          html += `<section class=\"dnv2-card dnv2-qa-panel\" tabindex=\"-1\"><h3>Find it in my paperwork<\/h3><p class=\"dnv2-muted\">Ask where something appears in your reviewed excerpts. Navigator does not have the complete originals in this view. ${p.questions_left} question${p.questions_left === 1 ? '' : 's'} remaining.<\/p>\n            ${(p.qa || []).map(x => `<div class=\"dnv2-question-answer\"><strong>${E(x.question)}<\/strong><p>${E(x.answer)}<\/p><span class=\"dnv2-source\">${x.item_ids.map(id => E(source(p,p.items.find(i => i.id === id) || {source_id:id}))).join(' \u00b7 ')}<\/span><\/div>`).join('')}\n            <form class=\"dnv2-question\" method=\"post\"><label>Question<textarea name=\"question\" maxlength=\"700\" rows=\"2\" required placeholder=\"Which excerpt mentions a completion date?\">${E(questionDraft)}<\/textarea><\/label><button class=\"dnv2-btn secondary\" type=\"submit\" ${p.questions_left ? '' : 'disabled'}>Find supporting excerpts<\/button><\/form><\/section>`;\n        }\n        if(p.access) html += '<div class=\"dnv2-actions dnv2-pdf-bottom\"><button class=\"dnv2-btn\" type=\"button\" data-act=\"pdf\">Download My Plan (PDF)<\/button><\/div>';\n        html += footerActions(); result.innerHTML = html; updateSelectionCount();\n      }\n      if (busy) disableBusyControls();\n      if (target === 'start') requestFocus(titleTarget());\n      else if (target === 'question') requestFocus(result.querySelector('.dnv2-qa-panel'));\n      else if (target && target.startsWith('task:')) {\n        const id = target.slice(5), tf = Array.from(result.querySelectorAll('.dnv2-task-form')).find(f => f.dataset.task === id);\n        if (tf) { tf.querySelector('.dnv2-inline-feedback').textContent = 'Saved'; requestFocus(tf, false); }\n      }\n    }\n    function updateSelectionCount() {\n      const inputs = $$('input[name=selected]'), count = inputs.filter(el => el.checked).length;\n      $$('.dnv2-selected-count').forEach(el => { el.textContent = `${count} of ${inputs.length} items selected`; });\n      const review = result.querySelector('.dnv2-review'); if (!review) return;\n      const ack = review.elements.ack.checked, button = review.querySelector('button[type=submit]');\n      const blocked = count === 0 || !ack;\n      if (busy && disabledBefore.has(button)) disabledBefore.set(button, blocked); else button.disabled = blocked;\n      review.querySelector('.dnv2-submit-hint').textContent = count === 0 ? 'Select at least one checked excerpt to continue.' : !ack ? 'Check the review acknowledgment to continue.' : 'Ready to save. Unknown category is allowed.';\n    }\n    function statusLabel(r) {\n      const status = r.status;\n      if (status === 'erased') return 'Deleted';\n      if (status === 'expired' || (r.expires_at && Number(r.expires_at) <= Date.now()\/1000)) return 'Expired';\n      if (status === 'failed') return 'Analysis did not finish';\n      if (status === 'interrupted') return 'Request interrupted';\n      if (status === 'processing') return 'Reading paperwork';\n      if (status === 'researching') return 'Checking sources';\n      if (status === 'extracted') return 'Ready to review';\n      if (status === 'ready') return Number(r.entitlement) || Number(r.free_access) ? 'Workspace available' : Number(r.order_id) ? 'Check purchase status' : 'Review saved';\n      return 'Check report status';\n    }\n    async function loadHistory() {\n      const d = await api('bootstrap'); current = null; show('history');\n      history.innerHTML = `<section class=\"dnv2-card\"><h3 class=\"dnv2-history-heading\" tabindex=\"-1\">My reports<\/h3><p class=\"dnv2-muted\">Your reports are available only to this signed-in account.<\/p>\n        <div class=\"dnv2-history-list\">${d.reports.map(r => `<article class=\"dnv2-history-item\"><div><strong>${E(C.states[r.state] || r.state)} paperwork review<\/strong><span>${E(fmt(Number(r.created_at)))}<\/span><span class=\"dnv2-badge\">${E(statusLabel(r))}<\/span><\/div><button class=\"dnv2-btn secondary\" data-act=\"open\" data-id=\"${E(r.id)}\">Open report <span aria-hidden=\"true\">\u2192<\/span><\/button><\/article>`).join('') || '<div class=\"dnv2-empty\"><h4>Your first report starts here.<\/h4><p>Upload paperwork or paste the instructions you want to organize.<\/p><button class=\"dnv2-btn\" data-act=\"new\">Start an analysis<\/button><\/div>'}<\/div><\/section>`;\n      if (busy) disableBusyControls(); requestFocus(history.querySelector('.dnv2-history-heading'));\n    }\n    function downloadable(p) {\n      const out = ['702 DUI Navigator \u2014 Paperwork Organizer','Not legal advice, education, a completion certificate, or verified compliance.','Generated: '+fmt(p.created_at),'Access until: '+fmt(p.expires_at),'',conciseSummary(p),''];\n      for (const i of p.items.filter(i => i.confirmed)) out.push(i.title,source(p,i),'EXCERPT: '+i.quote,'Explanation: '+i.explanation,'Date wording in source: '+(i.deadline_text || 'Not found'),'User-confirmed calendar date: '+(i.confirmed_date || 'Not supplied'),'Status marked by you: '+i.status,'Your notes: '+i.notes,'');\n      out.push('REVIEW NOTES',...topicModel(p).groups.flatMap(g=>[g.title,...g.messages.map(m=>m.text)]),'','OFFICIAL RESOURCES',...(p.research?.resources || []).map(x => x.title+' \u2014 '+x.url),'','Source check: '+fmt(p.research?.checked_at || 0),'Verify current program\/provider acceptance with the issuing office.');\n      return out.join('\\n');\n    }\n    function download(text,name,type) {\n      const u = URL.createObjectURL(new Blob([text],{type})), a = document.createElement('a'); a.href = u; a.download = name; root.append(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(u),10000);\n    }\n    function calendar(p) {\n      const dated = p.items.filter(i => i.confirmed && \/^20\\d{2}-\\d{2}-\\d{2}$\/.test(i.confirmed_date));\n      if (!dated.length) throw Error('Save at least one date you independently confirmed before exporting. Navigator does not infer calendar dates.');\n      const lines = ['BEGIN:VCALENDAR','VERSION:2.0','PRODID:-\/\/702 Navigator\/\/User Confirmed Dates\/\/EN','CALSCALE:GREGORIAN'];\n      const stamp = new Date().toISOString().replace(\/[-:]\/g,'').replace(\/\\.\\d{3}Z$\/,'Z');\n      for (const i of dated) {\n        const d = i.confirmed_date.replaceAll('-',''), n = new Date(i.confirmed_date+'T12:00:00Z'); n.setUTCDate(n.getUTCDate()+1);\n        lines.push('BEGIN:VEVENT','UID:'+p.id+'-'+i.id+'@702navigator','DTSTAMP:'+stamp,'DTSTART;VALUE=DATE:'+d,'DTEND;VALUE=DATE:'+n.toISOString().slice(0,10).replaceAll('-',''),'SUMMARY:Paperwork review task '+i.id,'DESCRIPTION:Date entered and confirmed by you. Check the original paperwork.','END:VEVENT');\n      }\n      lines.push('END:VCALENDAR'); download(lines.join('\\r\\n')+'\\r\\n','navigator-confirmed-dates.ics','text\/calendar;charset=utf-8');\n    }\n    function clearFiles() { form.elements['documents[]'].value = ''; images.forEach(u => URL.revokeObjectURL(u)); images = []; $('.dnv2-filelist').replaceChildren(); }\n    root.addEventListener('click', async event => {\n      const b = event.target.closest('[data-act]'); if (!b || !root.contains(b) || busy) return;\n      const a = b.dataset.act; alert('');\n      try {\n        if (a === 'sample') {\n          if ((form.elements.manual.value.trim() || form.elements['documents[]'].files.length) && !confirm('Replace the current form input with the synthetic example? Selected files will be removed from this form.')) return;\n          form.reset(); clearFiles(); requestID = randomID();\n          form.elements.manual.value = 'Synthetic training example \u2014 not a real case.\\nCourt instruction: Complete the specified 12-hour DUI education program by November 16, 2026. Contact the issuing court to verify provider acceptance.\\nAttorney email: Please send our office a copy of the completion documentation by November 12, 2026.\\nIssuing court shown on this example: Henderson Municipal Court, Nevada.';\n          form.elements.case_state.value = 'NV'; form.elements.county.value = 'Clark'; form.elements.city.value = 'Henderson'; form.elements.court.value = 'Henderson Municipal Court';\n          alert('Example loaded. This is fictional paperwork; analyzing it uses your configured API and can incur usage charges.',true,true); return;\n        }\n        if (a === 'use-suggestion') {\n          const review=result.querySelector('.dnv2-review');\n          if (review && current.suggestion !== 'unknown' && C.programs[current.suggestion]) {\n            review.elements.program.value=current.suggestion;\n            review.querySelector('.dnv2-suggestion-feedback').textContent='Search category selected: '+C.programs[current.suggestion]+'. You can change it below.';\n            requestFocus(review.elements.program,false);\n          }\n          return;\n        }\n        if (a === 'jump-items' || a === 'jump-program') {\n          requestFocus(result.querySelector(a === 'jump-items' ? '.dnv2-selection-heading' : '.dnv2-directory-choice h3')); return;\n        }\n        if (a === 'new') { current = null; questionDraft = ''; requestID = randomID(); show('new'); requestFocus(panel.querySelector('h3')); return; }\n        if (a === 'select-all' || a === 'clear-selection') { $$('input[name=selected]').forEach(x => { x.checked = a === 'select-all'; }); updateSelectionCount(); return; }\n        if (a === 'pdf') {\n          wait(true,'Preparing your PDF plan\u2026',false);\n          savePDF(await api('pdf',{id:current.id}));alert('Your PDF is ready. Your browser may download it or open a PDF preview to save.',true,false);return;\n        }\n        if (a === 'email-pdf') {\n          const d=current.delivery || {};\n          if(!d.enabled || !d.email)throw Error('Email is unavailable. Download your PDF instead.');\n          if(!confirm(`Send a PDF containing your reviewed excerpts and saved notes to ${d.email}? This is an unencrypted attachment. Check your inbox first if you already requested a copy; this may send an additional copy.`))return;\n          wait(true,'Queueing your PDF email\u2026',false);\n          const sent=await api('email_pdf',{id:current.id,email_ack:'1',email_recipient:d.email,request_id:randomID()});\n          current.delivery=sent.delivery;render(current,'no-focus');alert(sent.message,true,false);return;\n        }\n        if (a === 'download') { download(downloadable(current),'702-navigator-report.txt','text\/plain;charset=utf-8'); return; }\n        if (a === 'calendar') { calendar(current); return; }\n        if (a === 'print') {\n          const win = window.open('','_blank'); if (!win) throw Error('Allow the print window, then try again.'); win.opener = null;\n          win.document.write('<!doctype html><html><head><meta charset=\"utf-8\"><title>702 Navigator Report<\/title><style>body{font:14px\/1.6 system-ui;max-width:800px;margin:40px auto;padding:20px}pre{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere}h1{font-size:28px}button{padding:12px 18px}@media print{button{display:none}body{margin:0}}<\/style><\/head><body><h1>702 DUI Navigator<\/h1><button onclick=\"window.print()\">Print \/ Save as PDF<\/button><pre>'+E(downloadable(current))+'<\/pre><\/body><\/html>'); win.document.close(); return;\n        }\n        if (a === 'erase') {\n          if (!confirm('Permanently delete this report\u2019s content from the active application? This does not issue a refund.')) return;\n          wait(true,'Deleting your report content\u2026',true); await api('erase',{id:current.id,confirm:'ERASE'}); await loadHistory(); alert('Report content deleted.',true); return;\n        }\n        wait(true,a === 'research' ? '702 DUI Navigator is checking official sources\u2026' : a === 'buy' ? 'Opening your secure checkout\u2026' : 'Opening your Navigator workspace\u2026',a === 'research' || a === 'buy');\n        if (a === 'history') { questionDraft = ''; await loadHistory(); return; }\n        if (a === 'open') { questionDraft = ''; render(await api('get',{id:b.dataset.id})); return; }\n        if (a === 'refresh') { render(await api('get',{id:current.id})); return; }\n        if (a === 'research') { render(await api('research',{id:current.id})); return; }\n        if (a === 'buy') { const opt=result.querySelector('input[name=email_pdf]'); const d = await api('checkout',{id:current.id,email_pdf:opt?.checked?'1':'0',email_recipient:current.delivery?.email || ''}), url = safeURL(d.url,false); if (!url) throw Error('Checkout returned an unexpected destination.'); location.assign(url); return; }\n      } catch (e) { alert(e.message,false,true); } finally { wait(false); }\n    });\n    form.addEventListener('submit', async event => {\n      event.preventDefault(); if (busy) return; alert(''); if (!form.reportValidity()) return;\n      const files = form.elements['documents[]'].files;\n      if (!form.elements.manual.value.trim() && !files.length) { alert('Paste or type instructions, or attach a document first.',false,true); return; }\n      if (files.length > 3 || Array.from(files).some(x => x.size > 4*1024*1024) || Array.from(files).reduce((s,x) => s+x.size,0) > 6*1024*1024) { alert('Upload limits: 3 files, 4 MB each, 6 MB combined.',false,true); return; }\n      const fd = new FormData(form); fd.set('request_id',requestID);\n      wait(true,'702 DUI Navigator is reviewing your paperwork\u2026',true);\n      try { const p = await api('analyze',fd); form.elements.manual.value = ''; clearFiles(); form.elements.consent.checked = false; questionDraft = ''; render(p); }\n      catch (e) { alert(e.message,false,true); } finally { wait(false); }\n    });\n    root.addEventListener('submit', async event => {\n      const f = event.target; if (f === form) return; event.preventDefault(); if (busy) return; alert(''); if (!f.reportValidity()) return;\n      let op, values = {id:current.id}, target = 'start';\n      if (f.matches('.dnv2-review')) {\n        op = 'review'; values.selected = Array.from(f.querySelectorAll('input[name=selected]:checked')).map(x => x.value); values.ack = f.elements.ack.checked ? '1' : '0';\n        values.search_state = f.elements.search_state.value; values.program = f.elements.program.value; values.delivery = f.elements.delivery.value;\n        if (!values.selected.length) { alert('Select at least one excerpt you checked, or start again with clearer information.',false,true); return; }\n      } else if (f.matches('.dnv2-task-form')) {\n        op = 'task'; target = 'task:'+f.dataset.task;\n        Object.assign(values,{task_id:f.dataset.task,status:f.elements.status.value,date:f.elements.date.value,date_ack:f.elements.date_ack.checked ? '1' : '0',notes:f.elements.notes.value});\n      } else if (f.matches('.dnv2-question')) { op = 'question'; target = 'question'; values.question = f.elements.question.value; questionDraft = values.question; }\n      else return;\n      wait(true,op === 'question' ? '702 DUI Navigator is finding supporting excerpts\u2026' : op === 'task' ? 'Saving your task\u2026' : 'Saving your reviewed items\u2026',op !== 'task');\n      try {\n        const p = await api(op,values); if (op === 'question') questionDraft = ''; render(p,target);\n        if (op === 'review' && C.research) { wait(true,'702 DUI Navigator is checking official sources\u2026'); render(await api('research',{id:current.id})); }\n        else if (op !== 'task') alert(op === 'review' ? 'Your review is saved.' : 'Response added to your workspace.',true);\n      } catch (err) { alert(err.message,false,true); } finally { wait(false); }\n    });\n    root.addEventListener('change', event => {\n      if (event.target.matches('input[name=selected],input[name=ack]')) updateSelectionCount();\n      if (event.target.matches('select[name=program]')) {const note=result.querySelector('.dnv2-suggestion-feedback');if(note)note.textContent='';}\n    });\n    form.elements['documents[]'].addEventListener('change', () => {\n      images.forEach(u => URL.revokeObjectURL(u)); images = []; const list = $('.dnv2-filelist'); list.replaceChildren();\n      Array.from(form.elements['documents[]'].files).forEach((f,i) => {\n        const box = document.createElement('div'); box.className = 'dnv2-file';\n        if (['image\/jpeg','image\/png','image\/webp'].includes(f.type)) {\n          const u = URL.createObjectURL(f); images.push(u); const img = document.createElement('img'); img.src = u; img.alt = 'Selected upload '+(i+1); box.append(img);\n        }\n        const label = document.createElement('span'); label.textContent = 'File '+(i+1)+': '+f.name+' ('+Math.ceil(f.size\/1024)+' KB)'; box.append(label); list.append(box);\n      });\n    });\n    const test = document.getElementById('dnv2-api-test');\n    if (test && !test.dataset.bound) {\n      test.dataset.bound = '1'; test.addEventListener('click', async () => {\n        const target = document.getElementById('dnv2-test-result'); test.disabled = true; target.textContent = 'Contacting the configured OpenAI project\u2026';\n        try { const d = await api('test'); target.textContent = d.message; } catch (e) { target.textContent = e.message; } finally { test.disabled = false; }\n      });\n    }\n    show('new');\n    api('bootstrap').then(async d => {\n      enabled = !!d.enabled;\n      $('.dnv2-pricing').textContent = d.admin ? 'Admin preview: no purchase required. Analysis uses your configured API and can incur usage charges.' : d.charge ? 'Paid Navigator access is active'+(d.access_until ? ' through '+fmt(d.access_until) : '')+'.' : 'Navigator access is currently offered without charge.';\n      if (!enabled) { alert('New analyses are paused. Your saved reports remain available.'); form.querySelector('button[type=submit]').disabled = true; }\n      const plan=new URLSearchParams(location.hash.slice(1)).get('plan');\n      if(plan && \/^[a-f0-9]{32}$\/.test(plan))render(await api('get',{id:plan}));\n      else if (d.reports.length && location.search.includes('navigator_return')) await loadHistory();\n    }).catch(e => alert(e.message,false,true));\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded',start); else start();\n})();<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-12013","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>DUI Paperwork Organizer &amp; Personalized Plan | 702 DUI Navigator<\/title>\n<meta name=\"description\" content=\"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.702duischool.com\/es\/702-dui-navigator\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"702 DUI Navigator\" \/>\n<meta property=\"og:description\" content=\"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.702duischool.com\/es\/702-dui-navigator\/\" \/>\n<meta property=\"og:site_name\" content=\"Online DUI School Options | 30 &amp; 60-Hour Out-of-State\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T05:40:18+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/702-dui-navigator\\\/\",\"url\":\"https:\\\/\\\/www.702duischool.com\\\/702-dui-navigator\\\/\",\"name\":\"DUI Paperwork Organizer & Personalized Plan | 702 DUI Navigator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#website\"},\"datePublished\":\"2026-09-15T02:11:49+00:00\",\"dateModified\":\"2026-09-16T05:40:18+00:00\",\"description\":\"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/702-dui-navigator\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.702duischool.com\\\/702-dui-navigator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/702-dui-navigator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.702duischool.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"702 DUI Navigator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#website\",\"url\":\"https:\\\/\\\/www.702duischool.com\\\/\",\"name\":\"Online DUI School Options | 30 &amp; 60-Hour Out-of-State\",\"description\":\"Independent Online Education\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.702duischool.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#organization\",\"name\":\"702 Onlie Schools, LLC\",\"alternateName\":\"702DUISchool.com\",\"url\":\"https:\\\/\\\/www.702duischool.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.702duischool.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Screenshot-2026-06-27-at-7.32.11-PM.png\",\"contentUrl\":\"https:\\\/\\\/www.702duischool.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Screenshot-2026-06-27-at-7.32.11-PM.png\",\"width\":1756,\"height\":582,\"caption\":\"702 Onlie Schools, LLC\"},\"image\":{\"@id\":\"https:\\\/\\\/www.702duischool.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/702duischool\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DUI Paperwork Organizer & Personalized Plan | 702 DUI Navigator","description":"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.702duischool.com\/es\/702-dui-navigator\/","og_locale":"es_MX","og_type":"article","og_title":"702 DUI Navigator","og_description":"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.","og_url":"https:\/\/www.702duischool.com\/es\/702-dui-navigator\/","og_site_name":"Online DUI School Options | 30 &amp; 60-Hour Out-of-State","article_modified_time":"2026-09-16T05:40:18+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.702duischool.com\/702-dui-navigator\/","url":"https:\/\/www.702duischool.com\/702-dui-navigator\/","name":"DUI Paperwork Organizer & Personalized Plan | 702 DUI Navigator","isPartOf":{"@id":"https:\/\/www.702duischool.com\/#website"},"datePublished":"2026-09-15T02:11:49+00:00","dateModified":"2026-09-16T05:40:18+00:00","description":"Organize DUI-related court, agency and attorney paperwork into one private plan. Review dates, instructions, official resources and download your PDF.","breadcrumb":{"@id":"https:\/\/www.702duischool.com\/702-dui-navigator\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.702duischool.com\/702-dui-navigator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.702duischool.com\/702-dui-navigator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.702duischool.com\/"},{"@type":"ListItem","position":2,"name":"702 DUI Navigator"}]},{"@type":"WebSite","@id":"https:\/\/www.702duischool.com\/#website","url":"https:\/\/www.702duischool.com\/","name":"Opciones de cursos en l\u00ednea para infractores por conducir bajo los efectos del alcohol | Cursos de 30 y 60 horas para residentes de otros estados","description":"Educaci\u00f3n independiente en l\u00ednea","publisher":{"@id":"https:\/\/www.702duischool.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.702duischool.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.702duischool.com\/#organization","name":"702 Escuelas en l\u00ednea, LLC","alternateName":"702DUISchool.com","url":"https:\/\/www.702duischool.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.702duischool.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.702duischool.com\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-27-at-7.32.11-PM.png","contentUrl":"https:\/\/www.702duischool.com\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-27-at-7.32.11-PM.png","width":1756,"height":582,"caption":"702 Onlie Schools, LLC"},"image":{"@id":"https:\/\/www.702duischool.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/702duischool\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages\/12013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/comments?post=12013"}],"version-history":[{"count":1,"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages\/12013\/revisions"}],"predecessor-version":[{"id":12014,"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/pages\/12013\/revisions\/12014"}],"wp:attachment":[{"href":"https:\/\/www.702duischool.com\/es\/wp-json\/wp\/v2\/media?parent=12013"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}