{"id":129,"date":"2026-05-06T19:24:37","date_gmt":"2026-05-06T19:24:37","guid":{"rendered":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/"},"modified":"2026-05-11T15:13:31","modified_gmt":"2026-05-11T15:13:31","slug":"hpu-national-rankings-college-tour","status":"publish","type":"post","link":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/","title":{"rendered":"Inside HPU&#8217;s National Rankings | The College Tour"},"content":{"rendered":"<article class=\"hpu-video-article\">\n<div class=\"hpu-video-layout\">\n<aside class=\"hpu-video-sidebar\">\n<div class=\"hpu-video-sidebar-inner\">\n<div class=\"hpu-video-cta-container\">\n<div id=\"hpu-video-cta\"><\/div>\n<\/p><\/div>\n<section id=\"hpu-video-transcript\" class=\"hpu-video-transcript\" aria-label=\"Video Transcript\">\n<div class=\"hpu-video-transcript-header\">\n                        <span class=\"hpu-video-transcript-title\">Chapters &amp; Transcript<\/span>\n                    <\/div>\n<div id=\"hpu-video-transcript-content\" class=\"hpu-video-transcript-content\" role=\"region\" aria-label=\"Transcript chapters\">\n<div class=\"hpu-video-transcript-chapter expanded\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">1<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">What are the national rankings for High Point University?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=0\">0:00<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">It&#039;s time to meet Corey, an exercise science major from Pennsylvania. He&#039;s called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the beginning of the long list of accolades garnered by this university. Corey, tell us more about HPU&#039;s national rankings. Take it away.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-chapter\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">2<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">Why is HPU ranked as the best run college in America?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=39\">0:39<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">Thank you, Alex. HPU is nationally recognized and for a good reason. For the second consecutive year, HPU is ranked number one best-run college in America. That doesn&#039;t happen by accident. It&#039;s thanks to visionary leadership, especially from our president, Dr. Nido Qubein. He has transformed HPU with new academic programs which include our innovative dental and law schools and he continues to invest in our future.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-chapter\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">3<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">What are the rankings for HPU dorms and career services?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=61\">1:01<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">This excellence is reflected across campus. Our dorms rank number two best college dorms. Our student government rank number six most active SGA. Our support systems rank number nine best career services which helps students with everything from resumes to interview prep and number 17 for student support and counseling. Whether you&#039;re gearing up for an internship or overcoming a hurdle, HPU has your back. It&#039;s no wonder why we&#039;re also ranked number 24th in the category. Their students love these colleges. From day one, you feel it.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-chapter\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">4<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">How are HPU campus facilities and food ranked?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=90\">1:30<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">Especially during move-in, where volunteers like me help freshman settle in. That sense of community is carried through everything from number 18 best intramural sports to number 20 best college theaters to number 22 best athletic facilities and even number 16 best campus food.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-chapter\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">5<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">How does HPU develop student leaders and innovators?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=107\">1:47<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">Being a highly involved student, I&#039;ve experienced time and time again how much HPU invests in me and my classmates. Over the past three years, I&#039;ve seen my friends grow into leaders and innovators. Because at HPU, we all have the tools to thrive. And that&#039;s why we all can proudly call High Point University home. Back to you, Alex.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-chapter\">\n<div class=\"hpu-video-transcript-chapter-header\" role=\"button\" aria-expanded=\"true\">\n<div class=\"hpu-video-transcript-chapter-header-top\">\n<div class=\"hpu-video-transcript-chapter-number\">6<\/div>\n<h2 class=\"hpu-video-transcript-speaker\">What is the top priority at High Point University?<\/h2>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"hpu-video-transcript-text-container\">\n<div class=\"hpu-video-transcript-text-inner\">\n                                    <span class=\"hpu-video-transcript-chapter-time\"><a href=\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc&amp;t=129\">2:09<\/a><\/span><\/p>\n<p class=\"hpu-video-transcript-text\">Corey, that list sure is a standout. It sounds like HPU makes students their number one priority, and clearly the nation has taken notice. We&#039;re so happy you get to call this award-winning university home and be part of its success. Best of luck, Corey. Thanks again.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/section><\/div>\n<\/aside>\n<div class=\"hpu-video-main\">\n<section class=\"hpu-video-section\" aria-label=\"Video Player\">\n<div class=\"hpu-video-section-iframe\">\n                    <iframe loading=\"lazy\" title=\"Inside HPU&#039;s National Rankings | The College Tour\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/UQY8okuBjuc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n                <\/div>\n<\/section>\n<div class=\"hpu-video-body\">\n<div class=\"hpu-video-tabs\">\n                    <button class=\"hpu-video-tab-btn active\" data-tab=\"description\">Description<\/button><br \/>\n                    <button class=\"hpu-video-tab-btn\" data-tab=\"related\">Related Videos<\/button>\n                <\/div>\n<div class=\"hpu-video-tab-content active\" id=\"tab-description\">\n<section class=\"hpu-video-summary\" aria-label=\"Video Description\">\n<p>This video from The College Tour showcases High Point University&#039;s exceptional national rankings and commitment to student success. With recognition as the number one best-run college in America by Princeton Review, along with top rankings in student housing, career services, campus facilities, and student engagement, HPU demonstrates how visionary leadership invests in developing student leaders and innovators.<\/p>\n<div class=\"hpu-video-tags\"><\/div>\n<\/section><\/div>\n<div class=\"hpu-video-tab-content\" id=\"tab-related\">\n<section class=\"hpu-related-videos\" aria-label=\"Related Videos\">\n<div class=\"hpu-related-videos-slider\"><\/div>\n<p class=\"hpu-related-videos-none\">No related videos found.<\/p>\n<\/section><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<script>\r\n  \/\/ \u2500\u2500 Initialize Transcript Headings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const firstChapterHeading = document.querySelector('.hpu-video-transcript-chapter:first-child .hpu-video-transcript-speaker');\r\n  if (firstChapterHeading) {\r\n    firstChapterHeading.innerHTML = 'Introduction';\r\n  }\r\n\r\n  \/\/ \u2500\u2500 Transcript Accordion Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const chapters = document.querySelectorAll(\".hpu-video-transcript-chapter\");\r\n  \r\n  chapters.forEach(chapter => {\r\n    const header = chapter.querySelector(\".hpu-video-transcript-chapter-header\");\r\n    const content = chapter.querySelector(\".hpu-video-transcript-text-container\");\r\n    \r\n    \/\/ Initialize height for expanded ones\r\n    if (chapter.classList.contains(\"expanded\")) {\r\n      content.style.height = \"auto\";\r\n    }\r\n\r\n    header.addEventListener(\"click\", () => {\r\n      const isExpanded = chapter.classList.contains(\"expanded\");\r\n      \r\n      if (!isExpanded) {\r\n        \/\/ Expand\r\n        chapter.classList.add(\"expanded\");\r\n        header.setAttribute(\"aria-expanded\", \"true\");\r\n        content.style.height = content.scrollHeight + \"px\";\r\n        \r\n        content.addEventListener(\r\n          \"transitionend\",\r\n          function handler() {\r\n            content.style.height = \"auto\";\r\n            content.removeEventListener(\"transitionend\", handler);\r\n          },\r\n          { once: true }\r\n        );\r\n      } else {\r\n        \/\/ Collapse\r\n        content.style.height = content.scrollHeight + \"px\";\r\n        content.offsetHeight; \/\/ force reflow\r\n        content.style.height = \"0\";\r\n        chapter.classList.remove(\"expanded\");\r\n        header.setAttribute(\"aria-expanded\", \"false\");\r\n      }\r\n    });\r\n  });\r\n\r\n  \/\/ \u2500\u2500 Tab Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const tabBtns = document.querySelectorAll(\".hpu-video-tab-btn\");\r\n  const tabContents = document.querySelectorAll(\".hpu-video-tab-content\");\r\n\r\n  tabBtns.forEach(btn => {\r\n    btn.addEventListener(\"click\", () => {\r\n      const targetId = \"tab-\" + btn.getAttribute(\"data-tab\");\r\n      \r\n      tabBtns.forEach(b => b.classList.remove(\"active\"));\r\n      tabContents.forEach(c => c.classList.remove(\"active\"));\r\n      \r\n      btn.classList.add(\"active\");\r\n      const targetContent = document.getElementById(targetId);\r\n      if (targetContent) targetContent.classList.add(\"active\");\r\n    });\r\n  });\r\n\r\n  \/\/ \u2500\u2500 Fancybox Modal Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  document\r\n    .querySelectorAll(\".hpu-video-transcript-text-inner\")\r\n    .forEach(function (inner) {\r\n      inner.addEventListener(\"click\", function (e) {\r\n        var link = inner.querySelector(\".hpu-video-transcript-chapter-time a\");\r\n        if (!link) return;\r\n        e.stopPropagation(); \/\/ prevent accordion toggle when clicking timestamp\r\n        e.preventDefault();\r\n        var url = new URL(link.href);\r\n        var t = parseInt(url.searchParams.get(\"t\"), 10);\r\n        if (isNaN(t)) t = 0;\r\n        var videoWrapper = document.querySelector(\r\n          \".hpu-video-section-iframe .video-wrapper\",\r\n        );\r\n        var baseUrl = videoWrapper\r\n          ? videoWrapper.getAttribute(\"href\")\r\n          : \"https:\/\/www.youtube.com\/embed\/1qN81LI7qok?feature=oembed\";\r\n        var embedBase = baseUrl.split(\"?\")[0];\r\n\r\n        \/\/ Dynamically fit the modal to the viewport at 16:9, no black bars\r\n        var pad = 40; \/\/ breathing room around the modal\r\n        var vw = window.innerWidth - pad * 2;\r\n        var vh = window.innerHeight - pad * 2;\r\n        var modalWidth, modalHeight;\r\n\r\n        if (vw \/ vh >= 16 \/ 9) {\r\n          \/\/ Viewport is wider than 16:9 \u2014 height is the constraint\r\n          modalHeight = vh;\r\n          modalWidth = Math.round((vh * 16) \/ 9);\r\n        } else {\r\n          \/\/ Viewport is taller than 16:9 \u2014 width is the constraint\r\n          modalWidth = vw;\r\n          modalHeight = Math.round((vw * 9) \/ 16);\r\n        }\r\n\r\n        $.fancybox.open([\r\n          {\r\n            src: embedBase + \"?autoplay=1&start=\" + t,\r\n            type: \"iframe\",\r\n            width: modalWidth,\r\n            height: modalHeight,\r\n          },\r\n        ]);\r\n      });\r\n    });\r\n\r\n  \/\/ \u2500\u2500 CTA Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const ctaLibrary = {\r\n    apply: {\r\n      title: \"Apply to High Point\",\r\n      text: \"The application takes about 20 minutes. Early Decision closes November 1.\",\r\n      buttons: [\r\n        {\r\n          text: \"Start Your Application\",\r\n          link: \"https:\/\/www.highpoint.edu\/admissions\/apply\/\",\r\n        },\r\n      ],\r\n    },\r\n    visit: {\r\n      title: \"See It for Yourself\",\r\n      text: \"Daily visits and fall open houses. Sit in on a class, see a residence hall and eat in the dining halls.\",\r\n      buttons: [\r\n        {\r\n          text: \"Book a Visit\",\r\n          link: \"https:\/\/www.highpoint.edu\/admissions\/experience-high-point-university\/\",\r\n        },\r\n      ],\r\n    },\r\n    request: {\r\n      title: \"Get Program Details\",\r\n      text: \"Tell us what you want to study, and the admissions counselor for your region will follow up.\",\r\n      buttons: [\r\n        {\r\n          text: \"Request Info\",\r\n          link: \"https:\/\/discover.highpoint.edu\/register\/inquiry\",\r\n        },\r\n      ],\r\n    },\r\n    deposit: {\r\n      title: \"Make Your Deposit\",\r\n      text: \"Ready to join the #HPUFamily? Secure your place in the incoming class and unlock access to the nation's best dorms today. Your housing preference is based on your deposit date!\",\r\n      buttons: [\r\n        {\r\n          text: \"Submit Your Deposit\",\r\n          link: \"\/admissions\/landing-deposit\",\r\n        },\r\n      ],\r\n    },\r\n  };\r\n\r\n  const urlParams = new URLSearchParams(window.location.search);\r\n\r\n  const ctaElement = document.getElementById(\"hpu-video-cta\");\r\n  const ctaParam = urlParams.get(\"cta\");\r\n\r\n  \/\/ \u2500\u2500 Start time: ?t=SECONDS starts this page's video there (ads use it to open on the right moment).\r\n  \/\/ Destination Success videos open with a ~10 second logo intro, so they start past it unless ?t says otherwise.\r\n  const hpuStartAt = (function () { var v = parseInt(urlParams.get(\"t\"), 10); return v > 0 && v < 36000 ? v : 0; })();\r\n  const HPU_DS_SKIP = 10;\r\n  function hpuIsDS(title) { return \/^\\s*Destination Success\\b\/i.test(title || \"\"); }\r\n  function hpuPageTitle() { var h = document.querySelector(\"h1\"); return (h && h.textContent) || document.title || \"\"; }\r\n  const hpuMainStart = hpuStartAt || (hpuIsDS(hpuPageTitle()) ? HPU_DS_SKIP : 0);\r\n\r\n  if (ctaElement) {\r\n    const ctaData = ctaLibrary[ctaParam] || ctaLibrary[\"visit\"];\r\n\r\n    \/\/ Title\r\n    const ctaTitleEl = document.createElement(\"h2\");\r\n    ctaTitleEl.textContent = ctaData.title;\r\n    ctaElement.appendChild(ctaTitleEl);\r\n\r\n    \/\/ Text\r\n    const ctaTextEl = document.createElement(\"p\");\r\n    ctaTextEl.textContent = ctaData.text;\r\n    ctaElement.appendChild(ctaTextEl);\r\n\r\n    \/\/ Button\r\n    if (ctaData.buttons && ctaData.buttons.length > 0) {\r\n      ctaData.buttons.forEach(function (button) {\r\n        const ctaButtonEl = document.createElement(\"a\");\r\n        const ctaClass = button?.class ?? \"hpu-btn-purple-outline\";\r\n        ctaButtonEl.textContent = button.text;\r\n        ctaButtonEl.setAttribute(\"href\", button.link);\r\n        ctaButtonEl.setAttribute(\"class\", ctaClass);\r\n        ctaElement.appendChild(ctaButtonEl);\r\n      });\r\n    }\r\n  }\r\n\r\n  \/\/ \u2500\u2500 Captions on by default: add cc_load_policy to the main YouTube embed \u2500\u2500\r\n  (function () {\r\n    \/\/ The theme lazy-loads the embed: the URL can sit in data-src until the player loads, so update both.\r\n    var f = document.querySelector('.hpu-video-section-iframe iframe[src*=\"youtube\"], .hpu-video-section-iframe iframe[data-src*=\"youtube\"]');\r\n    if (!f) return;\r\n    ['src', 'data-src'].forEach(function (attr) {\r\n      var v = f.getAttribute(attr);\r\n      if (!v || v.indexOf('youtube') < 0) return;\r\n      try {\r\n        var u = new URL(v, location.href);\r\n        u.searchParams.set('cc_load_policy', '1');\r\n        u.searchParams.set('cc_lang_pref', 'en');\r\n        if (hpuMainStart) u.searchParams.set('start', String(hpuMainStart));\r\n        var nv = u.toString();\r\n        if (nv !== v) f.setAttribute(attr, nv);\r\n      } catch (e) {}\r\n    });\r\n  })();\r\n\r\n  \/\/ \u2500\u2500 Mobile CTA placement: move the CTA directly under the video at <=1365px \u2500\u2500\r\n  (function () {\r\n    var cta = document.querySelector('.hpu-video-cta-container');\r\n    var home = document.querySelector('.hpu-video-sidebar-inner');\r\n    var video = document.querySelector('.hpu-video-main > .hpu-video-section');\r\n    if (!cta || !home || !video) return;\r\n    var mq = window.matchMedia('(max-width: 1365px)');\r\n    function place() {\r\n      if (mq.matches) { if (video.nextElementSibling !== cta) video.insertAdjacentElement('afterend', cta); }\r\n      else if (cta.parentElement !== home) { home.insertBefore(cta, home.firstChild); }\r\n    }\r\n    place();\r\n    if (mq.addEventListener) mq.addEventListener('change', place); else if (mq.addListener) mq.addListener(place);\r\n  })();\r\n\r\n  \/\/ \u2500\u2500 Mobile video modal: edge-to-edge player, larger captions, CTA, swipe feed of related videos \u2500\u2500\r\n  (function () {\r\n    var PHONE = window.matchMedia('(max-width: 900px), (max-height: 500px) and (pointer: coarse)');\r\n    var LAND = window.matchMedia('(orientation: landscape)');\r\n    var CALM = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n    var box = document.querySelector('.hpu-video-section-iframe');\r\n    if (!box) return;\r\n    \/\/ TikTok test mode (?vmfeed=tiktok, remembered for the browser tab) runs the \"HPU Video TikTok Feed\" snippet instead of this viewer.\r\n    var hpuFeed = (location.search.match(\/[?&]vmfeed=(tiktok|youtube)\\b\/) || [])[1]; try { if (!hpuFeed) hpuFeed = sessionStorage.getItem('hpu_vm_feed'); } catch (e) {}\r\n    if (hpuFeed === 'tiktok') return;\r\n    var F = 'Poppins,system-ui,-apple-system,sans-serif';\r\n    var css = document.createElement('style');\r\n    css.textContent = [\r\n      '.hpu-vm{position:fixed;inset:0;z-index:2147483000;background:#0d0a14;opacity:0;transition:opacity .2s ease;overscroll-behavior:contain}',\r\n      '.hpu-vm.is-open{opacity:1}',\r\n      '.hpu-vm.is-standby{visibility:hidden;pointer-events:none}',\r\n      '.hpu-vm-feed{position:relative;height:100%;overflow-x:hidden;overflow-y:auto;scroll-snap-type:y mandatory;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none}',\r\n      '.hpu-vm-feed::-webkit-scrollbar{display:none}',\r\n      '.hpu-vm-slide{position:relative;height:100%;box-sizing:border-box;scroll-snap-align:start;scroll-snap-stop:always;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}',\r\n      '.hpu-vm-frame{position:relative;width:100vw;aspect-ratio:16\/9;background:#000 center\/cover no-repeat;flex:none}',\r\n      '.hpu-vm-glow{position:absolute;inset:-9% -2%;z-index:-1;pointer-events:none;filter:blur(20px) saturate(1.2);opacity:.22;transform:translateZ(0)}',\r\n      '.hpu-vm-glow i{position:absolute;inset:0;background:center\/cover no-repeat;transition:opacity 2.4s ease;will-change:opacity}',\r\n      '.hpu-vm-glow i.off{opacity:0}',\r\n      '.hpu-vm-stage{position:absolute;left:0;top:0;z-index:2;background:#000;opacity:0;pointer-events:none;transition:opacity .12s ease}',\r\n      '.hpu-vm-stage.is-live{opacity:1;pointer-events:auto}',\r\n      '.hpu-vm-stage.no-fade{transition:none}',\r\n      '.hpu-vm-stage.is-preview{opacity:1}',\r\n      '.hpu-vm-stage > div,.hpu-vm-stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0}',\r\n      '.hpu-vm-close{position:absolute;top:calc(env(safe-area-inset-top,0px) + 10px);right:calc(env(safe-area-inset-right,0px) + 10px);width:44px;height:44px;border-radius:50%;border:0;background:rgba(255,255,255,.14);color:#fff;font:400 26px\/44px system-ui,sans-serif;cursor:pointer;z-index:6;touch-action:manipulation}',\r\n      '.hpu-vm-close::before{content:\"\";position:absolute;inset:-10px}',\r\n      '.hpu-vm-cta{position:relative;z-index:3;display:flex;flex-direction:column;align-items:center;gap:12px;padding:0 24px;text-align:center;transition:opacity .45s ease,transform .45s ease}',\r\n      '.hpu-vm-cta p{margin:0;color:#fff;font:500 18px\/1.35 ' + F + ';letter-spacing:0;text-shadow:0 1px 14px rgba(0,0,0,.55)}',\r\n      '.hpu-vm-cta a{display:inline-block;padding:12px 24px;border:2px solid #fff;border-radius:5px;background:#fff;color:#330072;font:500 15px\/18px ' + F + ';letter-spacing:.01em;text-decoration:none}',\r\n      '.hpu-vm.cta-hidden .hpu-vm-cta,.hpu-vm-slide:not(.is-active) .hpu-vm-cta{opacity:0;transform:translateY(10px);pointer-events:none}',\r\n      '.hpu-vm-sound{display:none;position:absolute;left:12px;top:12px;z-index:2;padding:8px 14px;border-radius:999px;border:0;background:rgba(0,0,0,.65);color:#fff;font:500 13px\/1 ' + F + '}',\r\n      '.hpu-vm.needs-sound .hpu-vm-stage.is-live .hpu-vm-sound{display:block}',\r\n      '.hpu-vm-more{position:absolute;left:50%;bottom:max(4px, calc(env(safe-area-inset-bottom,0px) - 6px));transform:translateX(-50%);z-index:4;display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 20px;border:0;background:none;color:rgba(255,255,255,.92);font:500 11px\/1 ' + F + ';letter-spacing:.12em;text-transform:uppercase;cursor:pointer;transition:opacity .35s ease;-webkit-tap-highlight-color:transparent;pointer-events:none}',\r\n      '.hpu-vm-more svg{width:26px;height:26px;filter:drop-shadow(0 1px 3px rgba(0,0,0,.55));animation:hpuVmNudge 2.4s ease-in-out infinite}',\r\n      '@keyframes hpuVmNudge{0%,100%{transform:translateY(0);opacity:.7}50%{transform:translateY(-6px);opacity:1}}',\r\n      '.hpu-vm.is-swiping .hpu-vm-more,.hpu-vm.at-end .hpu-vm-more{opacity:0;pointer-events:none}',\r\n      '@media (prefers-reduced-motion: reduce){.hpu-vm-more svg{animation:none}.hpu-vm-cta{transition:opacity .2s ease}}',\r\n      '@media (orientation: landscape){',\r\n      ' .hpu-vm-slide{padding:0;gap:0}',\r\n      ' .hpu-vm-frame{width:min(100vw,calc(100dvh * 16 \/ 9));height:auto}',\r\n      ' .hpu-vm-cta{position:absolute;right:calc(env(safe-area-inset-right,0px) + 14px);bottom:14px;padding:0;flex-direction:row;gap:0}',\r\n      ' .hpu-vm-cta p{display:none}',\r\n      ' .hpu-vm-cta a{padding:9px 18px;font-size:13px;line-height:16px;box-shadow:0 4px 18px rgba(0,0,0,.4)}',\r\n      ' .hpu-vm-close{background:rgba(0,0,0,.5)}',\r\n      ' .hpu-vm-more{display:none}',\r\n      ' .hpu-vm-glow{inset:-2% -4%}',\r\n      '}'\r\n    ].join('');\r\n    document.head.appendChild(css);\r\n\r\n    function ytId(u) {\r\n      var m = (u || '').match(\/(?:embed\\\/|youtu\\.be\\\/|[?&]v=)([A-Za-z0-9_-]{11})\/);\r\n      return m ? m[1] : null;\r\n    }\r\n    function mainId() {\r\n      var el = box.querySelector('[href*=\"youtube\"], iframe[src*=\"youtube\"], iframe[data-src*=\"youtube\"]');\r\n      return el ? ytId(el.getAttribute('href') || el.getAttribute('src') || el.getAttribute('data-src')) : null;\r\n    }\r\n    var cta = (typeof ctaLibrary !== 'undefined' && (ctaLibrary[ctaParam] || ctaLibrary.visit)) || null;\r\n    var hasCta = !!(cta && cta.buttons && cta.buttons[0]);\r\n\r\n    var ytReady = null;\r\n    function loadYT() {\r\n      if (ytReady) return ytReady;\r\n      ytReady = new Promise(function (res) {\r\n        if (window.YT && window.YT.Player) return res();\r\n        if (window.YT && window.YT.ready) return window.YT.ready(res);\r\n        var prev = window.onYouTubeIframeAPIReady;\r\n        window.onYouTubeIframeAPIReady = function () { if (prev) try { prev(); } catch (e) {} res(); };\r\n        var s = document.createElement('script'); s.src = 'https:\/\/www.youtube.com\/iframe_api'; document.head.appendChild(s);\r\n      });\r\n      return ytReady;\r\n    }\r\n    if (PHONE.matches) loadYT();\r\n\r\n    var modal = null, feed = null;\r\n    var items = [], slides = [], idx = 0, swiping = false;\r\n    var SKIP = 0.8; \/\/ our videos open with a fade from black: start every feed video just past it\r\n    \/\/ Where a video starts: the page's own video honors ?t, and Destination Success videos skip their logo intro.\r\n    function startFor(it, isMain) { if (isMain && hpuMainStart) return hpuMainStart; return it && hpuIsDS(it.title) ? HPU_DS_SKIP : SKIP; }\r\n    var standby = false; \/\/ viewer built ahead of time, hidden, with the page's video already buffering\r\n    var wantAudio = true; \/\/ the viewer's sound choice, remembered across videos until the viewer is closed\r\n    var decks = [], cur = null; \/\/ two players: one on screen, one quietly preloading the next video\r\n    var hideTimer = null, settleTimer = null, ctaTimer = null, soundTimer = null, revealTimer = null, preloadTimer = null;\r\n\r\n    \/\/ iPhone drops the click when a tap lands while the feed is still gliding after a swipe (the tap just stops the\r\n    \/\/ scroll). Buttons in the viewer act on the touch itself, so they work every time.\r\n    function fastTap(el, fn) {\r\n      var start = null;\r\n      el.addEventListener('touchstart', function (e) { var t = e.touches[0]; start = [t.clientX, t.clientY]; }, { passive: true });\r\n      el.addEventListener('touchend', function (e) {\r\n        var t = e.changedTouches[0], ok = start && Math.abs(t.clientX - start[0]) < 24 && Math.abs(t.clientY - start[1]) < 24;\r\n        start = null;\r\n        if (ok) { e.preventDefault(); fn(e); }\r\n      });\r\n      el.addEventListener('click', function (e) { fn(e); });\r\n    }\r\n    function current() { return items[idx] ? items[idx].id : mainId(); }\r\n    function track(name, extra) {\r\n      try { (window.dataLayer = window.dataLayer || []).push(Object.assign({ event: name, video_id: current(), cta_type: ctaParam || 'visit' }, extra || {})); } catch (e) {}\r\n    }\r\n    function capSize() { return LAND.matches ? 1 : 2; }\r\n    function applyCaptions(d) {\r\n      d = d || cur;\r\n      if (!d || !d.player || !d.player.setOption) return;\r\n      try { d.player.loadModule('captions'); d.player.setOption('captions', 'track', { languageCode: 'en' }); d.player.setOption('captions', 'fontSize', capSize()); } catch (e) {}\r\n    }\r\n\r\n    \/\/ Playlist: this page's video first, then an endless random run through the whole \/watch library.\r\n    function feedItems() {\r\n      var first = mainId(); if (!first) return [];\r\n      return [{ id: first, title: hpuPageTitle() }];\r\n    }\r\n    \/\/ Every video post id, shuffled once per page. Each is used once; after the whole library has been shown it reshuffles.\r\n    var pool = null, poolAll = null, usedPosts = {}, seenVids = {}, fetching = false, emptyRuns = 0;\r\n    function apiBase() {\r\n      var el = document.querySelector('link[rel=\"https:\/\/api.w.org\/\"]');\r\n      return ((window.wpApiSettings && window.wpApiSettings.root) || (el && el.getAttribute('href')) || '\/wp-json\/').replace(\/\\\/$\/, '');\r\n    }\r\n    function thisPostId() { var m = document.body.className.match(\/\\bpostid-(\\d+)\\b\/); return m ? +m[1] : 0; }\r\n    function shuffled(a) { a = a.slice(); for (var i = a.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)), t = a[i]; a[i] = a[j]; a[j] = t; } return a; }\r\n    function getJSON(u) { return fetch(u).then(function (r) { if (!r.ok) throw new Error(r.status); return r.json().then(function (j) { return { j: j, pages: +(r.headers.get('X-WP-TotalPages') || 1) }; }); }); }\r\n    function loadPool() {\r\n      if (pool) return Promise.resolve();\r\n      var base = apiBase(), cached = null;\r\n      try { cached = sessionStorage.getItem('hpu_rv_cat'); } catch (e) {}\r\n      var cat = cached ? Promise.resolve(+cached) : getJSON(base + '\/wp\/v2\/categories?slug=hpu-videos&per_page=1&_fields=id').then(function (x) {\r\n        try { sessionStorage.setItem('hpu_rv_cat', x.j[0].id); } catch (e) {}\r\n        return x.j[0].id;\r\n      });\r\n      return cat.then(function (c) {\r\n        var url = function (p) { return base + '\/wp\/v2\/posts?categories=' + c + '&per_page=100&page=' + p + '&_fields=id'; };\r\n        return getJSON(url(1)).then(function (first) {\r\n          var rest = []; for (var p = 2; p <= first.pages; p++) rest.push(getJSON(url(p)));\r\n          return Promise.all(rest).then(function (more) { return more.reduce(function (all, x) { return all.concat(x.j); }, first.j); });\r\n        });\r\n      }).then(function (list) {\r\n        var me = thisPostId();\r\n        poolAll = list.map(function (p) { return p.id; }).filter(function (id) { return id !== me; });\r\n        pool = shuffled(poolAll);\r\n      });\r\n    }\r\n    function takeIds(k) {\r\n      var out = [];\r\n      while (out.length < k && poolAll && poolAll.length) {\r\n        if (!pool.length) { usedPosts = {}; pool = shuffled(poolAll); seenVids = {}; if (items[0]) seenVids[items[0].id] = 1; } \/\/ whole library shown: start a fresh shuffle\r\n        var id = pool.shift();\r\n        if (!usedPosts[id]) { usedPosts[id] = 1; out.push(id); }\r\n      }\r\n      return out;\r\n    }\r\n    \/\/ Hidden and waiting: keep two queued (light on page load). Open: keep four queued ahead of the one on screen, so the feed never ends.\r\n    function ahead() { return standby ? 2 : 4; }\r\n    function fillFeed() {\r\n      if (!modal || fetching || items.length - idx > ahead()) return;\r\n      fetching = true;\r\n      loadPool().then(function () {\r\n        var ids = takeIds(standby ? 2 : 4); if (!ids.length) return [];\r\n        return getJSON(apiBase() + '\/wp\/v2\/posts?include=' + ids.join(',') + '&per_page=' + ids.length + '&_fields=id,link,title,content').then(function (x) {\r\n          var byId = {}; x.j.forEach(function (p) { byId[p.id] = p; });\r\n          var dec = document.createElement('textarea');\r\n          return ids.map(function (id) {\r\n            var p = byId[id]; if (!p) return null;\r\n            var m = ((p.content && p.content.rendered) || '').match(\/youtube(?:-nocookie)?\\.com\\\/embed\\\/([A-Za-z0-9_-]{11})\/) || JSON.stringify(p.meta || {}).match(\/embed\\\\*\\\/([A-Za-z0-9_-]{11})\/);\r\n            dec.innerHTML = (p.title && p.title.rendered) || '';\r\n            return m ? { id: m[1], title: dec.value, link: p.link } : null;\r\n          }).filter(Boolean);\r\n        });\r\n      }).then(function (list) {\r\n        fetching = false;\r\n        if (!modal) return;\r\n        var added = 0;\r\n        list.forEach(function (v) {\r\n          if (seenVids[v.id]) return;\r\n          seenVids[v.id] = 1; added++;\r\n          items.push(v); var sl = makeSlide(v); slides.push(sl); feed.insertBefore(sl, decks[0] ? decks[0].el : null);\r\n        });\r\n        emptyRuns = added ? 0 : emptyRuns + 1;\r\n        modal.classList.toggle('at-end', idx >= slides.length - 1);\r\n        if (!standby) preloadNext();\r\n        if (items.length - idx <= ahead() && emptyRuns < 3) fillFeed();\r\n      }).catch(function () { fetching = false; });\r\n    }\r\n    function makeCta() {\r\n      var wrap = document.createElement('div'); wrap.className = 'hpu-vm-cta';\r\n      var p = document.createElement('p'); p.textContent = cta.title;\r\n      var a = document.createElement('a'); a.textContent = cta.buttons[0].text; a.href = cta.buttons[0].link;\r\n      fastTap(a, function (e) {\r\n        track('video_modal_cta_click', { link_url: a.href, feed_position: idx });\r\n        if (e.type === 'touchend') window.location.href = a.href; \/\/ a plain click follows the link on its own\r\n      });\r\n      wrap.appendChild(p); wrap.appendChild(a);\r\n      return wrap;\r\n    }\r\n    function makeSlide(item) {\r\n      var s = document.createElement('section'); s.className = 'hpu-vm-slide';\r\n      if (item.title) s.setAttribute('aria-label', item.title);\r\n      var f = document.createElement('div'); f.className = 'hpu-vm-frame';\r\n      \/\/ No cover image: the frame stays black until the video itself is on screen.\r\n      \/\/ Ambient glow: the video's own colors, blurred out around the frame.\r\n      var g = document.createElement('div'); g.className = 'hpu-vm-glow'; g.setAttribute('aria-hidden', 'true');\r\n      g.innerHTML = '<i><\/i><i class=\"off\"><\/i>'; g.firstChild.style.backgroundImage = 'url(\"https:\/\/i.ytimg.com\/vi\/' + item.id + '\/mq1.jpg\")';\r\n      f.appendChild(g);\r\n      s.appendChild(f);\r\n      if (hasCta) s.appendChild(makeCta());\r\n      return s;\r\n    }\r\n    function addSlides() {\r\n      if (!modal) return;\r\n      feedItems().forEach(function (v) {\r\n        if (items.some(function (x) { return x.id === v.id; })) return;\r\n        items.push(v); var s = makeSlide(v); slides.push(s); feed.insertBefore(s, decks[0] ? decks[0].el : null);\r\n      });\r\n      modal.classList.toggle('at-end', idx >= slides.length - 1);\r\n      if (!standby && decks.length) preloadNext();\r\n    }\r\n    function markActive() {\r\n      slides.forEach(function (s, i) { s.classList.toggle('is-active', i === idx); });\r\n      modal.classList.toggle('at-end', idx >= slides.length - 1);\r\n    }\r\n    \/\/ Tint the phone's status bar \/ notch area to match the dark viewer while it is open.\r\n    \/\/ theme-color covers older iOS Safari; Safari 26 reads the page background near the top, so set that too.\r\n    var tint = null;\r\n    function setTint(on) {\r\n      var de = document.documentElement, b = document.body;\r\n      if (on && !tint) {\r\n        var metas = [].slice.call(document.querySelectorAll('meta[name=\"theme-color\"]'));\r\n        tint = { metas: metas.map(function (m) { return [m, m.getAttribute('content')]; }), html: de.style.backgroundColor, body: b.style.backgroundColor, created: null };\r\n        if (!metas.length) { var m = document.createElement('meta'); m.name = 'theme-color'; document.head.appendChild(m); tint.created = m; metas = [m]; }\r\n        metas.forEach(function (m) { m.setAttribute('content', '#0d0a14'); });\r\n        de.style.backgroundColor = '#0d0a14'; b.style.backgroundColor = '#0d0a14';\r\n      } else if (!on && tint) {\r\n        tint.metas.forEach(function (p) { if (p[1] === null) p[0].removeAttribute('content'); else p[0].setAttribute('content', p[1]); });\r\n        if (tint.created) tint.created.remove();\r\n        de.style.backgroundColor = tint.html; b.style.backgroundColor = tint.body; tint = null;\r\n      }\r\n    }\r\n    \/\/ Three players: the one on screen, the next video and the previous one, so swiping either way is instant.\r\n    function holding(i) {\r\n      if (i < 0 || i >= items.length) return null;\r\n      for (var k = 0; k < decks.length; k++) { var d = decks[k]; if (d !== cur && d.vid === items[i].id) return d; }\r\n      return null;\r\n    }\r\n    function makeDeck(n) {\r\n      var el = document.createElement('div'); el.className = 'hpu-vm-stage';\r\n      el.innerHTML = '<button type=\"button\" class=\"hpu-vm-sound\">Tap for sound<\/button><div><\/div>';\r\n      feed.appendChild(el);\r\n      var d = { el: el, host: el.lastChild, player: null, ready: false, vid: null, slot: -1, preloading: false, seekOnSwap: false, parkTimer: null, loopTimer: null, wantSound: false, forcedMute: false, warm: false, capsDone: false, startAt: 0 };\r\n      fastTap(el.querySelector('.hpu-vm-sound'), function () {\r\n        wantAudio = true; d.forcedMute = false;\r\n        unlockAudio(); \/\/ inside the tap: allows sound on both players, so no second tap is needed\r\n        try { d.player.unMute(); d.player.setVolume(100); d.player.playVideo(); } catch (e) {}\r\n        modal && modal.classList.remove('needs-sound');\r\n      });\r\n      return d;\r\n    }\r\n    function hideDeck(d) {\r\n      if (!d) return;\r\n      d.el.classList.add('no-fade'); d.el.classList.remove('is-live', 'is-preview');\r\n      void d.el.offsetWidth; \/\/ apply the hide instantly, before the player moves\r\n      d.el.classList.remove('no-fade');\r\n    }\r\n    function placeDeck(d, slot) {\r\n      var s = slides[slot]; if (!d || !s) return;\r\n      d.slot = slot;\r\n      var r = s.querySelector('.hpu-vm-frame').getBoundingClientRect(), fr = feed.getBoundingClientRect();\r\n      d.el.style.top = (r.top - fr.top + feed.scrollTop) + 'px';\r\n      d.el.style.left = (r.left - fr.left) + 'px';\r\n      d.el.style.width = r.width + 'px';\r\n      d.el.style.height = r.height + 'px';\r\n    }\r\n    \/\/ iPhone only lets a player make sound if it was unmuted during a tap. Call this inside a tap: it unmutes the\r\n    \/\/ player on screen and briefly unmutes then re-mutes the others, which unlocks them for later swipes.\r\n    function unlockAudio() {\r\n      decks.forEach(function (d) {\r\n        if (!d.player || !d.ready || !d.player.unMute) return;\r\n        try {\r\n          if (d === cur) { d.player.unMute(); d.player.setVolume(100); }\r\n          else { d.player.unMute(); d.player.mute(); }\r\n        } catch (e) {}\r\n      });\r\n    }\r\n    function createPlayer(d, vid, o) {\r\n      d.vid = vid; d.ready = false;\r\n      return (d.creating = loadYT().then(function () {\r\n        return new Promise(function (res) {\r\n          if (!modal) return;\r\n          d.player = new YT.Player(d.host, {\r\n            videoId: vid,\r\n            playerVars: { autoplay: o.autoplay ? 1 : 0, mute: o.mute ? 1 : 0, playsinline: 1, cc_load_policy: 1, cc_lang_pref: 'en', rel: 0, start: Math.floor(o.start || 0) },\r\n            events: {\r\n              onReady: function () { if ((o.start || 0) % 1) { try { d.player.seekTo(o.start, true); } catch (e) {} } d.ready = true; res(); },\r\n              onApiChange: function () { if (d === cur) applyCaptions(d); },\r\n              onStateChange: function (e) { onState(d, e.data); }\r\n            }\r\n          });\r\n        });\r\n      }));\r\n    }\r\n    \/\/ While a video plays, drift the glow through YouTube's frame stills (about 25\/50\/75% in) so it shifts with the video.\r\n    var glowTimer = null;\r\n    function stopGlow() { clearInterval(glowTimer); glowTimer = null; }\r\n    function startGlow() {\r\n      stopGlow();\r\n      if (CALM.matches) return;\r\n      var s = slides[idx], item = items[idx]; if (!s || !item) return;\r\n      var g = s.querySelector('.hpu-vm-glow'); if (!g) return;\r\n      var list = [];\r\n      ['mq1', 'mq2', 'mq3'].forEach(function (n) { list.push('https:\/\/i.ytimg.com\/vi\/' + item.id + '\/' + n + '.jpg'); });\r\n      var k = 0;\r\n      glowTimer = setInterval(function () {\r\n        k = (k + 1) % list.length;\r\n        var src = list[k], im = new Image();\r\n        im.onload = function () {\r\n          if (!g.isConnected) return;\r\n          var on = g.querySelector('i:not(.off)'), off = g.querySelector('i.off');\r\n          if (!on || !off) return;\r\n          off.style.backgroundImage = 'url(\"' + src + '\")';\r\n          off.classList.remove('off'); on.classList.add('off');\r\n        };\r\n        im.src = src;\r\n      }, 6500);\r\n    }\r\n    \/\/ Keep the cover image up until the new video is really rolling, so no loading chrome or old frame shows.\r\n    function revealWhenRolling(d) {\r\n      clearTimeout(revealTimer);\r\n      var want = items[idx] && items[idx].id, t0 = Date.now();\r\n      (function check() {\r\n        if (!modal || d !== cur) return;\r\n        var ok;\r\n        try {\r\n          var vd = d.player.getVideoData ? d.player.getVideoData() : null;\r\n          ok = (!vd || !vd.video_id || vd.video_id === want) && d.player.getPlayerState() === 1 && d.player.getCurrentTime() > d.startAt + 0.05;\r\n        } catch (e) { ok = true; }\r\n        if (ok || Date.now() - t0 > 3000) { d.el.classList.add('is-live'); d.el.classList.remove('is-preview'); showCta(300); startGlow(); return; }\r\n        revealTimer = setTimeout(check, 60);\r\n      })();\r\n    }\r\n    function onState(d, s) {\r\n      if (!modal) return;\r\n      if (d !== cur || standby) {\r\n        \/\/ Next-up player: plays muted for a moment so a few seconds buffer, then parks paused on its opening frame\r\n        \/\/ and shows under the next slide, so the swipe brings in the real first frame. It plays when the slide lands.\r\n        if (s === 1 && d.preloading) {\r\n          d.preloading = false; stopPreview(d);\r\n          d.parkTimer = setTimeout(function () {\r\n            d.parkTimer = null;\r\n            if (d === cur) return;\r\n            try { d.player.pauseVideo(); d.player.seekTo(d.skipAt || SKIP, true); } catch (e) {}\r\n            d.seekOnSwap = false;\r\n            if (d.slot === idx + 1 || d.slot === idx - 1) d.el.classList.add('is-preview');\r\n          }, 1500);\r\n        } else if (s === 1 && !d.parkTimer && !d.warm) {\r\n          try { d.player.pauseVideo(); } catch (e) {} \/\/ only one video ever plays\r\n        }\r\n        return;\r\n      }\r\n      clearTimeout(hideTimer);\r\n      if (s === 1) {\r\n        if (d.wantSound) {\r\n          \/\/ Start muted (always allowed), then match the viewer's sound choice. If the browser pauses the video\r\n          \/\/ for unmuting (iPhone, on a player that hasn't been tapped yet), go back to muted playback and offer the tap.\r\n          d.wantSound = false;\r\n          if (wantAudio) {\r\n            try { d.player.unMute(); d.player.setVolume(100); } catch (e) {}\r\n            setTimeout(function () {\r\n              if (d !== cur || !modal) return;\r\n              try { if (d.player.getPlayerState() === 2) { d.forcedMute = true; d.player.mute(); d.player.playVideo(); modal.classList.add('needs-sound'); } } catch (e) {}\r\n            }, 350);\r\n          } else {\r\n            try { d.player.mute(); } catch (e) {}\r\n          }\r\n        }\r\n        if (!d.el.classList.contains('is-live')) revealWhenRolling(d);\r\n        if (!d.capsDone) { d.capsDone = true; applyCaptions(d); }\r\n        hideTimer = setTimeout(function () { modal && modal.classList.add('is-playing'); }, 4000);\r\n        clearTimeout(preloadTimer); preloadTimer = setTimeout(preloadNext, 0); \/\/ queue the next video the moment this one starts\r\n      } else {\r\n        modal.classList.remove('is-playing');\r\n        if (s === 0 && idx < slides.length - 1) go(idx + 1);\r\n      }\r\n    }\r\n    function stopPreview(d) { clearTimeout(d.parkTimer); clearInterval(d.loopTimer); d.parkTimer = null; d.loopTimer = null; }\r\n    function loadInto(d, n) {\r\n      if (!d.player && d.creating) { d.creating.then(function () { preloadNext(); }); return; } \/\/ still being built\r\n      hideDeck(d); placeDeck(d, n); d.capsDone = false; d.skipAt = startFor(items[n]); d.startAt = d.skipAt; d.preloading = true; d.seekOnSwap = true; stopPreview(d);\r\n      if (!d.player) {\r\n        createPlayer(d, items[n].id, { autoplay: true, mute: true, start: d.skipAt }).then(function () { try { d.player.mute(); if (d.player.getPlayerState() !== 1 && d.player.getPlayerState() !== 3) d.player.playVideo(); } catch (e) {} });\r\n      } else {\r\n        d.vid = items[n].id;\r\n        try { d.player.mute(); d.player.loadVideoById({ videoId: items[n].id, startSeconds: d.skipAt }); } catch (e) {}\r\n      }\r\n    }\r\n    \/\/ Make sure the next and previous videos each sit ready in a spare player (next first).\r\n    function preloadNext() {\r\n      if (!modal || standby) return;\r\n      [idx + 1, idx - 1].forEach(function (n) {\r\n        if (n < 0 || n >= items.length || holding(n)) return;\r\n        var keep = [cur, holding(idx + 1), holding(idx - 1)];\r\n        var free = decks.filter(function (d) { return keep.indexOf(d) < 0; })[0];\r\n        if (free) loadInto(free, n);\r\n      });\r\n    }\r\n    function soundCheck(d) {\r\n      clearTimeout(soundTimer);\r\n      soundTimer = setTimeout(function () {\r\n        if (!modal || d !== cur || !d.player || !d.player.getPlayerState) return;\r\n        try {\r\n          if (d.player.getPlayerState() === 2 || d.player.getPlayerState() === 5) { d.forcedMute = true; d.player.mute(); d.player.playVideo(); if (wantAudio) modal.classList.add('needs-sound'); }\r\n          else if (wantAudio && d.player.isMuted && d.player.isMuted()) { d.forcedMute = true; modal.classList.add('needs-sound'); }\r\n          else modal.classList.remove('needs-sound');\r\n        } catch (e) {}\r\n      }, 1500);\r\n    }\r\n    function showCta(delay) {\r\n      clearTimeout(ctaTimer);\r\n      ctaTimer = setTimeout(function () { if (modal && !swiping) modal.classList.remove('cta-hidden'); }, delay || 0);\r\n    }\r\n    function go(n) {\r\n      if (!feed || n < 0 || n >= slides.length) return;\r\n      feed.scrollTo({ top: slides[n].offsetTop, behavior: CALM.matches ? 'auto' : 'smooth' });\r\n    }\r\n\r\n    function onScroll() {\r\n      if (resizing || !slides[idx]) return;\r\n      if (lastH && feed.clientHeight !== lastH) { onResize(); return; } \/\/ the phone turned: this scroll is the layout shifting, not a swipe\r\n      if (!swiping && Math.abs(feed.scrollTop - slides[idx].offsetTop) > 6) {\r\n        swiping = true; clearTimeout(ctaTimer);\r\n        modal.classList.add('is-swiping', 'cta-hidden');\r\n      }\r\n      \/\/ The moment a swipe starts, the video coming in starts playing (muted), so it is already moving as it slides in.\r\n      if (swiping) {\r\n        var dir = feed.scrollTop > slides[idx].offsetTop ? 1 : -1, w = holding(idx + dir);\r\n        if (w && w.ready && !w.warm) {\r\n          w.warm = true; w.preloading = false; stopPreview(w);\r\n          if (w.seekOnSwap) { try { w.player.seekTo(w.skipAt || SKIP, true); } catch (e) {} w.seekOnSwap = false; }\r\n          try { w.player.mute(); w.player.playVideo(); } catch (e) {}\r\n        }\r\n      }\r\n      \/\/ Start the next video while the snap is still finishing, so it is already rolling when the slide lands.\r\n      var h = feed.clientHeight || 1, p = feed.scrollTop \/ h, n = Math.round(p);\r\n      if (n !== idx && n >= 0 && n < slides.length && Math.abs(p - n) < 0.3) {\r\n        var nx = holding(n);\r\n        if (nx && nx.ready) commit(n);\r\n      }\r\n      clearTimeout(settleTimer); settleTimer = setTimeout(settle, 90);\r\n    }\r\n    function settle() {\r\n      if (!modal || resizing) return;\r\n      clearTimeout(settleTimer);\r\n      var h = feed.clientHeight || 1;\r\n      var n = Math.max(0, Math.min(slides.length - 1, Math.round(feed.scrollTop \/ h)));\r\n      if (Math.abs(feed.scrollTop - slides[n].offsetTop) > 2) return; \/\/ still snapping\r\n      swiping = false; modal.classList.remove('is-swiping');\r\n      \/\/ Anything still rolling off screen stops once the slide has landed.\r\n      decks.forEach(function (d) { if (d !== cur && (d.warm || d.leaving)) { d.warm = false; d.leaving = false; try { d.player.pauseVideo(); } catch (e) {} } });\r\n      if (n === idx) { showCta(cur && cur.el.classList.contains('is-live') ? 150 : 1200); return; }\r\n      commit(n);\r\n    }\r\n    function commit(n) {\r\n      idx = n; markActive();\r\n      fillFeed();\r\n      modal.classList.remove('is-playing', 'needs-sound');\r\n      clearTimeout(preloadTimer); clearTimeout(revealTimer); stopGlow();\r\n      var prev = cur, nx = holding(n);\r\n      \/\/ Remember the sound choice from the video being left: muted by the viewer (YouTube's own button) stays muted,\r\n      \/\/ unmuted stays unmuted. A mute we forced because the browser blocked sound doesn't count as their choice.\r\n      try { if (prev && prev.player && prev.player.isMuted && !prev.forcedMute) wantAudio = !prev.player.isMuted(); } catch (e) {}\r\n      if (nx && nx.ready) {\r\n        \/\/ The next video is already buffered in the other player: swap to it.\r\n        cur = nx; nx.preloading = false; nx.warm = false; stopPreview(nx);\r\n        \/\/ The video being left stays ready (paused, in view on its slide) for an instant swipe back.\r\n        \/\/ It keeps playing (muted) while it slides away, and pauses once the new slide has landed.\r\n        stopPreview(prev); prev.leaving = true; try { prev.player.mute(); } catch (e) {}\r\n        prev.el.classList.add('no-fade'); prev.el.classList.remove('is-live'); prev.el.classList.add('is-preview'); void prev.el.offsetWidth; prev.el.classList.remove('no-fade');\r\n        prev.seekOnSwap = false; \/\/ swiping back resumes where it was paused\r\n        placeDeck(cur, n);\r\n        try {\r\n          if (cur.seekOnSwap && !(cur.player.getPlayerState() === 1 && cur.player.getCurrentTime() < (cur.skipAt || SKIP) + 3)) { cur.player.seekTo(cur.skipAt || SKIP, true); cur.startAt = cur.skipAt || SKIP; }\r\n          else cur.startAt = cur.player.getCurrentTime() || 0;\r\n          cur.seekOnSwap = false;\r\n          cur.forcedMute = false;\r\n          cur.wantSound = true;\r\n          cur.player.playVideo();\r\n          if (cur.player.getPlayerState() === 1) onState(cur, 1); \/\/ it was still pre-buffering, so no state change will fire\r\n        } catch (e) {}\r\n        var sw = cur;\r\n        setTimeout(function () { try { if (sw === cur && sw.player.getPlayerState() === 1 && !sw.el.classList.contains('is-live')) onState(sw, 1); } catch (e) {} }, 400);\r\n      } else {\r\n        hideDeck(cur); placeDeck(cur, n); cur.capsDone = false; cur.skipAt = startFor(items[n]); cur.startAt = cur.skipAt; cur.vid = items[n].id; cur.forcedMute = false; cur.wantSound = true;\r\n        try { cur.player.loadVideoById({ videoId: items[n].id, startSeconds: cur.skipAt }); } catch (e) {}\r\n      }\r\n      soundCheck(cur);\r\n      showCta(1500); \/\/ fallback if the new video is slow to start\r\n      track('video_modal_swipe', { feed_position: idx });\r\n    }\r\n    \/\/ Turning the phone: every slide changes height, so the feed's scroll position briefly points at the wrong video.\r\n    \/\/ While that settles, swipe handling is paused and the feed is pinned to the current video; playback is untouched.\r\n    var resizing = false, resizeTimer = null, lastH = 0;\r\n    function onResize() {\r\n      if (!modal) return;\r\n      resizing = true; clearTimeout(resizeTimer); lastH = feed.clientHeight;\r\n      function pin() {\r\n        if (!modal || !slides[idx]) return;\r\n        feed.style.scrollSnapType = 'none';\r\n        feed.scrollTop = slides[idx].offsetTop;\r\n        decks.forEach(function (d) { if (d.slot >= 0) placeDeck(d, d.slot); });\r\n      }\r\n      pin(); requestAnimationFrame(pin);\r\n      resizeTimer = setTimeout(function () {\r\n        pin();\r\n        if (!modal) return;\r\n        feed.style.scrollSnapType = '';\r\n        resizing = false; swiping = false; modal.classList.remove('is-swiping'); lastH = feed.clientHeight;\r\n        \/\/ Only the caption size changes with orientation; don't reload the captions module mid-playback.\r\n        decks.forEach(function (d) { try { if (d.player && d.player.setOption) d.player.setOption('captions', 'fontSize', capSize()); } catch (e) {} });\r\n        showCta(0);\r\n      }, 500);\r\n    }\r\n\r\n    function close(fromPop) {\r\n      if (!modal) return;\r\n      var wasOpen = !standby;\r\n      decks.forEach(function (d) { stopPreview(d); try { if (d.player && d.player.destroy) d.player.destroy(); } catch (e) {} });\r\n      decks = []; cur = null; standby = false;\r\n      [hideTimer, settleTimer, ctaTimer, soundTimer, revealTimer, preloadTimer].forEach(clearTimeout); stopGlow();\r\n      if (modal.__ro) modal.__ro.disconnect();\r\n      modal.remove(); modal = feed = null; items = []; slides = []; idx = 0; swiping = false;\r\n      document.documentElement.style.overflow = '';\r\n      setTint(false);\r\n      LAND.removeEventListener && LAND.removeEventListener('change', onResize);\r\n      window.removeEventListener('resize', onResize);\r\n      window.removeEventListener('orientationchange', onResize);\r\n      clearTimeout(resizeTimer); resizing = false;\r\n      if (wasOpen && !fromPop && history.state && history.state.hpuVm) history.back();\r\n      if (wasOpen) setTimeout(prewarm, 1500); \/\/ get ready again in case they reopen\r\n    }\r\n    \/\/ Build the viewer hidden, with the page's own video loading muted and parked just past the fade,\r\n    \/\/ so tapping the video opens it as fast as a swipe does.\r\n    function build() {\r\n      items = feedItems(); if (!items.length) return false;\r\n      modal = document.createElement('div');\r\n      modal.className = 'hpu-vm cta-hidden is-standby'; modal.setAttribute('role', 'dialog'); modal.setAttribute('aria-modal', 'true'); modal.setAttribute('aria-label', 'Video player'); modal.setAttribute('aria-hidden', 'true');\r\n      var x = document.createElement('button'); x.type = 'button'; x.className = 'hpu-vm-close'; x.setAttribute('aria-label', 'Close video'); x.innerHTML = '&times;';\r\n      feed = document.createElement('div'); feed.className = 'hpu-vm-feed';\r\n      slides = items.map(function (v) { var s = makeSlide(v); feed.appendChild(s); return s; });\r\n      decks = [makeDeck(0), makeDeck(1), makeDeck(2)]; cur = decks[0];\r\n      var more = document.createElement('button'); more.type = 'button'; more.className = 'hpu-vm-more'; more.setAttribute('aria-label', 'Next video');\r\n      more.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 11l6-6 6 6\"\/><path d=\"M6 18l6-6 6 6\" opacity=\".5\"\/><\/svg>';\r\n      modal.appendChild(x); modal.appendChild(feed); modal.appendChild(more);\r\n      document.body.appendChild(modal);\r\n      standby = true;\r\n      idx = 0; markActive(); placeDeck(cur, 0); lastH = feed.clientHeight;\r\n      seenVids = {}; seenVids[items[0].id] = 1; emptyRuns = 0; fetching = false;\r\n      fillFeed(); \/\/ line up the first random videos while the page is being read\r\n\r\n      fastTap(x, function () { close(false); });\r\n      \/\/ The arrows don't catch touches, so a swipe that starts on them still moves the feed. A tap on them goes to the next video.\r\n      feed.addEventListener('click', function (e) {\r\n        if (modal.classList.contains('at-end')) return;\r\n        var r = more.getBoundingClientRect(); if (!r.width) return;\r\n        if (e.clientX >= r.left - 20 && e.clientX <= r.right + 20 && e.clientY >= r.top - 16 && e.clientY <= r.bottom + 16) go(idx + 1);\r\n      });\r\n      feed.addEventListener('scroll', onScroll, { passive: true });\r\n      feed.addEventListener('scrollend', settle);\r\n      LAND.addEventListener && LAND.addEventListener('change', onResize);\r\n      window.addEventListener('resize', onResize);\r\n      window.addEventListener('orientationchange', onResize);\r\n      if (window.ResizeObserver) { var ro = new ResizeObserver(function () { onResize(); }); ro.observe(modal); modal.__ro = ro; }\r\n\r\n      \/\/ The other two players are created now too (idle, no video loading), so a tap on open can unlock their sound.\r\n      [decks[1], decks[2]].forEach(function (d) { createPlayer(d, items[0].id, { autoplay: false, mute: true }); d.vid = null; });\r\n      var first = cur; first.preloading = true; first.skipAt = startFor(items[0], true); first.startAt = first.skipAt; first.seekOnSwap = true; first.startOnReady = null;\r\n      createPlayer(first, items[0].id, { autoplay: true, mute: true, start: first.skipAt }).then(function () {\r\n        if (!modal || first !== cur) return;\r\n        if (!standby && first.startOnReady !== null) {\r\n          \/\/ They tapped before the player finished loading: start it now.\r\n          var at = first.startOnReady; first.startOnReady = null;\r\n          try { first.player.seekTo(at, true); first.player.playVideo(); if (first.player.getPlayerState() === 1) onState(first, 1); } catch (e) {}\r\n          applyCaptions(first); soundCheck(first);\r\n        } else {\r\n          try { first.player.mute(); var st = first.player.getPlayerState(); if (st !== 1 && st !== 3) first.player.playVideo(); } catch (e) {}\r\n        }\r\n      });\r\n      return true;\r\n    }\r\n    function prewarm() {\r\n      if (modal || !PHONE.matches || document.hidden) return;\r\n      build();\r\n    }\r\n    function open(start) {\r\n      if (!modal && !build()) return false;\r\n      if (!standby) return false; \/\/ already open\r\n      standby = false;\r\n      modal.classList.remove('is-standby'); modal.removeAttribute('aria-hidden');\r\n      document.documentElement.style.overflow = 'hidden';\r\n      setTint(true);\r\n      feed.scrollTop = 0; idx = 0; markActive(); placeDeck(cur, 0);\r\n      requestAnimationFrame(function () { modal && modal.classList.add('is-open'); });\r\n      try { history.pushState({ hpuVm: 1 }, ''); } catch (e) {}\r\n      track('video_modal_open', { feed_length: items.length });\r\n      fillFeed(); \/\/ open: top the queue up to four\r\n      showCta(1800);\r\n\r\n      wantAudio = true;\r\n      var first = cur, at = start || startFor(items[0], true);\r\n      first.preloading = false; stopPreview(first); first.seekOnSwap = false; first.startAt = at;\r\n      first.forcedMute = false; first.wantSound = true;\r\n      if (first.ready && first.player) {\r\n        try { first.player.seekTo(at, true); first.player.playVideo(); } catch (e) {}\r\n        if (wantAudio) unlockAudio(); \/\/ still inside the tap, so iPhone allows sound on both players\r\n        try { if (first.player.getPlayerState() === 1) onState(first, 1); } catch (e) {}\r\n        applyCaptions(first); soundCheck(first);\r\n      } else {\r\n        first.startOnReady = at; \/\/ still loading: it starts the moment it is ready\r\n      }\r\n      preloadNext(); \/\/ queue the next video right away\r\n      return true;\r\n    }\r\n    if (PHONE.matches) {\r\n      var kick = function () { setTimeout(prewarm, 800); };\r\n      if (document.readyState === 'complete') kick(); else window.addEventListener('load', kick);\r\n    }\r\n    window.addEventListener('popstate', function () { if (modal && !standby) close(true); });\r\n    document.addEventListener('keydown', function (e) {\r\n      if (!modal || standby) return;\r\n      if (e.key === 'Escape') close(false);\r\n      else if (e.key === 'ArrowDown') { e.preventDefault(); go(idx + 1); }\r\n      else if (e.key === 'ArrowUp') { e.preventDefault(); go(idx - 1); }\r\n    });\r\n\r\n    \/\/ Tap on the main video (theme turns it into a thumbnail that opens Fancybox): phones get our modal instead.\r\n    document.addEventListener('click', function (e) {\r\n      if (!PHONE.matches) return;\r\n      if (e.target.closest && e.target.closest('.hpu-video-section-iframe')) {\r\n        if (open(0)) { e.preventDefault(); e.stopPropagation(); }\r\n      }\r\n    }, true);\r\n    \/\/ Chapter timestamps: same modal on phones, starting at that time.\r\n    document.addEventListener('click', function (e) {\r\n      if (!PHONE.matches || !e.target.closest) return;\r\n      var inner = e.target.closest('.hpu-video-transcript-text-inner'); if (!inner) return;\r\n      var link = inner.querySelector('.hpu-video-transcript-chapter-time a'); if (!link) return;\r\n      var t = parseInt(new URL(link.href).searchParams.get('t'), 10);\r\n      if (open(isNaN(t) ? 0 : t)) { e.preventDefault(); e.stopPropagation(); }\r\n    }, true);\r\n  })();\r\n\r\n  \/\/ \u2500\u2500 Tag Pills \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  (function() {\r\n    var containers = document.querySelectorAll('.hpu-video-tags');\r\n    if (!containers.length) return;\r\n\r\n    var match = document.body.className.match(\/\\bpostid-(\\d+)\\b\/);\r\n    if (!match) return;\r\n\r\n    var apiRootEl = document.querySelector('link[rel=\"https:\/\/api.w.org\/\"]');\r\n    var apiRoot = (window.wpApiSettings && window.wpApiSettings.root)\r\n      || (apiRootEl && apiRootEl.getAttribute('href'))\r\n      || '\/wp-json\/';\r\n    var url = apiRoot.replace(\/\\\/$\/, '') + '\/wp\/v2\/tags?post=' + match[1] + '&per_page=100';\r\n\r\n    fetch(url)\r\n      .then(function(r) { return r.ok ? r.json() : Promise.reject(); })\r\n      .then(function(tags) {\r\n        if (!tags.length) return;\r\n        var decoder = document.createElement('textarea');\r\n        containers.forEach(function(container) {\r\n          tags.forEach(function(tag) {\r\n            decoder.innerHTML = tag.name;\r\n            var pill = document.createElement('span');\r\n            pill.className = 'hpu-video-tag';\r\n            pill.textContent = decoder.value;\r\n            container.appendChild(pill);\r\n          });\r\n        });\r\n      })\r\n      .catch(function() {});\r\n  })();\r\n\r\n  \/\/ \u2500\u2500 Related Videos: Loader + Scroll Indicators \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  (function() {\r\n    var slider    = document.querySelector('.hpu-related-videos-slider');\r\n    var noResults = document.querySelector('.hpu-related-videos-none');\r\n    var section   = slider && slider.closest('.hpu-related-videos');\r\n    if (!slider || !section) return;\r\n\r\n    \/\/ Scroll indicators \u2014 wired immediately, before any fetch\r\n    function updateIndicators() {\r\n      section.classList.toggle('has-scroll-left',  slider.scrollLeft > 0);\r\n      section.classList.toggle('has-scroll-right',\r\n        slider.scrollLeft + slider.clientWidth < slider.scrollWidth - 1);\r\n    }\r\n    slider.addEventListener('scroll', updateIndicators, { passive: true });\r\n    window.addEventListener('load', updateIndicators);\r\n\r\n    \/\/ Nav chevron buttons\r\n    var prevBtn = document.createElement('button');\r\n    prevBtn.className = 'hpu-rv-nav hpu-rv-nav-prev';\r\n    prevBtn.setAttribute('aria-label', 'Scroll left');\r\n    var prevChev = document.createElement('span');\r\n    prevChev.className = 'hpu-rv-nav-chevron';\r\n    prevBtn.appendChild(prevChev);\r\n    section.appendChild(prevBtn);\r\n\r\n    var nextBtn = document.createElement('button');\r\n    nextBtn.className = 'hpu-rv-nav hpu-rv-nav-next';\r\n    nextBtn.setAttribute('aria-label', 'Scroll right');\r\n    var nextChev = document.createElement('span');\r\n    nextChev.className = 'hpu-rv-nav-chevron';\r\n    nextBtn.appendChild(nextChev);\r\n    section.appendChild(nextBtn);\r\n\r\n    prevBtn.addEventListener('click', function() {\r\n      var firstCard = slider.querySelector('.hpu-related-videos-card, .hpu-rv-skel');\r\n      var n = window.innerWidth <= 1279 ? 2 : 4;\r\n      var dist = firstCard ? (firstCard.offsetWidth + 12) * n : slider.clientWidth * 0.8;\r\n      slider.scrollBy({ left: -dist, behavior: 'smooth' });\r\n    });\r\n    nextBtn.addEventListener('click', function() {\r\n      var firstCard = slider.querySelector('.hpu-related-videos-card, .hpu-rv-skel');\r\n      var n = window.innerWidth <= 1279 ? 2 : 4;\r\n      var dist = firstCard ? (firstCard.offsetWidth + 12) * n : slider.clientWidth * 0.8;\r\n      slider.scrollBy({ left: dist, behavior: 'smooth' });\r\n    });\r\n\r\n    \/\/ Align nav buttons to the vertical center of the thumbnail image row\r\n    function positionNavButtons() {\r\n      var firstThumb = slider.querySelector('.hpu-related-videos-card-thumb, .hpu-rv-skel-thumb');\r\n      if (!firstThumb) return;\r\n      var thumbH = firstThumb.getBoundingClientRect().height;\r\n      if (!thumbH) return; \/\/ element is hidden (display:none tab)\r\n      var top = slider.getBoundingClientRect().top - section.getBoundingClientRect().top + thumbH \/ 2;\r\n      [prevBtn, nextBtn].forEach(function(btn) {\r\n        btn.style.top = top + 'px';\r\n        btn.style.transform = 'translateY(-50%)';\r\n      });\r\n    }\r\n    if (typeof ResizeObserver !== 'undefined') {\r\n      new ResizeObserver(positionNavButtons).observe(section);\r\n    }\r\n    window.addEventListener('resize', positionNavButtons);\r\n\r\n    \/\/ Related videos fetch \u2014 runs after page load, yields to idle work\r\n    function loadRelatedVideos() {\r\n      var match = document.body.className.match(\/\\bpostid-(\\d+)\\b\/);\r\n      if (!match) return;\r\n      var postId = match[1];\r\n\r\n      var apiRootEl = document.querySelector('link[rel=\"https:\/\/api.w.org\/\"]');\r\n      var base = ((window.wpApiSettings && window.wpApiSettings.root)\r\n        || (apiRootEl && apiRootEl.getAttribute('href'))\r\n        || '\/wp-json\/').replace(\/\\\/$\/, '');\r\n\r\n      var decoder = document.createElement('textarea');\r\n      var catId   = null;\r\n\r\n      function showSkeletons() {\r\n        for (var i = 0; i < 5; i++) {\r\n          var skel = document.createElement('div');\r\n          skel.className = 'hpu-rv-skel';\r\n          var t = document.createElement('div');\r\n          t.className = 'hpu-rv-skel-thumb';\r\n          var l1 = document.createElement('div');\r\n          l1.className = 'hpu-rv-skel-line';\r\n          var l2 = document.createElement('div');\r\n          l2.className = 'hpu-rv-skel-line hpu-rv-skel-line-short';\r\n          skel.appendChild(t); skel.appendChild(l1); skel.appendChild(l2);\r\n          slider.appendChild(skel);\r\n        }\r\n      }\r\n\r\n      function shuffle(arr) {\r\n        for (var i = arr.length - 1; i > 0; i--) {\r\n          var j = Math.floor(Math.random() * (i + 1));\r\n          var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;\r\n        }\r\n        return arr;\r\n      }\r\n\r\n      function appendCard(post) {\r\n        decoder.innerHTML = (post.title && post.title.rendered) ? post.title.rendered : 'Untitled';\r\n        var title    = decoder.value;\r\n        var link     = post.link || '#';\r\n        var embedded = post._embedded && post._embedded['wp:featuredmedia'];\r\n        var thumbUrl = Array.isArray(embedded) && embedded[0] && embedded[0].source_url\r\n          ? embedded[0].source_url : null;\r\n\r\n        var card = document.createElement('a');\r\n        card.className = 'hpu-related-videos-card';\r\n        card.href = link;\r\n\r\n        var thumb = document.createElement('div');\r\n        thumb.className = 'hpu-related-videos-card-thumb';\r\n        if (thumbUrl) {\r\n          var img = document.createElement('img');\r\n          img.src = thumbUrl; img.alt = title; img.loading = 'lazy';\r\n          thumb.appendChild(img);\r\n        } else {\r\n          var ph = document.createElement('div');\r\n          ph.className = 'hpu-related-videos-card-thumb-placeholder';\r\n          thumb.appendChild(ph);\r\n        }\r\n\r\n        var titleEl = document.createElement('div');\r\n        titleEl.className = 'hpu-related-videos-card-title';\r\n        titleEl.textContent = title;\r\n\r\n        card.appendChild(thumb);\r\n        card.appendChild(titleEl);\r\n        slider.appendChild(card);\r\n      }\r\n\r\n      \/\/ Share the related list with the mobile video modal's swipe feed.\r\n      function pushFeed(list) {\r\n        try {\r\n          var add = list.map(function(p) {\r\n            var c = (p.content && p.content.rendered) || '';\r\n            var m = c.match(\/youtube(?:-nocookie)?\\.com\\\/embed\\\/([A-Za-z0-9_-]{11})\/) || JSON.stringify(p.meta || {}).match(\/embed\\\\*\\\/([A-Za-z0-9_-]{11})\/);\r\n            var e = p._embedded && p._embedded['wp:featuredmedia'];\r\n            decoder.innerHTML = (p.title && p.title.rendered) || '';\r\n            return { id: m ? m[1] : null, title: decoder.value, link: p.link, thumb: (Array.isArray(e) && e[0] && e[0].source_url) || null };\r\n          }).filter(function(v) { return v.id; });\r\n          window.hpuRelatedFeed = (window.hpuRelatedFeed || []).concat(add);\r\n          document.dispatchEvent(new CustomEvent('hpu:related-ready'));\r\n        } catch (err) {}\r\n      }\r\n\r\n      var cachedCatId = (function() { try { return sessionStorage.getItem('hpu_rv_cat'); } catch(e) { return null; } })();\r\n\r\n      showSkeletons();\r\n\r\n      Promise.all([\r\n        fetch(base + '\/wp\/v2\/posts\/' + postId + '?_fields=tags')\r\n          .then(function(r) { return r.ok ? r.json() : Promise.reject(); }),\r\n        cachedCatId\r\n          ? Promise.resolve(+cachedCatId)\r\n          : fetch(base + '\/wp\/v2\/categories?slug=hpu-videos&per_page=1&_fields=id')\r\n              .then(function(r) { return r.ok ? r.json() : Promise.reject(); })\r\n              .then(function(cats) {\r\n                if (!cats.length) return Promise.reject();\r\n                try { sessionStorage.setItem('hpu_rv_cat', cats[0].id); } catch(e) {}\r\n                return cats[0].id;\r\n              })\r\n      ])\r\n      .then(function(results) {\r\n        var tagIds = Array.isArray(results[0].tags) ? results[0].tags : [];\r\n        catId = results[1];\r\n        var params = new URLSearchParams({\r\n          categories: catId,\r\n          per_page: 12,\r\n          status: 'publish',\r\n          orderby: 'date',\r\n          order: 'desc',\r\n          exclude: postId,\r\n          _embed: 'wp:featuredmedia'\r\n        });\r\n        if (tagIds.length) params.set('tags', tagIds.join(','));\r\n        return fetch(base + '\/wp\/v2\/posts?' + params)\r\n          .then(function(r) { return r.ok ? r.json() : Promise.reject(); });\r\n      })\r\n        .then(function(posts) {\r\n          var verticalMode = window.innerWidth <= 900;\r\n          slider.innerHTML = '';\r\n          shuffle(posts);\r\n          pushFeed(posts);\r\n          (verticalMode ? posts.slice(0, 6) : posts).forEach(appendCard);\r\n          updateIndicators();\r\n\r\n          if (posts.length < 12 && catId) {\r\n            var excludeIds = [postId].concat(posts.map(function(p) { return p.id; }));\r\n            var backfillParams = new URLSearchParams({\r\n              categories: catId,\r\n              per_page: 12 - posts.length,\r\n              status: 'publish',\r\n              orderby: 'date',\r\n              order: 'desc',\r\n              exclude: excludeIds.join(','),\r\n              _embed: 'wp:featuredmedia'\r\n            });\r\n            fetch(base + '\/wp\/v2\/posts?' + backfillParams)\r\n              .then(function(r) { return r.ok ? r.json() : []; })\r\n              .then(function(extra) {\r\n                if (!extra.length) {\r\n                  if (!slider.children.length) noResults.style.display = 'block';\r\n                  return;\r\n                }\r\n                shuffle(extra);\r\n                pushFeed(extra);\r\n                if (!verticalMode) extra.forEach(appendCard);\r\n                else if (!slider.children.length) noResults.style.display = 'block';\r\n                updateIndicators();\r\n              })\r\n              .catch(function() {\r\n                if (!slider.children.length) noResults.style.display = 'block';\r\n              });\r\n          } else if (!slider.children.length) {\r\n            noResults.style.display = 'block';\r\n          }\r\n        })\r\n        .catch(function() { slider.innerHTML = ''; noResults.style.display = 'block'; });\r\n    }\r\n\r\n    if (document.readyState === 'loading') {\r\n      document.addEventListener('DOMContentLoaded', loadRelatedVideos);\r\n    } else {\r\n      loadRelatedVideos();\r\n    }\r\n  })();\r\n\r\n  \/\/ \u2500\u2500 Dynamic Breadcrumb Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  (function() {\r\n    try {\r\n      const breadcrumbElements = document.querySelectorAll('.breadcrumbs [property=\"v:title\"]');\r\n      \r\n      breadcrumbElements.forEach(el => {\r\n        if (el.textContent.trim().toLowerCase() === 'hpu videos') {\r\n          const wrapper = el.closest('[typeof=\"v:Breadcrumb\"]');\r\n          \r\n          if (wrapper) {\r\n            \/\/ Find and remove the text node following the span to get rid of the stray \">\"\r\n            const nextNode = wrapper.nextSibling;\r\n            if (nextNode && nextNode.nodeType === Node.TEXT_NODE) {\r\n              nextNode.remove();\r\n            }\r\n            \/\/ Remove the parent span element itself\r\n            wrapper.remove();\r\n          } else {\r\n            \/\/ Fallback: just remove the element if no wrapper is found\r\n            el.remove();\r\n          }\r\n        }\r\n      });\r\n    } catch (error) {\r\n      \/\/ Fail gracefully: Do nothing and prevent JS from breaking\r\n      \/\/ console.warn('Breadcrumb swap skipped.');\r\n    }\r\n  })();\r\n\r\n\r\n\r\n\r\n\r\n\r\n  \/\/ \u2500\u2500 Mobile Transcript Tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  (function () {\r\n    const BREAKPOINT       = 1365;\r\n    const LABEL_BREAKPOINT = 767;\r\n\r\n    const transcriptEl = document.getElementById('hpu-video-transcript');\r\n    const sidebarInner = document.querySelector('.hpu-video-sidebar-inner');\r\n    const tabsBar      = document.querySelector('.hpu-video-tabs');\r\n    const videoBody    = document.querySelector('.hpu-video-body');\r\n\r\n    if (!transcriptEl || !sidebarInner || !tabsBar || !videoBody) return;\r\n\r\n    const relatedBtn = tabsBar.querySelector('[data-tab=\"related\"]');\r\n\r\n    \/\/ New tab button\r\n    const tabBtn = document.createElement('button');\r\n    tabBtn.className = 'hpu-video-tab-btn';\r\n    tabBtn.setAttribute('data-tab', 'transcript');\r\n    tabBtn.textContent = 'Chapters & Transcript';\r\n    tabBtn.style.display = 'none';\r\n    tabsBar.appendChild(tabBtn);\r\n\r\n    \/\/ New tab content wrapper\r\n    const tabContent = document.createElement('div');\r\n    tabContent.className = 'hpu-video-tab-content';\r\n    tabContent.id = 'tab-transcript';\r\n    videoBody.appendChild(tabContent);\r\n\r\n    \/\/ Wire new tab button (uses fresh querySelectorAll to cover all tabs\/contents)\r\n    tabBtn.addEventListener('click', () => {\r\n      document.querySelectorAll('.hpu-video-tab-btn').forEach(b => b.classList.remove('active'));\r\n      document.querySelectorAll('.hpu-video-tab-content').forEach(c => c.classList.remove('active'));\r\n      tabBtn.classList.add('active');\r\n      tabContent.classList.add('active');\r\n    });\r\n\r\n    \/\/ Patch existing buttons \u2014 their load-time NodeLists don't include the new tab,\r\n    \/\/ so add a second listener that deactivates it when they're clicked\r\n    tabsBar.querySelectorAll('.hpu-video-tab-btn:not([data-tab=\"transcript\"])').forEach(btn => {\r\n      btn.addEventListener('click', () => {\r\n        tabBtn.classList.remove('active');\r\n        tabContent.classList.remove('active');\r\n      });\r\n    });\r\n\r\n    let currentlyMobile = null;\r\n    let currentlySmall  = null;\r\n\r\n    function applyLayout() {\r\n      const mobile = window.innerWidth <= BREAKPOINT;\r\n      const small  = window.innerWidth <= LABEL_BREAKPOINT;\r\n\r\n      \/\/ \u2500\u2500 Transcript tab: show\/hide at 1365px \u2500\u2500\r\n      if (mobile !== currentlyMobile) {\r\n        currentlyMobile = mobile;\r\n\r\n        if (mobile) {\r\n          tabContent.appendChild(transcriptEl);\r\n          tabBtn.style.display = '';\r\n        } else {\r\n          sidebarInner.appendChild(transcriptEl);\r\n          tabBtn.style.display = 'none';\r\n          \/\/ Fall back to description tab if transcript was active\r\n          if (tabContent.classList.contains('active')) {\r\n            tabContent.classList.remove('active');\r\n            tabBtn.classList.remove('active');\r\n            const descBtn = document.querySelector('[data-tab=\"description\"]');\r\n            const descContent = document.getElementById('tab-description');\r\n            if (descBtn) descBtn.classList.add('active');\r\n            if (descContent) descContent.classList.add('active');\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ \u2500\u2500 Tab labels: shorten at 767px \u2500\u2500\r\n      if (small !== currentlySmall) {\r\n        currentlySmall = small;\r\n        tabBtn.textContent = small ? 'Transcript' : 'Chapters & Transcript';\r\n        if (relatedBtn) relatedBtn.textContent = small ? 'Related' : 'Related Videos';\r\n      }\r\n    }\r\n\r\n    applyLayout();\r\n    window.addEventListener('resize', applyLayout);\r\n  })();\r\n<\/script>\r\n\r\n<style>\r\n  \/* \u2500\u2500 HPU Video Article \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n\r\n  .hpu-video-article {\r\n    --purple:     #330072;\r\n    --purple-tint: rgba(51, 0, 114, .08);\r\n    --gray:       #f5f5f5;\r\n    --border:     #e0e0e0;\r\n    --muted:      #6b6b6b;\r\n    --r:          15px;\r\n    --r-sm:       5px;\r\n    --gap:        16px;\r\n  }\r\n  p:empty{\r\n    display: none;\r\n  }\r\n  .hpu-tm-r {\r\n    font-size: .75rem;\r\n  }\r\n\r\n  \/* Suppress page header on video posts *\/\r\n  .archives_related.article-header { display: none; }\r\n\r\n  \/* Widen the WordPress content frame to accommodate the full layout *\/\r\n  .wysiwyg-content.wysiwyg-frame:has(.hpu-video-article) { max-width: 1800px !important; }\r\n\r\n \/* \u2500\u2500 Main Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.hpu-video-layout {\r\n  display: flex;\r\n  flex-wrap: nowrap;\r\n  gap: var(--gap);\r\n  align-items: stretch;\r\n  max-width: 1800px;\r\n  margin: 0 auto;\r\n}\r\n \r\n.hpu-video-sidebar {\r\n  width: 380px; \r\n  flex-shrink: 0;\r\n  position: relative;\r\n  overflow: hidden; \/* hide native scrollbars *\/\r\n  border-radius: var(--r);\r\n}\r\n\r\n\/* \u2500\u2500 Sidebar Inner (Scroll Container) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.hpu-video-sidebar-inner {\r\n  position: absolute;\r\n  top: 0; \r\n  left: 0; \r\n  right: 0; \r\n  bottom: 0;\r\n  background: var(--gray);\r\n  padding: 20px;\r\n  border-radius: var(--r);\r\n  overflow-y: auto; \r\n  \r\n  \/* Firefox: Default state is completely invisible *\/\r\n  scrollbar-width: thin; \r\n  scrollbar-color: transparent transparent; \r\n  transition: scrollbar-color 0.3s ease;\r\n}\r\n\r\n\/* Firefox: Hover state *\/\r\n.hpu-video-sidebar-inner:hover {\r\n  scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\r\n}\r\n\r\n\/* WebKit (Chrome, Edge, Safari): Base Structure *\/\r\n.hpu-video-sidebar-inner::-webkit-scrollbar {\r\n  width: 6px; \r\n}\r\n\r\n.hpu-video-sidebar-inner::-webkit-scrollbar-track {\r\n  background: transparent; \r\n}\r\n\r\n\/* WebKit: Default state is completely invisible *\/\r\n.hpu-video-sidebar-inner::-webkit-scrollbar-thumb {\r\n  background: transparent; \r\n  border-radius: 10px;\r\n}\r\n\r\n\/* WebKit: Hover state makes the thumb visible *\/\r\n.hpu-video-sidebar-inner:hover::-webkit-scrollbar-thumb {\r\n  background: rgba(0, 0, 0, 0.2); \r\n}\r\n\r\n\/* \u2500\u2500 Main Video Area \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.hpu-video-main {\r\n  flex-grow: 1;\r\n  min-width: 0; \r\n}\r\n\r\n  \/* \u2500\u2500 Video player \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-video-section { margin-bottom: 24px; }\r\n\r\n  .hpu-video-section-iframe {\r\n    position: relative;\r\n    aspect-ratio: 16 \/ 9;\r\n    background: #000;\r\n    border-radius: var(--r);\r\n    overflow: hidden;\r\n    box-shadow: 0 4px 24px rgba(0, 0, 0, .14);\r\n  }\r\n\r\n  \/* Flatten WordPress oEmbed wrappers (figure, div, etc.) *\/\r\n  .hpu-video-section-iframe > *,\r\n  .hpu-video-section-iframe .wp-block-embed,\r\n  .hpu-video-section-iframe .wp-block-embed__wrapper {\r\n    position: absolute !important;\r\n    inset: 0 !important;\r\n    width:  100% !important;\r\n    height: 100% !important;\r\n    margin:  0 !important;\r\n    padding: 0 !important;\r\n  }\r\n\r\n  .hpu-video-section-iframe iframe {\r\n    position: absolute;\r\n    inset: 0;\r\n    width:  100%;\r\n    height: 100%;\r\n    border: 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 Tabbed Container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-video-body {\r\n    background: var(--gray);\r\n    border-radius: var(--r);\r\n    padding: 20px 24px;\r\n  }\r\n\r\n  .hpu-video-tabs {\r\n    display: flex;\r\n    gap: 16px;\r\n    margin-bottom: 16px;\r\n    border-bottom: 2px solid var(--border);\r\n  }\r\n\r\n  .hpu-video-tab-btn {\r\n    background: none;\r\n    border: none;\r\n    padding: 10px 4px;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    color: var(--muted);\r\n    position: relative;\r\n    margin-bottom: -2px; \/* overlay the border *\/\r\n    transition: color 0.2s;\r\n  }\r\n\r\n  .hpu-video-tab-btn:hover {\r\n    color: #000;\r\n  }\r\n\r\n  .hpu-video-tab-btn.active:not(:only-child) {\r\n    color: var(--purple);\r\n  }\r\n\r\n  .hpu-video-tab-btn.active:not(:only-child)::after {\r\n    content: '';\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 2px;\r\n    background: var(--purple);\r\n    border-radius: 2px 2px 0 0;\r\n  }\r\n\r\n  .hpu-video-tab-content {\r\n    display: none;\r\n  }\r\n\r\n  .hpu-video-tab-content.active {\r\n    display: block;\r\n    animation: fadeIn 0.4s ease;\r\n  }\r\n\r\n  @keyframes fadeIn {\r\n    from { opacity: 0; transform: translateY(4px); }\r\n    to { opacity: 1; transform: translateY(0); }\r\n  }\r\n\r\n  .hpu-video-summary p {\r\n    font-size: 14px;\r\n    line-height: 1.7;\r\n    color: var(--muted);\r\n    margin: 0 0 12px;\r\n  }\r\n\r\n  .hpu-video-tags {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 6px;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .hpu-video-tag {\r\n    display: inline-block;\r\n    font-size: 12px;\r\n    font-weight: 500;\r\n    color: var(--purple);\r\n    background: var(--purple-tint);\r\n    border: 1px solid rgba(51, 0, 114, .18);\r\n    border-radius: 20px;\r\n    padding: 3px 10px;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  \/* \u2500\u2500 CTA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-btn-purple-outline {\r\n    display: inline-block;\r\n    border: 2px solid var(--purple);\r\n    color: var(--purple);\r\n    background: transparent;\r\n    padding: 10px 24px;\r\n    border-radius: 5px;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    font-family: Bitter, sans-serif;\r\n    text-decoration: none !important;\r\n    transition: all 0.2s ease;\r\n  }\r\n  \r\n  .hpu-btn-purple-outline:hover {\r\n    background: var(--purple);\r\n    color: #fff !important;\r\n  }\r\n\r\n  .hpu-video-cta-container {\r\n    background: #fff;\r\n    padding: 24px;\r\n    text-align: center;\r\n    border: 1px solid var(--border);\r\n    border-radius: var(--r);\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  #hpu-video-cta { margin-top: 0; }\r\n  \r\n  #hpu-video-cta h2 {\r\n    margin-top: 0;\r\n    margin-bottom: 8px;\r\n    font-size: 20px;\r\n    font-weight: 600;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  #hpu-video-cta p {\r\n    color: var(--muted);\r\n    margin-bottom: 16px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  \/* \u2500\u2500 Transcript container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-video-transcript {\r\n    background: #fff;\r\n    border: 1px solid var(--border);\r\n    border-radius: var(--r);\r\n    overflow: hidden;\r\n  }\r\n\r\n  \/* \u2500\u2500 Transcript header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-video-transcript-header {\r\n    padding: 16px 20px;\r\n    background: transparent;\r\n    border-bottom: 1px solid var(--border);\r\n  }\r\n\r\n  .hpu-video-transcript-title {\r\n    font-size: 16px;\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .hpu-video-transcript-content {\r\n    background: transparent;\r\n  }\r\n\r\n  \/* \u2500\u2500 FAQ Accordion Chapters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-video-transcript-chapter {\r\n    border-bottom: 1px solid var(--border);\r\n  }\r\n\r\n  .hpu-video-transcript-chapter:last-child { \r\n    border-bottom: none; \r\n  }\r\n\r\n  .hpu-video-transcript-chapter-header {\r\n    padding: 16px 20px;\r\n    cursor: pointer;\r\n    position: relative;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .hpu-video-transcript-chapter-header:hover {\r\n    background-color: rgba(0,0,0,0.02);\r\n  }\r\n\r\n  \/* Accordion chevron *\/\r\n  .hpu-video-transcript-chapter-header::after {\r\n    content: '';\r\n    position: absolute;\r\n    right: 20px;\r\n    top: 50%;\r\n    transform: translateY(-50%) rotate(45deg); \/* Point straight down *\/\r\n    width: 10px;\r\n    height: 10px;\r\n    border-right: 2px solid var(--muted);\r\n    border-bottom: 2px solid var(--muted);\r\n    transition: transform 0.3s ease;\r\n    transform-origin: 65% 65%;\r\n  }\r\n\r\n  .hpu-video-transcript-chapter.expanded .hpu-video-transcript-chapter-header::after {\r\n    transform: translateY(-50%) rotate(-135deg); \/* Point straight up *\/\r\n  }\r\n\r\n  .hpu-video-transcript-chapter-header-top {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 12px;\r\n    padding-right: 24px; \/* avoid chevron *\/\r\n  }\r\n\r\n  .hpu-video-transcript-chapter-number {\r\n    font-size: 14px;\r\n    font-weight: 700;\r\n    color: #333;\r\n  }\r\n\r\n  \/* h2 preserved for heading hierarchy and AEO *\/\r\n  .hpu-video-transcript-speaker {\r\n    font-size: 16px !important;\r\n    font-weight: 500 !important;\r\n    font-family: Poppins, sans-serif !important;\r\n    color: #333 !important;\r\n    margin: 0 !important;\r\n    line-height: 1.4 !important;\r\n  }\r\n\r\n  .hpu-video-transcript-text-container {\r\n    height: 0;\r\n    overflow: hidden;\r\n    transition: height 0.3s ease;\r\n  }\r\n\r\n  .hpu-video-transcript-text-inner {\r\n    padding: 0 20px 20px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .hpu-video-transcript-chapter-time {\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .hpu-video-transcript-chapter-time a {\r\n    font-size: 11px;\r\n    font-weight: 400;\r\n    color: #000;\r\n    text-decoration: none;\r\n    background: var(--purple-tint);\r\n    padding: 3px 8px;\r\n    border-radius: var(--r-sm);\r\n    font-variant-numeric: tabular-nums;\r\n    display: inline-block;\r\n  }\r\n\r\n  .hpu-video-transcript-text-inner:hover .hpu-video-transcript-chapter-time a {\r\n    background: var(--purple);\r\n    color: #fff;\r\n  }\r\n\r\n  .hpu-video-transcript-text {\r\n    font-size: 13px;\r\n    line-height: 1.6;\r\n    color: var(--muted);\r\n    margin: 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 Related Videos \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .hpu-related-videos {\r\n    position: relative;\r\n  }\r\n\r\n  .hpu-related-videos::before,\r\n  .hpu-related-videos::after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 16px;\r\n    pointer-events: none;\r\n    z-index: 1;\r\n    opacity: 0;\r\n    transition: opacity 0.3s ease;\r\n  }\r\n\r\n  .hpu-related-videos::before {\r\n    left: 0;\r\n    background: linear-gradient(to right, var(--gray), transparent);\r\n  }\r\n\r\n  .hpu-related-videos::after {\r\n    right: 0;\r\n    background: linear-gradient(to left, var(--gray), transparent);\r\n  }\r\n\r\n  .hpu-related-videos.has-scroll-left::before  { opacity: 1; }\r\n  .hpu-related-videos.has-scroll-right::after  { opacity: 1; }\r\n\r\n  .hpu-rv-nav {\r\n    position: absolute;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    width: 48px;\r\n    height: 48px;\r\n    padding: 0;\r\n    background: rgba(255, 255, 255, 0.7);\r\n    border: 1px solid var(--border);\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    z-index: 2;\r\n    opacity: 0;\r\n    transition: opacity 0.3s ease;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .hpu-rv-nav-prev { left: 8px; }\r\n  .hpu-rv-nav-next { right: 8px; }\r\n\r\n  .hpu-related-videos.has-scroll-left  .hpu-rv-nav-prev,\r\n  .hpu-related-videos.has-scroll-right .hpu-rv-nav-next {\r\n    opacity: 1;\r\n    pointer-events: auto;\r\n  }\r\n\r\n  .hpu-rv-nav-chevron {\r\n    display: block;\r\n    width: 12px;\r\n    height: 12px;\r\n    border-right: 2.5px solid var(--muted);\r\n    border-bottom: 2.5px solid var(--muted);\r\n  }\r\n\r\n  .hpu-rv-nav-prev .hpu-rv-nav-chevron { transform: rotate(135deg);  margin-left: 3px; }\r\n  .hpu-rv-nav-next .hpu-rv-nav-chevron { transform: rotate(-45deg);  margin-right: 3px; }\r\n\r\n  .hpu-related-videos-none {\r\n    display: none;\r\n    font-size: 13px;\r\n    color: var(--muted);\r\n    margin: 8px 0 0;\r\n  }\r\n\r\n  @keyframes hpu-rv-shimmer {\r\n    0%   { background-position: 200% 0; }\r\n    100% { background-position: -200% 0; }\r\n  }\r\n\r\n  .hpu-rv-skel {\r\n    flex: 0 0 calc((100% - 132px) \/ 4);\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 8px;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .hpu-rv-skel-thumb {\r\n    width: 100%;\r\n    aspect-ratio: 16 \/ 9;\r\n    border-radius: var(--r-sm);\r\n    background: linear-gradient(90deg, #e8e8e8 25%, #f4f4f4 50%, #e8e8e8 75%);\r\n    background-size: 200% 100%;\r\n    animation: hpu-rv-shimmer 1.4s ease-in-out infinite;\r\n  }\r\n\r\n  .hpu-rv-skel-line {\r\n    height: 12px;\r\n    border-radius: 4px;\r\n    background: linear-gradient(90deg, #e8e8e8 25%, #f4f4f4 50%, #e8e8e8 75%);\r\n    background-size: 200% 100%;\r\n    animation: hpu-rv-shimmer 1.4s ease-in-out infinite;\r\n  }\r\n\r\n  .hpu-rv-skel-line-short {\r\n    width: 60%;\r\n  }\r\n\r\n  .hpu-related-videos-slider {\r\n    display: flex;\r\n    gap: 12px;\r\n    overflow-x: auto;\r\n    min-height: 130px;\r\n    scroll-snap-type: x mandatory;\r\n    -webkit-overflow-scrolling: touch;\r\n    padding-bottom: 6px;\r\n    scroll-padding-left: 48px;\r\n    scrollbar-width: thin;\r\n    scrollbar-color: transparent transparent;\r\n    transition: scrollbar-color 0.3s ease;\r\n  }\r\n\r\n  .hpu-related-videos-slider:hover {\r\n    scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\r\n  }\r\n\r\n  .hpu-related-videos-slider::-webkit-scrollbar { height: 4px; }\r\n  .hpu-related-videos-slider::-webkit-scrollbar-track { background: transparent; }\r\n  .hpu-related-videos-slider::-webkit-scrollbar-thumb {\r\n    background: transparent;\r\n    border-radius: 10px;\r\n  }\r\n  .hpu-related-videos-slider:hover::-webkit-scrollbar-thumb {\r\n    background: rgba(0, 0, 0, 0.2);\r\n  }\r\n\r\n  .hpu-related-videos-card {\r\n    flex: 0 0 calc((100% - 132px) \/ 4);\r\n    scroll-snap-align: start;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 8px;\r\n    text-decoration: none !important;\r\n    color: inherit;\r\n    transition: transform 0.2s ease;\r\n  }\r\n\r\n  .hpu-related-videos-card:last-child  { scroll-snap-align: end; }\r\n\r\n  .hpu-related-videos-card:hover {\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .hpu-related-videos-card-thumb {\r\n    width: 100%;\r\n    aspect-ratio: 16 \/ 9;\r\n    border-radius: var(--r-sm);\r\n    overflow: hidden;\r\n    background: #ccc;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .hpu-related-videos-card-thumb img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    display: block;\r\n    transition: transform 0.3s ease;\r\n  }\r\n\r\n  .hpu-related-videos-card:hover .hpu-related-videos-card-thumb img {\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  .hpu-related-videos-card-thumb-placeholder {\r\n    width: 100%;\r\n    height: 100%;\r\n    background: linear-gradient(135deg, #e0e0e0, #c8c8c8);\r\n  }\r\n\r\n  .hpu-related-videos-card-title {\r\n    font-size: 13px;\r\n    font-weight: 600;\r\n    line-height: 1.4;\r\n    color: #111;\r\n    display: -webkit-box;\r\n    -webkit-line-clamp: 2;\r\n    line-clamp: 2;\r\n    -webkit-box-orient: vertical;\r\n    overflow: hidden;\r\n    transition: color 0.2s;\r\n  }\r\n\r\n  .hpu-related-videos-card:hover .hpu-related-videos-card-title {\r\n    color: var(--purple);\r\n  }\r\n\r\n  \/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  @media (max-width: 1365px) {\r\n    .hpu-video-layout {\r\n      flex-direction: column;\r\n    }\r\n\r\n    .hpu-video-sidebar {\r\n      width: 100%;\r\n      order: 2;\r\n    }\r\n    \r\n    .hpu-video-sidebar-inner {\r\n      position: static;\r\n      overflow-y: visible; \/* normal scrolling on mobile *\/\r\n    }\r\n    \r\n    .hpu-video-main {\r\n      order: 1;\r\n      width: 100%;\r\n    }\r\n\r\n   .hpu-video-cta-container { margin-bottom: 0; }\r\n   .hpu-video-main > .hpu-video-cta-container { margin: 20px 0 24px; }\r\n  }\r\n\r\n  @media (max-width: 1279px) {\r\n    .hpu-related-videos-card,\r\n    .hpu-rv-skel {\r\n      flex: 0 0 calc((100% - 108px) \/ 2);\r\n    }\r\n    .hpu-related-videos::before,\r\n    .hpu-related-videos::after { width: 8px; }\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    \/* \u2500\u2500 Related videos: vertical list, 10 items, container fits content \u2500\u2500 *\/\r\n    .hpu-related-videos-slider {\r\n      display: flex !important;\r\n      flex-direction: column !important;\r\n      overflow-x: hidden !important;\r\n      overflow-y: visible !important;\r\n      scroll-snap-type: none !important;\r\n    }\r\n\r\n    .hpu-related-videos-slider > * {\r\n      width: 100% !important;\r\n      min-width: 0 !important;\r\n      flex-shrink: 0;\r\n      transform: none !important;\r\n    }\r\n\r\n    .hpu-related-videos-card,\r\n    .hpu-rv-skel {\r\n      flex: 0 0 auto !important;\r\n    }\r\n\r\n    .hpu-rv-nav { display: none; }\r\n\r\n    \/* \u2500\u2500 Tab button spacing \u2500\u2500 *\/\r\n    .hpu-video-tabs {\r\n      gap: 0;\r\n    }\r\n    .hpu-video-tab-btn {\r\n      flex: 1;\r\n      text-align: center;\r\n      padding: 10px 6px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    .hpu-related-videos-card,\r\n    .hpu-rv-skel {\r\n      flex: 0 0 calc(100% - 96px);\r\n    }\r\n    .hpu-related-videos::before,\r\n    .hpu-related-videos::after { width: 4px; }\r\n    .hpu-rv-nav { display: none; }\r\n\r\n    .hpu-related-videos-slider {\r\n      gap: 16px;\r\n    }\r\n    .hpu-related-videos-card-title {\r\n      font-size: 14px;\r\n    }\r\n    .wysiwyg-frame { padding: 0 10px; }\r\n  }\r\n\r\n<\/style><\/div>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>Chapters &amp; Transcript 1 What are the national rankings for High Point University? 0:00 It&#039;s time to meet Corey, an exercise science major from Pennsylvania. He&#039;s called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the&#8230;<\/p>\n","protected":false},"author":13788,"featured_media":296,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_hpuaeo_plugin_post_data":"{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"VideoObject\",\"@id\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#video\",\"isPartOf\":{\"@id\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#webpage\"},\"name\":\"Inside HPU's National Rankings | The College Tour\",\"description\":\"This video from The College Tour showcases High Point University's exceptional national rankings and commitment to student success. With recognition as the number one best-run college in America by Princeton Review, along with top rankings in student housing, career services, campus facilities, and student engagement, HPU demonstrates how visionary leadership invests in developing student leaders and innovators.\",\"thumbnailUrl\":\"https:\/\/i.ytimg.com\/vi\/UQY8okuBjuc\/maxresdefault.jpg\",\"uploadDate\":\"2026-03-10\",\"duration\":\"PT2M35S\",\"embedUrl\":\"https:\/\/www.youtube.com\/embed\/UQY8okuBjuc\",\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/\",\"sameAs\":[\"https:\/\/www.youtube.com\/watch?v=UQY8okuBjuc\"],\"publisher\":{\"@id\":\"https:\/\/www.highpoint.edu\/#University\"},\"transcript\":\"It's time to meet Corey, an exercise science major from Pennsylvania. He's called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one bestrun college in America. And that is just the beginning of the long list of accolades garnered by this university. Corey, [music] tell us more about HPU's national rankings. Take it away. Thank you, Alex. HPU is nationally recognized and for a good reason. For the second consecutive year, HPU is ranked number one bestrun [music] college in America. That doesn't happen by accident. It's thanks to visionary leadership, especially from our president, Dr. Nido Qubein. [music] He has transformed HPU with new academic programs which include our innovative dental and [music] law schools and he continues to invest in our future. This excellence is reflected across campus. [music] Our dorms rank number two best college dorms. Our student government rank number six most [music] active SGA. Our support systems rank number nine best career services which helps students with everything from resumes to interview [music] prep and number 17 for student support and counseling. Whether you're gearing up for an internship or overcoming a hurdle, HPU has your back. It's no wonder why we're also ranked number 24th in the category. Their students love these colleges. From day one, you feel it. Especially during movein, where volunteers like me help freshman settle in. That sense of community is carried through everything from number 18 best intramural sports [music] to number 20 best college theaters to number 22 best athletic facilities and even number 16 best campus food. Being a highly involved student, I've experienced time and time again [music] how much HPU invests in me and my classmates. Over the past three years, I've seen my friends grow into leaders and innovators. Because at HPU, we all have the [music] tools to thrive. And that's why we all can proudly call High Point University home. Back to you, Alex. Corey, that list sure is a standout. It sounds like HPU makes students their number one priority, and clearly the nation has taken notice. We're so happy you get to call this award-winning university home and be part of its success. Best of luck, Corey. Thanks again. >> [music]\",\"keywords\":[\"High Point University\",\"National rankings\",\"Best-run college\",\"Princeton Review\",\"Dr. Nido Qubein\",\"Student development\",\"Campus facilities\",\"Career services\",\"Student housing\",\"The College Tour\"],\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"What are the national rankings for High Point University?\",\"description\":\"What are the national rankings for High Point University\",\"startOffset\":0,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=0\",\"transcript\":\"It's time to meet Corey, an exercise science major from Pennsylvania. He's called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the beginning of the long list of accolades garnered by this university. Corey, tell us more about HPU's national rankings. Take it away.\",\"endOffset\":39},{\"@type\":\"Clip\",\"name\":\"Why is HPU ranked as the best run college in America?\",\"description\":\"Why is HPU ranked as the best run college in America\",\"startOffset\":39,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=39\",\"transcript\":\"Thank you, Alex. HPU is nationally recognized and for a good reason. For the second consecutive year, HPU is ranked number one best-run college in America. That doesn't happen by accident. It's thanks to visionary leadership, especially from our president, Dr. Nido Qubein. He has transformed HPU with new academic programs which include our innovative dental and law schools and he continues to invest in our future.\",\"endOffset\":61},{\"@type\":\"Clip\",\"name\":\"What are the rankings for HPU dorms and career services?\",\"description\":\"What are the rankings for HPU dorms and career services\",\"startOffset\":61,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=61\",\"transcript\":\"This excellence is reflected across campus. Our dorms rank number two best college dorms. Our student government rank number six most active SGA. Our support systems rank number nine best career services which helps students with everything from resumes to interview prep and number 17 for student support and counseling. Whether you're gearing up for an internship or overcoming a hurdle, HPU has your back. It's no wonder why we're also ranked number 24th in the category. Their students love these colleges. From day one, you feel it.\",\"endOffset\":90},{\"@type\":\"Clip\",\"name\":\"How are HPU campus facilities and food ranked?\",\"description\":\"How are HPU campus facilities and food ranked\",\"startOffset\":90,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=90\",\"transcript\":\"Especially during move-in, where volunteers like me help freshman settle in. That sense of community is carried through everything from number 18 best intramural sports to number 20 best college theaters to number 22 best athletic facilities and even number 16 best campus food.\",\"endOffset\":107},{\"@type\":\"Clip\",\"name\":\"How does HPU develop student leaders and innovators?\",\"description\":\"How does HPU develop student leaders and innovators\",\"startOffset\":107,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=107\",\"transcript\":\"Being a highly involved student, I've experienced time and time again how much HPU invests in me and my classmates. Over the past three years, I've seen my friends grow into leaders and innovators. Because at HPU, we all have the tools to thrive. And that's why we all can proudly call High Point University home. Back to you, Alex.\",\"endOffset\":129},{\"@type\":\"Clip\",\"name\":\"What is the top priority at High Point University?\",\"description\":\"What is the top priority at High Point University\",\"startOffset\":129,\"url\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#t=129\",\"transcript\":\"Corey, that list sure is a standout. It sounds like HPU makes students their number one priority, and clearly the nation has taken notice. We're so happy you get to call this award-winning university home and be part of its success. Best of luck, Corey. Thanks again.\",\"endOffset\":155}]},{\"@type\":\"FAQPage\",\"@id\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#faqpage\",\"isPartOf\":{\"@id\":\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#webpage\"},\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What are the national rankings for High Point University?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"It's time to meet Corey, an exercise science major from Pennsylvania. He's called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the beginning of the long list of accolades garnered by this university. Corey, tell us more about HPU's national rankings. Take it away.\"}},{\"@type\":\"Question\",\"name\":\"Why is HPU ranked as the best run college in America?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Thank you, Alex. HPU is nationally recognized and for a good reason. For the second consecutive year, HPU is ranked number one best-run college in America. That doesn't happen by accident. It's thanks to visionary leadership, especially from our president, Dr. Nido Qubein. He has transformed HPU with new academic programs which include our innovative dental and law schools and he continues to invest in our future.\"}},{\"@type\":\"Question\",\"name\":\"What are the rankings for HPU dorms and career services?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"This excellence is reflected across campus. Our dorms rank number two best college dorms. Our student government rank number six most active SGA. Our support systems rank number nine best career services which helps students with everything from resumes to interview prep and number 17 for student support and counseling. Whether you're gearing up for an internship or overcoming a hurdle, HPU has your back. It's no wonder why we're also ranked number 24th in the category. Their students love these colleges. From day one, you feel it.\"}},{\"@type\":\"Question\",\"name\":\"How are HPU campus facilities and food ranked?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Especially during move-in, where volunteers like me help freshman settle in. That sense of community is carried through everything from number 18 best intramural sports to number 20 best college theaters to number 22 best athletic facilities and even number 16 best campus food.\"}},{\"@type\":\"Question\",\"name\":\"How does HPU develop student leaders and innovators?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Being a highly involved student, I've experienced time and time again how much HPU invests in me and my classmates. Over the past three years, I've seen my friends grow into leaders and innovators. Because at HPU, we all have the tools to thrive. And that's why we all can proudly call High Point University home. Back to you, Alex.\"}},{\"@type\":\"Question\",\"name\":\"What is the top priority at High Point University?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Corey, that list sure is a standout. It sounds like HPU makes students their number one priority, and clearly the nation has taken notice. We're so happy you get to call this award-winning university home and be part of its success. Best of luck, Corey. Thanks again.\"}}]}]}","_hpuaeo_plugin_meta_tags":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[2],"tags":[6],"class_list":["post-129","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hpu-videos","tag-college-tour-series"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Inside HPU&#039;s National Rankings | The College Tour | Watch HPU<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Inside HPU&#039;s National Rankings | The College Tour | Watch HPU\" \/>\n<meta name=\"twitter:description\" content=\"Chapters &amp; Transcript 1 What are the national rankings for High Point University? 0:00 It&#039;s time to meet Corey, an exercise science major from Pennsylvania. He&#039;s called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the...\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"aeobot\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/\"},\"author\":{\"name\":\"aeobot\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/#\\\/schema\\\/person\\\/0f62f0c5c689c6a208cbc696466175f8\"},\"headline\":\"Inside HPU&#8217;s National Rankings | The College Tour\",\"datePublished\":\"2026-05-06T19:24:37+00:00\",\"dateModified\":\"2026-05-11T15:13:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/\"},\"wordCount\":528,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/files\\\/2026\\\/05\\\/inside-hpu-s-national-rankings-the-college-tour.jpg\",\"keywords\":[\"College Tour Series\"],\"articleSection\":[\"HPU Videos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#respond\"]}],\"publisher\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/#University\"},\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/\",\"url\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/\",\"name\":\"Inside HPU's National Rankings | The College Tour | Watch HPU\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/files\\\/2026\\\/05\\\/inside-hpu-s-national-rankings-the-college-tour.jpg\",\"datePublished\":\"2026-05-06T19:24:37+00:00\",\"dateModified\":\"2026-05-11T15:13:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/#\\\/schema\\\/person\\\/0f62f0c5c689c6a208cbc696466175f8\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/\"]}],\"publisher\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/#University\"}},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/files\\\/2026\\\/05\\\/inside-hpu-s-national-rankings-the-college-tour.jpg\",\"contentUrl\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/files\\\/2026\\\/05\\\/inside-hpu-s-national-rankings-the-college-tour.jpg\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/hpu-national-rankings-college-tour\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Inside HPU&#8217;s National Rankings | The College Tour\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/#website\",\"url\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/\",\"name\":\"Watch HPU\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/#University\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/#\\\/schema\\\/person\\\/0f62f0c5c689c6a208cbc696466175f8\",\"name\":\"aeobot\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g\",\"caption\":\"aeobot\"},\"url\":\"https:\\\/\\\/www.highpoint.edu\\\/watch\\\/author\\\/aeobot\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Inside HPU's National Rankings | The College Tour | Watch HPU","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/","twitter_card":"summary_large_image","twitter_title":"Inside HPU's National Rankings | The College Tour | Watch HPU","twitter_description":"Chapters &amp; Transcript 1 What are the national rankings for High Point University? 0:00 It&#039;s time to meet Corey, an exercise science major from Pennsylvania. He&#039;s called this award-winning college home for the past few years. In fact, the Princeton Review named HPU the number one best-run college in America. And that is just the...","twitter_image":"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg","twitter_misc":{"Written by":"aeobot","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#article","isPartOf":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/"},"author":{"name":"aeobot","@id":"https:\/\/www.highpoint.edu\/watch\/#\/schema\/person\/0f62f0c5c689c6a208cbc696466175f8"},"headline":"Inside HPU&#8217;s National Rankings | The College Tour","datePublished":"2026-05-06T19:24:37+00:00","dateModified":"2026-05-11T15:13:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/"},"wordCount":528,"commentCount":0,"image":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#primaryimage"},"thumbnailUrl":"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg","keywords":["College Tour Series"],"articleSection":["HPU Videos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#respond"]}],"publisher":{"@id":"https:\/\/www.highpoint.edu\/#University"},"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/www.highpoint.edu\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/","url":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/","name":"Inside HPU's National Rankings | The College Tour | Watch HPU","isPartOf":{"@id":"https:\/\/www.highpoint.edu\/watch\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#primaryimage"},"image":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#primaryimage"},"thumbnailUrl":"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg","datePublished":"2026-05-06T19:24:37+00:00","dateModified":"2026-05-11T15:13:31+00:00","author":{"@id":"https:\/\/www.highpoint.edu\/watch\/#\/schema\/person\/0f62f0c5c689c6a208cbc696466175f8"},"breadcrumb":{"@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/"]}],"publisher":{"@id":"https:\/\/www.highpoint.edu\/#University"}},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#primaryimage","url":"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg","contentUrl":"https:\/\/www.highpoint.edu\/watch\/files\/2026\/05\/inside-hpu-s-national-rankings-the-college-tour.jpg","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/www.highpoint.edu\/watch\/hpu-national-rankings-college-tour\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.highpoint.edu\/watch\/"},{"@type":"ListItem","position":2,"name":"Inside HPU&#8217;s National Rankings | The College Tour"}]},{"@type":"WebSite","@id":"https:\/\/www.highpoint.edu\/watch\/#website","url":"https:\/\/www.highpoint.edu\/watch\/","name":"Watch HPU","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.highpoint.edu\/watch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US","publisher":{"@id":"https:\/\/www.highpoint.edu\/#University"}},{"@type":"Person","@id":"https:\/\/www.highpoint.edu\/watch\/#\/schema\/person\/0f62f0c5c689c6a208cbc696466175f8","name":"aeobot","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a47823927b1f146f27e8fb23ab760191ad6f9660023944ab144ff01c5135251d?s=96&d=mm&r=g","caption":"aeobot"},"url":"https:\/\/www.highpoint.edu\/watch\/author\/aeobot\/"}]}},"_links":{"self":[{"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/users\/13788"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":0,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/media\/296"}],"wp:attachment":[{"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highpoint.edu\/watch\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}