{"id":6102,"date":"2026-07-15T10:11:43","date_gmt":"2026-07-15T08:11:43","guid":{"rendered":"https:\/\/quasii.co\/?page_id=6102"},"modified":"2026-07-26T12:31:02","modified_gmt":"2026-07-26T10:31:02","slug":"ai-testen","status":"publish","type":"page","link":"https:\/\/quasii.co\/en\/ai-testen\/","title":{"rendered":"AI TESTEN"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"6102\" class=\"elementor elementor-6102\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-051894c e-flex e-con-boxed e-con e-parent\" data-id=\"051894c\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4e90ff0 e-con-full e-flex e-con e-child\" data-id=\"4e90ff0\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-f8f7e6a e-con-full e-flex e-con e-child\" data-id=\"f8f7e6a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c7bf7a elementor-widget elementor-widget-image\" data-id=\"0c7bf7a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/quasii.co\/en\/\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"236\" src=\"https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency.png\" class=\"attachment-large size-large wp-image-28\" alt=\"\" srcset=\"https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency.png 894w, https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency-300x89.png 300w, https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency-768x227.png 768w, https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency-150x44.png 150w, https:\/\/quasii.co\/wp-content\/uploads\/2025\/08\/LOGO-QUASII-V1-894x264_transparency-480x142.png 480w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t<div class=\"elementor-element elementor-element-0367b7b elementor-widget elementor-widget-html\" data-id=\"0367b7b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ============================================================\r\n     QUASII AI-diagnose \u2014 WordPress \/ Elementor-version\r\n     ------------------------------------------------------------\r\n     Kopi\u00e9r HELE denne fil ind i et \"HTML\"-element i Elementor\r\n     (blank Canvas-skabelon anbefales).\r\n\r\n     Forskelle fra den selvst\u00e6ndige index.html:\r\n       \u2022 Ingen <!DOCTYPE>, <html>, <head> eller <body> \u2014 de ville\r\n         kollidere med WordPress-temaet.\r\n       \u2022 AL css er scopet til #quasii-diag, s\u00e5 de globale resets\r\n         (* og html,body) ikke rammer resten af WordPress-siden.\r\n       \u2022 save.php \/ get.php \/ stats.php kaldes med ABSOLUTTE url'er,\r\n         fordi PHP-filerne ligger i \/public_html\/subdomain_test\r\n         (https:\/\/quasii.co\/subdomain_test), mens WordPress-siden\r\n         k\u00f8rer i roden. Skift API_BASE hvis stien \u00e6ndrer sig.\r\n     ============================================================ -->\r\n\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@500;600;700;800&family=Inter:wght@400;500;600&display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n  #quasii-diag{\r\n    --bg:#FFFFFF;\r\n    --card:#F0ECE3;\r\n    --card-line:#E4DECF;\r\n    --ink:#161616;\r\n    --ink-soft:#5C5A54;\r\n    --line:#E6E1D6;\r\n    --chartreuse:#F4FCAD;\r\n    --chartreuse-deep:#E8F582;\r\n    --pink:#F584AA;\r\n    --pink-deep:#ED6E98;\r\n    --maxw:100%;\r\n    background:var(--bg);color:var(--ink);font-family:\"Inter\",sans-serif;-webkit-font-smoothing:antialiased;line-height:1.55;\r\n    width:100%;display:flex;flex-direction:column;align-items:stretch;padding:36px 0 80px;\r\n  }\r\n  #quasii-diag *{box-sizing:border-box;margin:0;padding:0}\r\n  #quasii-diag .wrap{width:100%;max-width:var(--maxw)}\r\n\r\n  #quasii-diag .kicker{font-family:\"Inter\",sans-serif;font-weight:600;font-size:12px;letter-spacing:0.16em;text-transform:uppercase;color:var(--pink-deep);margin-bottom:18px}\r\n\r\n  #quasii-diag .title-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:20px}\r\n  #quasii-diag .title-row .kicker{margin-bottom:0}\r\n  #quasii-diag .badge{display:inline-flex;align-items:center;gap:5px;background:var(--chartreuse);color:var(--ink);font-family:\"Poppins\",sans-serif;font-weight:700;font-size:9.5px;letter-spacing:0.12em;text-transform:uppercase;padding:5px 10px;border-radius:999px;position:relative;cursor:help}\r\n  #quasii-diag .badge svg{flex:none}\r\n  #quasii-diag .badge:focus-visible{outline:2px solid var(--ink);outline-offset:2px}\r\n  #quasii-diag .badge .tip{position:absolute;left:0;top:calc(100% + 10px);z-index:5;background:var(--ink);color:#fff;font-family:\"Inter\",sans-serif;font-weight:500;font-size:12.5px;letter-spacing:0;text-transform:none;line-height:1.5;padding:10px 13px;border-radius:10px;width:max-content;max-width:280px;opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .15s ease,transform .15s ease;pointer-events:none;box-shadow:0 10px 26px rgba(22,22,22,.18)}\r\n  #quasii-diag .badge:hover .tip,#quasii-diag .badge:focus-visible .tip{opacity:1;visibility:visible;transform:translateY(0)}\r\n  #quasii-diag .badge .tip::before{content:\"\";position:absolute;bottom:100%;left:18px;border:6px solid transparent;border-bottom-color:var(--ink)}\r\n  #quasii-diag h1{font-family:\"Poppins\",sans-serif;font-weight:700;font-size:clamp(30px,5.2vw,46px);line-height:1.08;letter-spacing:-0.02em;margin-bottom:22px}\r\n  #quasii-diag .lede{font-size:18px;color:var(--ink-soft);max-width:100%;margin-bottom:14px}\r\n  #quasii-diag .lede strong{color:var(--ink);font-weight:600}\r\n  #quasii-diag .meta-note{font-size:13px;color:var(--ink-soft);margin-top:26px;line-height:1.7}\r\n\r\n  #quasii-diag .field-label{font-family:\"Poppins\",sans-serif;font-weight:600;font-size:14px;color:var(--ink);margin:38px 0 14px}\r\n  #quasii-diag .field-hint{font-size:13px;color:var(--ink-soft);margin:-8px 0 14px;line-height:1.5}\r\n  #quasii-diag .sectors{display:grid;grid-template-columns:1fr 1fr;gap:12px}\r\n  #quasii-diag .sector{\r\n    border:1.5px solid var(--card-line);background:var(--card);color:var(--ink);border-radius:16px;\r\n    font-family:\"Inter\",sans-serif;font-weight:500;font-size:15px;text-align:left;padding:16px 18px;cursor:pointer;transition:all .15s ease;line-height:1.3;\r\n  }\r\n  #quasii-diag .sector:hover{border-color:var(--pink)}\r\n  #quasii-diag .sector:focus-visible{outline:2px solid var(--pink);outline-offset:2px}\r\n  #quasii-diag .sector.sel{border-color:var(--pink);background:#FBEAF0}\r\n  #quasii-diag .sector small{display:block;font-size:11px;letter-spacing:0.05em;text-transform:uppercase;color:var(--ink-soft);margin-top:5px;font-weight:500}\r\n\r\n  #quasii-diag .btn{\r\n    font-family:\"Poppins\",sans-serif;font-weight:600;font-size:15px;\r\n    background:var(--chartreuse);color:var(--ink);border:1.5px solid var(--chartreuse);border-radius:999px;\r\n    padding:15px 30px;cursor:pointer;transition:all .15s ease;margin-top:34px;display:inline-flex;align-items:center;gap:10px;\r\n  }\r\n  #quasii-diag .btn:hover{background:var(--chartreuse-deep);border-color:var(--chartreuse-deep)}\r\n  #quasii-diag .btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}\r\n  #quasii-diag .btn:disabled{opacity:.4;cursor:not-allowed;background:var(--card);border-color:var(--card-line)}\r\n  #quasii-diag .btn .arr{transition:transform .15s ease}\r\n  #quasii-diag .btn:hover .arr{transform:translateX(4px)}\r\n\r\n  #quasii-diag .topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:34px;font-family:\"Inter\";font-weight:600;font-size:12px;letter-spacing:0.06em;color:var(--ink-soft);text-transform:uppercase}\r\n  #quasii-diag .ticks{display:flex;gap:6px}\r\n  #quasii-diag .tick{width:26px;height:4px;border-radius:2px;background:var(--line)}\r\n  #quasii-diag .tick.done{background:var(--pink)}\r\n  #quasii-diag .tick.cur{background:var(--ink)}\r\n\r\n  #quasii-diag .qnum{font-family:\"Inter\";font-weight:600;font-size:12px;color:var(--pink-deep);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:16px}\r\n  #quasii-diag .qtext{font-family:\"Poppins\",sans-serif;font-weight:600;font-size:clamp(21px,3.4vw,28px);line-height:1.25;letter-spacing:-0.01em;margin-bottom:30px}\r\n  #quasii-diag .opts{display:flex;flex-direction:column;gap:11px}\r\n  #quasii-diag .opt{\r\n    border:1.5px solid var(--card-line);background:var(--card);text-align:left;border-radius:14px;\r\n    font-family:\"Inter\",sans-serif;font-weight:500;font-size:16px;color:var(--ink);padding:17px 18px 17px 50px;cursor:pointer;position:relative;transition:all .14s ease;line-height:1.4;\r\n  }\r\n  #quasii-diag .opt::before{content:\"\";position:absolute;left:18px;top:19px;width:16px;height:16px;border:1.5px solid #C9C2B1;border-radius:50%;transition:all .14s ease;background:#fff}\r\n  #quasii-diag .opt:hover{border-color:var(--pink)}\r\n  #quasii-diag .opt:focus-visible{outline:2px solid var(--pink);outline-offset:2px}\r\n  #quasii-diag .opt.sel{border-color:var(--pink);background:#FBEAF0}\r\n  #quasii-diag .opt.sel::before{border-color:var(--pink);background:var(--pink);box-shadow:inset 0 0 0 3px var(--card)}\r\n  #quasii-diag .nav{display:flex;justify-content:space-between;align-items:center;margin-top:32px}\r\n  #quasii-diag .back{font-family:\"Inter\";font-weight:600;font-size:14px;color:var(--ink-soft);background:none;border:none;cursor:pointer}\r\n  #quasii-diag .back:hover{color:var(--ink)}\r\n  #quasii-diag .back:disabled{opacity:0;cursor:default}\r\n\r\n  #quasii-diag .score-row{display:flex;align-items:flex-end;gap:16px;border-bottom:1.5px solid var(--line);padding-bottom:24px;margin-bottom:28px}\r\n  #quasii-diag .score-num{font-family:\"Poppins\",sans-serif;font-weight:800;font-size:78px;line-height:0.8;letter-spacing:-0.03em}\r\n  #quasii-diag .score-den{font-family:\"Inter\";font-weight:600;font-size:14px;color:var(--ink-soft);padding-bottom:10px}\r\n  #quasii-diag .tier-name{font-family:\"Poppins\",sans-serif;font-weight:700;font-size:30px;letter-spacing:-0.015em;margin-bottom:16px;line-height:1.1}\r\n  #quasii-diag .tier-body{font-size:17px;color:var(--ink-soft);margin-bottom:14px}\r\n  #quasii-diag .tier-body strong{color:var(--ink);font-weight:600}\r\n  #quasii-diag .sector-line{font-size:15px;color:var(--ink-soft);font-style:italic;margin-bottom:8px}\r\n\r\n  #quasii-diag .gap-box{background:var(--card);border-radius:18px;padding:26px;margin:30px 0}\r\n  #quasii-diag .gap-label{font-family:\"Inter\";font-weight:600;font-size:11.5px;letter-spacing:0.12em;text-transform:uppercase;color:var(--pink-deep);margin-bottom:10px;display:flex;align-items:center;gap:8px}\r\n  #quasii-diag .gap-label::before{content:\"\";display:inline-block;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent var(--pink)}\r\n  #quasii-diag .gap-title{font-family:\"Poppins\",sans-serif;font-weight:600;font-size:21px;letter-spacing:-0.01em;margin-bottom:8px;line-height:1.2}\r\n  #quasii-diag .gap-text{font-size:16px;color:var(--ink-soft)}\r\n\r\n  #quasii-diag .dims{margin:34px 0}\r\n  #quasii-diag .dim{display:flex;align-items:center;gap:14px;padding:11px 0;border-bottom:1px solid var(--line)}\r\n  #quasii-diag .dim:first-child{border-top:1px solid var(--line)}\r\n  #quasii-diag .dim-name{flex:1;font-size:14.5px;font-weight:500}\r\n  #quasii-diag .dim.gap .dim-name{color:var(--pink-deep);font-weight:600}\r\n  #quasii-diag .bar{width:120px;height:7px;background:var(--card);border-radius:4px;position:relative;overflow:hidden}\r\n  #quasii-diag .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--ink);border-radius:4px}\r\n  #quasii-diag .bar.gap i{background:var(--pink)}\r\n  #quasii-diag .dim-val{font-family:\"Poppins\";font-weight:600;font-size:13px;color:var(--ink-soft);width:36px;text-align:right}\r\n\r\n  #quasii-diag .proof{\r\n    border-left:4px solid var(--pink);padding:18px 22px;margin:34px 0 0;\r\n    font-size:16.5px;color:var(--ink-soft);line-height:1.6;\r\n  }\r\n  #quasii-diag .proof strong{color:var(--ink);font-weight:600}\r\n\r\n  \/* Branche-sammenligning *\/\r\n  #quasii-diag .compare{background:var(--card);border-radius:18px;padding:24px 26px;margin:30px 0}\r\n  #quasii-diag .compare-label{font-family:\"Inter\";font-weight:600;font-size:11.5px;letter-spacing:0.12em;text-transform:uppercase;color:var(--pink-deep);margin-bottom:16px;display:flex;align-items:center;gap:8px}\r\n  #quasii-diag .compare-label::before{content:\"\";display:inline-block;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent var(--pink)}\r\n  #quasii-diag .compare-row{display:flex;align-items:center;gap:12px;margin-top:12px}\r\n  #quasii-diag .compare-who{width:132px;flex:none;font-size:14px;font-weight:500;color:var(--ink)}\r\n  #quasii-diag .compare-bar{flex:1;height:10px;background:#fff;border-radius:5px;position:relative;overflow:hidden}\r\n  #quasii-diag .compare-bar i{position:absolute;left:0;top:0;bottom:0;border-radius:5px}\r\n  #quasii-diag .compare-bar.you i{background:var(--pink)}\r\n  #quasii-diag .compare-bar.avg i{background:var(--pink)}\r\n  #quasii-diag .compare-val{width:52px;flex:none;text-align:right;font-family:\"Poppins\";font-weight:600;font-size:13px;color:var(--ink-soft)}\r\n  #quasii-diag .compare-note{font-size:15px;color:var(--ink-soft);margin-top:18px;line-height:1.55}\r\n  #quasii-diag .compare-note strong{color:var(--ink);font-weight:600}\r\n  @media(max-width:520px){ #quasii-diag .compare-who{width:96px;font-size:13px} }\r\n\r\n  #quasii-diag .funnel{background:var(--card);border-radius:20px;padding:32px;margin-top:36px;position:relative;overflow:hidden}\r\n  #quasii-diag .funnel::before{content:\"\";position:absolute;top:0;left:0;right:0;height:6px;background:var(--chartreuse)}\r\n  #quasii-diag .formula{font-family:\"Poppins\",sans-serif;font-weight:600;font-size:14px;color:var(--pink-deep);margin-bottom:14px;letter-spacing:0.01em}\r\n  #quasii-diag .funnel h3{font-family:\"Poppins\",sans-serif;font-weight:700;font-size:24px;line-height:1.18;letter-spacing:-0.015em;margin-bottom:14px}\r\n  #quasii-diag .funnel p{color:var(--ink-soft);font-size:15.5px;margin-bottom:8px}\r\n  #quasii-diag .funnel p strong{color:var(--ink);font-weight:600}\r\n  #quasii-diag .price-tag{display:inline-block;font-family:\"Poppins\";font-weight:700;font-size:13px;letter-spacing:0.04em;background:var(--ink);color:#fff;border-radius:999px;padding:8px 16px;margin-top:14px;text-decoration:none;cursor:pointer;transition:opacity .15s ease}\r\n  #quasii-diag a.price-tag:hover{opacity:0.85}\r\n  #quasii-diag a.price-tag:visited{color:#fff}\r\n  #quasii-diag .capture{display:flex;gap:10px;margin-top:24px;flex-wrap:wrap}\r\n  #quasii-diag .capture input[type=\"email\"]{\r\n    flex:1;min-width:220px;background:#fff;border:1.5px solid var(--card-line);border-radius:12px;color:var(--ink);\r\n    font-family:\"Inter\",sans-serif;font-weight:500;font-size:15px;padding:14px 16px;\r\n  }\r\n  #quasii-diag .capture input::placeholder{color:#A8A293}\r\n  #quasii-diag .capture input:focus{outline:none;border-color:var(--pink)}\r\n  #quasii-diag .capture .btn{margin-top:0}\r\n  #quasii-diag .consent{display:flex;align-items:flex-start;gap:10px;margin-top:14px;font-size:13px;color:var(--ink-soft);line-height:1.5}\r\n  #quasii-diag .consent input{margin-top:3px;accent-color:var(--pink-deep);width:15px;height:15px;flex:none;cursor:pointer}\r\n  #quasii-diag .consent a{color:var(--pink-deep)}\r\n  #quasii-diag .confirm{color:var(--pink-deep);font-family:\"Inter\";font-weight:600;font-size:13.5px;margin-top:18px;display:none}\r\n\r\n  \/* Value-first lock view *\/\r\n  #quasii-diag .tease{font-size:17.5px;color:var(--ink-soft);margin-bottom:6px;line-height:1.5}\r\n  #quasii-diag .tease strong{color:var(--ink);font-weight:600}\r\n  #quasii-diag .locked{background:var(--card);border-radius:18px;padding:20px 26px;margin:26px 0}\r\n  #quasii-diag .locked-item{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--card-line);font-size:15.5px;color:var(--ink);line-height:1.4}\r\n  #quasii-diag .locked-item:last-child{border-bottom:none}\r\n  #quasii-diag .locked-item svg{flex:none;margin-top:2px}\r\n  #quasii-diag .email-msg{font-family:\"Inter\";font-weight:600;font-size:13.5px;margin-top:12px;min-height:1px;line-height:1.5}\r\n  #quasii-diag .email-msg.err{color:var(--pink-deep)}\r\n  #quasii-diag .email-msg b{font-weight:700;color:var(--ink)}\r\n  #quasii-diag .msg-fix{font-family:\"Inter\";font-weight:600;font-size:13px;background:none;border:none;color:var(--pink-deep);cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:0 0 0 4px}\r\n  #quasii-diag .msg-fix:hover{color:var(--ink)}\r\n  #quasii-diag .unlock-fine{font-size:12.5px;color:var(--ink-soft);margin-top:14px;line-height:1.5}\r\n  #quasii-diag .unlock-fine a{color:var(--pink-deep)}\r\n\r\n  #quasii-diag .share-row{margin-top:26px;padding-top:18px;border-top:1px solid var(--card-line)}\r\n  #quasii-diag .share-link{font-family:\"Inter\";font-weight:600;font-size:14px;color:var(--ink);background:none;border:none;cursor:pointer;text-decoration:underline;text-underline-offset:3px;padding:0}\r\n  #quasii-diag .share-link:hover{color:var(--pink-deep)}\r\n\r\n  #quasii-diag .restart{font-family:\"Inter\";font-weight:500;font-size:13px;color:var(--ink-soft);background:none;border:none;cursor:pointer;margin-top:30px;text-decoration:underline;text-underline-offset:3px}\r\n  #quasii-diag .restart:hover{color:var(--pink-deep)}\r\n\r\n  \/* Share modal *\/\r\n  #quasii-diag .modal-veil{position:fixed;inset:0;background:rgba(22,22,22,.45);display:none;align-items:center;justify-content:center;padding:24px;z-index:99999}\r\n  #quasii-diag .modal-veil.open{display:flex}\r\n  #quasii-diag .modal{background:var(--bg);border-radius:20px;max-width:460px;width:100%;padding:30px;position:relative;animation:quasiiFade .3s ease}\r\n  #quasii-diag .modal h4{font-family:\"Poppins\",sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.01em;margin-bottom:8px}\r\n  #quasii-diag .modal p{font-size:14.5px;color:var(--ink-soft);margin-bottom:16px}\r\n  #quasii-diag .modal input{\r\n    width:100%;background:#fff;border:1.5px solid var(--card-line);border-radius:12px;color:var(--ink);\r\n    font-family:\"Inter\",sans-serif;font-weight:500;font-size:15px;padding:14px 16px;margin-bottom:10px;\r\n  }\r\n  #quasii-diag .modal input:focus{outline:none;border-color:var(--pink)}\r\n  #quasii-diag .modal .btn{margin-top:8px;width:100%;justify-content:center}\r\n  #quasii-diag .modal-close{position:absolute;top:14px;right:18px;background:none;border:none;font-size:22px;line-height:1;color:var(--ink-soft);cursor:pointer}\r\n  #quasii-diag .modal-close:hover{color:var(--ink)}\r\n  #quasii-diag .modal .confirm{margin-top:12px}\r\n  #quasii-diag .modal .hint{font-size:12px;color:var(--ink-soft);margin-top:2px;margin-bottom:0}\r\n\r\n  #quasii-diag .fade{animation:quasiiFade .4s ease}\r\n  @keyframes quasiiFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\r\n  @media (prefers-reduced-motion: reduce){\r\n    #quasii-diag .fade,#quasii-diag .modal{animation:none}\r\n  }\r\n  @media(max-width:520px){\r\n    #quasii-diag .sectors{grid-template-columns:1fr}\r\n    #quasii-diag .opt{font-size:15px}\r\n    #quasii-diag .bar{width:84px}\r\n    #quasii-diag .score-num{font-size:64px}\r\n    #quasii-diag .capture .btn{width:100%;justify-content:center}\r\n  }\r\n<\/style>\r\n\r\n<div id=\"quasii-diag\">\r\n  <div class=\"wrap\" id=\"quasiiApp\"><\/div>\r\n\r\n  <!-- Share modal -->\r\n  <div class=\"modal-veil\" id=\"shareVeil\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"shareTitle\">\r\n    <div class=\"modal\">\r\n      <button class=\"modal-close\" id=\"shareClose\" aria-label=\"Close\">\u00d7<\/button>\r\n      <h4 id=\"shareTitle\">Make your benchmark more precise<\/h4>\r\n      <p>The more people in your sector who take the test, the more accurate your sector benchmark will be. Enter one or more email addresses and we\u2019ll send you a link. That\u2019s all \u2013 no sign-up, no newsletter.<\/p>\r\n      <input type=\"text\" id=\"shareEmails\" placeholder=\"navn@virksomhed.dk, navn2@virksomhed.dk\" autocomplete=\"off\" \/>\r\n      <p class=\"hint\">Separate multiple addresses with commas.<\/p>\r\n      <button class=\"btn\" id=\"shareSend\">Send link <span class=\"arr\">\u2192<\/span><\/button>\r\n      <div class=\"confirm\" id=\"shareConfirm\">Sent. Thank you for sharing.<\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n\/* ============================================================\r\n   MAIL\/RELAY-KONFIGURATION\r\n   Klienten kan ikke selv sende mail eller tale med databasen.\r\n   Den POST'er besvarelsen til save.php (i \/public_html\/subdomain_test),\r\n   som gemmer resultatet i MySQL og mailer et klikbart link via\r\n   Brevo. N\u00e5r linket \u00e5bnes, henter siden resultatet fra get.php\r\n   og gengiver hele diagnosen igen.\r\n   Hemmeligheder (DB + Brevo-n\u00f8gle) ligger KUN i config.php.\r\n\r\n   VIGTIGT: Denne side k\u00f8rer p\u00e5 WordPress i roden (https:\/\/quasii.co),\r\n   mens PHP-filerne ligger i undermappen. Derfor bruges ABSOLUTTE\r\n   url'er nedenfor. Skift API_BASE hvis mappen flyttes.\r\n   ============================================================ *\/\r\nconst CURRENT_YEAR = new Date().getFullYear(); \/\/ opdateres automatisk hvert \u00e5r - bruges alle steder \u00e5rstal indg\u00e5r i teksten\r\n\r\nconst API_BASE = \"https:\/\/quasii.co\/subdomain_test\"; \/\/ mappen med save.php \/ get.php \/ stats.php\r\nconst MAIL_CONFIG = {\r\n  endpoint: API_BASE + \"\/save.php\",       \/\/ POST: gemmer resultat + sender link-mail (ogs\u00e5 type:\"share\")\r\n  getEndpoint: API_BASE + \"\/get.php\",     \/\/ GET ?r=<token>: henter gemt resultat\r\n  statsEndpoint: API_BASE + \"\/stats.php\", \/\/ GET ?sector=&score=: branche-gennemsnit + percentil\r\n  internalCopyTo: \"toja@quasii.co\",       \/\/ QUASII-adressen der f\u00e5r kopi (BCC) af hvert resultat\r\n  fromName: \"QUASII\",\r\n  privacyUrl: \"https:\/\/quasii.co\/elementor-page-3261\/\"\r\n};\r\n\r\n\/* Basis-URL som mail-linket skal pege p\u00e5 (denne WordPress-side, uden query). *\/\r\nfunction viewBaseUrl(){ return location.origin + location.pathname; }\r\n\r\nconst SECTORS = [\r\n  {id:\"manufacturer\", label:\"Industri & produktion\", sub:\"Fabrik, energi & proces\"},\r\n  {id:\"trade\", label:\"Retail, Handel & Service\", sub:\"B2B & B2C\"},\r\n  {id:\"agency\", label:\"Bureau & r\u00e5dgivning\", sub:\"Kreativ, digital & konsulent\"},\r\n  {id:\"other\", label:\"Andet\", sub:\"\u00d8vrige brancher\"}\r\n];\r\n\r\nconst ROLES = [\r\n  {id:\"csuite\", label:\"Direktion \/ C-suite\", sub:\"CEO, COO, CIO, CFO m.fl.\"},\r\n  {id:\"director\", label:\"Funktionsdirekt\u00f8r \/ afdelingsleder\", sub:\"VP, Head of, direkt\u00f8r\"},\r\n  {id:\"owner\", label:\"Partner \/ ejer\", sub:\"Founder, partner, hovedaktion\u00e6r\"}\r\n];\r\n\r\nconst Q = [\r\n  {\r\n    dim:\"Synlige beslutninger\",\r\n    q:\"En medarbejder siger ja til et ekstra kunde\u00f8nske midt i et forl\u00f8b. Hvorn\u00e5r ser resten af teamet, hvad det ja koster i tid, margin og udskudt arbejde?\",\r\n    opts:[\r\n      {t:\"F\u00f8rst bagefter som en spr\u00e6ngt deadline eller en tyndere margin.\",v:0},\r\n      {t:\"En leder opdager det p\u00e5 et statusm\u00f8de, n\u00e5r skaden er sket.\",v:1},\r\n      {t:\"Teamet siger fra men typisk efter at l\u00f8ftet er givet.\",v:2},\r\n      {t:\"Alle ser prisen, f\u00f8r jaet bliver sagt.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"Klarhed over arbejdet\",\r\n    q:\"Hvis jeg bad jer vise mig, opgave for opgave, hvad AI l\u00f8ser bedst hos jer i dag hvad ville jeg s\u00e5 f\u00e5?\",\r\n    opts:[\r\n      {t:\"Et selvsikkert \\u201Cvi bruger AI overalt\\u201D uden noget p\u00e5 opgaveniveau.\",v:0},\r\n      {t:\"En liste over v\u00e6rkt\u00f8jer, vi har k\u00f8bt.\",v:1},\r\n      {t:\"En fornemmelse, der bor hos et par n\u00f8glepersoner.\",v:2},\r\n      {t:\"Et konkret roadmap med milesten vi handler p\u00e5.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"Mandat til at droppe arbejde\",\r\n    q:\"Har nogen hos jer mandat til at droppe arbejdet p\u00e5 opgaver, hvor v\u00e6rdien ikke st\u00e5r m\u00e5l med indsatsen - ogs\u00e5 efter sign-off p\u00e5 opgaven?\",\r\n    opts:[\r\n      {t:\"Nej. N\u00e5r der er lavet sign-off med kunden, bliver det bygget.\",v:0},\r\n      {t:\"P\u00e5 papiret mig eller ledelsen men det sker stort set aldrig.\",v:1},\r\n      {t:\"En leder kan rejse sp\u00f8rgsm\u00e5let, men ikke selv droppe opgaven.\",v:2},\r\n      {t:\"Ja en navngiven rolle, vores kunder accepterer at ting de \u00f8nsker kan blive droppet.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"\u00c6rlighed om rollerne\",\r\n    q:\"T\u00e6nk p\u00e5 de kolleger, hvis uge mest g\u00e5r med at koordinere, opdatere status og flytte information. Hvor meget af d\u00e9t kr\u00e6ver stadig et menneske om to \u00e5r hos jer?\",\r\n    opts:[\r\n      {t:\"Det har jeg ikke gjort op.\",v:0},\r\n      {t:\"Det meste - den type arbejde er n\u00f8dvendigt.\",v:1},\r\n      {t:\"Noget af det. Vi kan m\u00e6rke det skrumpe, men har ikke handlet.\",v:2},\r\n      {t:\"Vi har taget den \u00e6rlige samtale og hj\u00e6lper allerede folk videre.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"Resultater, ikke aktivitet\",\r\n    q:\"Din bestyrelse eller partnergruppe beder om \u00e9n side: Hvad har jeres AI-investering konkret leveret? Hvad st\u00e5r der p\u00e5 den side?\",\r\n    opts:[\r\n      {t:\"V\u00e6rkt\u00f8jer, licenser og forbrugstal.\",v:0},\r\n      {t:\"En god fort\u00e6lling, som er sv\u00e6r at binde til tal.\",v:1},\r\n      {t:\"Nogle effektiviseringer, l\u00f8st opgjort.\",v:2},\r\n      {t:\"Konkrete resultater inklusive det arbejde vi er holdt op med.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"Hvor tiden lander\",\r\n    q:\"AI sparer tid - det kan ingen bestride. Men hvor lander den sparede tid hos jer i dag?\",\r\n    opts:[\r\n      {t:\"Aner det ikke - den forsvinder ind i kalenderen.\",v:0},\r\n      {t:\"Den bliver nok spist af m\u00f8der og sm\u00e5opgaver.\",v:1},\r\n      {t:\"Noget af den lander rigtigt, men vi styrer det ikke.\",v:2},\r\n      {t:\"Vi styrer hvor den lander og kan dokumentere det.\",v:3}\r\n    ]\r\n  },\r\n  {\r\n    dim:\"Fast rytme\",\r\n    q:\"AI flytter sig hvert kvartal. Hvor ofte g\u00f8r I status p\u00e5, hvilket arbejde der siden sidst er rykket over til AI?\",\r\n    opts:[\r\n      {t:\"Vi lagde en plan \u00e9n gang og er ikke vendt tilbage til den.\",v:0},\r\n      {t:\"Cirka en gang om \u00e5ret.\",v:1},\r\n      {t:\"Kun n\u00e5r der er en god grund til det.\",v:2},\r\n      {t:\"I en fast rytme - helt bevidst.\",v:3}\r\n    ]\r\n  }\r\n];\r\n\r\nconst GAPS = {\r\n  \"Synlige beslutninger\":{title:\"AI har gjort det billigt at bygge. At beslutte, hvad der skal bygges, er stadig dyrt\",text:\"Jeres margin afg\u00f8res i gangene og p\u00e5 tirsdagsm\u00f8derne - \u00e9t tilforladeligt ja ad gangen. Ingen ser kompromiset i det \u00f8jeblik l\u00f8ftet gives. Derfor ejer ingen problemet, og regningen dukker op senere som scope creep ingen helt kan forklare.\"},\r\n  \"Klarhed over arbejdet\":{title:\"I bruger penge p\u00e5 AI uden at vide, hvad de bruges p\u00e5\",text:\"\\u201CVi bruger AI\\u201D er en fornemmelse, ikke et kort. F\u00f8r I kan pege p\u00e5, opgave for opgave, hvad AI l\u00f8ser, og hvad der stadig kr\u00e6ver menneskelig d\u00f8mmekraft, kan I hverken prioritere investeringen eller svare \u00e6rligt, n\u00e5r nogen sp\u00f8rger, hvad der har \u00e6ndret sig.\"},\r\n  \"Mandat til at droppe arbejde\":{title:\"Ingen har mandat til at droppe det forkerte arbejde\",text:\"Koordinering var aldrig jeres st\u00f8rste problem - impulskontrol var. I SHAPE\\u2122 scorer vi hvert \u00f8nske som V\u00e6rdi \\u00D7 V\u00e6gt (VxV): \\u201COpdat\u00e9r tomme felter p\u00e5 produktkort | 5\\u00D72\\u201D \\u2192 byg det. \\u201CPort\u00e9r statusrapporter fra det gamle system | 2\\u00D74\\u201D \\u2192 drop det. Med tallene p\u00e5 bordet bliver det legitimt ikke konfliktfyldt at droppe arbejdet p\u00e5 opgaver, hvor v\u00e6rdien ikke st\u00e5r m\u00e5l med indsatsen.\"},\r\n  \"\u00c6rlighed om rollerne\":{title:\"Jobtitlen er ikke beskyttet - men arbejdsbidraget er, hvis det f\u00e5r en AI-parat form\",text:\"At holde nogen i en rolle, AI er ved at overtage, er ikke omsorg - det er en langsom udfasning, der koster dem markedsv\u00e6rdi og jer margin. De fleste kan beholde deres jobtitel og f\u00e5 en AI-parat rolle ovenp\u00e5. Men det kr\u00e6ver, at samtalen bliver taget tidligt og med reel st\u00f8tte.\"},\r\n  \"Resultater, ikke aktivitet\":{title:\"I kan ikke dokumentere, at jeres AI-forbrug virker\",text:`Det er sp\u00f8rgsm\u00e5let, der koster trov\u00e6rdighed i ${CURRENT_YEAR}. Hvis jeres ene side viser v\u00e6rkt\u00f8jer og forbrugstal frem for resultater og det arbejde, I er holdt op med st\u00e5r I svagest netop d\u00e9r, hvor der nu bliver kigget skarpest.`},\r\n  \"Hvor tiden lander\":{title:\"AI er en dyr m\u00e5de at g\u00f8re det forkerte arbejde p\u00e5\",text:\"Ingen kan bestride, at AI brugt rigtigt frig\u00f8r tid. Men frigjort tid er kun en gevinst, hvis den lander p\u00e5 arbejde, der er v\u00e6rd at g\u00f8re. Lander den i indbakken og p\u00e5 flere m\u00f8der, betaler I for et produktivitetsl\u00f8ft, ingen kan finde p\u00e5 bundlinjen.\"},\r\n  \"Fast rytme\":{title:\"Jeres AI-billede er allerede ved at v\u00e6re for\u00e6ldet\",text:\"Det, der var sv\u00e6rt for AI for et halvt \u00e5r siden, kan v\u00e6re rutine i dag. En plan, der l\u00e6gges \u00e9n gang, er ikke en strategi - det er et \u00f8jebliksbillede, der forfalder. Uden en fast rytme er I altid \u00e9t hak bagud i forhold til jeres egen drift.\"}\r\n};\r\n\r\nconst TIERS = [\r\n  {\r\n    min:0,max:7,\r\n    name:\"Fordelen er ikke udnyttet endnu\",\r\n    teaser:\"Din score afsl\u00f8rer et m\u00f8nster, de fleste ledelser overser - indtil det rammer bundlinjen. Hvor jeres uudnyttede fordel gemmer sig, st\u00e5r i den fulde diagnose.\",\r\n    body:[\r\n      \"AI har givet alle den samme mulighed - jer og alle jeres konkurrenter. Fordelen tilh\u00f8rer dem, der ved, hvad de skal stille op med den. Lige nu ligger jeres stadig uudnyttet: v\u00e6rkt\u00f8jerne er nye, men strukturen under dem har ikke flyttet sig.\",\r\n      \"Den gode nyhed: Jeres konkurrenter har med stor sandsynlighed heller ikke indl\u00f8st deres. <strong>L\u00f8bet er stadig \u00e5bent<\/strong> men det afg\u00f8res af, hvem der f\u00f8rst \u00e6ndrer, hvad pengene bruges p\u00e5.\"\r\n    ]\r\n  },\r\n  {\r\n    min:8,max:14,\r\n    name:\"I er med i l\u00f8bet men fordelen er ikke jeres endnu\",\r\n    teaser:\"I kan m\u00e6rke at noget rykker - men tallene peger p\u00e5 det pr\u00e6cise sted, hvor forspringet siver fra jer. Hele billedet folder sig ud, n\u00e5r du l\u00e5ser op.\",\r\n    body:[\r\n      \"I kan m\u00e6rke AI-fremskridtet: rugbr\u00f8dsarbejdet skrumper og projekterne kommer i m\u00e5l, men strukturen har ikke indhentet potentialet I fornemmer er muligt.\",\r\n      `Det er her, de fleste seri\u00f8se ledelser st\u00e5r i ${CURRENT_YEAR}. <strong>Bevidsthed uden en metode skaber uro, ikke forspring.<\/strong> N\u00e6ste skridt er at g\u00f8re fornemmelsen synlig, ejet og besluttet f\u00f8r en konkurrent g\u00f8r det f\u00f8rst.`\r\n    ]\r\n  },\r\n  {\r\n    min:15,max:21,\r\n    name:\"I er foran nu skal forspringet holdes\",\r\n    teaser:\"I er foran. Men din score udpeger det ene sted, hvor forspringet er skr\u00f8beligt - og det ser du kun i den fulde diagnose nedenfor.\",\r\n    body:[\r\n      \"Det er sj\u00e6ldent. I kan se arbejdet, I har v\u00e6ret \u00e6rlige om rollerne, og I kan dokumentere, hvad jeres AI-forbrug faktisk har leveret.\",\r\n      \"Jeres risiko er selvtilfredshed. <strong>AI flytter sig hvert kvartal og jeres konkurrenter har adgang til pr\u00e6cis det samme.<\/strong> Forspringet tilh\u00f8rer dem, der holder det ved lige.\"\r\n    ]\r\n  }\r\n];\r\n\r\nconst SECTOR_LINE = {\r\n  manufacturer:\"Jeres produktion er instrumenteret ned til mindste ventil. Manglen ligger i beslutningerne ovenover hvad der skal bygges, loves og droppes.\",\r\n  trade:\"Driften k\u00f8rer. Men marginen afg\u00f8res i hundredvis af sm\u00e5 ja'er hver uge i kundeservice, salg og indk\u00f8b og dem fanger jeres systemer ikke.\",\r\n  agency:\"Produktionen er ikke problemet. Det er scope creep til geng\u00e6ld ingen har mandat til at droppe arbejde i tide der ikke er indsatsen v\u00e6rd, og beskytte jer mod  ufakturerbare timer eller utilfredse kunder.\",\r\n  other:\"Systemerne bag driften er formentlig fine. Manglen liggeri beslutningerne ovenover hvad I bygger, lover og dropper.\"\r\n};\r\n\r\nconst ROLE_LINE = {\r\n  csuite:\"Og som topleder er det dig, der skal st\u00e5 p\u00e5 m\u00e5l for svaret, n\u00e5r sp\u00f8rgsm\u00e5let kommer.\",\r\n  director:\"Og som funktionsleder er det dig, der bliver bedt om at levere svaret.\",\r\n  owner:\"Og som ejer er det dig, der selv betaler for hvert usynligt ja.\"\r\n};\r\n\r\nlet state = {sector:null, role:null, cur:0, answers:Array(Q.length).fill(null), unlocked:false, email:\"\", token:null, result:null};\r\nconst app = document.getElementById(\"quasiiApp\");\r\n\r\n\/* Fang UTM-parametre til lead-payload *\/\r\nfunction getUtm(){\r\n  const p = new URLSearchParams(location.search), utm = {};\r\n  [\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\",\"utm_term\"].forEach(k=>{ if(p.get(k)) utm[k]=p.get(k); });\r\n  return utm;\r\n}\r\n\r\n\/* Central afsendelse: POST'er til save.php. Returnerer serverens svar\r\n   (fx {ok, token}). Uden endpoint logges payload i konsollen. *\/\r\nasync function sendMail(payload){\r\n  if(!MAIL_CONFIG.endpoint){\r\n    console.info(\"MAIL_CONFIG.endpoint er ikke sat endnu. Payload der ville v\u00e6re sendt:\", payload);\r\n    return {ok:true, simulated:true};\r\n  }\r\n  try{\r\n    const res = await fetch(MAIL_CONFIG.endpoint, {\r\n      method:\"POST\",\r\n      headers:{\"Content-Type\":\"application\/json\"},\r\n      body:JSON.stringify(payload)\r\n    });\r\n    let data = {};\r\n    try{ data = await res.json(); }catch(_){}\r\n    return {ok:res.ok, ...data};\r\n  }catch(err){\r\n    console.error(\"Mail-relay fejlede:\", err);\r\n    return {ok:false};\r\n  }\r\n}\r\n\r\n\/* Byg det fulde summary-payload ud fra nuv\u00e6rende state (kr\u00e6ver state.result). *\/\r\nfunction buildSummaryPayload(){\r\n  const {scores,total,tier,lowIdx}=state.result;\r\n  return {\r\n    type:\"summary\",\r\n    to:state.email,\r\n    token:state.token || undefined,\r\n    copyTo:MAIL_CONFIG.internalCopyTo,\r\n    fromName:MAIL_CONFIG.fromName,\r\n    consent:true,\r\n    answers:state.answers,        \/\/ r\u00e5 svar-indekser => diagnosen kan gendannes 1:1\r\n    sector:state.sector,\r\n    role:state.role,\r\n    result:{\r\n      score:total, maxScore:21,\r\n      tier:tier.name,\r\n      weakestDimension:Q[lowIdx].dim,\r\n      dimensions:Q.map((q,i)=>({dim:q.dim, score:scores[i]}))\r\n    },\r\n    viewUrl:viewBaseUrl(),\r\n    utm:getUtm(),\r\n    url:location.href,\r\n    sentAt:new Date().toISOString()\r\n  };\r\n}\r\n\r\nfunction validEmail(e){ return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(e); }\r\n\r\n\/* ---------- Strengere sanity-tjek p\u00e5 gate-mailen ---------- *\/\r\nconst DISPOSABLE_DOMAINS = new Set([\r\n  \"mailinator.com\",\"guerrillamail.com\",\"10minutemail.com\",\"tempmail.com\",\"temp-mail.org\",\r\n  \"throwawaymail.com\",\"yopmail.com\",\"trashmail.com\",\"getnada.com\",\"fakeinbox.com\",\r\n  \"sharklasers.com\",\"dispostable.com\",\"maildrop.cc\",\"mailnesia.com\",\"mintemail.com\",\r\n  \"example.com\",\"example.org\",\"example.net\",\"test.com\",\"test.dk\",\"nowhere.com\",\r\n  \"email.com\",\"domain.com\",\"mail.com\",\"mymail.com\",\"fake.com\",\"asdf.com\"\r\n]);\r\nconst COMMON_DOMAINS = [\"gmail.com\",\"hotmail.com\",\"outlook.com\",\"live.com\",\"yahoo.com\",\"icloud.com\",\"me.com\",\"protonmail.com\",\"aol.com\",\"hotmail.dk\",\"outlook.dk\",\"live.dk\"];\r\nconst PLACEHOLDER_LOCALS = new Set([\"noone\",\"no-one\",\"nobody\",\"none\",\"test\",\"testing\",\"tester\",\"asdf\",\"asdfasdf\",\"qwerty\",\"qwertyui\",\"example\",\"abc\",\"abcd\",\"abcde\",\"xxx\",\"xxxx\",\"user\",\"username\",\"fake\",\"faker\",\"na\",\"n\/a\",\"temp\",\"demo\",\"sample\",\"foo\",\"bar\",\"foobar\",\"dummy\",\"spam\",\"hej\",\"hejsa\",\"mail\",\"email\",\"e-mail\",\"info\",\"aaa\",\"aaaa\",\"zzz\",\"hello\",\"hallo\",\"name\",\"navn\",\"firstname\",\"lastname\"]);\r\n\/* Ord der ofte optr\u00e6der som fyld-dom\u00e6ner (f\u00f8r topdom\u00e6net) *\/\r\nconst PLACEHOLDER_DOMAIN_LABELS = new Set([\"temp\",\"test\",\"testing\",\"example\",\"fake\",\"dummy\",\"demo\",\"sample\",\"foo\",\"bar\",\"foobar\",\"spam\",\"asdf\",\"qwerty\",\"abc\",\"xxx\",\"nowhere\",\"nothing\",\"none\",\"mail\",\"email\"]);\r\n\r\nfunction levenshtein(a,b){\r\n  const m=a.length,n=b.length,d=Array.from({length:m+1},(_,i)=>[i,...Array(n).fill(0)]);\r\n  for(let j=0;j<=n;j++) d[0][j]=j;\r\n  for(let i=1;i<=m;i++) for(let j=1;j<=n;j++){\r\n    d[i][j]=Math.min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+(a[i-1]===b[j-1]?0:1));\r\n  }\r\n  return d[m][n];\r\n}\r\nfunction suggestDomain(domain){\r\n  if(COMMON_DOMAINS.includes(domain)) return null;\r\n  let best=null,bd=99;\r\n  for(const d of COMMON_DOMAINS){ const dist=levenshtein(domain,d); if(dist<bd){bd=dist;best=d;} }\r\n  return (best && bd>0 && bd<=2) ? best : null;\r\n}\r\n\r\n\/* Grov \"ligner det volapyk?\"-heuristik til at fange tastatur-vr\u00f8vl som fdasfdas \/ afdas *\/\r\nfunction looksGibberish(s){\r\n  s=(s||\"\").toLowerCase().replace(\/[^a-z\u00e6\u00f8\u00e5]\/g,\"\");\r\n  if(s.length<4) return false;                              \/\/ for kort til at d\u00f8mme\r\n  if(!\/[aeiouy\u00e6\u00f8\u00e5]\/.test(s)) return true;                   \/\/ slet ingen vokaler\r\n  if(\/[bcdfghjklmnpqrstvwxz]{5,}\/.test(s)) return true;     \/\/ lang konsonant-stime\r\n  if(\/(asdf|sdfg|dfgh|qwer|wert|erty|zxcv|xcvb|hjkl|uiop|fdsa|gfds)\/.test(s)) return true; \/\/ tastaturr\u00e6kker\r\n  if(\/(.)\\1{3,}\/.test(s)) return true;                       \/\/ samme tegn gentaget 4+ gange\r\n  const vowels=(s.match(\/[aeiouy\u00e6\u00f8\u00e5]\/g)||[]).length;\r\n  return vowels\/s.length < 0.25;                            \/\/ meget lav vokal-andel\r\n}\r\n\r\n\/* MX-tjek via DNS-over-HTTPS (Google). Fejler \"\u00e5bent\" hvis DoH ikke svarer. *\/\r\nasync function domainAcceptsMail(domain){\r\n  try{\r\n    const r=await fetch(`https:\/\/dns.google\/resolve?name=${encodeURIComponent(domain)}&type=MX`, {headers:{accept:\"application\/dns-json\"}});\r\n    if(!r.ok) return true;\r\n    const j=await r.json();\r\n    if(Array.isArray(j.Answer) && j.Answer.some(a=>a.type===15)) return true; \/\/ 15 = MX\r\n    \/* Nogle dom\u00e6ner modtager mail p\u00e5 A\/AAAA uden MX \u2014 accepter hvis dom\u00e6net i det hele taget sl\u00e5r op *\/\r\n    if(j.Status===0 && Array.isArray(j.Answer) && j.Answer.length>0) return true;\r\n    return false;\r\n  }catch{ return true; } \/\/ netv\u00e6rks-\/DoH-fejl m\u00e5 ikke sp\u00e6rre rigtige brugere ude\r\n}\r\n\r\n\/* Returnerer {ok:true,email} eller {ok:false,message,suggestion?} (async pga. MX-opslag) *\/\r\nasync function checkEmail(raw){\r\n  const e=(raw||\"\").trim().toLowerCase();\r\n  if(!e) return {ok:false,message:\"Skriv din arbejdsmail.\"};\r\n  if(\/\\s\/.test(e) || (e.match(\/@\/g)||[]).length!==1) return {ok:false,message:\"Det ligner ikke en gyldig mailadresse.\"};\r\n  if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(e)) return {ok:false,message:\"Det ligner ikke en gyldig mailadresse.\"};\r\n  const [local,domain]=e.split(\"@\");\r\n  const parts=domain.split(\".\");\r\n  if(parts.length<2 || parts.some(p=>!p)) return {ok:false,message:\"Dom\u00e6net ser ikke rigtigt ud.\"};\r\n  const tld=parts[parts.length-1];\r\n  if(!\/^[a-z]{2,}$\/.test(tld)) return {ok:false,message:\"Dom\u00e6net mangler et gyldigt topdom\u00e6ne.\"};\r\n  const sld=parts[parts.length-2]; \/\/ andet-niveau-label, fx \"temp\" i temp.com\r\n  if(DISPOSABLE_DOMAINS.has(domain)) return {ok:false,message:\"Brug venligst din rigtige arbejdsmail - ikke en engangs- eller eksempeladresse.\"};\r\n  if(PLACEHOLDER_LOCALS.has(local)) return {ok:false,message:\"Skriv din rigtige mailadresse.\"};\r\n  if(PLACEHOLDER_DOMAIN_LABELS.has(sld)) return {ok:false,message:\"Det ligner en eksempel-adresse. Brug din rigtige arbejdsmail.\"};\r\n  if(local===sld) return {ok:false,message:\"Det ligner en eksempel-adresse. Brug din rigtige arbejdsmail.\"}; \/\/ fx temp@temp.com\r\n  const sug=suggestDomain(domain);\r\n  if(sug) return {ok:false,message:`Mente du <b>${local}@${sug}<\/b>?`, suggestion:`${local}@${sug}`};\r\n  if(looksGibberish(local) || looksGibberish(sld)) return {ok:false,message:\"Det ligner ikke en rigtig mailadresse. Tjek den lige.\"};\r\n  if(!(await domainAcceptsMail(domain))) return {ok:false,message:\"Vi kan ikke finde den mailadresse. Tjek stavningen af adressen.\"};\r\n  return {ok:true,email:e};\r\n}\r\n\r\nconst LOCK_SVG='<svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#ED6E98\" d=\"M12 2a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-1V7a5 5 0 0 0-5-5Zm3 8H9V7a3 3 0 0 1 6 0v3Z\"\/><\/svg>';\r\n\r\nfunction resetAll(){ state={sector:null,role:null,cur:0,answers:Array(Q.length).fill(null),unlocked:false,email:\"\",token:null,result:null}; history.replaceState(null,\"\",viewBaseUrl()); renderIntro(); }\r\n\r\nfunction renderIntro(){\r\n  app.innerHTML = `\r\n    <div class=\"fade\">\r\n      <div class=\"title-row\">\r\n        <div class=\"kicker\">En diagnose for ledere &middot; ${CURRENT_YEAR}<\/div>\r\n        <span class=\"badge\" tabindex=\"0\" role=\"note\" aria-label=\"Fortroligt. Din besvarelse behandles fortroligt og deles kun anonymiseret i form af statistik.\">\r\n          <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#161616\" d=\"M12 2a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-1V7a5 5 0 0 0-5-5Zm3 8H9V7a3 3 0 0 1 6 0v3Z\"\/><\/svg>\r\n          Behandles Fortroligt\r\n          <span class=\"tip\">Din besvarelse behandles fortroligt og deles kun anonymiseret i form af statistik.<\/span>\r\n        <\/span>\r\n      <\/div>\r\n      <h1>Din st\u00f8rste konkurrent har f\u00e5et pr\u00e6cis det samme AI som dig. Hvem er egentlig foran?<\/h1>\r\n      <!-- <p class=\"lede\">Samme modeller, samme v\u00e6rkt\u00f8jer, samme ugedage til r\u00e5dighed. AI er ikke variablen.<\/p> -->\r\n      <p class=\"lede\">Syv sp\u00f8rgsm\u00e5l viser, om jeres ops\u00e6tning g\u00f8r AI til <strong>et skjold for jeres bedste folks tid og et sv\u00e6rd for jeres innovation<\/strong> eller bare en dyrere m\u00e5de at g\u00f8re det forkerte arbejde p\u00e5.<\/p>\r\n      <p class=\"lede\">Se hvordan i scorer ift. <strong>andre i jeres branche<\/strong>.<\/p>\r\n      <div class=\"field-label\">Hvilken type virksomhed arbejder du i?<\/div>\r\n      <div class=\"sectors\" id=\"sectors\">\r\n        ${SECTORS.map(s=>`<button class=\"sector\" data-id=\"${s.id}\">${s.label}<small>${s.sub}<\/small><\/button>`).join(\"\")}\r\n      <\/div>\r\n      <div class=\"field-label\">Og hvad er din rolle?<\/div>\r\n      <div class=\"sectors\" id=\"roles\">\r\n        ${ROLES.map(r=>`<button class=\"sector\" data-id=\"${r.id}\">${r.label}<small>${r.sub}<\/small><\/button>`).join(\"\")}\r\n      <\/div>\r\n      <button class=\"btn\" id=\"start\" disabled>Begynd diagnosen <span class=\"arr\">&rarr;<\/span><\/button>\r\n      <p class=\"meta-note\">7 sp\u00f8rgsm\u00e5l &middot; ca. 3 minutter &middot; Alle besvarelser behandles fortroligt og deles kun anonymiseret i form af statistik.<\/p>\r\n    <\/div>`;\r\n  const startBtn = document.getElementById(\"start\");\r\n  const check = ()=>{ startBtn.disabled = !(state.sector && state.role); };\r\n  document.querySelectorAll(\"#sectors .sector\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      document.querySelectorAll(\"#sectors .sector\").forEach(x=>x.classList.remove(\"sel\"));\r\n      b.classList.add(\"sel\"); state.sector=b.dataset.id; check();\r\n    };\r\n  });\r\n  document.querySelectorAll(\"#roles .sector\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      document.querySelectorAll(\"#roles .sector\").forEach(x=>x.classList.remove(\"sel\"));\r\n      b.classList.add(\"sel\"); state.role=b.dataset.id; check();\r\n    };\r\n  });\r\n  startBtn.onclick=()=>{state.cur=0;renderQ();};\r\n}\r\n\r\nfunction renderQ(){\r\n  const i=state.cur, item=Q[i];\r\n  app.innerHTML=`\r\n    <div class=\"fade\">\r\n      <div class=\"topbar\">\r\n        <span>${i===Q.length-1 ? 'Sidste &middot; s\u00e5 ser du din score mod branchen' : 'Sp\u00f8rgsm\u00e5l '+(i+1)+' \/ '+Q.length}<\/span>\r\n        <span class=\"ticks\">${Q.map((_,j)=>`<span class=\"tick ${j<i?'done':''} ${j===i?'cur':''}\"><\/span>`).join(\"\")}<\/span>\r\n      <\/div>\r\n      <div class=\"qnum\">${String(i+1).padStart(2,\"0\")} &middot; ${item.dim}<\/div>\r\n      <div class=\"qtext\">${item.q}<\/div>\r\n      <div class=\"opts\" id=\"opts\">\r\n        ${item.opts.map((o,k)=>`<button class=\"opt ${state.answers[i]===k?'sel':''}\" data-k=\"${k}\">${o.t}<\/button>`).join(\"\")}\r\n      <\/div>\r\n      <div class=\"nav\">\r\n        <button class=\"back\" id=\"back\" ${i===0?'disabled':''}>&larr; Tilbage<\/button>\r\n      <\/div>\r\n    <\/div>`;\r\n  app.querySelectorAll(\".opt\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      state.answers[i]=parseInt(b.dataset.k);\r\n      setTimeout(()=>{ state.cur<Q.length-1 ? (state.cur++,renderQ()) : renderResult(); },180);\r\n    };\r\n  });\r\n  document.getElementById(\"back\").onclick=()=>{if(state.cur>0){state.cur--;renderQ();}};\r\n}\r\n\r\nfunction computeResult(){\r\n  const scores=state.answers.map((a,i)=>Q[i].opts[a].v);\r\n  const total=scores.reduce((x,y)=>x+y,0);\r\n  const tier=TIERS.find(t=>total>=t.min&&total<=t.max);\r\n  let lowIdx=0; for(let i=1;i<scores.length;i++){if(scores[i]<scores[lowIdx])lowIdx=i;}\r\n  const gap=GAPS[Q[lowIdx].dim];\r\n  return {scores,total,tier,lowIdx,gap};\r\n}\r\n\r\nfunction renderResult(){\r\n  state.result = computeResult();\r\n  state.unlocked ? renderFull() : renderLocked();\r\n}\r\n\r\n\/* Let version: score + kort teaser + nysgerrigheds-gab bag mail-gaten *\/\r\nfunction renderLocked(){\r\n  const {total,tier}=state.result;\r\n  const secObj=SECTORS.find(s=>s.id===state.sector);\r\n  const secLabel=secObj?secObj.label:\"jeres branche\";\r\n  app.innerHTML=`\r\n    <div class=\"fade\">\r\n      <div class=\"kicker\">Jeres resultat<\/div>\r\n      <div class=\"score-row\">\r\n        <span class=\"score-num\">${total}<\/span>\r\n        <span class=\"score-den\">\/ 21&nbsp;&nbsp;jeres AI-fordel<\/span>\r\n      <\/div>\r\n      <div class=\"tier-name\">${tier.name}<\/div>\r\n      <p class=\"tease\">${tier.teaser}<\/p>\r\n\r\n      <div class=\"locked\">\r\n        <div class=\"gap-label\">Bag din fulde diagnose<\/div>\r\n        <div class=\"locked-item\">${LOCK_SVG}<span><b>Hvor I ligger i forhold til andre i ${secLabel}<\/b> - jeres score holdt op mod andre i branchen.<\/span><\/div>\r\n        <div class=\"locked-item\">${LOCK_SVG}<span>Din svageste af de syv dimensioner - og den ene s\u00e6tning, der forklarer, hvad den koster jer lige nu.<\/span><\/div>\r\n        <div class=\"locked-item\">${LOCK_SVG}<span>Hele jeres dimensionsprofil - alle syv m\u00e5linger side om side, s\u00e5 I ser pr\u00e6cis hvor hullet sidder.<\/span><\/div>\r\n        <div class=\"locked-item\">${LOCK_SVG}<span>Beviset: hvad \u00e9t team opn\u00e5ede med pr\u00e6cis de samme medarbejdere.<\/span><\/div>\r\n        <div class=\"locked-item\">${LOCK_SVG}<span>Jeres skr\u00e6ddersyede n\u00e6ste skridt - m\u00e5lrettet jeres branche og rolle.<\/span><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"funnel\">\r\n        <div class=\"formula\">GRATIS! Se hvor I ligger i forhold til andre indenfor ${secLabel}.<\/div>\r\n        <h3>L\u00e5s din fulde AI-diagnose op<\/h3>\r\n        <p>Skriv din arbejdsmail, s\u00e5 folder vi hele resultatet ud - inkl. om I er foran eller bagud i jeres branche. Ingen ventetid og gratis.<\/p>\r\n        <div class=\"capture\">\r\n          <input type=\"email\" id=\"gateEmail\" placeholder=\"dig@virksomhed.dk\" aria-label=\"Din arbejdsmail\" autocomplete=\"email\" \/>\r\n          <button class=\"btn\" id=\"gateBtn\">Vis hele resultatet <span class=\"arr\">&rarr;<\/span><\/button>\r\n        <\/div>\r\n        <div class=\"email-msg\" id=\"gateMsg\" role=\"alert\"><\/div>\r\n        <p class=\"unlock-fine\">Vi bruger din mail til at sende dit resum\u00e9 og evt. kontakte dig om resultatet. L\u00e6s <a href=\"${MAIL_CONFIG.privacyUrl}\" target=\"_blank\" rel=\"noopener\">privatlivspolitikken<\/a>.<\/p>\r\n      <\/div>\r\n\r\n      <button class=\"restart\" id=\"restart\">Start forfra<\/button>\r\n    <\/div>`;\r\n\r\n  const input=document.getElementById(\"gateEmail\");\r\n  const msg=document.getElementById(\"gateMsg\");\r\n  const btn=document.getElementById(\"gateBtn\");\r\n  const btnHtml=btn.innerHTML;\r\n  const clearMsg=()=>{ msg.innerHTML=\"\"; msg.className=\"email-msg\"; input.style.borderColor=\"var(--card-line)\"; };\r\n  let checking=false;\r\n  const unlock=async ()=>{\r\n    if(checking) return;\r\n    checking=true; btn.disabled=true; btn.innerHTML=\"Tjekker\\u2026\";\r\n    let r;\r\n    try{ r=await checkEmail(input.value); }\r\n    finally{ checking=false; btn.disabled=false; btn.innerHTML=btnHtml; }\r\n    if(!r.ok){\r\n      input.style.borderColor=\"var(--pink)\";\r\n      msg.className=\"email-msg err\";\r\n      msg.innerHTML=r.message + (r.suggestion?` <button type=\"button\" class=\"msg-fix\" id=\"msgFix\">Ret<\/button>`:\"\");\r\n      const fix=document.getElementById(\"msgFix\");\r\n      if(fix) fix.onclick=()=>{ input.value=r.suggestion; clearMsg(); input.focus(); };\r\n      input.focus();\r\n      return;\r\n    }\r\n    state.email=r.email;\r\n    \/* Gem besvarelsen server-side og mail linket til brugeren + admin.\r\n       Best-effort: vi l\u00e5ser altid op, ogs\u00e5 hvis mailen fejler. *\/\r\n    const save = await sendMail(buildSummaryPayload());\r\n    if(save && save.token) state.token = save.token;\r\n    state.unlocked=true;\r\n    renderFull();\r\n    window.scrollTo({top:0,behavior:\"smooth\"});\r\n  };\r\n  btn.onclick=unlock;\r\n  input.addEventListener(\"keydown\", ev=>{ if(ev.key===\"Enter\") unlock(); });\r\n  input.addEventListener(\"input\", clearMsg);\r\n  document.getElementById(\"restart\").onclick=resetAll;\r\n}\r\n\r\n\/* Fuld version: hele resultatet, vist efter mail er indtastet *\/\r\nfunction renderFull(){\r\n  const {scores,total,tier,lowIdx,gap}=state.result;\r\n\r\n  app.innerHTML=`\r\n    <div class=\"fade\">\r\n      <div class=\"kicker\">Jeres resultat<\/div>\r\n      <div class=\"score-row\">\r\n        <span class=\"score-num\">${total}<\/span>\r\n        <span class=\"score-den\">\/ 21&nbsp;&nbsp;jeres AI-fordel<\/span>\r\n      <\/div>\r\n      <div class=\"tier-name\">${tier.name}<\/div>\r\n      ${tier.body.map(p=>`<p class=\"tier-body\">${p}<\/p>`).join(\"\")}\r\n      <p class=\"sector-line\">${SECTOR_LINE[state.sector]} ${ROLE_LINE[state.role]||\"\"}<\/p>\r\n\r\n      <div id=\"industryCompare\"><\/div>\r\n\r\n      <div class=\"gap-box\">\r\n        <div class=\"gap-label\">Jeres st\u00f8rste uudnyttede fordel &middot; ${Q[lowIdx].dim}<\/div>\r\n        <div class=\"gap-title\">${gap.title}<\/div>\r\n        <div class=\"gap-text\">${gap.text}<\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dims\">\r\n        ${scores.map((v,i)=>`\r\n          <div class=\"dim ${i===lowIdx?'gap':''}\">\r\n            <span class=\"dim-name\">${Q[i].dim}<\/span>\r\n            <span class=\"bar ${i===lowIdx?'gap':''}\"><i style=\"width:${(v\/3)*100}%\"><\/i><\/span>\r\n            <span class=\"dim-val\">${v}\/3<\/span>\r\n          <\/div>`).join(\"\")}\r\n      <\/div>\r\n\r\n      <div class=\"proof\">\r\n        Et team, vi arbejdede med sidste \u00e5r, h\u00e5ndterer i dag <strong>3,9&times; s\u00e5 mange sager<\/strong> med de samme medarbejdere og de gladeste kunder, de nogensinde har m\u00e5lt. Ikke fordi de l\u00f8ber hurtigere. Fordi AI har fjernet rugbr\u00f8dsarbejdet.\r\n      <\/div>\r\n\r\n      <div class=\"funnel\">\r\n        <div class=\"formula\">AI-v\u00e6rkt\u00f8jer &ne; st\u00e6rkere bundlinje.&nbsp;&nbsp;AI-v\u00e6rkt\u00f8jer + en metode = st\u00e6rkere bundlinje.<\/div>\r\n        <h3>Brug for hj\u00e6lp til n\u00e6ste skridt? F\u00e5 et Spin-up + AI Opportunity Map skr\u00e6ddersyet til jer.<\/h3>\r\n        <p>En Spin-Up tager 25&ndash;30 konkrete opgaver fra \u00e9n af jeres afdelinger og <b>en af vores konsulenter<\/b> sorterer dem sammen med jer: hvad AI l\u00f8ser bedst, hvad AI plus et menneske l\u00f8ser bedst, og hvad der stadig kr\u00e6ver en person. I f\u00e5r jeres eget AI Opportunity Map - det billede p\u00e5 opgaveniveau testen lige har vist jer, at I mangler.<\/p>\r\n        <p><strong>Jeres konkurrenter har det samme AI.<\/strong> Spin-Up'en viser p\u00e5 \u00e9n uge, hvor jeres fordel ligger.<\/p>\r\n        <a class=\"price-tag\" href=\"https:\/\/quasii.co\/pricing\/\" target=\"_blank\" rel=\"noopener\">SPIN-UP &middot; \u00c9N UGE &middot; \u00c9N AFDELING &middot; 20.000 KR &middot; KLIK HER FOR INFO.<\/a>\r\n\r\n        <div class=\"capture\">\r\n          <input type=\"email\" id=\"email\" placeholder=\"dig@virksomhed.dk\" aria-label=\"Din mailadresse\" \/>\r\n          <button class=\"btn\" id=\"send\">Send testresultatet til dig selv <span class=\"arr\">&rarr;<\/span><\/button>\r\n        <\/div>\r\n        <label class=\"consent\">\r\n          <input type=\"checkbox\" id=\"consent\" \/>\r\n          <span>Jeg accepterer, at QUASII sender mig mit resum\u00e9 og m\u00e5 kontakte mig om resultatet. L\u00e6s <a href=\"${MAIL_CONFIG.privacyUrl}\" target=\"_blank\" rel=\"noopener\">privatlivspolitikken<\/a>.<\/span>\r\n        <\/label>\r\n        <div class=\"confirm\" id=\"confirm\">Sendt. Tjek din indbakke - du f\u00e5r din vurdering og et resum\u00e9 p\u00e5 \u00e9n side.<\/div>\r\n\r\n        <div class=\"share-row\">\r\n          <button class=\"share-link\" id=\"shareOpen\">Del med din branche - og g\u00f8r dit benchmark skarpere &rarr;<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <button class=\"restart\" id=\"restart\">Start forfra<\/button>\r\n    <\/div>`;\r\n\r\n  const emailInput = document.getElementById(\"email\");\r\n  if(state.email){ emailInput.value = state.email; }\r\n  const doSend = async ()=>{\r\n    const e = emailInput.value.trim();\r\n    const consent = document.getElementById(\"consent\").checked;\r\n    if(!validEmail(e)){ emailInput.style.borderColor=\"var(--pink)\"; emailInput.focus(); return; }\r\n    if(!consent){ document.getElementById(\"consent\").focus(); return; }\r\n\r\n    \/* Resum\u00e9 (link) sendes til den indtastede adresse \u2014 og en kopi (BCC) til QUASII.\r\n       Findes der allerede et token, genbruges det, s\u00e5 vi ikke opretter dubletter. *\/\r\n    const payload = buildSummaryPayload();\r\n    payload.to = e;\r\n    const res = await sendMail(payload);\r\n    if(res.token) state.token = res.token;\r\n    if(res.ok){\r\n      document.getElementById(\"confirm\").style.display=\"block\";\r\n      emailInput.value=\"\";\r\n    } else {\r\n      emailInput.style.borderColor=\"var(--pink)\";\r\n    }\r\n  };\r\n  document.getElementById(\"send\").onclick=doSend;\r\n  emailInput.addEventListener(\"keydown\", ev=>{ if(ev.key===\"Enter\") doSend(); });\r\n\r\n  document.getElementById(\"shareOpen\").onclick=openShare;\r\n  document.getElementById(\"restart\").onclick=resetAll;\r\n\r\n  renderIndustryCompare(total);\r\n}\r\n\r\n\/* ---------- Branche-sammenligning ---------- *\/\r\n\/* Henter branche-gennemsnit + percentil fra stats.php og tegner boksen.\r\n   Fejler stille (skjuler blot boksen), s\u00e5 resten af siden altid virker. *\/\r\nasync function renderIndustryCompare(total){\r\n  const box = document.getElementById(\"industryCompare\");\r\n  if(!box || !MAIL_CONFIG.statsEndpoint) return;\r\n  const sectorObj = SECTORS.find(s=>s.id===state.sector);\r\n  const sectorLabel = sectorObj ? sectorObj.label : \"din branche\";\r\n  let data;\r\n  try{\r\n    const res = await fetch(`${MAIL_CONFIG.statsEndpoint}?sector=${encodeURIComponent(state.sector)}&score=${total}`);\r\n    if(!res.ok) return;\r\n    data = await res.json();\r\n  }catch(err){ console.error(\"Kunne ikke hente branchestatistik:\", err); return; }\r\n  if(!data || !data.ok || !data.n){ return; }\r\n\r\n  const avg = data.avg;\r\n  const diff = Math.round((total - avg) * 10) \/ 10;\r\n  const diffTxt = diff > 0\r\n      ? `<strong>${diff} point over<\/strong> gennemsnittet`\r\n      : (diff < 0 ? `<strong>${Math.abs(diff)} point under<\/strong> gennemsnittet`\r\n                  : `<strong>pr\u00e6cis p\u00e5<\/strong> gennemsnittet`);\r\n\r\n  let note;\r\n  if(data.n <= 1){\r\n    note = `Du er den <strong>f\u00f8rste<\/strong> i ${sectorLabel}, der tager testen - s\u00e5 gennemsnittet er indtil videre bare din egen score. Del gerne testen, s\u00e5 billedet vokser.`;\r\n  }else{\r\n    note = `Din score ligger ${diffTxt} for <strong>${sectorLabel}<\/strong>. Du er foran <strong>${data.percentile}%<\/strong> i din branche.`;\r\n  }\r\n\r\n  box.innerHTML = `\r\n    <div class=\"compare\">\r\n      <div class=\"compare-label\">Din score vs. din branche<\/div>\r\n      <div class=\"compare-row\">\r\n        <span class=\"compare-who\">Dig<\/span>\r\n        <span class=\"compare-bar you\"><i style=\"width:${(total\/21)*100}%\"><\/i><\/span>\r\n        <span class=\"compare-val\">${total}\/21<\/span>\r\n      <\/div>\r\n      <div class=\"compare-row\">\r\n        <span class=\"compare-who\">${sectorLabel}<\/span>\r\n        <span class=\"compare-bar avg\"><i style=\"width:${(avg\/21)*100}%\"><\/i><\/span>\r\n        <span class=\"compare-val\">${avg}\/21<\/span>\r\n      <\/div>\r\n      <p class=\"compare-note\">${note}<\/p>\r\n    <\/div>`;\r\n}\r\n\r\n\/* ---------- Del-med-en-du-kender ---------- *\/\r\nconst shareVeil = document.getElementById(\"shareVeil\");\r\nfunction openShare(){\r\n  shareVeil.classList.add(\"open\");\r\n  document.getElementById(\"shareConfirm\").style.display=\"none\";\r\n  document.getElementById(\"shareEmails\").value=\"\";\r\n  document.getElementById(\"shareEmails\").focus();\r\n}\r\nfunction closeShare(){ shareVeil.classList.remove(\"open\"); }\r\ndocument.getElementById(\"shareClose\").onclick=closeShare;\r\nshareVeil.addEventListener(\"click\", e=>{ if(e.target===shareVeil) closeShare(); });\r\ndocument.addEventListener(\"keydown\", e=>{ if(e.key===\"Escape\") closeShare(); });\r\n\r\ndocument.getElementById(\"shareSend\").onclick=async ()=>{\r\n  const input = document.getElementById(\"shareEmails\");\r\n  const emails = input.value.split(\",\").map(s=>s.trim()).filter(Boolean);\r\n  if(emails.length===0 || !emails.every(validEmail)){\r\n    input.style.borderColor=\"var(--pink)\"; input.focus(); return;\r\n  }\r\n  const payload = {\r\n    type:\"share\",\r\n    recipients:emails,\r\n    copyTo:MAIL_CONFIG.internalCopyTo,\r\n    fromName:MAIL_CONFIG.fromName,\r\n    shareUrl:location.origin+location.pathname,\r\n    senderToken:state.token || undefined,   \/\/ knytter delingen til afsenderens resultat (til admin-statistik)\r\n    utm:getUtm(),\r\n    sentAt:new Date().toISOString()\r\n  };\r\n  const res = await sendMail(payload);\r\n  if(res.ok){\r\n    document.getElementById(\"shareConfirm\").style.display=\"block\";\r\n    input.value=\"\"; input.style.borderColor=\"var(--card-line)\";\r\n  } else {\r\n    input.style.borderColor=\"var(--pink)\";\r\n  }\r\n};\r\ndocument.getElementById(\"shareEmails\").addEventListener(\"keydown\", ev=>{ if(ev.key===\"Enter\") document.getElementById(\"shareSend\").click(); });\r\n\r\n\/* ---------- Opstart: vis gemt resultat hvis ?r=<token> er i URL'en ---------- *\/\r\nasync function boot(){\r\n  const token = new URLSearchParams(location.search).get(\"r\");\r\n  if(token && MAIL_CONFIG.getEndpoint){\r\n    try{\r\n      const res = await fetch(`${MAIL_CONFIG.getEndpoint}?r=${encodeURIComponent(token)}`);\r\n      if(res.ok){\r\n        const data = await res.json();\r\n        if(data && Array.isArray(data.answers) && data.answers.length===Q.length){\r\n          state.answers = data.answers;\r\n          state.sector  = data.sector;\r\n          state.role    = data.role;\r\n          state.email   = data.to || \"\";\r\n          state.token   = token;\r\n          state.unlocked= true;\r\n          state.result  = computeResult();\r\n          renderFull();\r\n          return;\r\n        }\r\n      }\r\n    }catch(err){ console.error(\"Kunne ikke hente gemt resultat:\", err); }\r\n  }\r\n  renderIntro();\r\n}\r\nboot();\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>&times; G\u00f8r dit benchmark skarpere Jo flere i din branche, der tager testen, jo mere pr\u00e6cist bliver dit branche-benchmark. Skriv en eller flere mailadresser, s\u00e5 sender vi et link. Ikke andet &#8211; ingen tilmelding, intet nyhedsbrev. Flere adresser adskilles med komma. Send link &rarr; Sendt. Tak fordi du deler.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-6102","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/pages\/6102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/comments?post=6102"}],"version-history":[{"count":15,"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/pages\/6102\/revisions"}],"predecessor-version":[{"id":6246,"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/pages\/6102\/revisions\/6246"}],"wp:attachment":[{"href":"https:\/\/quasii.co\/en\/wp-json\/wp\/v2\/media?parent=6102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}