{"id":693,"date":"2026-03-09T11:47:37","date_gmt":"2026-03-09T11:47:37","guid":{"rendered":"https:\/\/danishdrift.dk\/?page_id=693"},"modified":"2026-05-25T06:59:37","modified_gmt":"2026-05-25T06:59:37","slug":"resultat","status":"publish","type":"page","link":"https:\/\/danishdrift.dk\/en\/resultat\/","title":{"rendered":"Result"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"693\" class=\"elementor elementor-693\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62fa981 e-flex e-con-boxed e-con e-parent\" data-id=\"62fa981\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-281edc8 elementor-widget elementor-widget-html\" data-id=\"281edc8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\nVIGTIGT:\nDenne version er renset for tegnsaet-fejl.\nHvis teksten igen bliver til fx \"\u00c3\u00a6\", \"\u00c3\u00b8\" eller \"\u00c3\u00a5\",\ner det fordi koden er blevet gemt\/kopieret med forkert encoding.\nBrug denne fil direkte, og undgaa at kopiere fra en version der allerede viser fejltegn.\n-->\n<!-- ========================================= -->\n<!-- DDC - STILLINGSSIDE + VDM STYLE BATTLE BRACKET -->\n<!-- KOMPLET NY VERSION -->\n<!-- FIX: Points\/score skjult p\u00e5 bracket-kasser -->\n<!-- FIX: Bracket bruger nu altid Start nr. og aldrig Seed nr. -->\n<!-- FIX: Brand og Klasse fjernet fra resultatlisten -->\n<!-- FIX: Desktop bredere resultatkort -->\n<!-- FIX: Mobil\/tablet f\u00e5r vandret scroll -->\n<!-- FIX: PRO R2 = ROUND 2 -->\n<!-- FIX: Play Off + Final bevaret -->\n<!-- FIX: Kilde fjernet + st\u00f8rre V\u00e6lg visning -->\n<!-- FIX: Ingen Resultat\/Bracket \u00e5bner f\u00f8r brugeren v\u00e6lger -->\n<!-- DESIGN: Premium finalomr\u00e5de, tydelig Play Off, mildere tabere, skjulte TBD-bokse og legend -->\n<!-- ========================================= -->\n\n<script>\n\/* =========================================================\n   DDC RESULTAT \/ BRACKET LOCK\n\n   STYRING:\n   true  = resultater og bracket er skjult\n   false = resultater og bracket er synlige\n\n   Brug kun denne ene linje, n\u00e5r du vil \u00e5bne\/lukke siden:\n   window.DDC_RESULTS_LOCKED = true;\n\n   Eksempel:\n   true  = skjult indtil efter praemieoverraekkelsen\n   false = offentliggjort \/ \u00e5ben\n========================================================= *\/\nwindow.DDC_RESULTS_LOCKED = false;\n\n\/* Skal normalt st\u00e5 til false, n\u00e5r du styrer det manuelt med true\/false ovenfor. *\/\nwindow.DDC_AUTO_UNLOCK_BY_DATE = false;\n\n\/* Bruges kun, hvis DDC_AUTO_UNLOCK_BY_DATE s\u00e6ttes til true. *\/\nwindow.DDC_EVENT_START_DATE = '2026-05-23T08:00:00+02:00';\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800;900&family=Teko:wght@600;700&display=swap\" rel=\"stylesheet\">\n\n<style>\n:root{\n  --ddc-bg:#070A10;\n  --ddc-bg2:#05070C;\n  --ddc-red:#E50914;\n  --ddc-red2:#FF2A2A;\n  --ddc-text:#FFFFFF;\n  --ddc-dim:#A9B0BC;\n  --ddc-stroke:rgba(255,255,255,0.12);\n  --ddc-shadow:0 18px 60px rgba(0,0,0,0.55);\n  --ddc-max:1500px;\n  --ddc-gold:#FFC542;\n  --ddc-silver:#D6D6D6;\n  --ddc-bronze:#CD7F32;\n}\n\nhtml{\n  scroll-behavior:smooth;\n}\n\n.ddc-results-page{\n  position:relative;\n  left:50%;\n  right:50%;\n  margin-left:-50vw;\n  margin-right:-50vw;\n  width:100vw;\n  max-width:100vw;\n  overflow:hidden;\n  background:\n    radial-gradient(900px 420px at 12% 0%, rgba(229,9,20,0.20), transparent 64%),\n    radial-gradient(850px 420px at 88% 5%, rgba(255,42,42,0.12), transparent 64%),\n    radial-gradient(700px 420px at 50% 20%, rgba(255,255,255,0.045), transparent 70%),\n    linear-gradient(180deg,#070A10,#05070C 62%,#03050A);\n  color:#fff;\n  font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\n}\n\n.ddc-results-page *{\n  box-sizing:border-box;\n}\n\n.ddc-results-page::before{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  pointer-events:none;\n  z-index:0;\n  background:\n    linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),\n    linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);\n  background-size:54px 54px;\n  mask-image:linear-gradient(180deg, rgba(0,0,0,0.8), transparent 82%);\n}\n\n.ddc-results-page::after{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  pointer-events:none;\n  z-index:0;\n  background:\n    radial-gradient(circle at 50% 0%, rgba(255,255,255,0.07), transparent 36%),\n    linear-gradient(180deg, transparent, rgba(0,0,0,0.35));\n}\n\n.ddc-results-page__inner{\n  position:relative;\n  z-index:1;\n  transition:filter .35s ease;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__inner{\n  filter:blur(18px);\n  pointer-events:none;\n  user-select:none;\n}\n\n.ddc-results-page__veil{\n  position:absolute;\n  inset:0;\n  z-index:4;\n  background:rgba(5,7,12,0.58);\n  opacity:0;\n  pointer-events:none;\n  transition:opacity .35s ease;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__veil{\n  opacity:1;\n}\n\n.ddc-results-page__overlay{\n  position:absolute;\n  top:42px;\n  left:50%;\n  transform:translateX(-50%);\n  z-index:5;\n  width:min(100% - 24px, 820px);\n  display:none;\n  pointer-events:none;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__overlay{\n  display:block;\n}\n\n.ddc-results-page__overlaybox{\n  text-align:center;\n  padding:42px 34px;\n  border-radius:30px;\n  background:\n    radial-gradient(700px 220px at 50% 0%, rgba(229,9,20,0.22), transparent 72%),\n    linear-gradient(180deg, rgba(18,22,30,0.97), rgba(9,12,18,0.985));\n  border:1px solid rgba(255,255,255,0.12);\n  box-shadow:0 30px 90px rgba(0,0,0,0.56);\n}\n\n.ddc-results-page__lockicon{\n  width:62px;\n  height:62px;\n  margin:0 auto 16px;\n  border-radius:50%;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  background:linear-gradient(135deg,#E50914,#FF2A2A);\n  box-shadow:0 18px 55px rgba(229,9,20,0.35);\n  font-size:28px;\n}\n\n.ddc-results-page__badge,\n.ddc-results-badge{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:10px;\n  padding:10px 16px;\n  margin-bottom:18px;\n  border-radius:999px;\n  font-size:12px;\n  font-weight:900;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  color:#fff;\n  background:rgba(229,9,20,0.14);\n  border:1px solid rgba(255,42,42,0.28);\n}\n\n.ddc-results-badge::before{\n  content:\"\";\n  width:8px;\n  height:8px;\n  border-radius:50%;\n  background:#FF2A2A;\n  box-shadow:0 0 0 4px rgba(255,42,42,0.14);\n}\n\n.ddc-results-page__overlaytitle{\n  margin:0 0 14px;\n  font-family:Teko,sans-serif;\n  font-size:clamp(42px, 7vw, 72px);\n  line-height:.9;\n  letter-spacing:1px;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-results-page__overlaytext{\n  margin:0 auto;\n  max-width:650px;\n  color:#B7C0CB;\n  font-size:16px;\n  line-height:1.8;\n}\n\n.ddc-results-page__countdown{\n  display:grid;\n  grid-template-columns:repeat(4, 1fr);\n  gap:10px;\n  max-width:520px;\n  margin:26px auto 0;\n}\n\n.ddc-countbox{\n  padding:13px 10px;\n  border-radius:18px;\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.10);\n}\n\n.ddc-countbox b{\n  display:block;\n  font-family:Teko,sans-serif;\n  font-size:34px;\n  line-height:1;\n  color:#fff;\n}\n\n.ddc-countbox span{\n  display:block;\n  margin-top:4px;\n  color:#A9B0BC;\n  font-size:10px;\n  font-weight:900;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.ddc-results-hero{\n  position:relative;\n  z-index:1;\n  padding:92px 20px 42px;\n}\n\n.ddc-results-hero__inner{\n  width:min(var(--ddc-max), calc(100% - 28px));\n  margin:0 auto;\n  text-align:center;\n}\n\n.ddc-results-title{\n  margin:0 0 14px;\n  font-family:Teko,sans-serif;\n  font-size:clamp(52px, 7.8vw, 96px);\n  line-height:.86;\n  letter-spacing:1px;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-results-title span:last-child{\n  color:var(--ddc-red2);\n}\n\n.ddc-results-lead{\n  max-width:940px;\n  margin:0 auto;\n  color:#A9B0BC;\n  font-size:16px;\n  line-height:1.8;\n}\n\n.ddc-results-hero-actions{\n  display:flex;\n  justify-content:center;\n  gap:12px;\n  flex-wrap:wrap;\n  margin-top:28px;\n}\n\n.ddc-top-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  padding:10px 14px;\n  border-radius:999px;\n  background:rgba(255,255,255,0.055);\n  border:1px solid rgba(255,255,255,0.11);\n  color:#A9B0BC;\n  font-size:13px;\n  backdrop-filter:blur(14px);\n  box-shadow:inset 0 1px 0 rgba(255,255,255,0.06);\n}\n\n.ddc-top-chip b{\n  color:#fff;\n}\n\n.ddc-main-tabs,\n.ddc-results-tabs,\n.ddc-bracket-tabs{\n  position:relative;\n  z-index:1;\n  width:min(var(--ddc-max), calc(100% - 28px));\n  margin:0 auto 28px;\n  display:flex;\n  justify-content:center;\n  align-items:center;\n  gap:12px;\n  flex-wrap:wrap;\n}\n\n.ddc-main-tabs{\n  margin-bottom:18px;\n}\n\n.ddc-view-selector{\n  position:relative;\n  z-index:1;\n  width:min(var(--ddc-max), calc(100% - 28px));\n  margin:0 auto 116px;\n  text-align:center;\n}\n\n.ddc-view-selector__label{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  margin-bottom:14px;\n  color:#FFC542;\n  font-size:16px;\n  font-weight:900;\n  letter-spacing:.14em;\n  text-transform:uppercase;\n  opacity:.82;\n}\n\n.ddc-view-selector .ddc-main-tabs{\n  width:auto;\n  margin:0 auto;\n}\n\n.ddc-view-selector .ddc-main-tab{\n  min-height:62px;\n  padding:18px 32px;\n  font-size:15px;\n}\n\n.ddc-main-tabs.needs-choice .ddc-main-tab{\n  animation:ddcChoicePulse 1.6s ease-in-out infinite;\n}\n\n@keyframes ddcChoicePulse{\n  0%,100%{box-shadow:0 0 0 rgba(255,42,42,0);}\n  50%{box-shadow:0 0 0 4px rgba(255,42,42,0.10), 0 16px 40px rgba(229,9,20,0.18);}\n}\n\n.ddc-bracket-picker{\n  position:relative;\n  z-index:1;\n  width:min(720px, calc(100% - 28px));\n  margin:0 auto 30px;\n  display:grid;\n  gap:14px;\n}\n\n.ddc-bracket-step{\n  position:relative;\n  display:grid;\n  gap:10px;\n  padding:14px;\n  border-radius:26px;\n  background:rgba(255,255,255,0.035);\n  border:1px solid rgba(255,255,255,0.10);\n  box-shadow:0 16px 44px rgba(0,0,0,0.20);\n}\n\n.ddc-bracket-step::before{\n  content:\"\";\n  position:absolute;\n  left:50%;\n  top:-15px;\n  width:2px;\n  height:15px;\n  transform:translateX(-50%);\n  background:linear-gradient(180deg, transparent, rgba(255,255,255,0.18));\n}\n\n.ddc-bracket-step:first-child::before{\n  display:none;\n}\n\n.ddc-bracket-step.is-disabled{\n  opacity:.45;\n}\n\n.ddc-bracket-step-label{\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  color:#FFC542;\n  font-size:11px;\n  font-weight:900;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.ddc-bracket-picker .ddc-bracket-tabs{\n  width:100%;\n  margin:0 auto;\n}\n\n.ddc-bracket-round-tabs .ddc-bracket-tab{\n  min-height:46px;\n  padding:12px 20px;\n}\n\n.ddc-bracket-empty{\n  padding:34px 24px;\n  border-radius:24px;\n  border:1px dashed rgba(255,255,255,0.16);\n  background:rgba(255,255,255,0.035);\n  text-align:center;\n  box-shadow:var(--ddc-shadow);\n}\n\n.ddc-bracket-empty h3{\n  margin:0 0 8px;\n  font-family:Teko,sans-serif;\n  font-size:42px;\n  line-height:1;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-bracket-empty p{\n  margin:0 auto;\n  max-width:680px;\n  color:#A9B0BC;\n  line-height:1.7;\n}\n\n.ddc-main-tab,\n.ddc-results-tab,\n.ddc-bracket-tab{\n  appearance:none;\n  border:1px solid rgba(255,255,255,0.14);\n  background:rgba(255,255,255,0.06);\n  color:#FFFFFF !important;\n  min-height:50px;\n  padding:13px 22px;\n  border-radius:999px;\n  font-size:13px;\n  font-weight:900;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  cursor:pointer;\n  transition:.22s ease;\n  text-align:center;\n  line-height:1.1;\n  white-space:nowrap;\n}\n\n.ddc-main-tab:hover,\n.ddc-results-tab:hover,\n.ddc-bracket-tab:hover{\n  transform:translateY(-2px);\n  background:rgba(255,255,255,0.10);\n  border-color:rgba(255,255,255,0.24);\n  color:#FFFFFF !important;\n}\n\n.ddc-main-tab.is-active,\n.ddc-results-tab.is-active,\n.ddc-bracket-tab.is-active{\n  color:#FFFFFF !important;\n  border-color:rgba(255,42,42,0.62);\n  background:linear-gradient(135deg,#E50914,#FF2A2A);\n  box-shadow:0 18px 50px rgba(229,9,20,0.34);\n}\n\n.ddc-page-panel{\n  display:none;\n}\n\n.ddc-page-panel.is-active{\n  display:block;\n}\n\n.ddc-results-wrap,\n.ddc-bracket-wrap{\n  position:relative;\n  z-index:1;\n  width:min(var(--ddc-max), calc(100% - 28px));\n  margin:0 auto;\n  padding:12px 0 84px;\n}\n\n.ddc-results-loading,\n.ddc-results-error,\n.ddc-bracket-loading,\n.ddc-bracket-error{\n  padding:34px 24px;\n  border-radius:24px;\n  border:1px solid rgba(255,255,255,0.10);\n  background:rgba(255,255,255,0.045);\n  box-shadow:var(--ddc-shadow);\n  text-align:center;\n}\n\n.ddc-results-loading h3,\n.ddc-results-error h3,\n.ddc-bracket-loading h3,\n.ddc-bracket-error h3{\n  margin:0 0 8px;\n  font-family:Teko,sans-serif;\n  font-size:42px;\n  line-height:1;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-results-loading p,\n.ddc-results-error p,\n.ddc-bracket-loading p,\n.ddc-bracket-error p{\n  margin:0 auto;\n  max-width:760px;\n  color:#A9B0BC;\n  line-height:1.7;\n}\n\n.ddc-results-panel{\n  display:none;\n  animation:ddcResultsFade .25s ease both;\n}\n\n.ddc-results-panel.is-active{\n  display:block;\n}\n\n@keyframes ddcResultsFade{\n  from{opacity:0; transform:translateY(8px);}\n  to{opacity:1; transform:translateY(0);}\n}\n\n.ddc-results-top{\n  display:flex;\n  align-items:flex-end;\n  justify-content:space-between;\n  gap:20px;\n  margin-bottom:22px;\n}\n\n.ddc-kicker{\n  display:inline-flex;\n  align-items:center;\n  gap:10px;\n  font-family:Teko,sans-serif;\n  letter-spacing:1.2px;\n  text-transform:uppercase;\n  color:#A9B0BC;\n  font-size:18px;\n}\n\n.ddc-kicker::before{\n  content:\"\";\n  width:10px;\n  height:10px;\n  border-radius:999px;\n  background:linear-gradient(135deg,#E50914,#FF2A2A);\n  box-shadow:0 0 0 6px rgba(229,9,20,0.12);\n}\n\n.ddc-panel-title{\n  margin:6px 0 0;\n  font-family:Teko,sans-serif;\n  font-size:clamp(42px, 5vw, 68px);\n  line-height:.9;\n  letter-spacing:1px;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-panel-title span{\n  color:#FF2A2A;\n}\n\n.ddc-panel-lead{\n  margin:8px 0 0;\n  color:#A9B0BC;\n  max-width:76ch;\n  font-size:15px;\n  line-height:1.65;\n}\n\n.ddc-results-meta{\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n  justify-content:flex-end;\n}\n\n.ddc-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  padding:10px 13px;\n  border-radius:999px;\n  border:1px solid rgba(255,255,255,0.12);\n  background:rgba(255,255,255,0.045);\n  color:#A9B0BC;\n  font-size:13px;\n  white-space:nowrap;\n}\n\n.ddc-chip b{\n  color:#fff;\n}\n\n.ddc-results-card{\n  overflow:hidden;\n  border-radius:24px;\n  border:1px solid rgba(255,255,255,0.10);\n  background:\n    radial-gradient(800px 240px at 10% 0%, rgba(229,9,20,0.14), transparent 70%),\n    linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.035));\n  box-shadow:var(--ddc-shadow);\n}\n\n.ddc-results-card-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:12px;\n  padding:18px 20px;\n  border-bottom:1px solid rgba(255,255,255,0.10);\n  background:rgba(255,255,255,0.03);\n}\n\n.ddc-results-card-title{\n  margin:0;\n  font-family:Teko,sans-serif;\n  font-size:44px;\n  line-height:1;\n  letter-spacing:.8px;\n  text-transform:uppercase;\n  color:#fff;\n}\n\n.ddc-results-card-sub{\n  color:#A9B0BC;\n  font-size:13px;\n  font-weight:800;\n  letter-spacing:.06em;\n  text-transform:uppercase;\n}\n\n\/* ======================================================\n   STILLING TABEL - BRAND OG KLASSE FJERNET\n====================================================== *\/\n\n.ddc-results-table-wrap{\n  width:100%;\n  overflow-x:auto !important;\n  overflow-y:hidden !important;\n  -webkit-overflow-scrolling:touch;\n  scrollbar-width:thin;\n  scrollbar-color:rgba(255,42,42,0.75) rgba(255,255,255,0.08);\n  border-radius:0 0 24px 24px;\n}\n\n.ddc-results-table-wrap::-webkit-scrollbar,\n.ddc-vdm-board-wrap::-webkit-scrollbar{\n  height:9px;\n}\n\n.ddc-results-table-wrap::-webkit-scrollbar-track,\n.ddc-vdm-board-wrap::-webkit-scrollbar-track{\n  background:rgba(255,255,255,0.06);\n  border-radius:999px;\n}\n\n.ddc-results-table-wrap::-webkit-scrollbar-thumb,\n.ddc-vdm-board-wrap::-webkit-scrollbar-thumb{\n  background:linear-gradient(90deg,#E50914,#FF2A2A);\n  border-radius:999px;\n}\n\n.ddc-results-table{\n  width:100% !important;\n  min-width:1138px !important;\n  table-layout:fixed !important;\n  border-collapse:separate;\n  border-spacing:0;\n}\n\n.ddc-results-table th{\n  padding:14px 7px !important;\n  background:#3D3D3D;\n  color:#fff;\n  text-align:center !important;\n  font-size:11px !important;\n  font-weight:900;\n  letter-spacing:.025em;\n  text-transform:uppercase;\n  border-bottom:1px solid rgba(255,255,255,0.18);\n  border-right:1px solid rgba(255,255,255,0.10);\n  white-space:normal !important;\n  line-height:1.12 !important;\n}\n\n.ddc-results-table td{\n  padding:14px 7px !important;\n  border-bottom:1px solid rgba(255,255,255,0.08);\n  border-right:1px solid rgba(255,255,255,0.08);\n  background:rgba(5,7,12,0.68);\n  color:#fff;\n  font-size:14px !important;\n  line-height:1.25;\n  vertical-align:middle !important;\n  text-align:center !important;\n}\n\n.ddc-results-table tr:last-child td{\n  border-bottom:0;\n}\n\n.ddc-results-table tr:nth-child(even) td{\n  background:rgba(255,255,255,0.045);\n}\n\n.ddc-results-table tr:hover td{\n  background:rgba(255,255,255,0.075);\n}\n\n\/* FULL-listen har alle 14 kolonner synlige: R1, R2 og R3 *\/\n.ddc-results-table--full{\n  min-width:1180px !important;\n}\n\n.ddc-results-table--full th,\n.ddc-results-table--full td{\n  font-size:12px !important;\n}\n\n.ddc-results-table--full th:nth-child(1),\n.ddc-results-table--full td:nth-child(1){ width:64px !important; }\n\n.ddc-results-table--full th:nth-child(2),\n.ddc-results-table--full td:nth-child(2){ width:76px !important; }\n\n.ddc-results-table--full th:nth-child(3),\n.ddc-results-table--full td:nth-child(3){ width:190px !important; }\n\n.ddc-results-table--full th:nth-child(4),\n.ddc-results-table--full td:nth-child(4){ width:70px !important; }\n\n.ddc-results-table--full th:nth-child(5),\n.ddc-results-table--full td:nth-child(5){ width:64px !important; }\n\n.ddc-results-table--full th:nth-child(6),\n.ddc-results-table--full td:nth-child(6),\n.ddc-results-table--full th:nth-child(7),\n.ddc-results-table--full td:nth-child(7),\n.ddc-results-table--full th:nth-child(8),\n.ddc-results-table--full td:nth-child(8),\n.ddc-results-table--full th:nth-child(9),\n.ddc-results-table--full td:nth-child(9),\n.ddc-results-table--full th:nth-child(10),\n.ddc-results-table--full td:nth-child(10),\n.ddc-results-table--full th:nth-child(11),\n.ddc-results-table--full td:nth-child(11),\n.ddc-results-table--full th:nth-child(12),\n.ddc-results-table--full td:nth-child(12),\n.ddc-results-table--full th:nth-child(13),\n.ddc-results-table--full td:nth-child(13),\n.ddc-results-table--full th:nth-child(14),\n.ddc-results-table--full td:nth-child(14){\n  width:78px !important;\n}\n\n\/* 11 kolonner - Brand og Klasse er fjernet *\/\n.ddc-results-table th:nth-child(1),\n.ddc-results-table td:nth-child(1){ width:70px !important; }\n\n.ddc-results-table th:nth-child(2),\n.ddc-results-table td:nth-child(2){ width:88px !important; }\n\n.ddc-results-table th:nth-child(3),\n.ddc-results-table td:nth-child(3){\n  width:190px !important;\n  text-align:left !important;\n}\n\n.ddc-results-table th:nth-child(4),\n.ddc-results-table td:nth-child(4){ width:82px !important; }\n\n.ddc-results-table th:nth-child(5),\n.ddc-results-table td:nth-child(5){ width:74px !important; }\n\n.ddc-results-table th:nth-child(6),\n.ddc-results-table td:nth-child(6){ width:105px !important; }\n\n.ddc-results-table th:nth-child(7),\n.ddc-results-table td:nth-child(7){ width:90px !important; }\n\n.ddc-results-table th:nth-child(8),\n.ddc-results-table td:nth-child(8){ width:90px !important; }\n\n.ddc-results-table th:nth-child(9),\n.ddc-results-table td:nth-child(9){ width:105px !important; }\n\n.ddc-results-table th:nth-child(10),\n.ddc-results-table td:nth-child(10){ width:90px !important; }\n\n.ddc-results-table th:nth-child(11),\n.ddc-results-table td:nth-child(11){ width:90px !important; }\n\n\n.ddc-pos{\n  text-align:center !important;\n  font-weight:900;\n  font-family:Teko,sans-serif;\n  font-size:32px !important;\n  letter-spacing:.6px;\n  color:#fff !important;\n}\n\n.ddc-pos--1{\n  background:linear-gradient(135deg, rgba(255,197,66,0.38), rgba(255,255,255,0.055)) !important;\n}\n\n.ddc-pos--2{\n  background:linear-gradient(135deg, rgba(214,214,214,0.30), rgba(255,255,255,0.055)) !important;\n}\n\n.ddc-pos--3{\n  background:linear-gradient(135deg, rgba(205,127,50,0.34), rgba(255,255,255,0.055)) !important;\n}\n\n.ddc-number,\n.ddc-points,\n.ddc-score{\n  text-align:center !important;\n  font-weight:900;\n  color:#fff;\n}\n\n.ddc-driver{\n  font-weight:900;\n  text-align:left !important;\n}\n\n.ddc-driver-profile-link{\n  color:#FFFFFF !important;\n  text-decoration:none !important;\n  font-weight:900;\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  cursor:pointer;\n  transition:.18s ease;\n  max-width:100%;\n  white-space:normal;\n  line-height:1.15;\n}\n\n.ddc-driver-profile-link::after{\n  content:\">\";\n  color:#FF2A2A;\n  font-size:18px;\n  font-weight:900;\n  line-height:1;\n  opacity:.75;\n  transform:translateY(-1px);\n  transition:.18s ease;\n}\n\n.ddc-driver-profile-link:hover{\n  color:#FF2A2A !important;\n}\n\n.ddc-driver-profile-link:hover::after{\n  opacity:1;\n  transform:translate(2px,-1px);\n}\n\n.ddc-country-flag{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:7px;\n  font-weight:900;\n  color:#FFFFFF;\n  white-space:nowrap;\n}\n\n.ddc-country-flag img{\n  width:32px;\n  height:21px;\n  object-fit:cover;\n  border-radius:4px;\n  border:1px solid rgba(255,255,255,0.20);\n  box-shadow:0 6px 16px rgba(0,0,0,0.28);\n  display:block;\n  flex:0 0 32px;\n}\n\n.ddc-country-flag span{\n  font-size:12px;\n  color:#FFFFFF;\n  font-weight:900;\n}\n\n.ddc-class-badge{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  min-width:62px;\n  padding:6px 8px;\n  border-radius:999px;\n  color:#fff;\n  font-size:10px;\n  font-weight:900;\n  letter-spacing:.06em;\n  text-transform:uppercase;\n}\n\n.ddc-class-badge--pro{\n  background:linear-gradient(135deg,#B0000D,#E50914);\n}\n\n.ddc-class-badge--pro2{\n  background:linear-gradient(135deg,#126A94,#39AEEA);\n}\n\n.ddc-class-badge--street{\n  background:linear-gradient(135deg,#176B2A,#31AF47);\n}\n\n.ddc-class-badge--rookie{\n  background:linear-gradient(135deg,#148A4A,#2DFF88);\n  color:#06140B;\n}\n\n.ddc-note{\n  margin-top:20px;\n  padding:18px 20px;\n  border-radius:18px;\n  border:1px solid rgba(255,255,255,0.10);\n  background:rgba(255,255,255,0.045);\n  color:#A9B0BC;\n  font-size:14px;\n  line-height:1.7;\n}\n\n.ddc-note strong{\n  color:#fff;\n}\n\n\/* ======================================================\n   VDM STYLE BRACKET\n====================================================== *\/\n\n.ddc-vdm-board-wrap{\n  width:100%;\n  overflow-x:auto;\n  -webkit-overflow-scrolling:touch;\n  padding:4px 0 16px;\n}\n\n.ddc-vdm-board{\n  position:relative;\n  width:100%;\n  min-width:1180px;\n  min-height:760px;\n  aspect-ratio:16\/9.6;\n  border-radius:26px;\n  overflow:hidden;\n  background:\n    linear-gradient(rgba(255,255,255,0.035) 1px, transparent 1px),\n    linear-gradient(90deg, rgba(255,255,255,0.035) 1px, transparent 1px),\n    radial-gradient(680px 260px at 50% 50%, rgba(255,255,255,0.06), transparent 72%),\n    radial-gradient(580px 260px at 18% 78%, rgba(255,197,66,0.14), transparent 72%),\n    radial-gradient(580px 260px at 82% 78%, rgba(255,197,66,0.12), transparent 72%),\n    radial-gradient(520px 230px at 50% 12%, rgba(229,9,20,0.16), transparent 72%),\n    linear-gradient(180deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02));\n  background-size:42px 42px,42px 42px,auto,auto,auto,auto,auto;\n  border:1px solid rgba(255,255,255,0.10);\n  box-shadow:0 26px 90px rgba(0,0,0,0.55);\n}\n\n.ddc-vdm-board::before{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  pointer-events:none;\n  z-index:0;\n  background:\n    radial-gradient(circle at 50% 0%, rgba(255,255,255,0.08), transparent 32%),\n    linear-gradient(180deg, transparent, rgba(0,0,0,0.30));\n}\n\n.ddc-vdm-board-title{\n  position:absolute;\n  top:18px;\n  left:50%;\n  transform:translateX(-50%);\n  text-align:center;\n  z-index:8;\n  pointer-events:none;\n}\n\n.ddc-vdm-board-title small{\n  display:block;\n  color:#FF2A2A;\n  font-size:14px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.12em;\n  transform:translateY(-8px) rotate(0deg);\n}\n\n.ddc-vdm-board-title strong{\n  display:block;\n  margin-top:-2px;\n  font-family:Teko,sans-serif;\n  font-size:54px;\n  line-height:.8;\n  text-transform:uppercase;\n  letter-spacing:1px;\n}\n\n.ddc-vdm-board-title span{\n  color:#FFC542;\n}\n\n.ddc-vdm-round-label{\n  position:absolute;\n  z-index:6;\n  font-size:10px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n  color:#FFC542;\n  text-shadow:0 2px 12px rgba(0,0,0,.7);\n  line-height:1;\n}\n\n.ddc-vdm-box{\n  position:absolute;\n  z-index:4;\n  height:24px;\n  border-radius:3px;\n  background:linear-gradient(180deg,#414248,#2C2D31);\n  border:1px solid rgba(255,255,255,.18);\n  box-shadow:0 6px 18px rgba(0,0,0,.35);\n  color:#fff;\n  display:flex;\n  align-items:center;\n  overflow:hidden;\n}\n\n.ddc-vdm-box.is-empty{\n  opacity:.92;\n  background:linear-gradient(180deg, rgba(65,66,72,.72), rgba(44,45,49,.72));\n  border-color:rgba(255,255,255,.16);\n  box-shadow:0 5px 14px rgba(0,0,0,.30);\n}\n\n.ddc-vdm-box.is-empty .ddc-vdm-name{\n  color:rgba(255,255,255,.84);\n}\n\n.ddc-vdm-box.is-winner{\n  border-color:rgba(255,197,66,.95);\n  background:\n    linear-gradient(180deg, rgba(255,197,66,.30), rgba(65,66,72,.92)),\n    linear-gradient(180deg,#414248,#2C2D31);\n  box-shadow:\n    0 0 0 1px rgba(255,197,66,.34),\n    0 0 18px rgba(255,197,66,.34),\n    0 8px 20px rgba(0,0,0,.38);\n}\n\n.ddc-vdm-box.is-winner::after{\n  content:\"*\";\n  position:absolute;\n  right:3px;\n  top:50%;\n  transform:translateY(-50%);\n  width:13px;\n  height:13px;\n  border-radius:50%;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  color:#181006;\n  background:#FFC542;\n  font-size:8px;\n  font-weight:900;\n  line-height:1;\n  z-index:12;\n  box-shadow:0 0 12px rgba(255,197,66,.45);\n  pointer-events:none;\n}\n\n.ddc-vdm-box.is-winner .ddc-vdm-seed{\n  color:#FFC542;\n  background:rgba(0,0,0,.34);\n}\n\n.ddc-vdm-box.is-winner .ddc-vdm-score{\n  color:#FFC542;\n  background:rgba(0,0,0,.30);\n}\n\n.ddc-vdm-box.is-loser{\n  opacity:.50;\n  filter:grayscale(.65);\n}\n\n.ddc-vdm-box.is-loser::before,\n.ddc-vdm-box.is-loser::after{\n  content:\"\";\n  position:absolute;\n  left:-7%;\n  top:50%;\n  width:114%;\n  height:1.5px;\n  background:rgba(255,255,255,.58);\n  z-index:13;\n  pointer-events:none;\n  box-shadow:0 0 8px rgba(0,0,0,.45);\n}\n\n.ddc-vdm-box.is-loser::before{\n  transform:rotate(11deg);\n}\n\n.ddc-vdm-box.is-loser::after{\n  transform:rotate(-11deg);\n}\n\n.ddc-vdm-seed{\n  width:30px;\n  height:100%;\n  flex:0 0 30px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  background:rgba(0,0,0,.28);\n  color:#FFC542;\n  font-size:9px;\n  font-weight:900;\n}\n\n.ddc-vdm-name{\n  flex:1;\n  min-width:0;\n  padding:0 7px;\n  overflow:hidden;\n  text-overflow:ellipsis;\n  white-space:nowrap;\n  font-size:9px;\n  font-weight:900;\n  text-transform:uppercase;\n}\n\n.ddc-vdm-name-link{\n  color:#FFFFFF !important;\n  text-decoration:none !important;\n  display:block;\n  width:100%;\n  overflow:hidden;\n  text-overflow:ellipsis;\n  white-space:nowrap;\n  font-size:9px;\n  font-weight:900;\n  text-transform:uppercase;\n  line-height:1;\n  transition:.18s ease;\n  position:relative;\n  z-index:20;\n}\n\n.ddc-vdm-name-link:hover{\n  color:#FFC542 !important;\n}\n\n.ddc-vdm-score{\n  width:25px;\n  height:100%;\n  flex:0 0 25px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  background:rgba(0,0,0,.24);\n  font-size:9px;\n  font-weight:900;\n}\n\n.ddc-vdm-line{\n  position:absolute;\n  z-index:2;\n  background:#B88938;\n  opacity:.68;\n  box-shadow:0 0 12px rgba(184,137,56,.28);\n}\n\n.ddc-vdm-line.h{\n  height:2px;\n}\n\n.ddc-vdm-line.v{\n  width:2px;\n}\n\n.ddc-vdm-playoff{\n  position:absolute;\n  left:50%;\n  top:25%;\n  width:170px;\n  transform:translate(-50%,-50%);\n  z-index:9;\n  text-align:center;\n  padding:10px 9px 9px;\n  border-radius:15px;\n  background:\n    radial-gradient(110px 62px at 50% 0%, rgba(255,197,66,.17), transparent 72%),\n    rgba(6,8,13,.44);\n  border:1px solid rgba(255,197,66,.20);\n  box-shadow:0 15px 38px rgba(0,0,0,.32), inset 0 1px 0 rgba(255,255,255,.06);\n  backdrop-filter:blur(8px);\n}\n\n.ddc-vdm-playoff-title{\n  color:#FFC542;\n  font-size:13px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.11em;\n  margin-bottom:7px;\n  text-shadow:0 2px 12px rgba(0,0,0,.7);\n}\n\n.ddc-vdm-playoff-sub{\n  color:#A9B0BC;\n  font-size:8px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n  margin:-3px 0 7px;\n}\n\n.ddc-vdm-playoff-list{\n  display:grid;\n  gap:7px;\n}\n\n.ddc-vdm-center{\n  position:absolute;\n  left:50%;\n  top:80%;\n  width:263px;\n  transform:translate(-50%,-50%);\n  z-index:7;\n  text-align:center;\n  padding:13px 16px 15px;\n  border-radius:18px;\n  background:\n    radial-gradient(230px 92px at 50% 0%, rgba(255,197,66,.21), transparent 76%),\n    linear-gradient(180deg, rgba(255,255,255,.052), rgba(0,0,0,.23));\n  border:1px solid rgba(255,197,66,.22);\n  box-shadow:0 19px 50px rgba(0,0,0,.40), 0 0 22px rgba(255,197,66,.09);\n  backdrop-filter:blur(8px);\n}\n\n.ddc-vdm-center-title{\n  color:#FF2A2A;\n  font-size:14px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.15em;\n  margin-bottom:7px;\n  text-shadow:0 0 16px rgba(255,42,42,.30);\n}\n\n.ddc-vdm-final{\n  display:grid;\n  gap:8px;\n}\n\n.ddc-vdm-final-label{\n  color:#fff;\n  font-size:10px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n}\n\n.ddc-vdm-final .ddc-vdm-box{\n  height:30px !important;\n  border-radius:6px;\n}\n\n.ddc-vdm-box.is-final-winner{\n  min-height:32px;\n  border-color:rgba(255,197,66,1);\n  background:\n    linear-gradient(180deg, rgba(255,197,66,.38), rgba(65,66,72,.92)),\n    linear-gradient(180deg,#414248,#2C2D31);\n  box-shadow:\n    0 0 0 1px rgba(255,197,66,.42),\n    0 0 26px rgba(255,197,66,.38),\n    0 9px 22px rgba(0,0,0,.45);\n}\n\n.ddc-vdm-box.is-final-winner .ddc-vdm-name::after{\n  content:\"CHAMPION\";\n  display:inline-flex;\n  margin-left:6px;\n  padding:1px 4px;\n  border-radius:999px;\n  background:rgba(255,197,66,.18);\n  color:#FFC542;\n  font-size:6px;\n  letter-spacing:.07em;\n  vertical-align:middle;\n}\n\n.ddc-bracket-legend{\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n  justify-content:center;\n  align-items:center;\n  margin-top:18px;\n}\n\n.ddc-legend-pill{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  padding:9px 12px;\n  border-radius:999px;\n  background:rgba(255,255,255,.045);\n  border:1px solid rgba(255,255,255,.10);\n  color:#A9B0BC;\n  font-size:12px;\n  font-weight:800;\n}\n\n.ddc-legend-dot{\n  width:10px;\n  height:10px;\n  border-radius:999px;\n  background:#FFC542;\n  box-shadow:0 0 12px rgba(255,197,66,.42);\n}\n\n.ddc-legend-cross{\n  position:relative;\n  width:14px;\n  height:14px;\n  display:inline-block;\n}\n\n.ddc-legend-cross::before,\n.ddc-legend-cross::after{\n  content:\"\";\n  position:absolute;\n  left:0;\n  top:6px;\n  width:14px;\n  height:2px;\n  background:rgba(255,255,255,.62);\n}\n\n.ddc-legend-cross::before{ transform:rotate(35deg); }\n.ddc-legend-cross::after{ transform:rotate(-35deg); }\n\n.ddc-bracket-meta{\n  opacity:.78;\n  transform:scale(.96);\n  transform-origin:right center;\n}\n\n\n\n\n\n\n\/* FIX: TBD-bokse f\u00e5r kryds ligesom tabere *\/\n.ddc-vdm-box.is-empty{\n  opacity:.50;\n  filter:grayscale(.65);\n}\n\n.ddc-vdm-box.is-empty::before,\n.ddc-vdm-box.is-empty::after{\n  content:\"\";\n  position:absolute;\n  left:-7%;\n  top:50%;\n  width:114%;\n  height:1.5px;\n  background:rgba(255,255,255,.58);\n  z-index:13;\n  pointer-events:none;\n  box-shadow:0 0 8px rgba(0,0,0,.45);\n}\n\n.ddc-vdm-box.is-empty::before{\n  transform:rotate(11deg);\n}\n\n.ddc-vdm-box.is-empty::after{\n  transform:rotate(-11deg);\n}\n\n\/* FIX: Point\/score vises ikke p\u00e5 bracket-kasser *\/\n.ddc-vdm-score{\n  display:none !important;\n}\n\n.ddc-vdm-name{\n  padding-right:18px;\n}\n\n\n\n\/* ======================================================\n   DYNAMISKE KLASSEFARVER\n   Pro = r\u00f8d, Pro2 = bl\u00e5, Street = gr\u00f8n\n====================================================== *\/\n\n.ddc-results-page{\n  --ddc-active-a:#E50914;\n  --ddc-active-b:#FF2A2A;\n  --ddc-active-soft:rgba(229,9,20,0.14);\n  --ddc-active-border:rgba(255,42,42,0.62);\n  --ddc-active-shadow:rgba(229,9,20,0.34);\n}\n\n.ddc-results-page.ddc-active-class-pro{\n  --ddc-active-a:#B0000D;\n  --ddc-active-b:#FF2A2A;\n  --ddc-active-soft:rgba(229,9,20,0.16);\n  --ddc-active-border:rgba(255,42,42,0.64);\n  --ddc-active-shadow:rgba(229,9,20,0.36);\n}\n\n.ddc-results-page.ddc-active-class-pro2{\n  --ddc-active-a:#126A94;\n  --ddc-active-b:#39AEEA;\n  --ddc-active-soft:rgba(57,174,234,0.16);\n  --ddc-active-border:rgba(57,174,234,0.64);\n  --ddc-active-shadow:rgba(57,174,234,0.34);\n}\n\n.ddc-results-page.ddc-active-class-street{\n  --ddc-active-a:#176B2A;\n  --ddc-active-b:#31AF47;\n  --ddc-active-soft:rgba(49,175,71,0.16);\n  --ddc-active-border:rgba(49,175,71,0.64);\n  --ddc-active-shadow:rgba(49,175,71,0.34);\n}\n\n.ddc-results-page .ddc-main-tab.is-active,\n.ddc-results-page .ddc-results-tab.is-active,\n.ddc-results-page .ddc-bracket-tab.is-active{\n  border-color:var(--ddc-active-border) !important;\n  background:linear-gradient(135deg,var(--ddc-active-a),var(--ddc-active-b)) !important;\n  box-shadow:0 18px 50px var(--ddc-active-shadow) !important;\n}\n\n.ddc-results-page .ddc-panel-title span,\n.ddc-results-page .ddc-results-title span:last-child,\n.ddc-results-page .ddc-vdm-center-title{\n  color:var(--ddc-active-b) !important;\n}\n\n.ddc-results-page .ddc-kicker::before,\n.ddc-results-page .ddc-results-badge::before{\n  background:linear-gradient(135deg,var(--ddc-active-a),var(--ddc-active-b)) !important;\n  box-shadow:0 0 0 6px var(--ddc-active-soft) !important;\n}\n\n.ddc-results-page .ddc-results-badge,\n.ddc-results-page .ddc-results-page__badge{\n  background:var(--ddc-active-soft) !important;\n  border-color:var(--ddc-active-border) !important;\n}\n\n.ddc-results-page .ddc-chip b,\n.ddc-results-page .ddc-view-selector__label,\n.ddc-results-page .ddc-bracket-step-label{\n  color:var(--ddc-active-b) !important;\n}\n\n.ddc-results-page .ddc-bracket-step{\n  border-color:rgba(255,255,255,0.10);\n}\n\n.ddc-results-page.ddc-active-class-pro .ddc-bracket-step,\n.ddc-results-page.ddc-active-class-pro2 .ddc-bracket-step,\n.ddc-results-page.ddc-active-class-street .ddc-bracket-step{\n  border-color:var(--ddc-active-border);\n  box-shadow:0 16px 44px rgba(0,0,0,0.20), 0 0 28px var(--ddc-active-soft);\n}\n\n\/* Svag klassefarvet kant rundt om stilling og bracket tavlen *\/\n.ddc-results-page.ddc-active-class-pro .ddc-results-card,\n.ddc-results-page.ddc-active-class-pro2 .ddc-results-card,\n.ddc-results-page.ddc-active-class-street .ddc-results-card,\n.ddc-results-page.ddc-active-class-pro .ddc-vdm-board,\n.ddc-results-page.ddc-active-class-pro2 .ddc-vdm-board,\n.ddc-results-page.ddc-active-class-street .ddc-vdm-board{\n  border-color:var(--ddc-active-border) !important;\n  box-shadow:\n    0 26px 90px rgba(0,0,0,0.55),\n    0 0 0 1px var(--ddc-active-soft),\n    0 0 34px var(--ddc-active-soft) !important;\n}\n\n.ddc-results-page.ddc-active-class-pro .ddc-results-card-head,\n.ddc-results-page.ddc-active-class-pro2 .ddc-results-card-head,\n.ddc-results-page.ddc-active-class-street .ddc-results-card-head{\n  background:\n    radial-gradient(520px 120px at 0% 0%, var(--ddc-active-soft), transparent 74%),\n    rgba(255,255,255,0.03) !important;\n}\n\n.ddc-standing-round-note{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  margin-top:8px;\n  color:#A9B0BC;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n}\n\n\n\n\/* ======================================================\n   MANUEL REFRESH KNAP - STILLING + BRACKET\n====================================================== *\/\n\n.ddc-refresh-row{\n  display:flex;\n  justify-content:flex-end;\n  align-items:center;\n  gap:10px;\n  margin:14px 0 18px;\n}\n\n.ddc-refresh-btn{\n  appearance:none;\n  border:1px solid rgba(255,255,255,0.14);\n  background:\n    linear-gradient(135deg,var(--ddc-active-a),var(--ddc-active-b));\n  color:#FFFFFF !important;\n  min-height:46px;\n  padding:12px 18px;\n  border-radius:999px;\n  font-size:12px;\n  font-weight:900;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  cursor:pointer;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:9px;\n  box-shadow:\n    0 14px 36px var(--ddc-active-shadow),\n    inset 0 1px 0 rgba(255,255,255,0.18);\n  transition:.22s ease;\n}\n\n.ddc-refresh-btn:hover{\n  transform:translateY(-2px);\n  color:#FFFFFF !important;\n  border-color:var(--ddc-active-border);\n  box-shadow:\n    0 18px 48px var(--ddc-active-shadow),\n    0 0 0 1px var(--ddc-active-soft),\n    inset 0 1px 0 rgba(255,255,255,0.20);\n}\n\n.ddc-refresh-btn:active{\n  transform:scale(.98);\n}\n\n.ddc-refresh-btn:disabled,\n.ddc-refresh-btn.is-loading{\n  opacity:.68;\n  cursor:wait;\n  transform:none !important;\n}\n\n.ddc-refresh-icon{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  font-size:15px;\n  line-height:1;\n}\n\n.ddc-refresh-btn.is-loading .ddc-refresh-icon{\n  animation:ddcRefreshSpin .8s linear infinite;\n}\n\n@keyframes ddcRefreshSpin{\n  from{transform:rotate(0deg);}\n  to{transform:rotate(360deg);}\n}\n\n\/* ======================================================\n   TABLET\n====================================================== *\/\n\n@media (max-width:980px){\n  .ddc-results-hero{\n    padding:76px 16px 38px;\n  }\n\n  .ddc-results-top{\n    align-items:flex-start;\n    flex-direction:column;\n  }\n\n  .ddc-results-meta{\n    justify-content:flex-start;\n  }\n\n  .ddc-vdm-board{\n    min-width:1120px;\n  }\n\n  .ddc-results-table{\n    width:1230px !important;\n    min-width:1138px !important;\n  }\n}\n\n\/* ======================================================\n   MOBIL\n====================================================== *\/\n\n@media (max-width:640px){\n  .ddc-results-page{\n    overflow-x:hidden;\n  }\n\n  .ddc-results-page__overlay{\n    top:18px;\n    width:min(100% - 16px, 760px);\n  }\n\n  .ddc-results-page__overlaybox{\n    padding:30px 18px;\n    border-radius:22px;\n  }\n\n  .ddc-results-page__lockicon{\n    width:52px;\n    height:52px;\n    font-size:24px;\n  }\n\n  .ddc-results-page__countdown{\n    grid-template-columns:repeat(2, 1fr);\n  }\n\n  .ddc-results-hero{\n    padding:58px 12px 28px !important;\n  }\n\n  .ddc-results-hero__inner{\n    width:calc(100% - 10px) !important;\n  }\n\n  .ddc-results-badge{\n    margin-bottom:14px;\n    padding:8px 12px;\n    font-size:10px;\n  }\n\n  .ddc-results-title{\n    font-size:46px !important;\n    line-height:.9 !important;\n    margin-bottom:12px !important;\n  }\n\n  .ddc-results-lead{\n    font-size:14px !important;\n    line-height:1.65 !important;\n    max-width:34ch;\n  }\n\n  .ddc-results-hero-actions{\n    width:100%;\n    max-width:380px;\n    display:grid !important;\n    grid-template-columns:1fr 1fr;\n    gap:10px;\n    margin:24px auto 0 !important;\n  }\n\n  .ddc-top-chip{\n    width:100%;\n    min-height:48px;\n    justify-content:center;\n    padding:12px 14px;\n    font-size:13px;\n    border-radius:20px;\n    background:rgba(255,255,255,0.065);\n  }\n\n  .ddc-top-chip:first-child{\n    grid-column:1 \/ -1;\n  }\n\n  .ddc-main-tabs,\n  .ddc-results-tabs,\n  .ddc-bracket-tabs{\n    width:calc(100% - 24px) !important;\n    display:grid !important;\n    grid-template-columns:1fr 1fr !important;\n    gap:10px !important;\n    padding:6px !important;\n    border-radius:26px;\n    background:rgba(255,255,255,0.045);\n    border:1px solid rgba(255,255,255,0.10);\n    box-shadow:0 16px 44px rgba(0,0,0,0.22);\n  }\n\n  .ddc-main-tabs{\n    margin:26px auto 16px !important;\n  }\n\n  .ddc-view-selector{\n    width:calc(100% - 24px) !important;\n    margin:26px auto 84px !important;\n  }\n\n  .ddc-view-selector__label{\n    margin-bottom:12px !important;\n    font-size:14px !important;\n    letter-spacing:.12em !important;\n  }\n\n  .ddc-view-selector .ddc-main-tabs{\n    width:100% !important;\n    margin:0 auto !important;\n  }\n\n  .ddc-view-selector .ddc-main-tab{\n    min-height:60px !important;\n    padding:15px 10px !important;\n    font-size:14px !important;\n  }\n\n  .ddc-results-tabs{\n    margin:0 auto 30px !important;\n  }\n\n  .ddc-bracket-tabs{\n    margin:0 auto 26px !important;\n  }\n\n  .ddc-bracket-picker{\n    width:calc(100% - 24px) !important;\n    margin:0 auto 26px !important;\n    gap:10px !important;\n  }\n\n  .ddc-bracket-step{\n    padding:10px !important;\n    border-radius:24px !important;\n  }\n\n  .ddc-bracket-picker .ddc-bracket-tabs{\n    width:100% !important;\n    margin:0 !important;\n  }\n\n  .ddc-bracket-class-tabs{\n    grid-template-columns:1fr 1fr 1fr !important;\n  }\n\n  .ddc-bracket-round-tabs{\n    grid-template-columns:1fr 1fr !important;\n  }\n\n  .ddc-bracket-empty{\n    padding:26px 16px !important;\n    border-radius:20px !important;\n  }\n\n  .ddc-bracket-empty h3{\n    font-size:34px !important;\n  }\n\n  .ddc-main-tab,\n  .ddc-results-tab,\n  .ddc-bracket-tab{\n    min-height:54px !important;\n    border-radius:20px !important;\n    padding:13px 8px !important;\n    font-size:13px !important;\n    letter-spacing:.06em !important;\n    background:rgba(255,255,255,0.045);\n    border:1px solid rgba(255,255,255,0.10);\n    box-shadow:none !important;\n  }\n\n  .ddc-main-tab.is-active,\n  .ddc-results-tab.is-active,\n  .ddc-bracket-tab.is-active{\n    background:linear-gradient(135deg,var(--ddc-active-a),var(--ddc-active-b)) !important;\n    border-color:var(--ddc-active-border) !important;\n    box-shadow:0 14px 34px var(--ddc-active-shadow) !important;\n  }\n\n  .ddc-main-tab:hover,\n  .ddc-results-tab:hover,\n  .ddc-bracket-tab:hover{\n    transform:none !important;\n  }\n\n  .ddc-results-wrap,\n  .ddc-bracket-wrap{\n    width:calc(100% - 10px) !important;\n    padding-top:8px !important;\n    padding-bottom:62px !important;\n  }\n\n  .ddc-results-top{\n    gap:14px !important;\n    margin-top:8px;\n    margin-bottom:16px !important;\n  }\n\n  .ddc-kicker{\n    font-size:16px !important;\n  }\n\n  .ddc-panel-title{\n    font-size:38px !important;\n    line-height:.95 !important;\n  }\n\n  .ddc-panel-lead{\n    font-size:13px !important;\n    line-height:1.58 !important;\n  }\n\n  .ddc-results-meta{\n    width:100%;\n    display:grid !important;\n    grid-template-columns:1fr !important;\n    gap:7px !important;\n  }\n\n  .ddc-chip{\n    width:100%;\n    justify-content:space-between;\n    padding:10px 13px;\n    font-size:12px;\n    border-radius:18px;\n  }\n\n  .ddc-results-card{\n    border-radius:20px !important;\n    overflow:hidden !important;\n  }\n\n  .ddc-results-card-head{\n    align-items:flex-start !important;\n    flex-direction:column !important;\n    padding:15px 15px 13px !important;\n    gap:6px !important;\n  }\n\n  .ddc-results-card-title{\n    font-size:32px !important;\n    line-height:.96 !important;\n  }\n\n  .ddc-results-card-sub{\n    font-size:10px !important;\n  }\n\n  .ddc-results-table-wrap{\n    width:100% !important;\n    overflow-x:auto !important;\n    overflow-y:hidden !important;\n    -webkit-overflow-scrolling:touch;\n    border-top:1px solid rgba(255,255,255,0.10);\n    background:rgba(0,0,0,0.20);\n  }\n\n  .ddc-results-table-wrap::after{\n    content:\"Swipe for at se hele skemaet ->\";\n    display:block;\n    padding:10px 12px 12px;\n    color:#A9B0BC;\n    font-size:11px;\n    font-weight:800;\n    letter-spacing:.04em;\n    text-transform:uppercase;\n    background:rgba(255,255,255,0.035);\n    border-top:1px solid rgba(255,255,255,0.08);\n  }\n\n  .ddc-results-table{\n    width:1230px !important;\n    min-width:1138px !important;\n  }\n\n  .ddc-results-table th{\n    padding:11px 6px !important;\n    font-size:9px !important;\n  }\n\n  .ddc-results-table td{\n    padding:11px 6px !important;\n    font-size:12px !important;\n  }\n\n  .ddc-pos{\n    font-size:26px !important;\n  }\n\n  .ddc-country-flag img{\n    width:26px !important;\n    height:17px !important;\n    flex:0 0 26px !important;\n  }\n\n  .ddc-country-flag span{\n    font-size:10px !important;\n  }\n\n  .ddc-class-badge{\n    min-width:56px !important;\n    padding:6px 7px !important;\n    font-size:9px !important;\n  }\n\n  .ddc-note{\n    margin-top:14px !important;\n    padding:14px 15px !important;\n    font-size:12px !important;\n    line-height:1.6 !important;\n  }\n\n  .ddc-refresh-row{\n    justify-content:center !important;\n    margin:12px 0 16px !important;\n  }\n\n  .ddc-refresh-btn{\n    width:100% !important;\n    min-height:54px !important;\n    border-radius:22px !important;\n    font-size:12px !important;\n  }\n\n}\n\/* Mobil\/tablet: Full-listen beholder alle R3-kolonner og kan scrolles *\/\n@media (max-width:980px){\n  .ddc-results-table--full{\n    width:1320px !important;\n    min-width:1320px !important;\n  }\n}\n\n\n\n\/* FIX: Full list - smallere talkolonner s\u00e5 alle kategorier er lettere at se *\/\n.ddc-results-table{\n  min-width:1164px !important;\n}\n\n.ddc-results-table th{\n  padding:12px 5px !important;\n  font-size:10px !important;\n  letter-spacing:.02em !important;\n  line-height:1.08 !important;\n}\n\n.ddc-results-table td{\n  padding:12px 5px !important;\n  font-size:13px !important;\n  line-height:1.18 !important;\n}\n\n.ddc-results-table th:nth-child(1),\n.ddc-results-table td:nth-child(1){ width:58px !important; }\n\n.ddc-results-table th:nth-child(2),\n.ddc-results-table td:nth-child(2){ width:78px !important; }\n\n.ddc-results-table th:nth-child(3),\n.ddc-results-table td:nth-child(3){\n  width:190px !important;\n  text-align:left !important;\n}\n\n.ddc-results-table th:nth-child(4),\n.ddc-results-table td:nth-child(4){ width:72px !important; }\n\n.ddc-results-table th:nth-child(5),\n.ddc-results-table td:nth-child(5){ width:58px !important; }\n\n.ddc-results-table th:nth-child(6),\n.ddc-results-table td:nth-child(6){ width:92px !important; }\n\n.ddc-results-table th:nth-child(7),\n.ddc-results-table td:nth-child(7){ width:74px !important; }\n\n.ddc-results-table th:nth-child(8),\n.ddc-results-table td:nth-child(8){ width:82px !important; }\n\n.ddc-results-table th:nth-child(9),\n.ddc-results-table td:nth-child(9){ width:92px !important; }\n\n.ddc-results-table th:nth-child(10),\n.ddc-results-table td:nth-child(10){ width:74px !important; }\n\n.ddc-results-table th:nth-child(11),\n.ddc-results-table td:nth-child(11){ width:82px !important; }\n\n.ddc-results-table th:nth-child(12),\n.ddc-results-table td:nth-child(12){ width:92px !important; }\n\n.ddc-results-table th:nth-child(13),\n.ddc-results-table td:nth-child(13){ width:74px !important; }\n\n.ddc-results-table th:nth-child(14),\n.ddc-results-table td:nth-child(14){ width:82px !important; }\n\n\n\/* FIX: Fjern teksten \"Street viser kun Round 1\" *\/\n.ddc-standing-round-note{\n  display:none !important;\n}\n\n\n\/* ======================================================\n   MOBIL FIX: Knapper skal ligne live knapper\n====================================================== *\/\n\n@media (max-width:640px){\n  .ddc-view-selector .ddc-main-tab,\n  .ddc-bracket-picker .ddc-bracket-tab{\n    background:\n      linear-gradient(180deg, rgba(255,255,255,0.085), rgba(255,255,255,0.035)) !important;\n    border:1px solid rgba(255,255,255,0.18) !important;\n    box-shadow:\n      0 10px 26px rgba(0,0,0,0.32),\n      inset 0 1px 0 rgba(255,255,255,0.10) !important;\n  }\n\n  .ddc-view-selector .ddc-main-tab.is-active,\n  .ddc-bracket-picker .ddc-bracket-tab.is-active{\n    background:linear-gradient(135deg,var(--ddc-active-a),var(--ddc-active-b)) !important;\n    border-color:var(--ddc-active-border) !important;\n    box-shadow:\n      0 14px 34px var(--ddc-active-shadow),\n      0 0 0 1px var(--ddc-active-soft),\n      inset 0 1px 0 rgba(255,255,255,0.18) !important;\n  }\n\n  .ddc-view-selector .ddc-main-tab:active,\n  .ddc-bracket-picker .ddc-bracket-tab:active{\n    transform:scale(.97) !important;\n  }\n}\n\n\/* Overs\u00e6ttelse af mobil swipe-tekst *\/\n.ddc-results-page.ddc-lang-en .ddc-results-table-wrap::after{\n  content:\"Swipe to see the full table ->\" !important;\n}\n\n\n\/* ======================================================\n   MOBIL FIX: Hero top bokse st\u00e5r p\u00e6nt ens\n====================================================== *\/\n\n@media (max-width:640px){\n  .ddc-results-hero-actions{\n    width:100%;\n    max-width:360px;\n    display:grid !important;\n    grid-template-columns:1fr !important;\n    gap:12px !important;\n    margin:26px auto 0 !important;\n  }\n\n  .ddc-top-chip,\n  .ddc-top-chip:first-child{\n    grid-column:auto !important;\n    width:100% !important;\n    min-height:58px !important;\n    justify-content:center !important;\n    text-align:center !important;\n    padding:14px 18px !important;\n    border-radius:26px !important;\n    font-size:15px !important;\n  }\n\n  .ddc-top-chip b{\n    font-size:16px !important;\n  }\n}\n\n\/* ======================================================\n   FINAL LOCK FIX - VIRKER I WORDPRESS \/ ELEMENTOR\n   Ligger nederst for at overskrive tidligere lock CSS.\n====================================================== *\/\n\n.ddc-results-page.is-locked{\n  min-height:720px !important;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__inner{\n  filter:blur(12px) !important;\n  opacity:.46 !important;\n  pointer-events:none !important;\n  user-select:none !important;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__veil{\n  opacity:1 !important;\n  pointer-events:auto !important;\n  background:\n    radial-gradient(circle at center, rgba(229,9,20,.10), transparent 52%),\n    rgba(3,5,10,.64) !important;\n  backdrop-filter:blur(6px) !important;\n  -webkit-backdrop-filter:blur(6px) !important;\n  z-index:80 !important;\n}\n\n.ddc-results-page.is-locked .ddc-results-page__overlay{\n  display:block !important;\n  pointer-events:auto !important;\n  z-index:90 !important;\n}\n\n.ddc-results-page__overlay{\n  top:50px !important;\n}\n\n.ddc-results-page__overlaybox{\n  width:min(100%, 620px) !important;\n  margin:0 auto !important;\n  padding:30px 26px 26px !important;\n  border-radius:28px !important;\n  background:\n    radial-gradient(circle at top, rgba(255,42,42,.14), transparent 54%),\n    linear-gradient(180deg, rgba(255,255,255,.105), rgba(255,255,255,.045)),\n    rgba(7,10,16,.96) !important;\n  border:1px solid rgba(255,255,255,.15) !important;\n  box-shadow:0 24px 80px rgba(0,0,0,.55) !important;\n}\n\n.ddc-results-page__lockicon{\n  width:54px !important;\n  height:54px !important;\n  margin:0 auto 14px !important;\n  border-radius:18px !important;\n  display:grid !important;\n  place-items:center !important;\n  background:rgba(255,255,255,.10) !important;\n  border:1px solid rgba(255,255,255,.16) !important;\n  box-shadow:0 14px 34px rgba(0,0,0,.28) !important;\n  font-size:25px !important;\n  overflow:visible !important;\n}\n\n.ddc-results-page__overlaytitle{\n  font-size:clamp(34px, 5vw, 54px) !important;\n  line-height:.92 !important;\n  margin:0 0 12px !important;\n}\n\n.ddc-results-page__overlaytext{\n  max-width:520px !important;\n  font-size:14px !important;\n  line-height:1.65 !important;\n  color:rgba(255,255,255,.72) !important;\n}\n\n.ddc-results-page__countdown{\n  margin-top:22px !important;\n}\n\n.ddc-results-flag-wave{\n  display:inline-block;\n  transform-origin:left center;\n  animation:ddcResultsFlagWave 2.6s ease-in-out infinite;\n  will-change:transform;\n}\n\n@keyframes ddcResultsFlagWave{\n  0%   { transform:rotate(0deg) skewY(0deg) translateY(0); }\n  15%  { transform:rotate(-8deg) skewY(-4deg) translateY(-1px); }\n  35%  { transform:rotate(6deg) skewY(3deg) translateY(1px); }\n  55%  { transform:rotate(-4deg) skewY(-2deg) translateY(-1px); }\n  75%  { transform:rotate(3deg) skewY(2deg) translateY(0); }\n  100% { transform:rotate(0deg) skewY(0deg) translateY(0); }\n}\n\n@media (max-width:640px){\n  .ddc-results-page.is-locked{\n    min-height:620px !important;\n  }\n\n  .ddc-results-page__overlay{\n    top:22px !important;\n    width:calc(100% - 18px) !important;\n  }\n\n  .ddc-results-page__overlaybox{\n    padding:22px 16px 18px !important;\n    border-radius:22px !important;\n  }\n\n  .ddc-results-page__overlaytitle{\n    font-size:34px !important;\n  }\n\n  .ddc-results-page__overlaytext{\n    font-size:12px !important;\n    line-height:1.5 !important;\n  }\n\n  .ddc-results-page__countdown{\n    grid-template-columns:repeat(2, 1fr) !important;\n    gap:8px !important;\n    margin-top:18px !important;\n  }\n\n  .ddc-countbox{\n    padding:10px 8px !important;\n    border-radius:15px !important;\n  }\n\n  .ddc-countbox b{\n    font-size:28px !important;\n  }\n}\n\n@media (prefers-reduced-motion:reduce){\n  .ddc-results-flag-wave{\n    animation:none !important;\n  }\n}\n\n\/* ======================================================\n   LOCK ICON FIX - undgaar emoji\/tegnsaet-fejl i Elementor\n====================================================== *\/\n.ddc-results-page__lockicon span{\n  font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif !important;\n  font-size:13px !important;\n  font-weight:900 !important;\n  letter-spacing:.08em !important;\n  color:#FFFFFF !important;\n  transform:none !important;\n  animation:none !important;\n}\n\n<\/style>\n\n<section class=\"ddc-results-page\" data-ddc-results-page>\n  <div class=\"ddc-results-page__veil\"><\/div>\n\n  <div class=\"ddc-results-page__overlay\" aria-hidden=\"true\">\n    <div class=\"ddc-results-page__overlaybox\">\n      <div class=\"ddc-results-page__lockicon\"><span class=\"ddc-results-flag-wave\">FLAG<\/span><\/div>\n      <div class=\"ddc-results-page__badge\">DDC Stilling<\/div>\n      <h2 class=\"ddc-results-page__overlaytitle\">Resultaterne er skjult<\/h2>\n      <p class=\"ddc-results-page__overlaytext\">\n        Resultaterne og bracketen bliver offentliggjort efter pr&aelig;mieoverr&aelig;kkelsen. Siden er klar, men indholdet er skjult, indtil de officielle resultater bliver frigivet.\n      <\/p>\n\n      <div class=\"ddc-results-page__countdown\" style=\"display:none;\">\n        <div class=\"ddc-countbox\"><b data-count-days>00<\/b><span>Dage<\/span><\/div>\n        <div class=\"ddc-countbox\"><b data-count-hours>00<\/b><span>Timer<\/span><\/div>\n        <div class=\"ddc-countbox\"><b data-count-minutes>00<\/b><span>Min<\/span><\/div>\n        <div class=\"ddc-countbox\"><b data-count-seconds>00<\/b><span>Sek<\/span><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"ddc-results-page__inner\">\n    <section class=\"ddc-results-hero\">\n      <div class=\"ddc-results-hero__inner\">\n        <div class=\"ddc-results-badge\">Danish Drift Championship<\/div>\n\n        <h1 class=\"ddc-results-title\">\n          <span>Stilling<\/span> <span>2026<\/span>\n        <\/h1>\n\n        <p class=\"ddc-results-lead\">\n          F\u00f8lg med i den officielle stilling og battle brackets fra Danish Drift Championship. Siden opdateres automatisk hvert 5. minut.\n        <\/p>\n\n        <div class=\"ddc-results-hero-actions\">\n          <span class=\"ddc-top-chip\">Auto-refresh: <b>5 min<\/b><\/span>\n          <span class=\"ddc-top-chip\">Status: <b>Live<\/b><\/span>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <div class=\"ddc-view-selector\">\n      <div class=\"ddc-view-selector__label\">V\u00e6lg visning<\/div>\n      <div class=\"ddc-main-tabs needs-choice\" data-ddc-main-tabs>\n        <button class=\"ddc-main-tab\" type=\"button\" data-ddc-main-tab=\"results\">Stilling<\/button>\n        <button class=\"ddc-main-tab\" type=\"button\" data-ddc-main-tab=\"bracket\">Bracket<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ddc-page-panel\" data-ddc-page-panel=\"results\">\n      <div class=\"ddc-bracket-picker\" data-ddc-standing-picker>\n        <div class=\"ddc-bracket-step\">\n          <div class=\"ddc-bracket-step-label\">1. V\u00e6lg klasse<\/div>\n          <div class=\"ddc-bracket-tabs ddc-bracket-class-tabs\">\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-class=\"pro\">Pro<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-class=\"pro2\">Pro2<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-class=\"street\">Street<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"ddc-bracket-step is-disabled\" data-ddc-standing-round-step>\n          <div class=\"ddc-bracket-step-label\">2. V\u00e6lg round<\/div>\n          <div class=\"ddc-bracket-tabs ddc-bracket-round-tabs\">\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-round=\"r1\">Round 1<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-round=\"r2\">Round 2<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-round=\"r3\">Round 3<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-standing-round=\"full\">Full<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ddc-results-wrap\">\n        <div class=\"ddc-results-loading\" data-ddc-loading>\n          <h3>Indl\u00e6ser stilling<\/h3>\n          <p>Stillingen indl\u00e6ses. Vent et \u00f8jeblik.<\/p>\n        <\/div>\n\n        <div data-ddc-content><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"ddc-page-panel\" data-ddc-page-panel=\"bracket\">\n      <div class=\"ddc-bracket-picker\" data-ddc-bracket-picker>\n        <div class=\"ddc-bracket-step\">\n          <div class=\"ddc-bracket-step-label\">1. V\u00e6lg klasse<\/div>\n          <div class=\"ddc-bracket-tabs ddc-bracket-class-tabs\">\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-bracket-class=\"pro\">Pro<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-bracket-class=\"pro2\">Pro2<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-bracket-class=\"street\">Street<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"ddc-bracket-step is-disabled\" data-ddc-round-step>\n          <div class=\"ddc-bracket-step-label\">2. V\u00e6lg round<\/div>\n          <div class=\"ddc-bracket-tabs ddc-bracket-round-tabs\">\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-bracket-round=\"r1\">Round 1<\/button>\n            <button class=\"ddc-bracket-tab\" type=\"button\" data-ddc-bracket-round=\"r2\">Round 2<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ddc-bracket-wrap\">\n        <div data-ddc-bracket-loading class=\"ddc-bracket-loading\">\n          <h3>Indl\u00e6ser bracket<\/h3>\n          <p>Battle-data indl\u00e6ses. Vent et \u00f8jeblik.<\/p>\n        <\/div>\n\n        <div data-ddc-bracket-content><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n(function(){\n  const GOOGLE_SHEET_CSV_URL = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vS1NkcRvPu4sgF1O8cmE-cnTXMLex285F4hxJn6DyYEczChBwziHT8HGhu0-vSfK4s_GbgSmP069zd1\/pub?gid=1726108083&single=true&output=csv\";\n  const AUTO_REFRESH_MINUTES = 5;\n\n  const BRACKET_SOURCES = {\n    pro:{\n      label:\"PRO\",\n      rounds:{\n        r1:{\n          label:\"Round 1\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vSs-g7mteKTuJV5MPEl6Sjew7JNLpw7uBZQBSJHSzk6z9Rct0FvsoicF8V4V1I0iYTls2TX3tqnQQfk\/pub?gid=0&single=true&output=csv\"\n        },\n        r2:{\n          label:\"Round 2\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vSiYSwVOC2-quOcblOvz2KopJSJGkkYMzriYtYxzFXPV9BmihQDvDDQux0Ac-eoRFYUukjEtHXKu1B2\/pub?gid=0&single=true&output=csv\"\n        }\n      }\n    },\n    pro2:{\n      label:\"PRO2\",\n      rounds:{\n        r1:{\n          label:\"Round 1\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vRF19skUBotm_ONRksPFmGsjaxCz2XN0sKT_Z5_jfIGbgYHfPUgLhR8l8CegrAFYmD9Zru06Nype70L\/pub?gid=0&single=true&output=csv\"\n        },\n        r2:{\n          label:\"Round 2\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTsSET6A_Ml5qVTqTT9exmAdoWrYLO-dXLSq1_FXxleHNL1FjKboC8yrjL7ZrWnlOcYQmGREFc7Z9Zi\/pub?gid=0&single=true&output=csv\"\n        }\n      }\n    },\n    street:{\n      label:\"STREET\",\n      rounds:{\n        r1:{\n          label:\"Round 1\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vShw5fSMcyNDUMHfqNJTR9oRtwwzdd6YvaM6QdbU9P1z56lXNVFzPlOHgN4DD9iKVl9j-j3XRuWuZnF\/pub?gid=0&single=true&output=csv\"\n        },\n        r2:{\n          label:\"Round 2\",\n          csv:\"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vR-_ZWL4a5FG5bvcwtiiab7gNZBkH6PjdtoG4U3zH8fr1dPOLiLnkop0EZrryHWddWuEQX51ym-mHHL\/pub?gid=0&single=true&output=csv\"\n        }\n      }\n    }\n  };\n\n  function getActiveBracketSource(){\n    if(!activeBracketClass || !activeBracketRound){\n      return null;\n    }\n\n    const classData = BRACKET_SOURCES[activeBracketClass];\n    if(!classData || !classData.rounds){\n      return null;\n    }\n\n    const roundData = classData.rounds[activeBracketRound];\n    if(!roundData){\n      return null;\n    }\n\n    return {\n      classKey:activeBracketClass,\n      roundKey:activeBracketRound,\n      classLabel:classData.label,\n      roundLabel:roundData.label,\n      label:classData.label + \" \" + roundData.label,\n      csv:roundData.csv\n    };\n  }\n\n  const DRIVER_PROFILE_BASE_URL = \"https:\/\/danishdrift.dk\/koerere\/\";\n  const DRIVER_PROFILE_OVERRIDES = {};\n\n  const root = document.querySelector(\"[data-ddc-results-page]\");\n  if(!root) return;\n\n  const contentEl = root.querySelector(\"[data-ddc-content]\");\n  const loadingEl = root.querySelector(\"[data-ddc-loading]\");\n  const bracketLoadingEl = root.querySelector(\"[data-ddc-bracket-loading]\");\n  const bracketContentEl = root.querySelector(\"[data-ddc-bracket-content]\");\n  const mainTabsWrapEl = root.querySelector(\"[data-ddc-main-tabs]\");\n\n  let resultsHasLoadedOnce = false;\n  let latestStandingResults = [];\n\n  const GROUPS = [\n    {key:\"pro\", label:\"Pro\", title:\"Pro\"},\n    {key:\"pro2\", label:\"Pro2\", title:\"Pro2\"},\n    {key:\"street\", label:\"Street\", title:\"Street\"}\n  ];\n\n  let activeStandingClass = \"\";\n  let activeStandingRound = \"\";\n  let activeBracketClass = \"\";\n  let activeBracketRound = \"\";\n  let isRefreshingResults = false;\n  let isRefreshingBracket = false;\n  let bracketHasLoadedOnce = false;\n\n  function normalize(str){\n    return String(str || \"\")\n      .toLowerCase()\n      .trim()\n      .replace(\/\\uFEFF\/g,\"\")\n      .replace(\/\\s+\/g,\" \")\n      .replace(\/\u00f8\/g,\"oe\")\n      .replace(\/\u00e5\/g,\"aa\")\n      .replace(\/\u00e6\/g,\"ae\")\n      .replace(\/\\.\/g,\"\")\n      .replace(\/-\/g,\" \");\n  }\n\n  function cleanText(value){\n    return String(value || \"\")\n      .replace(\/\\uFEFF\/g,\"\")\n      .replace(\/\\s+\/g,\" \")\n      .trim();\n  }\n\n  function escapeHtml(str){\n    return String(str || \"\")\n      .replace(\/&\/g,\"&amp;\")\n      .replace(\/<\/g,\"&lt;\")\n      .replace(\/>\/g,\"&gt;\")\n      .replace(\/\"\/g,\"&quot;\")\n      .replace(\/'\/g,\"&#039;\");\n  }\n\n\n  \/* ======================================================\n     DDC TRANSLATION LAYER - DA \/ EN\n     Skifter automatisk til engelsk p\u00e5 \/en\/, html lang=\"en\",\n     Polylang\/WPML body classes eller WordPress locale.\n  ====================================================== *\/\n\n  function ddcGetLanguage(){\n    const htmlLang = normalize(document.documentElement.getAttribute(\"lang\") || \"\");\n    const bodyClass = normalize(document.body ? document.body.className : \"\");\n    const path = normalize(window.location.pathname || \"\");\n\n    if(path === \"en\" || path.startsWith(\"en\/\") || path.includes(\"\/en\/\")) return \"en\";\n    if(htmlLang.startsWith(\"en\")) return \"en\";\n    if(bodyClass.includes(\"lang en\") || bodyClass.includes(\"locale en\") || bodyClass.includes(\"wpml ls current language en\")) return \"en\";\n    if(typeof ICL_LANGUAGE_CODE !== \"undefined\" && String(ICL_LANGUAGE_CODE).toLowerCase().startsWith(\"en\")) return \"en\";\n    if(typeof pll_current_language === \"function\"){\n      try{\n        if(String(pll_current_language()).toLowerCase().startsWith(\"en\")) return \"en\";\n      }catch(e){}\n    }\n\n    return \"da\";\n  }\n\n  const DDC_LANG = ddcGetLanguage();\n  const DDC_IS_EN = DDC_LANG === \"en\";\n\n  if(DDC_IS_EN){\n    root.classList.add(\"ddc-lang-en\");\n  }else{\n    root.classList.add(\"ddc-lang-da\");\n  }\n\n  const DDC_EN_TEXT = {\n    \"DDC Stilling\":\"DDC Standings\",\n    \"Stillingen er ikke \u00e5ben endnu\":\"The standings are not open yet\",\n    \"Stillingen bliver offentliggjort, n\u00e5r eventet g\u00e5r i gang. N\u00e5r vi \u00e5bner for stillingen, vil alt indhold nedenfor blive vist automatisk.\":\"The standings will be published when the event starts. When the standings open, all content below will be shown automatically.\",\n    \"Resultaterne er skjult\":\"Results are hidden\",\n    \"Resultaterne og bracketen bliver offentliggjort efter pr\\u00e6mieoverr\\u00e6kkelsen. Siden er klar, men indholdet er skjult, indtil de officielle resultater bliver frigivet.\":\"The results and bracket will be published after the prize ceremony. The page is ready, but the content is hidden until the official results are released.\",\n    \"Dage\":\"Days\",\n    \"Timer\":\"Hours\",\n    \"Min\":\"Min\",\n    \"Sek\":\"Sec\",\n    \"Danish Drift Championship\":\"Danish Drift Championship\",\n    \"Stilling\":\"Standings\",\n    \"F\u00f8lg med i den officielle stilling og battle brackets fra Danish Drift Championship. Siden opdateres automatisk hvert 5. minut.\":\"Follow the official standings and battle brackets from Danish Drift Championship. The page updates automatically every 5 minutes.\",\n    \"Auto-refresh:\":\"Auto-refresh:\",\n    \"Status:\":\"Status:\",\n    \"Live\":\"Live\",\n    \"V\u00e6lg visning\":\"Choose view\",\n    \"Bracket\":\"Bracket\",\n    \"1. V\u00e6lg klasse\":\"1. Choose class\",\n    \"2. V\u00e6lg round\":\"2. Choose round\",\n    \"Indl\u00e6ser stilling\":\"Loading standings\",\n    \"Stillingen indl\u00e6ses. Vent et \u00f8jeblik.\":\"The standings are loading. Please wait a moment.\",\n    \"Indl\u00e6ser bracket\":\"Loading bracket\",\n    \"Battle-data indl\u00e6ses. Vent et \u00f8jeblik.\":\"Battle data is loading. Please wait a moment.\",\n    \"V\u00e6lg stilling\":\"Choose standings\",\n    \"Start med at v\u00e6lge en klasse. Derefter v\u00e6lger du Round 1, Round 2, Round 3 eller Full.\":\"Start by choosing a class. Then choose Round 1, Round 2, Round 3 or Full.\",\n    \"V\u00e6lg round\":\"Choose round\",\n    \"V\u00e6lg bracket\":\"Choose bracket\",\n    \"Start med at v\u00e6lge en klasse. Derefter v\u00e6lger du Round 1 eller Round 2.\":\"Start by choosing a class. Then choose Round 1 or Round 2.\",\n    \"Ingen stilling fundet\":\"No standings found\",\n    \"Kunne ikke indl\u00e6se stilling\":\"Could not load standings\",\n    \"Kunne ikke indl\u00e6se bracket\":\"Could not load bracket\",\n    \"Tjek at data-linket peger p\u00e5 den rigtige fane.\":\"Check that the data link points to the correct sheet tab.\",\n    \"Der blev ikke fundet nogen stilling. Tjek at Class-kolonnen indeholder Pro, Pro2 eller Street.\":\"No standings were found. Check that the Class column contains Pro, Pro2 or Street.\",\n    \"Kolonnen Class\/Klasse mangler.\":\"The Class\/Klasse column is missing.\",\n    \"Kolonnen Name\/K\u00f8rer\/Navn mangler.\":\"The Name\/K\u00f8rer\/Navn column is missing.\",\n    \"Kunne ikke finde header-r\u00e6kken. Brug fx: Pos., Class, Country, Points, Name, Start nr.\":\"Could not find the header row. Use for example: Pos., Class, Country, Points, Name, Start nr.\",\n    \"Data blev hentet, men indholdet er tomt.\":\"Data was fetched, but the content is empty.\",\n    \"Stilling\":\"Standings\",\n    \"Battle Bracket\":\"Battle Bracket\",\n    \"Placering\":\"Position\",\n    \"Start nr.\":\"Start no.\",\n    \"Start nr\":\"Start no.\",\n    \"K\u00f8rer\":\"Driver\",\n    \"Land\":\"Country\",\n    \"Point\":\"Points\",\n    \"Klasse:\":\"Class:\",\n    \"Round:\":\"Round:\",\n    \"Antal:\":\"Count:\",\n    \"Sidst opdateret:\":\"Last updated:\",\n    \"Bracket:\":\"Bracket:\",\n    \"Bem\u00e6rk:\":\"Note:\",\n    \"Full list\":\"Full list\",\n    \"Play Off\":\"Play Off\",\n    \"3. plads\":\"3rd place\",\n    \"Winner\":\"Winner\",\n    \"Final\":\"Final\",\n    \"Guld markerer k\u00f8rere der g\u00e5r videre\":\"Gold marks drivers who advance\",\n    \"Krydset\/tonet viser eliminerede k\u00f8rere\":\"Crossed\/faded boxes show eliminated drivers\",\n    \"Danmark\":\"Denmark\",\n    \"Holland\":\"Netherlands\",\n    \"Opdater stilling\":\"Refresh standings\",\n    \"Opdaterer stilling\":\"Refreshing standings\",\n    \"Opdater bracket\":\"Refresh bracket\",\n    \"Opdaterer bracket\":\"Refreshing bracket\"\n  };\n\n  function ddcTranslateString(value){\n    if(!DDC_IS_EN) return value;\n\n    let raw = String(value || \"\");\n    let lead = raw.match(\/^\\s*\/)[0];\n    let trail = raw.match(\/\\s*$\/)[0];\n    let text = raw.trim();\n\n    if(!text) return raw;\n\n    if(DDC_EN_TEXT[text]){\n      return lead + DDC_EN_TEXT[text] + trail;\n    }\n\n    text = text\n      .replace(\/^Stilling - (.+)$\/i, \"Standings - $1\")\n      .replace(\/^Stilling \\\/ Battle Bracket$\/i, \"Standings \/ Battle Bracket\")\n      .replace(\/^Du har valgt (.+)\\. Street har kun \u00e9n runde, s\u00e5 v\u00e6lg Round 1 eller Full\\.$\/i, \"You have selected $1. Street only has one round, so choose Round 1 or Full.\")\n      .replace(\/^Du har valgt (.+)\\. V\u00e6lg nu Round 1, Round 2, Round 3 eller Full\\.$\/i, \"You have selected $1. Now choose Round 1, Round 2, Round 3 or Full.\")\n      .replace(\/^Du har valgt (.+)\\. V\u00e6lg nu Round 1 eller Round 2 for at \u00e5bne bracketen\\.$\/i, \"You have selected $1. Now choose Round 1 or Round 2 to open the bracket.\")\n      .replace(\/^Der blev ikke fundet stilling for (.+)\\.$\/i, \"No standings were found for $1.\")\n      .replace(\/^Full list for (.+) (Round \\d|Full)\\. Listen opdateres automatisk hvert (\\d+)\\. minut\\.$\/i, \"Full list for $1 $2. The list updates automatically every $3 minutes.\")\n      .replace(\/^Battle bracket for (.+)\\. Bracketen opdateres automatisk hvert (\\d+)\\. minut\\.$\/i, \"Battle bracket for $1. The bracket updates automatically every $2 minutes.\")\n      .replace(\/^Stillingen opdateres automatisk hvert (\\d+)\\. minut\\.$\/i, \"The standings update automatically every $1 minutes.\")\n      .replace(\/^Bracketen opdateres automatisk hvert (\\d+)\\. minut\\.$\/i, \"The bracket updates automatically every $1 minutes.\")\n      .replace(\/^Der er ikke sat et data-link ind til (.+) endnu\\.$\/i, \"No data link has been added for $1 yet.\")\n      .replace(\/^Kunne ikke hente data\\. HTTP (\\d+)$\/i, \"Could not fetch data. HTTP $1\")\n      .replace(\/^Kunne ikke finde bracket-data\\..*$\/i, \"Could not find bracket data. The code can read both the wide sheet format and the old battle format.\")\n      .replace(\/^Kolonnen Battle nummer mangler\\.$\/i, \"The Battle number column is missing.\")\n      .replace(\/^Kolonnen Name\\\/Navn mangler\\.$\/i, \"The Name\/Navn column is missing.\")\n      .replace(\/^Kolonnen Number\\\/Nummer mangler\\.$\/i, \"The Number\/Nummer column is missing.\");\n\n    return lead + text + trail;\n  }\n\n  function ddcTranslateAttributes(scope){\n    if(!DDC_IS_EN) return;\n\n    const base = scope || root;\n\n    base.querySelectorAll(\"[aria-label]\").forEach(el => {\n      const value = el.getAttribute(\"aria-label\") || \"\";\n      el.setAttribute(\"aria-label\", value.replace(\/^Se k\u00f8reprofil for \/i, \"View driver profile for \"));\n    });\n\n    base.querySelectorAll(\"[title]\").forEach(el => {\n      el.setAttribute(\"title\", ddcTranslateString(el.getAttribute(\"title\") || \"\"));\n    });\n\n    base.querySelectorAll(\"[alt]\").forEach(el => {\n      const alt = el.getAttribute(\"alt\") || \"\";\n      el.setAttribute(\"alt\", alt.replace(\/^Danmark flag$\/i, \"Denmark flag\").replace(\/^Holland flag$\/i, \"Netherlands flag\"));\n    });\n  }\n\n  function ddcTranslateVisibleText(scope){\n    if(!DDC_IS_EN) return;\n\n    const base = scope || root;\n\n    const walker = document.createTreeWalker(\n      base,\n      NodeFilter.SHOW_TEXT,\n      {\n        acceptNode:function(node){\n          if(!node.nodeValue || !node.nodeValue.trim()) return NodeFilter.FILTER_REJECT;\n          const parent = node.parentElement;\n          if(!parent) return NodeFilter.FILTER_REJECT;\n          const tag = parent.tagName ? parent.tagName.toLowerCase() : \"\";\n          if(tag === \"script\" || tag === \"style\" || tag === \"noscript\") return NodeFilter.FILTER_REJECT;\n          return NodeFilter.FILTER_ACCEPT;\n        }\n      }\n    );\n\n    const nodes = [];\n    while(walker.nextNode()){\n      nodes.push(walker.currentNode);\n    }\n\n    nodes.forEach(node => {\n      const translated = ddcTranslateString(node.nodeValue);\n      if(translated !== node.nodeValue){\n        node.nodeValue = translated;\n      }\n    });\n\n    ddcTranslateAttributes(base);\n  }\n\n  function ddcObserveTranslations(){\n    if(!DDC_IS_EN) return;\n\n    let scheduled = false;\n\n    const observer = new MutationObserver(function(){\n      if(scheduled) return;\n\n      scheduled = true;\n\n      window.requestAnimationFrame(function(){\n        scheduled = false;\n        ddcTranslateVisibleText(root);\n      });\n    });\n\n    observer.observe(root, {\n      childList:true,\n      subtree:true,\n      characterData:true\n    });\n\n    ddcTranslateVisibleText(root);\n  }\n\n  function parseNumberLike(value){\n    const raw = cleanText(value).replace(\",\", \".\");\n    const num = parseFloat(raw.replace(\/[^\\d.-]\/g, \"\"));\n    return Number.isFinite(num) ? num : null;\n  }\n\n  function detectDelimiter(line){\n    const candidates = [\",\",\";\",\"\\t\"];\n    let best = \",\";\n    let bestCount = -1;\n\n    candidates.forEach(delim => {\n      const count = line.split(delim).length;\n      if(count > bestCount){\n        bestCount = count;\n        best = delim;\n      }\n    });\n\n    return best;\n  }\n\n  function parseCsvLine(line, delimiter){\n    const result = [];\n    let current = \"\";\n    let inQuotes = false;\n\n    for(let i = 0; i < line.length; i++){\n      const char = line[i];\n      const next = line[i + 1];\n\n      if(char === '\"' && inQuotes && next === '\"'){\n        current += '\"';\n        i++;\n        continue;\n      }\n\n      if(char === '\"'){\n        inQuotes = !inQuotes;\n        continue;\n      }\n\n      if(char === delimiter && !inQuotes){\n        result.push(current);\n        current = \"\";\n        continue;\n      }\n\n      current += char;\n    }\n\n    result.push(current);\n    return result;\n  }\n\n  function parseCsv(csvText){\n    const text = String(csvText || \"\").replace(\/\\r\/g, \"\").trim();\n\n    if(!text){\n      return [];\n    }\n\n    const lines = text.split(\"\\n\").filter(line => line.trim() !== \"\");\n    const delimiter = detectDelimiter(lines[0] || \"\");\n\n    return lines.map(line => parseCsvLine(line, delimiter));\n  }\n\n  function findColumn(headers, possibleNames){\n    const normalizedHeaders = headers.map(h => normalize(h));\n\n    for(const name of possibleNames){\n      const n = normalize(name);\n      const exactIndex = normalizedHeaders.findIndex(h => h === n);\n\n      if(exactIndex !== -1){\n        return exactIndex;\n      }\n    }\n\n    for(const name of possibleNames){\n      const n = normalize(name);\n\n      for(let i = 0; i < normalizedHeaders.length; i++){\n        const h = normalizedHeaders[i];\n\n        if(h.includes(n)){\n          return i;\n        }\n      }\n    }\n\n    return -1;\n  }\n\n\n  function findExactColumn(headers, possibleNames){\n    const normalizedHeaders = headers.map(h => normalize(h));\n\n    for(const name of possibleNames){\n      const n = normalize(name);\n      const index = normalizedHeaders.findIndex(h => h === n);\n\n      if(index !== -1){\n        return index;\n      }\n    }\n\n    return -1;\n  }\n\n  async function fetchCsv(url){\n    const finalUrl = url + (url.includes(\"?\") ? \"&\" : \"?\") + \"_ts=\" + Date.now();\n\n    const res = await fetch(finalUrl, {\n      method:\"GET\",\n      cache:\"no-store\"\n    });\n\n    if(!res.ok){\n      throw new Error(\"Kunne ikke hente data. HTTP \" + res.status);\n    }\n\n    const text = await res.text();\n\n    if(!String(text || \"\").trim()){\n      throw new Error(\"Data blev hentet, men indholdet er tomt.\");\n    }\n\n    return text;\n  }\n\n  function countryFlag(country){\n    const cleanCountry = cleanText(country);\n    const normalizedCountry = normalize(cleanCountry);\n\n    const flags = {\n      danmark:{\n        label:\"Danmark\",\n        code:\"DK\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Danmark.jpg\"\n      },\n      denmark:{\n        label:\"Danmark\",\n        code:\"DK\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Danmark.jpg\"\n      },\n      dk:{\n        label:\"Danmark\",\n        code:\"DK\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Danmark.jpg\"\n      },\n      holland:{\n        label:\"Holland\",\n        code:\"NL\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Holland-scaled.png\"\n      },\n      nederland:{\n        label:\"Holland\",\n        code:\"NL\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Holland-scaled.png\"\n      },\n      netherlands:{\n        label:\"Holland\",\n        code:\"NL\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Holland-scaled.png\"\n      },\n      nl:{\n        label:\"Holland\",\n        code:\"NL\",\n        img:\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/Holland-scaled.png\"\n      }\n    };\n\n    const flag = flags[normalizedCountry];\n\n    if(!flag){\n      return escapeHtml(cleanCountry || \"-\");\n    }\n\n    return `\n      <span class=\"ddc-country-flag\" title=\"${escapeHtml(flag.label)}\">\n        <img decoding=\"async\" src=\"${escapeHtml(flag.img)}\" alt=\"${escapeHtml(flag.label)} flag\" loading=\"lazy\">\n        <span>${escapeHtml(flag.code)}<\/span>\n      <\/span>\n    `;\n  }\n\n  function driverSlug(name){\n    return String(name || \"\")\n      .toLowerCase()\n      .trim()\n      .normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g,\"\")\n      .replace(\/\u00e6\/g,\"ae\")\n      .replace(\/\u00f8\/g,\"oe\")\n      .replace(\/\u00e5\/g,\"aa\")\n      .replace(\/[^a-z0-9]+\/g,\"-\")\n      .replace(\/^-+|-+$\/g,\"\");\n  }\n\n  function cleanDriverNumber(number){\n    return String(number || \"\")\n      .replace(\/[^\\d]\/g,\"\")\n      .replace(\/^0+\/, \"\");\n  }\n\n  function driverProfileUrl(name, number){\n    const cleanNumber = cleanDriverNumber(number);\n\n    if(cleanNumber && DRIVER_PROFILE_OVERRIDES[cleanNumber]){\n      return DRIVER_PROFILE_OVERRIDES[cleanNumber];\n    }\n\n    const slug = driverSlug(name);\n\n    return slug ? DRIVER_PROFILE_BASE_URL + slug + \"\/\" : \"\";\n  }\n\n  function renderDriverName(name, number){\n    const cleanName = cleanText(name);\n    const url = driverProfileUrl(cleanName, number);\n\n    if(!url){\n      return escapeHtml(cleanName);\n    }\n\n    return `\n      <a class=\"ddc-driver-profile-link\" href=\"${escapeHtml(url)}\" aria-label=\"Se k\u00f8reprofil for ${escapeHtml(cleanName)}\">\n        ${escapeHtml(cleanName)}\n      <\/a>\n    `;\n  }\n\n  function renderBracketDriverName(player){\n    const cleanName = cleanText(player && player.name ? player.name : \"\");\n\n    if(!cleanName || player.isTbd || cleanName.toLowerCase() === \"tbd\"){\n      return escapeHtml(cleanName || \"TBD\");\n    }\n\n    const url = driverProfileUrl(cleanName, player.number);\n\n    if(!url){\n      return escapeHtml(cleanName);\n    }\n\n    return `\n      <a class=\"ddc-vdm-name-link\" href=\"${escapeHtml(url)}\" aria-label=\"Se k\u00f8reprofil for ${escapeHtml(cleanName)}\">\n        ${escapeHtml(cleanName)}\n      <\/a>\n    `;\n  }\n\n  function classKey(cls){\n    const n = normalize(cls);\n\n    if(n.includes(\"rookie\")) return \"rookie\";\n    if(n.includes(\"street\")) return \"street\";\n    if(n.includes(\"pro 2\") || n.includes(\"pro2\")) return \"pro2\";\n    if(n.includes(\"pro\")) return \"pro\";\n\n    return \"\";\n  }\n\n  function displayClass(cls){\n    const key = classKey(cls);\n\n    if(key === \"pro\") return \"Pro\";\n    if(key === \"pro2\") return \"Pro2\";\n    if(key === \"street\") return \"Street\";\n    if(key === \"rookie\") return \"Rookie\";\n\n    return cleanText(cls);\n  }\n\n  function findResultsHeaderIndex(rows){\n    for(let i = 0; i < Math.min(rows.length, 30); i++){\n      const rowText = rows[i].map(normalize).join(\" | \");\n\n      const hasClass = rowText.includes(\"klasse\") || rowText.includes(\"class\");\n      const hasDriver = rowText.includes(\"koerer\") || rowText.includes(\"korer\") || rowText.includes(\"driver\") || rowText.includes(\"navn\") || rowText.includes(\"name\");\n      const hasPoints = rowText.includes(\"point\") || rowText.includes(\"points\");\n      const hasPosition = rowText.includes(\"placering\") || rowText.includes(\"position\") || rowText.includes(\"pos\") || rowText.includes(\"rank\");\n\n      if(hasClass && (hasDriver || hasPoints || hasPosition)){\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  function parseResultRows(rows){\n    const headerIndex = findResultsHeaderIndex(rows);\n\n    if(headerIndex === -1){\n      throw new Error(\"Kunne ikke finde header-r\u00e6kken. Brug fx: Pos., Class, Country, Points, Name, Start nr.\");\n    }\n\n    const headers = rows[headerIndex];\n\n    const col = {\n      className: findColumn(headers, [\"Klasse\", \"Class\"]),\n      position: findColumn(headers, [\"Placering\", \"Position\", \"Pos\", \"Rank\"]),\n      country: findColumn(headers, [\"Country\", \"Land\"]),\n      points: findExactColumn(headers, [\"Point\", \"Points\", \"Pts\"]),\n      driver: findColumn(headers, [\"K\u00f8rer\", \"Koerer\", \"Korer\", \"Driver\", \"Navn\", \"Name\"]),\n      number: findColumn(headers, [\"Nummer\", \"Nr\", \"No\", \"Number\", \"K\u00f8rer nr\", \"Korer nr\", \"Car number\", \"Start nr\", \"Startnr\"]),\n      brand: findColumn(headers, [\"Brand\", \"Team\", \"Hold\"]),\n      qualiScore: findColumn(headers, [\"1. Quali Score\", \"1 Quali Score\", \"Quali Score\"]),\n      r1Quali: findColumn(headers, [\"R1. Quali\", \"R1 Quali\"]),\n      r1Top32: findColumn(headers, [\"R1. Top 32\", \"R1 Top 32\", \"Top 32\"]),\n      r2QualiScore: findColumn(headers, [\"R2. Quali Score\", \"R2 Quali Score\"]),\n      r2Quali: findColumn(headers, [\"R2. Quali\", \"R2 Quali\"]),\n      r2Top16: findColumn(headers, [\"R2. Top 16\", \"R2 Top 16\", \"Top 16\"]),\n      r3QualiScore: findColumn(headers, [\"R3. Quali Score\", \"R3 Quali Score\"]),\n      r3Quali: findColumn(headers, [\"R3. Quali\", \"R3 Quali\"]),\n      r3Top16: findColumn(headers, [\"R3. Top 16\", \"R3 Top 16\"])\n    };\n\n    if(col.className === -1){\n      throw new Error(\"Kolonnen Class\/Klasse mangler.\");\n    }\n\n    if(col.driver === -1){\n      throw new Error(\"Kolonnen Name\/K\u00f8rer\/Navn mangler.\");\n    }\n\n    const results = [];\n\n    for(let r = headerIndex + 1; r < rows.length; r++){\n      const row = rows[r];\n\n      const className = displayClass(row[col.className]);\n      const key = classKey(className);\n\n      if(!key) continue;\n\n      const driver = col.driver >= 0 ? cleanText(row[col.driver]) : \"\";\n      if(!driver) continue;\n\n      const positionRaw = col.position >= 0 ? cleanText(row[col.position]) : \"\";\n      const pointsRaw = col.points >= 0 ? cleanText(row[col.points]) : \"\";\n\n      results.push({\n        className:className,\n        key:key,\n        position:positionRaw,\n        positionNum:parseNumberLike(positionRaw),\n        country:col.country >= 0 ? cleanText(row[col.country]) : \"\",\n        points:pointsRaw,\n        pointsNum:parseNumberLike(pointsRaw),\n        driver:driver,\n        number:col.number >= 0 ? cleanText(row[col.number]) : \"\",\n        brand:col.brand >= 0 ? cleanText(row[col.brand]) : \"\",\n        qualiScore:col.qualiScore >= 0 ? cleanText(row[col.qualiScore]) : \"\",\n        r1Quali:col.r1Quali >= 0 ? cleanText(row[col.r1Quali]) : \"\",\n        r1Top32:col.r1Top32 >= 0 ? cleanText(row[col.r1Top32]) : \"\",\n        r2QualiScore:col.r2QualiScore >= 0 ? cleanText(row[col.r2QualiScore]) : \"\",\n        r2Quali:col.r2Quali >= 0 ? cleanText(row[col.r2Quali]) : \"\",\n        r2Top16:col.r2Top16 >= 0 ? cleanText(row[col.r2Top16]) : \"\",\n        r3QualiScore:col.r3QualiScore >= 0 ? cleanText(row[col.r3QualiScore]) : \"\",\n        r3Quali:col.r3Quali >= 0 ? cleanText(row[col.r3Quali]) : \"\",\n        r3Top16:col.r3Top16 >= 0 ? cleanText(row[col.r3Top16]) : \"\"\n      });\n    }\n\n    return results;\n  }\n\n  function groupHasResults(results, group){\n    return results.some(item => item.key === group.key);\n  }\n\n  function sortResults(items){\n    return [...items].sort((a,b) => {\n      if(a.positionNum !== null && b.positionNum !== null){\n        return a.positionNum - b.positionNum;\n      }\n\n      if(a.pointsNum !== null && b.pointsNum !== null){\n        return b.pointsNum - a.pointsNum;\n      }\n\n      return String(a.driver).localeCompare(String(b.driver), \"da\");\n    });\n  }\n\n  function getStandingRoundConfig(roundKey){\n    const configs = {\n      r1:{label:\"Round 1\", scoreLabel:\"Q1 Score\", scoreKey:\"qualiScore\", qualiLabel:\"R1 Quali\", qualiKey:\"r1Quali\", topLabel:\"Top 32\", topKey:\"r1Top32\"},\n      r2:{label:\"Round 2\", scoreLabel:\"Q2 Score\", scoreKey:\"r2QualiScore\", qualiLabel:\"R2 Quali\", qualiKey:\"r2Quali\", topLabel:\"Top 16\", topKey:\"r2Top16\"},\n      r3:{label:\"Round 3\", scoreLabel:\"Q3 Score\", scoreKey:\"r3QualiScore\", qualiLabel:\"R3 Quali\", qualiKey:\"r3Quali\", topLabel:\"Top 16\", topKey:\"r3Top16\"},\n      full:{label:\"Full\", isFull:true}\n    };\n\n    return configs[roundKey] || configs.r1;\n  }\n\n  function renderStandingIntro(){\n    if(loadingEl) loadingEl.style.display = \"none\";\n\n    let title = \"V\u00e6lg stilling\";\n    let text = \"Start med at v\u00e6lge en klasse. Derefter v\u00e6lger du Round 1, Round 2, Round 3 eller Full.\";\n\n    if(activeStandingClass && !activeStandingRound){\n      const group = GROUPS.find(item => item.key === activeStandingClass);\n      title = \"V\u00e6lg round\";\n\n      if(activeStandingClass === \"street\"){\n        text = \"Du har valgt \" + (group ? group.label : \"klasse\") + \". Street har kun \u00e9n runde, s\u00e5 v\u00e6lg Round 1 eller Full.\";\n      }else{\n        text = \"Du har valgt \" + (group ? group.label : \"klasse\") + \". V\u00e6lg nu Round 1, Round 2, Round 3 eller Full.\";\n      }\n    }\n\n    contentEl.innerHTML = `\n      <div class=\"ddc-bracket-empty\">\n        <h3>${escapeHtml(title)}<\/h3>\n        <p>${escapeHtml(text)}<\/p>\n      <\/div>\n    `;\n  }\n\n  function renderClassBadge(className){\n    const key = classKey(className);\n\n    return `\n      <span class=\"ddc-class-badge ddc-class-badge--${key}\">\n        ${escapeHtml(displayClass(className))}\n      <\/span>\n    `;\n  }\n\n  function standingValue(value){\n    const clean = cleanText(value);\n    const n = normalize(clean);\n\n    if(!clean) return \"-\";\n    if(n.includes(\"indlaeser\") || n.includes(\"loading\")) return \"-\";\n    if(clean === \"#N\/A\" || clean === \"#REF!\" || clean === \"#VALUE!\") return \"-\";\n\n    return clean;\n  }\n\n  function renderResultTable(results, group, roundKey){\n    const round = getStandingRoundConfig(roundKey);\n    const groupResults = sortResults(results.filter(item => item.key === group.key));\n\n    if(!groupResults.length){\n      return `\n        <div class=\"ddc-results-error\">\n          <h3>Ingen stilling fundet<\/h3>\n          <p>Der blev ikke fundet stilling for ${escapeHtml(group.label)}.<\/p>\n        <\/div>\n      `;\n    }\n\n    const rows = groupResults.map((item, index) => {\n      const position = item.position || String(index + 1);\n      const posNum = parseNumberLike(position);\n      const posClass = posNum === 1 ? \"ddc-pos--1\" : posNum === 2 ? \"ddc-pos--2\" : posNum === 3 ? \"ddc-pos--3\" : \"\";\n\n      if(round.isFull){\n        return `\n          <tr>\n            <td class=\"ddc-pos ${posClass}\" data-label=\"Placering\">${escapeHtml(position)}<\/td>\n            <td class=\"ddc-number\" data-label=\"Start nr.\">${escapeHtml(item.number || \"-\")}<\/td>\n            <td class=\"ddc-driver\" data-label=\"K\u00f8rer\">${renderDriverName(item.driver, item.number)}<\/td>\n            <td class=\"ddc-country\" data-label=\"Land\">${countryFlag(item.country)}<\/td>\n            <td class=\"ddc-points\" data-label=\"Point\">${escapeHtml(standingValue(item.points))}<\/td>\n            <td class=\"ddc-score\" data-label=\"Q1 Score\">${escapeHtml(standingValue(item.qualiScore))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R1 Quali\">${escapeHtml(standingValue(item.r1Quali))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R1 Top 32\">${escapeHtml(standingValue(item.r1Top32))}<\/td>\n            <td class=\"ddc-score\" data-label=\"Q2 Score\">${escapeHtml(standingValue(item.r2QualiScore))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R2 Quali\">${escapeHtml(standingValue(item.r2Quali))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R2 Top 16\">${escapeHtml(standingValue(item.r2Top16))}<\/td>\n            <td class=\"ddc-score\" data-label=\"Q3 Score\">${escapeHtml(standingValue(item.r3QualiScore))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R3 Quali\">${escapeHtml(standingValue(item.r3Quali))}<\/td>\n            <td class=\"ddc-score\" data-label=\"R3 Top 16\">${escapeHtml(standingValue(item.r3Top16))}<\/td>\n          <\/tr>\n        `;\n      }\n\n      return `\n        <tr>\n          <td class=\"ddc-pos ${posClass}\" data-label=\"Placering\">${escapeHtml(position)}<\/td>\n          <td class=\"ddc-number\" data-label=\"Start nr.\">${escapeHtml(item.number || \"-\")}<\/td>\n          <td class=\"ddc-driver\" data-label=\"K\u00f8rer\">${renderDriverName(item.driver, item.number)}<\/td>\n          <td class=\"ddc-country\" data-label=\"Land\">${countryFlag(item.country)}<\/td>\n          <td class=\"ddc-points\" data-label=\"Point\">${escapeHtml(standingValue(item.points))}<\/td>\n          <td class=\"ddc-score\" data-label=\"${escapeHtml(round.scoreLabel)}\">${escapeHtml(standingValue(item[round.scoreKey]))}<\/td>\n          <td class=\"ddc-score\" data-label=\"${escapeHtml(round.qualiLabel)}\">${escapeHtml(standingValue(item[round.qualiKey]))}<\/td>\n          <td class=\"ddc-score\" data-label=\"${escapeHtml(round.topLabel)}\">${escapeHtml(standingValue(item[round.topKey]))}<\/td>\n        <\/tr>\n      `;\n    }).join(\"\");\n\n    if(round.isFull){\n      return `\n        <div class=\"ddc-results-table-wrap\">\n          <table class=\"ddc-results-table ddc-results-table--full\">\n            <thead>\n              <tr>\n                <th>Placering<\/th>\n                <th>Start nr.<\/th>\n                <th>K\u00f8rer<\/th>\n                <th>Land<\/th>\n                <th>Point<\/th>\n                <th>Q1 Score<\/th>\n                <th>R1 Quali<\/th>\n                <th>R1 Top 32<\/th>\n                <th>Q2 Score<\/th>\n                <th>R2 Quali<\/th>\n                <th>R2 Top 16<\/th>\n                <th>Q3 Score<\/th>\n                <th>R3 Quali<\/th>\n                <th>R3 Top 16<\/th>\n              <\/tr>\n            <\/thead>\n            <tbody>\n              ${rows}\n            <\/tbody>\n          <\/table>\n        <\/div>\n      `;\n    }\n\n    return `\n      <div class=\"ddc-results-table-wrap\">\n        <table class=\"ddc-results-table\">\n          <thead>\n            <tr>\n              <th>Placering<\/th>\n              <th>Start nr.<\/th>\n              <th>K\u00f8rer<\/th>\n              <th>Land<\/th>\n              <th>Point<\/th>\n              <th>${escapeHtml(round.scoreLabel)}<\/th>\n              <th>${escapeHtml(round.qualiLabel)}<\/th>\n              <th>${escapeHtml(round.topLabel)}<\/th>\n            <\/tr>\n          <\/thead>\n          <tbody>\n            ${rows}\n          <\/tbody>\n        <\/table>\n      <\/div>\n    `;\n  }\n\n  function renderSelectedStanding(results){\n    if(!activeStandingClass || !activeStandingRound){\n      renderStandingIntro();\n      return;\n    }\n\n    const group = GROUPS.find(item => item.key === activeStandingClass);\n\n    if(!group){\n      renderStandingIntro();\n      return;\n    }\n\n    const round = getStandingRoundConfig(activeStandingRound);\n    const count = results.filter(item => item.key === group.key).length;\n    const now = new Date();\n    const stamp = String(now.getHours()).padStart(2,\"0\") + \":\" + String(now.getMinutes()).padStart(2,\"0\");\n\n    contentEl.innerHTML = `\n      <section class=\"ddc-results-panel is-active\" data-results-panel=\"${escapeHtml(group.key)}\">\n        <div class=\"ddc-results-top\">\n          <div>\n            <div class=\"ddc-kicker\">Stilling<\/div>\n            <h2 class=\"ddc-panel-title\">Stilling - ${escapeHtml(group.label)} <span>\/<\/span> ${escapeHtml(round.label)}<\/h2>\n            <p class=\"ddc-panel-lead\">Full list for ${escapeHtml(group.label)} ${escapeHtml(round.label)}. Listen opdateres automatisk hvert ${AUTO_REFRESH_MINUTES}. minut.<\/p>\n          <\/div>\n\n          <div class=\"ddc-results-meta\">\n            <span class=\"ddc-chip\">Klasse: <b>${escapeHtml(group.label)}<\/b><\/span>\n            <span class=\"ddc-chip\">Round: <b>${escapeHtml(round.label)}<\/b><\/span>\n            <span class=\"ddc-chip\">Antal: <b>${count}<\/b><\/span>\n            <span class=\"ddc-chip\">Sidst opdateret: <b>${stamp}<\/b><\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"ddc-refresh-row\">\n          <button class=\"ddc-refresh-btn\" type=\"button\" data-ddc-refresh-results>\n            <span class=\"ddc-refresh-icon\">Opdater<\/span>\n            <span data-ddc-refresh-label>Opdater stilling<\/span>\n          <\/button>\n        <\/div>\n\n        <div class=\"ddc-results-card\">\n          <div class=\"ddc-results-card-head\">\n            <h3 class=\"ddc-results-card-title\">Full list<\/h3>\n            <div class=\"ddc-results-card-sub\">${escapeHtml(group.label)} \/ ${escapeHtml(round.label)}<\/div>\n          <\/div>\n\n          ${renderResultTable(results, group, activeStandingRound)}\n        <\/div>\n\n        <div class=\"ddc-note\">\n          <strong>Bem\u00e6rk:<\/strong> Stillingen opdateres automatisk hvert ${AUTO_REFRESH_MINUTES}. minut.\n        <\/div>\n      <\/section>\n    `;\n  }\n\n  function renderResultsContent(results, keepState){\n    const groupsWithResults = GROUPS.filter(group => groupHasResults(results, group));\n\n    if(!groupsWithResults.length){\n      throw new Error(\"Der blev ikke fundet nogen stilling. Tjek at Class-kolonnen indeholder Pro, Pro2 eller Street.\");\n    }\n\n    latestStandingResults = results;\n\n    if(activeStandingClass && activeStandingRound){\n      renderSelectedStanding(latestStandingResults);\n    }else{\n      renderStandingIntro();\n    }\n  }\n\n  function renderResultsError(message){\n    contentEl.innerHTML = `\n      <div class=\"ddc-results-error\">\n        <h3>Kunne ikke indl\u00e6se stilling<\/h3>\n        <p>\n          ${escapeHtml(message)}\n          <br><br>\n          Tjek at data-linket peger p\u00e5 den rigtige fane.\n        <\/p>\n      <\/div>\n    `;\n  }\n\n  async function initResults(isAutoRefresh){\n    if(isRefreshingResults) return;\n\n    isRefreshingResults = true;\n\n    try{\n      const csvText = await fetchCsv(GOOGLE_SHEET_CSV_URL);\n      const rows = parseCsv(csvText);\n      const results = parseResultRows(rows);\n\n      if(loadingEl) loadingEl.style.display = \"none\";\n\n      renderResultsContent(results, !!isAutoRefresh);\n      resultsHasLoadedOnce = true;\n    }catch(err){\n      if(loadingEl) loadingEl.style.display = \"none\";\n\n      if(!isAutoRefresh){\n        renderResultsError(err && err.message ? err.message : \"Ukendt fejl.\");\n      } else {\n        console.warn(\"DDC stilling auto-refresh fejlede:\", err);\n      }\n    }finally{\n      isRefreshingResults = false;\n    }\n  }\n\n  function battleNumber(value){\n    const raw = cleanText(value);\n    const found = raw.match(\/\\d+\/);\n    return found ? parseInt(found[0], 10) : null;\n  }\n\n  function findBracketHeaderIndex(rows){\n    for(let i = 0; i < Math.min(rows.length, 30); i++){\n      const rowText = rows[i].map(normalize).join(\" | \");\n\n      const hasBattle = rowText.includes(\"battle\");\n      const hasName = rowText.includes(\"name\") || rowText.includes(\"navn\") || rowText.includes(\"deltager\");\n      const hasNumber = rowText.includes(\"number\") || rowText.includes(\"nummer\") || rowText.includes(\"nr\");\n\n      if(hasBattle && hasName && hasNumber){\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  function findBracketNumberColumn(headers){\n    const normalizedHeaders = headers.map(h => normalize(h));\n    const preferredExact = [\"number\", \"nummer\", \"nr\", \"start nr\", \"startnr\"];\n\n    for(const name of preferredExact){\n      const n = normalize(name);\n      const index = normalizedHeaders.findIndex(h => h === n);\n\n      if(index !== -1){\n        return index;\n      }\n    }\n\n    for(let i = 0; i < normalizedHeaders.length; i++){\n      const h = normalizedHeaders[i];\n\n      if((h.includes(\"number\") || h === \"nr\" || h === \"nummer\" || h.includes(\"start nr\") || h.includes(\"startnr\")) && !h.includes(\"battle\")){\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  function parseBracketRows(rows){\n    const wideData = parseWideBracketRows(rows);\n    if(wideData){\n      return wideData;\n    }\n\n    const headerIndex = findBracketHeaderIndex(rows);\n\n    if(headerIndex === -1){\n      throw new Error(\"Kunne ikke finde bracket-data. Koden kan l\u00e6se b\u00e5de det brede ark med TOP 32 \/ TOP 16 \/ TOP 8 \/ TOP 4 \/ Play Off \/ Finals og det gamle format med Battle nummer, Name, Number og Battle points.\");\n    }\n\n    const headers = rows[headerIndex];\n\n    const col = {\n      battle: findColumn(headers, [\"Battle nummer\", \"Battle num\", \"Battle nr\", \"Battle\"]),\n      name: findColumn(headers, [\"Name\", \"Navn\", \"Deltager\", \"Driver\", \"K\u00f8rer\"]),\n      number: findBracketNumberColumn(headers),\n      leadScore: findColumn(headers, [\"Lead score\", \"Lead\"]),\n      battlePoints: findColumn(headers, [\"Battle points\", \"Battle point\", \"Winner\", \"Winner=4\", \"Score\"])\n    };\n\n    if(col.battle === -1) throw new Error(\"Kolonnen Battle nummer mangler.\");\n    if(col.name === -1) throw new Error(\"Kolonnen Name\/Navn mangler.\");\n    if(col.number === -1) throw new Error(\"Kolonnen Number\/Nummer mangler.\");\n\n    const items = [];\n\n    for(let r = headerIndex + 1; r < rows.length; r++){\n      const row = rows[r];\n\n      const name = col.name >= 0 ? cleanText(row[col.name]) : \"\";\n      if(!name) continue;\n\n      const bNum = col.battle >= 0 ? battleNumber(row[col.battle]) : null;\n      if(!bNum) continue;\n\n      const battlePointsRaw = col.battlePoints >= 0 ? cleanText(row[col.battlePoints]) : \"\";\n\n      items.push({\n        battleNumber:bNum,\n        name:name,\n        number:col.number >= 0 ? cleanText(row[col.number]) : \"\",\n        leadScore:col.leadScore >= 0 ? cleanText(row[col.leadScore]) : \"\",\n        battlePoints:battlePointsRaw,\n        battlePointsNum:parseNumberLike(battlePointsRaw)\n      });\n    }\n\n    return items;\n  }\n\n  function parseWideBracketRows(rows){\n    const blockDefs = [\n      {key:\"top32\", labels:[\"top 32\", \"top32\"], expectedMatches:16},\n      {key:\"top16\", labels:[\"top 16\", \"top16\"], expectedMatches:8},\n      {key:\"top8\", labels:[\"top 8\", \"top8\"], expectedMatches:4},\n      {key:\"top4\", labels:[\"top 4\", \"top4\"], expectedMatches:2},\n      {key:\"playoff\", labels:[\"play off\", \"playoff\", \"3 plads\", \"3. plads\"], expectedMatches:1},\n      {key:\"finals\", labels:[\"finals\", \"final\", \"finale\"], expectedMatches:1}\n    ];\n\n    function keyFromCell(value){\n      const n = normalize(value);\n      if(!n) return \"\";\n\n      for(const def of blockDefs){\n        if(def.labels.some(label => n === normalize(label) || n.includes(normalize(label)))){\n          return def.key;\n        }\n      }\n\n      return \"\";\n    }\n\n    let titleRowIndex = -1;\n    let titleCells = [];\n\n    for(let r = 0; r < Math.min(rows.length, 12); r++){\n      const found = [];\n\n      rows[r].forEach((cell, index) => {\n        const key = keyFromCell(cell);\n        if(key){\n          found.push({key:key, col:index, title:cleanText(cell)});\n        }\n      });\n\n      if(found.length >= 2){\n        titleRowIndex = r;\n        titleCells = found.sort((a,b) => a.col - b.col);\n        break;\n      }\n    }\n\n    if(titleRowIndex === -1){\n      return null;\n    }\n\n    const headerRowIndex = titleRowIndex + 1;\n    const headerRow = rows[headerRowIndex] || [];\n    const blocks = {};\n\n    function findLocalColumn(startCol, endCol, names){\n      for(let c = startCol; c < endCol; c++){\n        const header = normalize(headerRow[c]);\n        if(!header) continue;\n\n        for(const name of names){\n          const n = normalize(name);\n          if(header === n || header.includes(n)){\n            return c;\n          }\n        }\n      }\n\n      return -1;\n    }\n\n    function findStartNumberColumn(startCol, endCol){\n      const preferred = [\n        \"Start nr\",\n        \"Startnr\",\n        \"Start nr.\",\n        \"Start number\",\n        \"Start nummer\",\n        \"Number\",\n        \"Nummer\"\n      ];\n\n      const fallback = [\n        \"Nr\"\n      ];\n\n      for(let c = startCol; c < endCol; c++){\n        const header = normalize(headerRow[c]);\n        if(!header) continue;\n\n        \/* VIGTIGT:\n           Seed nr. m\u00e5 ikke bruges som startnummer.\n           Bracketen skal altid vise bilens\/startnummerets kolonne.\n        *\/\n        if(header.includes(\"seed\")) continue;\n        if(header.includes(\"place\")) continue;\n        if(header.includes(\"placering\")) continue;\n\n        for(const name of preferred){\n          const n = normalize(name);\n          if(header === n || header.includes(n)){\n            return c;\n          }\n        }\n      }\n\n      for(let c = startCol; c < endCol; c++){\n        const header = normalize(headerRow[c]);\n        if(!header) continue;\n\n        if(header.includes(\"seed\")) continue;\n        if(header.includes(\"place\")) continue;\n        if(header.includes(\"placering\")) continue;\n\n        for(const name of fallback){\n          const n = normalize(name);\n          if(header === n){\n            return c;\n          }\n        }\n      }\n\n      return -1;\n    }\n\n    titleCells.forEach((block, index) => {\n      const startCol = block.col;\n      const endCol = index + 1 < titleCells.length ? titleCells[index + 1].col : Math.max(headerRow.length, startCol + 4);\n\n      const numberCol = findStartNumberColumn(startCol, endCol);\n      const nameCol = findLocalColumn(startCol, endCol, [\"Navn\", \"Name\", \"K\u00f8rer\", \"Koerer\", \"Driver\"]);\n      const seedCol = findLocalColumn(startCol, endCol, [\"Seed nr\", \"Seed\", \"Placering\"]);\n      const scoreCol = findLocalColumn(startCol, endCol, [\"Winner=4\", \"Winner\", \"Score\", \"Point\", \"Battle points\", \"Battle point\"]);\n\n      if(nameCol === -1 || numberCol === -1){\n        return;\n      }\n\n      const players = [];\n\n      for(let r = headerRowIndex + 1; r < rows.length; r++){\n        const row = rows[r] || [];\n        const name = cleanText(row[nameCol]);\n        const number = cleanText(row[numberCol]);\n        const score = scoreCol >= 0 ? cleanText(row[scoreCol]) : \"\";\n        const seed = seedCol >= 0 ? cleanText(row[seedCol]) : \"\";\n\n        if(!name && !number && !score && !seed){\n          continue;\n        }\n\n        if(!name || normalize(name) === \"navn\" || normalize(name) === \"name\"){\n          continue;\n        }\n\n        players.push({\n          roundKey:block.key,\n          name:name,\n          number:number,\n          seed:seed,\n          leadScore:\"\",\n          battlePoints:score,\n          battlePointsNum:parseNumberLike(score),\n          forceWinner:false,\n          forceLoser:false\n        });\n      }\n\n      blocks[block.key] = players;\n    });\n\n    if(!blocks.top32 && !blocks.top16 && !blocks.top8 && !blocks.top4){\n      return null;\n    }\n\n    function nameKey(player){\n      return normalize((player && player.name) || \"\");\n    }\n\n    function makeSet(players){\n      const set = new Set();\n      (players || []).forEach(player => {\n        const key = nameKey(player);\n        if(key) set.add(key);\n      });\n      return set;\n    }\n\n    const nextSets = {\n      top32:makeSet(blocks.top16),\n      top16:makeSet(blocks.top8),\n      top8:makeSet(blocks.top4),\n      top4:makeSet(blocks.finals),\n      playoff:null,\n      finals:null\n    };\n\n    [\"top32\", \"top16\", \"top8\", \"top4\"].forEach(key => {\n      const nextSet = nextSets[key];\n      (blocks[key] || []).forEach(player => {\n        const keyName = nameKey(player);\n        if(nextSet && keyName && nextSet.has(keyName)){\n          player.forceWinner = true;\n        }\n      });\n    });\n\n    [\"playoff\", \"finals\"].forEach(key => {\n      const players = blocks[key] || [];\n      const marked = players.filter(player => player.battlePointsNum !== null && player.battlePointsNum > 0);\n\n      if(marked.length === 1){\n        marked[0].forceWinner = true;\n      }else if(marked.length > 1){\n        const best = Math.max(...marked.map(player => player.battlePointsNum));\n        marked.forEach(player => {\n          if(player.battlePointsNum === best){\n            player.forceWinner = true;\n          }\n        });\n      }\n    });\n\n    \/*\n      Top 32 skal ikke bare vises i r\u00e6kkef\u00f8lgen fra arket.\n      Den skal placeres efter seed-systemet her:\n\n      Venstre side:\n      1, 32, 17, 16, 9, 24, 25, 8, 5, 28, 21, 12, 13, 20, 29, 4\n\n      H\u00f8jre side:\n      3, 30, 19, 14, 11, 22, 27, 6, 7, 26, 23, 10, 15, 18, 31, 2\n\n      OBS:\n      Seed nr. bruges kun til placering.\n      Boksen viser stadig Start nr. som k\u00f8rernummer.\n    *\/\n    const top32SeedOrder = [\n      1, 32, 17, 16, 9, 24, 25, 8,\n      5, 28, 21, 12, 13, 20, 29, 4,\n      3, 30, 19, 14, 11, 22, 27, 6,\n      7, 26, 23, 10, 15, 18, 31, 2\n    ];\n\n    function seedNumber(player){\n      const parsedSeed = parseNumberLike(player && player.seed ? player.seed : \"\");\n      if(parsedSeed !== null){\n        return parsedSeed;\n      }\n\n      return null;\n    }\n\n    function orderTop32BySeed(players){\n      const list = players || [];\n      const bySeed = new Map();\n      const used = new Set();\n\n      list.forEach((player, index) => {\n        const seed = seedNumber(player);\n\n        if(seed !== null && !bySeed.has(seed)){\n          bySeed.set(seed, player);\n          used.add(index);\n        }\n      });\n\n      const leftovers = list.filter((player, index) => !used.has(index));\n      let leftoverIndex = 0;\n\n      return top32SeedOrder.map(seed => {\n        if(bySeed.has(seed)){\n          return bySeed.get(seed);\n        }\n\n        if(leftoverIndex < leftovers.length){\n          return leftovers[leftoverIndex++];\n        }\n\n        return tbdPlayer();\n      });\n    }\n\n    function makeMatches(players, expectedCount, labelPrefix){\n      const matches = [];\n      const list = players || [];\n\n      for(let i = 0; i < expectedCount; i++){\n        const a = list[i * 2] || tbdPlayer();\n        const b = list[i * 2 + 1] || tbdPlayer();\n\n        matches.push({\n          number:i + 1,\n          label:labelPrefix + \" \" + (i + 1),\n          players:[a,b]\n        });\n      }\n\n      return matches;\n    }\n\n    function sameDriver(a, b){\n      if(!a || !b) return false;\n\n      const aName = nameKey(a);\n      const bName = nameKey(b);\n\n      if(aName && bName && aName === bName){\n        return true;\n      }\n\n      const aNumber = cleanDriverNumber(a.number || \"\");\n      const bNumber = cleanDriverNumber(b.number || \"\");\n\n      return !!(aNumber && bNumber && aNumber === bNumber);\n    }\n\n    function playerBelongsToMatch(player, match){\n      if(!player || !match || !match.players){\n        return false;\n      }\n\n      return match.players.some(matchPlayer => sameDriver(player, matchPlayer));\n    }\n\n    function orderPlayersByPreviousMatches(players, previousMatches){\n      const list = players || [];\n      const usedIndexes = new Set();\n\n      return (previousMatches || []).map(previousMatch => {\n        let foundIndex = -1;\n\n        for(let i = 0; i < list.length; i++){\n          if(usedIndexes.has(i)) continue;\n\n          if(playerBelongsToMatch(list[i], previousMatch)){\n            foundIndex = i;\n            break;\n          }\n        }\n\n        if(foundIndex !== -1){\n          usedIndexes.add(foundIndex);\n          return list[foundIndex];\n        }\n\n        return tbdPlayer();\n      });\n    }\n\n    \/*\n      VIGTIGT:\n      N\u00e5r Top 32 bliver seed-placeret, skal alle efterf\u00f8lgende runder ogs\u00e5 placeres\n      ud fra de grupper, k\u00f8rerne kommer fra.\n\n      Eksempel:\n      Vinderen fra Top 32 kamp 1 skal lande i Top 16 kamp 1.\n      Vinderen fra Top 32 kamp 2 skal ogs\u00e5 lande i Top 16 kamp 1.\n      Vinderen fra Top 32 kamp 3 og 4 skal lande i Top 16 kamp 2 osv.\n\n      Det samme g\u00e6lder Top 16 -> Top 8, Top 8 -> Top 4 og Top 4 -> Final.\n    *\/\n    const orderedTop32 = orderTop32BySeed(blocks.top32);\n    const top32Matches = makeMatches(orderedTop32, 16, \"Top 32\");\n\n    const orderedTop16 = orderPlayersByPreviousMatches(blocks.top16, top32Matches);\n    const top16Matches = makeMatches(orderedTop16, 8, \"Top 16\");\n\n    const orderedTop8 = orderPlayersByPreviousMatches(blocks.top8, top16Matches);\n    const top8Matches = makeMatches(orderedTop8, 4, \"Top 8\");\n\n    const orderedTop4 = orderPlayersByPreviousMatches(blocks.top4, top8Matches);\n    const top4Matches = makeMatches(orderedTop4, 2, \"Top 4\");\n\n    const orderedFinals = orderPlayersByPreviousMatches(blocks.finals, top4Matches);\n    const finalMatches = makeMatches(orderedFinals, 1, \"Final\");\n\n    const wideBracket = {\n      __wideBracket:true,\n      blocks:blocks,\n      rounds:[\n        {matches:top32Matches},\n        {matches:top16Matches},\n        {matches:top8Matches},\n        {matches:top4Matches},\n        {matches:finalMatches}\n      ],\n      playOffMatch:makeMatches(blocks.playoff, 1, \"Play Off\")[0]\n    };\n\n    return wideBracket;\n  }\n\n  function tbdPlayer(){\n    return {\n      name:\"TBD\",\n      number:\"-\",\n      leadScore:\"\",\n      battlePoints:\"\",\n      battlePointsNum:null,\n      isTbd:true\n    };\n  }\n\n  function getWinner(match){\n    if(!match || !match.players || match.players.length < 2) return null;\n\n    const a = match.players[0];\n    const b = match.players[1];\n\n    if(!a || !b) return null;\n\n    const forced = match.players.find(player => player && !player.isTbd && player.forceWinner);\n    if(forced) return forced;\n\n    if(a.isTbd || b.isTbd) return null;\n    if(a.battlePointsNum === null || b.battlePointsNum === null) return null;\n    if(a.battlePointsNum === b.battlePointsNum) return null;\n\n    return a.battlePointsNum > b.battlePointsNum ? a : b;\n  }\n\n  function buildBracketMatches(items){\n    if(items && items.__wideBracket && items.rounds){\n      return items.rounds;\n    }\n\n    const byBattle = new Map();\n\n    items.forEach(item => {\n      if(!byBattle.has(item.battleNumber)){\n        byBattle.set(item.battleNumber, []);\n      }\n\n      byBattle.get(item.battleNumber).push(item);\n    });\n\n    const actualMatch = number => {\n      const players = byBattle.get(number) || [];\n      if(!players.length) return null;\n\n      return {\n        number:number,\n        label:\"Battle \" + number,\n        players:[players[0] || tbdPlayer(), players[1] || tbdPlayer()]\n      };\n    };\n\n    const config = [\n      {start:1,count:16},\n      {start:17,count:8},\n      {start:25,count:4},\n      {start:29,count:2},\n      {start:31,count:1}\n    ];\n\n    const rounds = [];\n\n    config.forEach(round => {\n      const matches = [];\n\n      for(let i = 0; i < round.count; i++){\n        const matchNumber = round.start + i;\n        const actual = actualMatch(matchNumber);\n\n        if(actual){\n          matches.push(actual);\n        }else{\n          matches.push({\n            number:matchNumber,\n            label:\"Battle \" + matchNumber,\n            players:[tbdPlayer(), tbdPlayer()]\n          });\n        }\n      }\n\n      rounds.push({matches});\n    });\n\n    return rounds;\n  }\n\n  function renderVdmLineH(x,y,w){\n    return `<div class=\"ddc-vdm-line h\" style=\"left:${x}%; top:${y}%; width:${w}%;\"><\/div>`;\n  }\n\n  function renderVdmLineV(x,y,h){\n    return `<div class=\"ddc-vdm-line v\" style=\"left:${x}%; top:${y}%; height:${h}%;\"><\/div>`;\n  }\n\n  function renderVdmPlayerBox(player, match, x, y, w){\n    player = player || tbdPlayer();\n\n    const win = getWinner(match);\n    const isWinner = win && !player.isTbd && win.name === player.name && win.number === player.number;\n    const isLoser = win && !player.isTbd && !isWinner;\n    const seed = player.isTbd ? \"-\" : \"#\" + (player.number || \"-\");\n    const score = player.battlePoints || \"-\";\n\n    return `\n      <div class=\"ddc-vdm-box ${player.isTbd ? \"is-empty\" : \"\"} ${isWinner ? \"is-winner\" : \"\"} ${isLoser ? \"is-loser\" : \"\"}\" style=\"left:${x}%; top:${y}%; width:${w}%;\">\n        <div class=\"ddc-vdm-seed\">${escapeHtml(seed)}<\/div>\n        <div class=\"ddc-vdm-name\">${renderBracketDriverName(player)}<\/div>\n        \n      <\/div>\n    `;\n  }\n\n  function renderVdmSide(rounds, side){\n    const left = side === \"left\";\n    const html = [];\n\n    const columns = left\n      ? [{x:2,w:11},{x:15,w:10},{x:27,w:9},{x:38,w:8}]\n      : [{x:87,w:11},{x:75,w:10},{x:64,w:9},{x:54,w:8}];\n\n    const top32 = rounds[0].matches.slice(left ? 0 : 8, left ? 8 : 16);\n    const top16 = rounds[1].matches.slice(left ? 0 : 4, left ? 4 : 8);\n    const top8 = rounds[2].matches.slice(left ? 0 : 2, left ? 2 : 4);\n    const top4 = rounds[3].matches.slice(left ? 0 : 1, left ? 1 : 2);\n\n    const ys32 = [10.5,20,29.5,39,54,63.5,73,82.5];\n    const ys16 = [15,34,59,78];\n    const ys8 = [24,69];\n    const ys4 = [44];\n\n    top32.forEach((m,i) => {\n      html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[0].x, ys32[i], columns[0].w));\n      html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[0].x, ys32[i] + 3.8, columns[0].w));\n    });\n\n    top16.forEach((m,i) => {\n      html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[1].x, ys16[i], columns[1].w));\n      html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[1].x, ys16[i] + 3.8, columns[1].w));\n    });\n\n    top8.forEach((m,i) => {\n      html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[2].x, ys8[i], columns[2].w));\n      html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[2].x, ys8[i] + 3.8, columns[2].w));\n    });\n\n    top4.forEach((m,i) => {\n      html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[3].x, ys4[i], columns[3].w));\n      html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[3].x, ys4[i] + 3.8, columns[3].w));\n    });\n\n    return html.join(\"\");\n  }\n\nfunction getVdmLayout(){\n  return {\n    boxGap:3.8,\n    boxMid:1.55,\n\n    leftColumns:[\n      {x:2,w:11},\n      {x:15,w:10},\n      {x:27,w:9},\n      {x:38,w:8}\n    ],\n\n    rightColumns:[\n      {x:87,w:11},\n      {x:75,w:10},\n      {x:64,w:9},\n      {x:54,w:8}\n    ],\n\n    y32:[10.5,20,29.5,39,54,63.5,73,82.5],\n    y16:[15,34,59,78],\n    y8:[24,69],\n    y4:[44]\n  };\n}\n\nfunction renderVdmSide(rounds, side){\n  const left = side === \"left\";\n  const html = [];\n  const layout = getVdmLayout();\n\n  const columns = left ? layout.leftColumns : layout.rightColumns;\n\n  const top32 = rounds[0].matches.slice(left ? 0 : 8, left ? 8 : 16);\n  const top16 = rounds[1].matches.slice(left ? 0 : 4, left ? 4 : 8);\n  const top8 = rounds[2].matches.slice(left ? 0 : 2, left ? 2 : 4);\n  const top4 = rounds[3].matches.slice(left ? 0 : 1, left ? 1 : 2);\n\n  top32.forEach((m,i) => {\n    html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[0].x, layout.y32[i], columns[0].w));\n    html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[0].x, layout.y32[i] + layout.boxGap, columns[0].w));\n  });\n\n  top16.forEach((m,i) => {\n    html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[1].x, layout.y16[i], columns[1].w));\n    html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[1].x, layout.y16[i] + layout.boxGap, columns[1].w));\n  });\n\n  top8.forEach((m,i) => {\n    html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[2].x, layout.y8[i], columns[2].w));\n    html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[2].x, layout.y8[i] + layout.boxGap, columns[2].w));\n  });\n\n  top4.forEach((m,i) => {\n    html.push(renderVdmPlayerBox(m.players[0] || tbdPlayer(), m, columns[3].x, layout.y4[i], columns[3].w));\n    html.push(renderVdmPlayerBox(m.players[1] || tbdPlayer(), m, columns[3].x, layout.y4[i] + layout.boxGap, columns[3].w));\n  });\n\n  return html.join(\"\");\n}\n\nfunction renderVdmLines(){\n  const lines = [];\n  const layout = getVdmLayout();\n\n  const y32 = layout.y32;\n  const y16 = layout.y16;\n  const y8 = layout.y8;\n  const y4 = layout.y4;\n\n  const boxMid = layout.boxMid;\n  const boxGap = layout.boxGap;\n\n  function matchOut(y){\n    return y + boxMid + (boxGap \/ 2);\n  }\n\n  function slotTop(y){\n    return y + boxMid;\n  }\n\n  function slotBottom(y){\n    return y + boxGap + boxMid;\n  }\n\n  function vLine(x, y1, y2){\n    const top = Math.min(y1,y2);\n    const height = Math.abs(y2 - y1);\n\n    if(height < 0.25) return;\n\n    lines.push(renderVdmLineV(x, top, height));\n  }\n\n  function hLine(x1, x2, y){\n    const left = Math.min(x1,x2);\n    const width = Math.abs(x2 - x1);\n\n    if(width < 0.25) return;\n\n    lines.push(renderVdmLineH(left, y, width));\n  }\n\n  function connect(fromX, bendX, toX, fromY, toY){\n    const diff = Math.abs(fromY - toY);\n\n    if(diff < 0.65){\n      hLine(fromX, toX, toY);\n      return;\n    }\n\n    hLine(fromX, bendX, fromY);\n    vLine(bendX, fromY, toY);\n    hLine(bendX, toX, toY);\n  }\n\n  \/* LEFT SIDE - Top 32 -> Top 16 *\/\n  connect(13, 14, 15, matchOut(y32[0]), slotTop(y16[0]));\n  connect(13, 14, 15, matchOut(y32[1]), slotBottom(y16[0]));\n\n  connect(13, 14, 15, matchOut(y32[2]), slotTop(y16[1]));\n  connect(13, 14, 15, matchOut(y32[3]), slotBottom(y16[1]));\n\n  connect(13, 14, 15, matchOut(y32[4]), slotTop(y16[2]));\n  connect(13, 14, 15, matchOut(y32[5]), slotBottom(y16[2]));\n\n  connect(13, 14, 15, matchOut(y32[6]), slotTop(y16[3]));\n  connect(13, 14, 15, matchOut(y32[7]), slotBottom(y16[3]));\n\n  \/* LEFT SIDE - Top 16 -> Top 8 *\/\n  connect(25, 26, 27, matchOut(y16[0]), slotTop(y8[0]));\n  connect(25, 26, 27, matchOut(y16[1]), slotBottom(y8[0]));\n\n  connect(25, 26, 27, matchOut(y16[2]), slotTop(y8[1]));\n  connect(25, 26, 27, matchOut(y16[3]), slotBottom(y8[1]));\n\n  \/* LEFT SIDE - Top 8 -> Top 4 *\/\n  connect(36, 37, 38, matchOut(y8[0]), slotTop(y4[0]));\n  connect(36, 37, 38, matchOut(y8[1]), slotBottom(y4[0]));\n\n  \/* RIGHT SIDE - Top 32 -> Top 16 *\/\n  connect(87, 86, 85, matchOut(y32[0]), slotTop(y16[0]));\n  connect(87, 86, 85, matchOut(y32[1]), slotBottom(y16[0]));\n\n  connect(87, 86, 85, matchOut(y32[2]), slotTop(y16[1]));\n  connect(87, 86, 85, matchOut(y32[3]), slotBottom(y16[1]));\n\n  connect(87, 86, 85, matchOut(y32[4]), slotTop(y16[2]));\n  connect(87, 86, 85, matchOut(y32[5]), slotBottom(y16[2]));\n\n  connect(87, 86, 85, matchOut(y32[6]), slotTop(y16[3]));\n  connect(87, 86, 85, matchOut(y32[7]), slotBottom(y16[3]));\n\n  \/* RIGHT SIDE - Top 16 -> Top 8 *\/\n  connect(75, 74, 73, matchOut(y16[0]), slotTop(y8[0]));\n  connect(75, 74, 73, matchOut(y16[1]), slotBottom(y8[0]));\n\n  connect(75, 74, 73, matchOut(y16[2]), slotTop(y8[1]));\n  connect(75, 74, 73, matchOut(y16[3]), slotBottom(y8[1]));\n\n  \/* RIGHT SIDE - Top 8 -> Top 4 *\/\n  connect(64, 63, 62, matchOut(y8[0]), slotTop(y4[0]));\n  connect(64, 63, 62, matchOut(y8[1]), slotBottom(y4[0]));\n\n\/* ======================================================\n   CENTER LINKS\n   TOP 4 -> PLAY OFF -> FINAL\n   NY VERSION MED KRYDS\n====================================================== *\/\n\nconst leftTop4OutX  = 46;\nconst rightTop4OutX = 54;\nconst centerX       = 50;\n\n\/* Udgang fra Top 4 *\/\nconst top4OutY = matchOut(y4[0]);\n\n\/* Top p\u00e5 center-linjen fra Play Off *\/\nconst playOffTopY = 29.4;\n\n\/* Ned mod Final *\/\nconst finalTopY = 69.5;\n\n\/* Selve krydsets h\u00f8jde *\/\nconst crossY = top4OutY;\n\n\/* Lodret centerlinje *\/\nvLine(centerX, playOffTopY, finalTopY);\n\n\/* Vandret linje som laver krydset *\/\nhLine(leftTop4OutX, rightTop4OutX, crossY);\n\n  return lines.join(\"\");\n}\n\n  function renderVdmFinalBox(player, finalMatch){\n    player = player || tbdPlayer();\n\n    const win = getWinner(finalMatch);\n    const isWinner = win && !player.isTbd && win.name === player.name && win.number === player.number;\n    const isLoser = win && !player.isTbd && !isWinner;\n    const seed = player.isTbd ? \"-\" : \"#\" + (player.number || \"-\");\n    const score = player.battlePoints || \"-\";\n\n    return `\n      <div class=\"ddc-vdm-box ${player.isTbd ? \"is-empty\" : \"\"} ${isWinner ? \"is-winner is-final-winner\" : \"\"} ${isLoser ? \"is-loser\" : \"\"}\" style=\"position:relative;left:auto;top:auto;width:100%;height:34px;\">\n        <div class=\"ddc-vdm-seed\">${escapeHtml(seed)}<\/div>\n        <div class=\"ddc-vdm-name\">${renderBracketDriverName(player)}<\/div>\n        \n      <\/div>\n    `;\n  }\n\n  function bracketMatchFromBattle(items, number){\n    if(items && items.__wideBracket && items.playOffMatch){\n      return items.playOffMatch;\n    }\n\n    const players = items.filter(item => item.battleNumber === number);\n\n    return {\n      number:number,\n      label:\"Battle \" + number,\n      players:[players[0] || tbdPlayer(), players[1] || tbdPlayer()]\n    };\n  }\n\n  function renderVdmPlayOffBox(player, match){\n    player = player || tbdPlayer();\n\n    const win = getWinner(match);\n    const isWinner = win && !player.isTbd && win.name === player.name && win.number === player.number;\n    const isLoser = win && !player.isTbd && !isWinner;\n    const seed = player.isTbd ? \"-\" : \"#\" + (player.number || \"-\");\n    const score = player.battlePoints || \"-\";\n\n    return `\n      <div class=\"ddc-vdm-box ${player.isTbd ? \"is-empty\" : \"\"} ${isWinner ? \"is-winner\" : \"\"} ${isLoser ? \"is-loser\" : \"\"}\" style=\"position:relative;left:auto;top:auto;width:100%;height:28px;\">\n        <div class=\"ddc-vdm-seed\">${escapeHtml(seed)}<\/div>\n        <div class=\"ddc-vdm-name\">${renderBracketDriverName(player)}<\/div>\n        \n      <\/div>\n    `;\n  }\n\n  function renderBracket(items){\n    const source = getActiveBracketSource();\n    const rounds = buildBracketMatches(items);\n    const finalMatch = rounds[rounds.length - 1].matches[0] || {players:[tbdPlayer(), tbdPlayer()]};\n    const finalA = finalMatch.players[0] || tbdPlayer();\n    const finalB = finalMatch.players[1] || tbdPlayer();\n\n    const playOffMatch = bracketMatchFromBattle(items, 32);\n    const playOffA = playOffMatch.players[0] || tbdPlayer();\n    const playOffB = playOffMatch.players[1] || tbdPlayer();\n\n    const now = new Date();\n    const stamp = String(now.getHours()).padStart(2,\"0\") + \":\" + String(now.getMinutes()).padStart(2,\"0\");\n    const roundText = activeBracketRound === \"r2\" ? \"ROUND 2\" : \"ROUND 1\";\n\n    bracketContentEl.innerHTML = `\n      <div class=\"ddc-results-top\">\n        <div>\n          <div class=\"ddc-kicker\">Bracket<\/div>\n          <h2 class=\"ddc-panel-title\">${escapeHtml(source.label)} <span>\/<\/span> Battle Bracket<\/h2>\n          <p class=\"ddc-panel-lead\">Battle bracket for ${escapeHtml(source.label)}. Bracketen opdateres automatisk hvert ${AUTO_REFRESH_MINUTES}. minut.<\/p>\n        <\/div>\n\n        <div class=\"ddc-results-meta ddc-bracket-meta\">\n          <span class=\"ddc-chip\">Bracket: <b>${escapeHtml(source.label)}<\/b><\/span>\n          <span class=\"ddc-chip\">Sidst opdateret: <b>${stamp}<\/b><\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"ddc-refresh-row\">\n        <button class=\"ddc-refresh-btn\" type=\"button\" data-ddc-refresh-bracket>\n          <span class=\"ddc-refresh-icon\">Opdater<\/span>\n          <span data-ddc-refresh-label>Opdater bracket<\/span>\n        <\/button>\n      <\/div>\n\n      <div class=\"ddc-vdm-board-wrap\">\n        <div class=\"ddc-vdm-board\">\n          <div class=\"ddc-vdm-board-title\">\n            <small>${escapeHtml(source.label)}<\/small>\n            <strong>TOP #32 <span>${roundText}<\/span><\/strong>\n          <\/div>\n\n          <div class=\"ddc-vdm-round-label\" style=\"left:3%;top:7.4%;\">Top 32<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"left:17%;top:11.4%;\">Top 16<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"left:29%;top:18.2%;\">Top 8<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"left:39%;top:39.8%;\">Top 4<\/div>\n\n          <div class=\"ddc-vdm-round-label\" style=\"right:3%;top:7.4%;\">Top 32<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"right:17%;top:11.4%;\">Top 16<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"right:29%;top:18.2%;\">Top 8<\/div>\n          <div class=\"ddc-vdm-round-label\" style=\"right:39%;top:39.8%;\">Top 4<\/div>\n\n          ${renderVdmLines()}\n          ${renderVdmSide(rounds,\"left\")}\n          ${renderVdmSide(rounds,\"right\")}\n\n          <div class=\"ddc-vdm-playoff\">\n            <div class=\"ddc-vdm-playoff-title\">Play Off<\/div>\n            <div class=\"ddc-vdm-playoff-sub\">3. plads<\/div>\n            <div class=\"ddc-vdm-playoff-list\">\n              ${renderVdmPlayOffBox(playOffA, playOffMatch)}\n              ${renderVdmPlayOffBox(playOffB, playOffMatch)}\n            <\/div>\n          <\/div>\n\n          <div class=\"ddc-vdm-center\">\n            <div class=\"ddc-vdm-center-title\">Winner<\/div>\n            <div class=\"ddc-vdm-final\">\n              <div class=\"ddc-vdm-final-label\">Final<\/div>\n              ${renderVdmFinalBox(finalA, finalMatch)}\n              ${renderVdmFinalBox(finalB, finalMatch)}\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ddc-note\">\n        <strong>Bem\u00e6rk:<\/strong> Bracketen opdateres automatisk hvert ${AUTO_REFRESH_MINUTES}. minut.\n        <div class=\"ddc-bracket-legend\">\n          <span class=\"ddc-legend-pill\"><span class=\"ddc-legend-dot\"><\/span> Guld markerer k\u00f8rere der g\u00e5r videre<\/span>\n          <span class=\"ddc-legend-pill\"><span class=\"ddc-legend-cross\"><\/span> Krydset\/tonet viser eliminerede k\u00f8rere<\/span>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderBracketIntro(){\n    if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n\n    let title = \"V\u00e6lg bracket\";\n    let text = \"Start med at v\u00e6lge en klasse. Derefter v\u00e6lger du Round 1 eller Round 2.\";\n\n    if(activeBracketClass && !activeBracketRound){\n      const classData = BRACKET_SOURCES[activeBracketClass];\n      title = \"V\u00e6lg round\";\n      text = \"Du har valgt \" + (classData ? classData.label : \"klasse\") + \". V\u00e6lg nu Round 1 eller Round 2 for at \u00e5bne bracketen.\";\n    }\n\n    bracketContentEl.innerHTML = `\n      <div class=\"ddc-bracket-empty\">\n        <h3>${escapeHtml(title)}<\/h3>\n        <p>${escapeHtml(text)}<\/p>\n      <\/div>\n    `;\n  }\n\n  function renderBracketError(message){\n    bracketContentEl.innerHTML = `\n      <div class=\"ddc-bracket-error\">\n        <h3>Kunne ikke indl\u00e6se bracket<\/h3>\n        <p>${escapeHtml(message)}<\/p>\n      <\/div>\n    `;\n  }\n\n  async function initBracket(isAutoRefresh){\n    if(isRefreshingBracket) return;\n\n    const source = getActiveBracketSource();\n\n    if(!source){\n      if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n      renderBracketIntro();\n      return;\n    }\n\n    if(!source.csv){\n      if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n      renderBracketError(\"Der er ikke sat et data-link ind til \" + source.label + \" endnu.\");\n      return;\n    }\n\n    isRefreshingBracket = true;\n\n    try{\n      const csvText = await fetchCsv(source.csv);\n      const rows = parseCsv(csvText);\n      const items = parseBracketRows(rows);\n\n      if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n\n      renderBracket(items);\n      bracketHasLoadedOnce = true;\n    }catch(err){\n      if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n\n      if(!isAutoRefresh){\n        renderBracketError(err && err.message ? err.message : \"Ukendt fejl.\");\n      } else {\n        console.warn(\"DDC bracket auto-refresh fejlede:\", err);\n      }\n    }finally{\n      isRefreshingBracket = false;\n    }\n  }\n\n  function setActiveClassColor(classKey){\n    root.classList.remove(\"ddc-active-class-pro\", \"ddc-active-class-pro2\", \"ddc-active-class-street\");\n\n    if(classKey === \"pro\"){\n      root.classList.add(\"ddc-active-class-pro\");\n    }\n\n    if(classKey === \"pro2\"){\n      root.classList.add(\"ddc-active-class-pro2\");\n    }\n\n    if(classKey === \"street\"){\n      root.classList.add(\"ddc-active-class-street\");\n    }\n  }\n\n  function getStandingAvailableRounds(){\n    if(activeStandingClass === \"street\"){\n      return [\"r1\", \"full\"];\n    }\n\n    return [\"r1\", \"r2\", \"r3\", \"full\"];\n  }\n\n  function resetStandingSelection(){\n    activeStandingClass = \"\";\n    activeStandingRound = \"\";\n\n    root.querySelectorAll(\"[data-ddc-standing-class]\").forEach(btn => {\n      btn.classList.remove(\"is-active\");\n    });\n\n    root.querySelectorAll(\"[data-ddc-standing-round]\").forEach(btn => {\n      btn.classList.remove(\"is-active\");\n      btn.disabled = true;\n      btn.hidden = false;\n      btn.style.display = \"\";\n    });\n\n    const roundStep = root.querySelector(\"[data-ddc-standing-round-step]\");\n    if(roundStep){\n      roundStep.classList.add(\"is-disabled\");\n    }\n\n    if(loadingEl) loadingEl.style.display = \"none\";\n    if(contentEl) contentEl.innerHTML = \"\";\n  }\n\n  function resetBracketSelection(){\n    activeBracketClass = \"\";\n    activeBracketRound = \"\";\n    bracketHasLoadedOnce = false;\n\n    root.querySelectorAll(\"[data-ddc-bracket-class]\").forEach(btn => {\n      btn.classList.remove(\"is-active\");\n    });\n\n    root.querySelectorAll(\"[data-ddc-bracket-round]\").forEach(btn => {\n      btn.classList.remove(\"is-active\");\n      btn.disabled = true;\n    });\n\n    const roundStep = root.querySelector(\"[data-ddc-round-step]\");\n    if(roundStep){\n      roundStep.classList.add(\"is-disabled\");\n    }\n\n    if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n    if(bracketContentEl) bracketContentEl.innerHTML = \"\";\n  }\n\n  function setupMainTabs(){\n    const mainTabs = root.querySelectorAll(\"[data-ddc-main-tab]\");\n    const panels = root.querySelectorAll(\"[data-ddc-page-panel]\");\n\n    mainTabs.forEach(tab => {\n      tab.addEventListener(\"click\", function(){\n        const target = this.getAttribute(\"data-ddc-main-tab\");\n\n        if(mainTabsWrapEl){\n          mainTabsWrapEl.classList.remove(\"needs-choice\");\n        }\n\n        mainTabs.forEach(btn => {\n          btn.classList.toggle(\"is-active\", btn === this);\n        });\n\n        panels.forEach(panel => {\n          panel.classList.toggle(\"is-active\", panel.getAttribute(\"data-ddc-page-panel\") === target);\n        });\n\n        if(target === \"results\"){\n          resetStandingSelection();\n          resetBracketSelection();\n          setActiveClassColor(\"\");\n\n          if(!resultsHasLoadedOnce){\n            initResults(false);\n          }else{\n            renderStandingIntro();\n          }\n        }\n\n        if(target === \"bracket\"){\n          resetStandingSelection();\n          resetBracketSelection();\n          setActiveClassColor(\"\");\n          renderBracketIntro();\n        }\n      });\n    });\n  }\n\n  function setupStandingTabs(){\n    const classTabs = root.querySelectorAll(\"[data-ddc-standing-class]\");\n    const roundTabs = root.querySelectorAll(\"[data-ddc-standing-round]\");\n    const roundStep = root.querySelector(\"[data-ddc-standing-round-step]\");\n\n    function updatePickerState(){\n      const availableRounds = getStandingAvailableRounds();\n\n      classTabs.forEach(btn => {\n        btn.classList.toggle(\"is-active\", btn.getAttribute(\"data-ddc-standing-class\") === activeStandingClass);\n      });\n\n      roundTabs.forEach(btn => {\n        const roundKey = btn.getAttribute(\"data-ddc-standing-round\");\n        const isAvailable = availableRounds.includes(roundKey);\n\n        btn.hidden = !!activeStandingClass && !isAvailable;\n        btn.style.display = !!activeStandingClass && !isAvailable ? \"none\" : \"\";\n        btn.classList.toggle(\"is-active\", roundKey === activeStandingRound);\n        btn.disabled = !activeStandingClass || !isAvailable;\n      });\n\n      if(roundStep){\n        roundStep.classList.toggle(\"is-disabled\", !activeStandingClass);\n      }\n    }\n\n    function clearStandingArea(){\n      if(loadingEl) loadingEl.style.display = \"none\";\n      contentEl.innerHTML = \"\";\n    }\n\n    classTabs.forEach(tab => {\n      tab.addEventListener(\"click\", function(){\n        activeStandingClass = this.getAttribute(\"data-ddc-standing-class\");\n        activeStandingRound = \"\";\n\n        setActiveClassColor(activeStandingClass);\n        updatePickerState();\n        clearStandingArea();\n        renderStandingIntro();\n      });\n    });\n\n    roundTabs.forEach(tab => {\n      tab.addEventListener(\"click\", function(){\n        if(!activeStandingClass) return;\n\n        const selectedRound = this.getAttribute(\"data-ddc-standing-round\");\n\n        if(!getStandingAvailableRounds().includes(selectedRound)){\n          return;\n        }\n\n        activeStandingRound = selectedRound;\n        setActiveClassColor(activeStandingClass);\n        updatePickerState();\n\n        if(latestStandingResults && latestStandingResults.length){\n          renderSelectedStanding(latestStandingResults);\n        }else{\n          if(loadingEl) loadingEl.style.display = \"block\";\n          contentEl.innerHTML = \"\";\n          initResults(false);\n        }\n      });\n    });\n\n    updatePickerState();\n  }\n\n  function setupBracketTabs(){\n    const classTabs = root.querySelectorAll(\"[data-ddc-bracket-class]\");\n    const roundTabs = root.querySelectorAll(\"[data-ddc-bracket-round]\");\n    const roundStep = root.querySelector(\"[data-ddc-round-step]\");\n\n    function updatePickerState(){\n      classTabs.forEach(btn => {\n        btn.classList.toggle(\"is-active\", btn.getAttribute(\"data-ddc-bracket-class\") === activeBracketClass);\n      });\n\n      roundTabs.forEach(btn => {\n        btn.classList.toggle(\"is-active\", btn.getAttribute(\"data-ddc-bracket-round\") === activeBracketRound);\n        btn.disabled = !activeBracketClass;\n      });\n\n      if(roundStep){\n        roundStep.classList.toggle(\"is-disabled\", !activeBracketClass);\n      }\n    }\n\n    function clearBracketArea(){\n      if(bracketLoadingEl) bracketLoadingEl.style.display = \"none\";\n      bracketContentEl.innerHTML = \"\";\n    }\n\n    classTabs.forEach(tab => {\n      tab.addEventListener(\"click\", function(){\n        activeBracketClass = this.getAttribute(\"data-ddc-bracket-class\");\n        activeBracketRound = \"\";\n        bracketHasLoadedOnce = false;\n\n        setActiveClassColor(activeBracketClass);\n        updatePickerState();\n        clearBracketArea();\n        renderBracketIntro();\n      });\n    });\n\n    roundTabs.forEach(tab => {\n      tab.addEventListener(\"click\", function(){\n        if(!activeBracketClass) return;\n\n        activeBracketRound = this.getAttribute(\"data-ddc-bracket-round\");\n        bracketHasLoadedOnce = false;\n\n        updatePickerState();\n\n        if(bracketLoadingEl) bracketLoadingEl.style.display = \"block\";\n        bracketContentEl.innerHTML = \"\";\n        initBracket(false);\n      });\n    });\n\n    updatePickerState();\n  }\n\n  function shouldLockResults(){\n    const autoUnlock = window.DDC_AUTO_UNLOCK_BY_DATE === true;\n    const eventStart = window.DDC_EVENT_START_DATE || '2026-05-22T08:00:00+02:00';\n\n    if(autoUnlock){\n      const now = new Date();\n      const start = new Date(eventStart);\n      return now < start;\n    }\n\n    return window.DDC_RESULTS_LOCKED === true;\n  }\n\n  function applyLockState(){\n    const locked = shouldLockResults();\n    root.classList.toggle(\"is-locked\", locked);\n    root.setAttribute(\"aria-locked\", locked ? \"true\" : \"false\");\n  }\n\n  function updateCountdown(){\n    const eventStart = window.DDC_EVENT_START_DATE || '2026-05-22T08:00:00+02:00';\n    const start = new Date(eventStart);\n    const now = new Date();\n    const diff = Math.max(0, start - now);\n\n    const totalSeconds = Math.floor(diff \/ 1000);\n    const days = Math.floor(totalSeconds \/ 86400);\n    const hours = Math.floor((totalSeconds % 86400) \/ 3600);\n    const minutes = Math.floor((totalSeconds % 3600) \/ 60);\n    const seconds = totalSeconds % 60;\n\n    const dEl = root.querySelector(\"[data-count-days]\");\n    const hEl = root.querySelector(\"[data-count-hours]\");\n    const mEl = root.querySelector(\"[data-count-minutes]\");\n    const sEl = root.querySelector(\"[data-count-seconds]\");\n\n    if(dEl) dEl.textContent = String(days).padStart(2,\"0\");\n    if(hEl) hEl.textContent = String(hours).padStart(2,\"0\");\n    if(mEl) mEl.textContent = String(minutes).padStart(2,\"0\");\n    if(sEl) sEl.textContent = String(seconds).padStart(2,\"0\");\n\n    applyLockState();\n  }\n\n  function setupManualRefreshButtons(){\n    root.addEventListener(\"click\", async function(event){\n      const resultsBtn = event.target.closest(\"[data-ddc-refresh-results]\");\n      const bracketBtn = event.target.closest(\"[data-ddc-refresh-bracket]\");\n\n      if(resultsBtn){\n        if(isRefreshingResults) return;\n\n        const label = resultsBtn.querySelector(\"[data-ddc-refresh-label]\");\n        const defaultText = \"Opdater stilling\";\n        const loadingText = \"Opdaterer stilling\";\n\n        resultsBtn.disabled = true;\n        resultsBtn.classList.add(\"is-loading\");\n        if(label) label.textContent = loadingText;\n\n        try{\n          await initResults(false);\n        }finally{\n          resultsBtn.disabled = false;\n          resultsBtn.classList.remove(\"is-loading\");\n          if(label) label.textContent = defaultText;\n          ddcTranslateVisibleText(resultsBtn);\n        }\n\n        return;\n      }\n\n      if(bracketBtn){\n        if(isRefreshingBracket) return;\n\n        const label = bracketBtn.querySelector(\"[data-ddc-refresh-label]\");\n        const defaultText = \"Opdater bracket\";\n        const loadingText = \"Opdaterer bracket\";\n\n        bracketBtn.disabled = true;\n        bracketBtn.classList.add(\"is-loading\");\n        if(label) label.textContent = loadingText;\n\n        try{\n          await initBracket(false);\n        }finally{\n          bracketBtn.disabled = false;\n          bracketBtn.classList.remove(\"is-loading\");\n          if(label) label.textContent = defaultText;\n          ddcTranslateVisibleText(bracketBtn);\n        }\n      }\n    });\n  }\n\n  setupManualRefreshButtons();\n  setupMainTabs();\n  setupStandingTabs();\n  setupBracketTabs();\n  applyLockState();\n  updateCountdown();\n  ddcObserveTranslations();\n\n  setInterval(function(){\n    if(resultsHasLoadedOnce){\n      initResults(true);\n    }\n\n    if(activeBracketClass && activeBracketRound && bracketHasLoadedOnce){\n      initBracket(true);\n    }\n  }, AUTO_REFRESH_MINUTES * 60 * 1000);\n\n  setInterval(function(){\n    updateCountdown();\n  }, 1000);\n\n  window.addEventListener(\"load\", function(){\n    applyLockState();\n    updateCountdown();\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FLAG DDC Stilling Resultaterne er skjult Resultaterne og bracketen bliver offentliggjort efter pr&aelig;mieoverr&aelig;kkelsen. Siden er klar, men indholdet er skjult, indtil de officielle resultater bliver frigivet. 00Dage 00Timer 00Min 00Sek Danish Drift Championship Stilling 2026 F\u00f8lg med i den officielle stilling og battle brackets fra Danish Drift Championship. Siden opdateres automatisk hvert 5. minut. Auto-refresh: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-693","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Resultater | DDC Stillinger &amp; Event Placeringer<\/title>\n<meta name=\"description\" content=\"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/danishdrift.dk\/en\/resultat\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resultater | DDC Stillinger &amp; Event Placeringer\" \/>\n<meta property=\"og:description\" content=\"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/danishdrift.dk\/en\/resultat\/\" \/>\n<meta property=\"og:site_name\" content=\"Danish Drift Championship\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DanishDriftChampionship?locale=da_DK\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-25T06:59:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/03\/Logo-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"36 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/resultat\\\/\",\"url\":\"https:\\\/\\\/danishdrift.dk\\\/resultat\\\/\",\"name\":\"Resultater | DDC Stillinger & Event Placeringer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#website\"},\"datePublished\":\"2026-03-09T11:47:37+00:00\",\"dateModified\":\"2026-05-25T06:59:37+00:00\",\"description\":\"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/resultat\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/danishdrift.dk\\\/resultat\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/resultat\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/danishdrift.dk\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resultat\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#website\",\"url\":\"https:\\\/\\\/danishdrift.dk\\\/\",\"name\":\"danishdrift.dk\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/danishdrift.dk\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#organization\",\"name\":\"danishdrift.dk\",\"url\":\"https:\\\/\\\/danishdrift.dk\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/danishdrift.dk\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-Bold-_D_-with-red-accents.png\",\"contentUrl\":\"https:\\\/\\\/danishdrift.dk\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/cropped-Bold-_D_-with-red-accents.png\",\"width\":512,\"height\":512,\"caption\":\"danishdrift.dk\"},\"image\":{\"@id\":\"https:\\\/\\\/danishdrift.dk\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/DanishDriftChampionship?locale=da_DK\",\"https:\\\/\\\/www.instagram.com\\\/danishdriftchampionship\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Resultater | DDC Stillinger & Event Placeringer","description":"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.","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:\/\/danishdrift.dk\/en\/resultat\/","og_locale":"en_US","og_type":"article","og_title":"Resultater | DDC Stillinger & Event Placeringer","og_description":"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.","og_url":"https:\/\/danishdrift.dk\/en\/resultat\/","og_site_name":"Danish Drift Championship","article_publisher":"https:\/\/www.facebook.com\/DanishDriftChampionship?locale=da_DK","article_modified_time":"2026-05-25T06:59:37+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/03\/Logo-1024x683.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"36 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/danishdrift.dk\/resultat\/","url":"https:\/\/danishdrift.dk\/resultat\/","name":"Resultater | DDC Stillinger & Event Placeringer","isPartOf":{"@id":"https:\/\/danishdrift.dk\/#website"},"datePublished":"2026-03-09T11:47:37+00:00","dateModified":"2026-05-25T06:59:37+00:00","description":"Se de nyeste resultater, stillinger, point og eventplaceringer fra Danish Drift Championship s\u00e6sonen og f\u00f8lg kampen om toppen.","breadcrumb":{"@id":"https:\/\/danishdrift.dk\/resultat\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/danishdrift.dk\/resultat\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/danishdrift.dk\/resultat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/danishdrift.dk\/"},{"@type":"ListItem","position":2,"name":"Resultat"}]},{"@type":"WebSite","@id":"https:\/\/danishdrift.dk\/#website","url":"https:\/\/danishdrift.dk\/","name":"danishdrift.dk","description":"","publisher":{"@id":"https:\/\/danishdrift.dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/danishdrift.dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/danishdrift.dk\/#organization","name":"danishdrift.dk","url":"https:\/\/danishdrift.dk\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/danishdrift.dk\/#\/schema\/logo\/image\/","url":"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/cropped-Bold-_D_-with-red-accents.png","contentUrl":"https:\/\/danishdrift.dk\/wp-content\/uploads\/2026\/04\/cropped-Bold-_D_-with-red-accents.png","width":512,"height":512,"caption":"danishdrift.dk"},"image":{"@id":"https:\/\/danishdrift.dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DanishDriftChampionship?locale=da_DK","https:\/\/www.instagram.com\/danishdriftchampionship\/"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/pages\/693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/comments?post=693"}],"version-history":[{"count":412,"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/pages\/693\/revisions"}],"predecessor-version":[{"id":3443,"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/pages\/693\/revisions\/3443"}],"wp:attachment":[{"href":"https:\/\/danishdrift.dk\/en\/wp-json\/wp\/v2\/media?parent=693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}