1<!DOCTYPE html> 2<html lang="en-us"> 3<head> 4<style> 5 .gam-sport-banner-ad iframe, 6 .gam-sport-banner-ad-2 iframe 7 { 8 width: 100%; 9 height: auto; 10 } 11 12 .prog-mobile-banners #gam-banner-ad, 13 .prog-mobile-banners #gam-banner-ad-2 14 { 15 min-height: 100px; 16 display: flex; 17 align-items: center; 18 justify-content: center; 19 } 20 21 /* Desktop presenting sponsor: cap at native 300x75. */ 22 .gam-presenting-sponsor-2, 23 .gam_ps { 24 max-width: 300px; 25 max-height: 75px; 26 margin: 0 auto; 27 overflow: hidden; 28 } 29 30 .gam-presenting-sponsor-2 iframe, 31 .gam_ps iframe { 32 width: 100%; 33 height: 100%; 34 } 35 36 /* Layout 19 desktop presenting sponsor. 37 The slot is defined as a fixed 300x75 (defineSlot below), so give the iframe its 38 full 300x75 viewport and paint it at 2/3 (200x50) with a transform â same pattern 39 as the mobile slot. The old width:200px!important squeezed the iframe VIEWPORT to 40 200 while the creative document inside stayed 300 wide, clipping the right third 41 of every creative ("Piedmont" -> "Piedm"). The container rules reserve the flex 42 slot so the priority nav measures correctly before the ad loads; GAM tracking is 43 unaffected (the creative loads at native size, it just paints smaller). */ 44 .presenting-sponsor-desktop-19 { 45 width: 212px; 46 min-width: 212px; 47 overflow: hidden; 48 } 49 .presenting-sponsor-desktop-19 .gam-presenting-sponsor-2 { 50 width: 200px; 51 height: 50px; 52 max-width: 200px; 53 max-height: 50px; 54 overflow: hidden; 55 position: relative; 56 } 57 .presenting-sponsor-desktop-19 .gam-presenting-sponsor-2 iframe { 58 width: 300px !important; 59 /* beat the generic img/iframe max-width:100% (would cap the viewport at the 60 200px container and clip the creative's right third) */ 61 max-width: none !important; 62 height: 75px !important; 63 transform: scale(0.6667); 64 transform-origin: top left; 65 border: 0; 66 } 67 68 /* AB-6152: Bootstrap-3 header menus (Style 4/8/9/15/17) render the desktop 69 sponsor inside .presenting-sponsor-mobile-menu, whose template LESS floats 70 #gam-presenting-sponsor-2 off-screen (margin:0 -200px auto; width:250px) â so 71 it's hidden until you scroll and can run off the side / drop below the nav. 72 This GAM <style> loads BEFORE template main.css, so a class rule can't beat the 73 LESS on source order; we beat it on SPECIFICITY by including the slot id 74 (.class #id = 1,1,0 > the LESS .a .b .c = 0,3,0). Pin the slot to the same 75 200x50 right-aligned, clipped box template 19 uses so it stays in the viewport, 76 in both the rest and .fixedbar states. Scoped to .presenting-sponsor-mobile-menu, 77 so template 19 (.presenting-sponsor-desktop-19) is untouched. */ 78 /* DIV wrapper = Style 15 family (the wrap is a div after the menu ul). 79 Absolute + translateY instead of float:right â the float top-aligned the 80 50px slot in the ~76px menu bar, so it rode visibly higher than the nav 81 links ("doesn't line up"). The nearest positioned ancestor is the header 82 .container (position:relative), which spans the bar's full height, so 83 top:50% centers the sponsor on the same line as the links in both the 84 resting and .fixedbar states. */ 85 div.presenting-sponsor-mobile-menu #gam-presenting-sponsor-2 { 86 position: absolute; 87 right: 15px; 88 top: 50%; 89 transform: translateY(-50%); 90 float: none; 91 width: 200px; 92 max-width: 200px; 93 height: 50px; 94 max-height: 50px; 95 margin: 0; 96 overflow: hidden; 97 } 98 /* AB-6152 follow-up (template 5 / Style 15 family): the absolute rule above only 99 holds if an ancestor of the slot is positioned, so right:15px/top:50% anchor to 100 the header .container. Template 5's main.less sets `.custom-nav .navbar 101 { position: inherit }`, which makes the navbar STATIC and removes BS3's default 102 position:relative â so in the resting (unscrolled) state NO ancestor is 103 positioned and the slot anchors to the viewport, dropping the sponsor on top of 104 the nav links. (Scrolled, the position:fixed .fixedbar became the containing 105 block and it looked fine â hence the intermittent behavior.) Re-establish the 106 containing block AB-6152 assumes, for both states. Scoped to .custom-nav so only 107 the Style 15 header family is affected; a no-op for the li-variant (Style 8/9), 108 whose slot is position:relative (in-flow), not absolute. */ 109 .custom-nav #nav-container { 110 position: relative; 111 } 112 /* AB-6152 follow-up #2 (Style-15 family, all-dropdown navs): when the greedy collapser 113 in topmenu2.js runs out of movable items â every remaining item is a .dropdown, which 114 it won't nest into MORE â but the nav still reaches the presenting sponsor, it tags the 115 header .nav-compact (then .nav-compact-2 if one tier isn't enough). That tightens the 116 nav just enough to clear the ad. Applied ONLY in that jammed case and cleared on resize, 117 so sparse navs keep their full padding and text size (and the larger-text preference). 118 Tier 1 trims horizontal padding only â text size is untouched; tier 2 is the last resort 119 and only then nudges letter-spacing. Loaded before template main.css, so we win on 120 specificity (id + 2 classes) + !important, same as the rules above. */ 121 .custom-nav.nav-compact #nav-links > li > a { 122 padding-left: 9px !important; 123 padding-right: 9px !important; 124 } 125 .custom-nav.nav-compact.nav-compact-2 #nav-links > li > a { 126 padding-left: 5px !important; 127 padding-right: 5px !important; 128 letter-spacing: -0.2px; 129 } 130 /* LI wrapper = Style 8/9 (the sponsor is an inline li in the greedy #nav-links). 131 Keep it in flow â the nav JS reserves its width; absolute would collapse the li. */ 132 li.presenting-sponsor-mobile-menu #gam-presenting-sponsor-2 { 133 float: right; 134 width: 200px; 135 max-width: 200px; 136 height: 50px; 137 max-height: 50px; 138 margin: 0; 139 overflow: hidden; 140 position: relative; 141 } 142 .presenting-sponsor-mobile-menu #gam-presenting-sponsor-2 iframe { 143 /* Full 300x75 viewport scaled to 200x50 â a 200px viewport clips the right 144 third of the 300-wide creative document (same bug as the t19 rule above). */ 145 width: 300px !important; 146 max-width: none !important; 147 height: 75px !important; 148 transform: scale(0.6667); 149 transform-origin: top left; 150 border: 0; 151 } 152 153 /* Mobile presenting sponsor: GAM serves a 300x75 creative, so visually 154 scale the whole iframe down to fit the header next to the logo + nav 155 + hamburger. The iframe still loads at native 300x75 so impressions, 156 click tracking, and viewability reporting fire correctly â it just 157 paints smaller. (Pattern ported from the State Association sites.) */ 158 #gam-presenting-sponsor-mobile { 159 width: 200px; 160 height: 50px; 161 overflow: hidden; 162 position: relative; 163 margin: 0; 164 } 165 #gam-presenting-sponsor-mobile iframe { 166 width: 300px !important; 167 max-width: none !important; 168 height: 75px !important; 169 transform: scale(0.6667); 170 transform-origin: top left; 171 border: 0; 172 } 173 @media (max-width: 380px) { 174 #gam-presenting-sponsor-mobile { 175 width: 160px; 176 height: 40px; 177 } 178 #gam-presenting-sponsor-mobile iframe { 179 transform: scale(0.5333); 180 } 181 } 182 183 /* Template 19 mobile: the sponsor has its own full-width row below the nav, 184 so don't clamp it to the inline box the other templates use. 185 Class+id specificity beats the bare #id rules above, including the 380px breakpoint. */ 186 .presenting-sponsor-mobile-19 #gam-presenting-sponsor-mobile { 187 width: auto; 188 max-width: 100%; 189 height: 64px; 190 } 191 192 /* ===== PRESENTING SPONSOR FOLLOWS EACH TEMPLATE'S NATIVE NAV ===== 193 No universal breakpoint. The desktop slot (.gam-presenting-sponsor-2) shows while 194 the header is in desktop mode and the mobile slot (#gam-presenting-sponsor-mobile) 195 shows once it collapses â exactly the Bootstrap visibility classes each header 196 already carries (BS3: hidden-sm hidden-xs / hidden-md hidden-lg; BS4/5: d-none 197 d-md-block / d-block d-md-none). The JS below fills whichever slot the CSS shows, 198 so per-template breakpoints are honored automatically. For the greedy "MORE" nav 199 (Style 8/9/15) the desktop sponsor is an inline <li>; nudgeGreedyNav() re-runs 200 AdjustNav() after the GAM creative paints so the nav reserves the ad's real width 201 and pushes overflow links into MORE instead of wrapping the sponsor below the nav. 202 (An earlier "force mobile sponsor at <=992 everywhere" rule lived here; it was
203 reverted because it misplaced the mobile slot on desktop-nav templates.) */ 204 205</style> 206 207 <style> 208 /* Template 14: the sponsor shares the .upper-side area with the social + app 209 icons, inside a narrow right column (col-md-2 ~168px at md, col-lg-2 at lg). 210 The old `width:360px` made .upper-side wider than its column, so it overflowed 211 the viewport's right edge and dragged the GAM sponsor off-screen (up to 142px 212 past the edge at 992-1200). The column is position:relative, so pin .upper-side 213 to ITS right edge: now the box grows leftward (socials reflow toward the nav) 214 and the sponsor â the rightmost, revenue-bearing element â always stays in the 215 viewport. fitPresentingSponsor() (JS below) still scales the ad to the 200px 216 box with no crop. */ 217 /* Scope ONLY to the right column (last child of the header row). The LEFT 218 .upper-side holds the school logo and must not move. Desktop-nav widths only 219 (col-md-2 has no width below 992 and the absolute pin would float over the 220 mobile header). */ 221 @media (min-width: 992px) { 222 .row > .col-md-2:last-child { 223 position: relative; 224 } 225 .row > .col-md-2:last-child .upper-side { 226 position: absolute; 227 top: 0; 228 right: 0; 229 width: 360px !important; 230 margin: 0 !important; 231 } 232 } 233 .presenting-sponsor .gam-presenting-sponsor-2 { 234 max-width: 200px !important; 235 max-height: none !important; 236 overflow: hidden; 237 } 238 </style> 239 240 241
241<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
241 242
242<script> 243 window.googletag = window.googletag || { cmd: [] }; 244 245 function isMobile() { 246 return window.innerWidth <= 768; 247 } 248 249 // The greedy "MORE" nav (topmenu.js, Header Style 8/9/15) lays out BEFORE the GAM 250 // presenting-sponsor iframe paints, so it never reserves the ad's width and the 251 // sponsor wraps to a line below the nav. Re-running AdjustNav() once the creative is 252 // sized makes the nav recount the sponsor <li> and tuck overflow links into MORE, 253 // keeping the sponsor inline. No-op on templates without the greedy nav (AdjustNav 254 // is undefined there), so it's safe to call unconditionally. 255 function nudgeGreedyNav() { 256 if (typeof AdjustNav === 'function') { 257 try { AdjustNav(); } catch (e) { /* greedy nav not present on this template */ } 258 } 259 } 260 261 googletag.cmd.push(function () { 262 var isMobileDevice = isMobile(); 263 var REFRESH_KEY = 'refresh'; 264 var REFRESH_VALUE = 'true'; 265 266 // NEW: programmatic flag + refresh timing 267 var useProgrammaticAds = false; 268 // 30s is Google's minimum refresh interval for any slot AdX can fill do not lower 269 var REFRESH_MS = 30000; 270 271 // NEW: add a body class only when programmatic + mobile (for stable layout) 272 if (useProgrammaticAds && isMobileDevice) { 273 document.body.classList.add('prog-mobile-banners'); 274 } 275 276 // ------- PRESENTING SPONSOR------- 277 // Define BOTH slots unconditionally. Defining a slot does NOT request an ad 278 // (only display()/refresh() does), and the responsive-fill block below 279 // displays exactly ONE at a time â so this adds no load-time impressions. 280 // The old isMobileDevice (innerWidth<=768) branch defined only one slot for 281 // the page's life; combined with CSS that switches the sponsor container at 282 // 992px, that stranded 769-991px on a visible-but-empty slot (the tablet dead 283 // zone). We now align the fill to the 992 CSS boundary (see below). 284 var sponsorSlotsById = {}; 285 sponsorSlotsById['gam-presenting-sponsor-mobile'] = googletag.defineSlot('/22870419559/headerwebmobile', [[300, 75]], 'gam-presenting-sponsor-mobile') 286 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 287 .addService(googletag.pubads()); 288 sponsorSlotsById['gam-presenting-sponsor-2'] = googletag.defineSlot('/22870419559/headerwebdesktop', [[300, 75]], 'gam-presenting-sponsor-2') 289 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 290 .addService(googletag.pubads()); 291 292 // Build base arrays of allowed sizes 293 var desktopTabletProgrammatic = [[640, 100], [728, 90]]; 294 var mobileProgrammatic = [[320, 50]]; // << mobile = 320x50 ONLY 295 var desktopTabletDefault = [[640, 100]]; 296 var mobileDefault = [[640, 100]]; 297 298 var allProgrammaticSizes = [[640, 100], [728, 90], [320, 50]]; 299 var allDefaultSizes = [[640, 100]]; 300 301 var bannerMapping = googletag.sizeMapping() 302 .addSize([1024, 0], useProgrammaticAds ? desktopTabletProgrammatic : desktopTabletDefault) // desktop 303 .addSize([768, 0], useProgrammaticAds ? desktopTabletProgrammatic : desktopTabletDefault) // tablet 304 .addSize([0, 0], useProgrammaticAds ? mobileProgrammatic : mobileDefault) // phones 305 .build(); 306 307 googletag.defineSlot( 308 '/22870419559/bannerweb', 309 useProgrammaticAds ? allProgrammaticSizes : allDefaultSizes, 310 'gam-banner-ad' 311 ) 312 .defineSizeMapping(bannerMapping) 313 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 314 .addService(googletag.pubads()); 315 316 googletag.defineSlot( 317 '/22870419559/bannerweb', 318 useProgrammaticAds ? allProgrammaticSizes : allDefaultSizes, 319 'gam-banner-ad-2' 320 ) 321 .defineSizeMapping(bannerMapping) 322 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 323 .addService(googletag.pubads()); 324 325 googletag.defineSlot('/22870419559/agent', [[300, 75]], 'gam-agent-ad') 326 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 327 .addService(googletag.pubads()); 328 329 googletag.pubads().setTargeting('siteid', '2579830'); 330 googletag.pubads().setTargeting('isschoolpay', '1'); 331 332 googletag.pubads().addEventListener('impressionViewable', function (event) { 333 var slot = event.slot; 334 if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) { 335 setTimeout(function () { 336 googletag.pubads().refresh([slot]); 337 }, REFRESH_MS); 338 } 339 }); 340 341 googletag.enableServices(); 342 343 // ------- PRESENTING SPONSOR: responsive fill (AB-6152 follow-up) ------- 344 // The desktop/mobile split is owned entirely by each header's NATIVE Bootstrap 345 // visibility classes (no universal @media here anymore). We fill whichever slot 346 // the CSS currently shows, and re-fill on resize so a breakpoint cross is never 347 // stranded on an empty slot. Only ONE slot is displayed at a time, so load-time 348 // impression volume is unchanged â the filled slot is always the VISIBLE (and 349 // viewable) one. For the greedy "MORE" nav the desktop sponsor is an inline <li>; 350 // nudgeGreedyNav() (called after the creative paints) re-runs AdjustNav so the nav 351 // reserves the ad's width and keeps it inline instead of wrapping it below. 352 (function () { 353 var sponsorDisplayed = { 'gam-presenting-sponsor-2': false, 'gam-presenting-sponsor-mobile': false }; 354 // Is the element actually rendered (not display:none on it or any ancestor)? 355 function isShown(el) { return !!(el && (el.offsetParent !== null || el.getClientRects().length)); } 356 // Fill whichever slot the CSS currently shows. The desktop/mobile split is owned 357 // entirely by the header CSS (the @media block above sets <=992 -> mobile on the 358 // standard menus; layout 19 keeps its reserved desktop slot, etc.), so the JS just 359 // follows it â no width is hard-coded here, and template-specific breakpoints 360 // (e.g. 19's reserved slot) are honored automatically. Fall back to a 993 width 361 // split only if neither container has been laid out yet. 362 function activeSponsorId() { 363 var d = document.getElementById('gam-presenting-sponsor-2'); 364 var m = document.getElementById('gam-presenting-sponsor-mobile'); 365 if (isShown(d)) return 'gam-presenting-sponsor-2'; 366 if (isShown(m)) return 'gam-presenting-sponsor-mobile'; 367 if (!d && !m) return null; 368 return window.innerWidth >= 993 ? 'gam-presenting-sponsor-2' : 'gam-presenting-sponsor-mobile'; 369 } 370 function fillActiveSponsor() { 371 var id = activeSponsorId(); 372 if (!id || !document.getElementById(id)) return; // this template doesn't render that slot 373 var slot = sponsorSlotsById[id]; 374 if (!slot) return; 375 if (!sponsorDisplayed[id]) { 376 googletag.display(id); 377 sponsorDisplayed[id] = true; 378 } else { 379 googletag.pubads().refresh([slot]); // already shown once -> re-serve on return 380 } 381 } 382 function whenReady(fn) { 383 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn); 384 else fn(); 385 } 386 whenReady(fillActiveSponsor); 387 // Re-fill the now-visible slot after a resize crosses any template's CSS breakpoint. 388 var resizeTimer; 389 window.addEventListener('resize', function () { 390 clearTimeout(resizeTimer); 391 resizeTimer = setTimeout(fillActiveSponsor, 200);
392 }); 393 })(); 394 395 // Add event listeners for responsive image handling 396 document.addEventListener('DOMContentLoaded', function () { 397 handleResponsiveImages(); 398 399 // Add debounced resize handler 400 var resizeTimeout = null; 401 window.addEventListener('resize', function () { 402 if (resizeTimeout) { 403 clearTimeout(resizeTimeout); 404 } 405 406 resizeTimeout = setTimeout(function () { 407 handleResponsiveImages(); 408 }, 250); 409 }); 410 }); 411 412 // Add slotRenderEnded event to handle styling right after ads render 413 googletag.pubads().addEventListener('slotRenderEnded', function (event) { 414 // Give a small delay to ensure content is available 415 setTimeout(function () { 416 var id = event.slot.getSlotElementId(); 417 var container = document.getElementById(id); 418 if (container) { 419 var iframes = container.querySelectorAll('iframe[id^="google_ads_iframe"]'); 420 iframes.forEach(applyResponsiveStyles); 421 } 422 if (id === 'gam-presenting-sponsor-2') { 423 // Belt-and-suspenders for the greedy nav: re-run after the creative has 424 // settled, covering the cross-origin safe-frame path where 425 // fitPresentingSponsor (and thus its inline nudge) can't measure the ad. 426 setTimeout(nudgeGreedyNav, 250); 427 } 428 }, 50); 429 }); 430 431 // Function to handle responsive images 432 function handleResponsiveImages() { 433 ['gam-banner-ad', 'gam-banner-ad-2', 'gam-sport-banner-ad', 'gam-sport-banner-ad-2', 'gam-presenting-sponsor-2', 'gam-presenting-sponsor-mobile'].forEach(adId => { 434 var adContainer = document.querySelector(`#${adId}`); 435 if (adContainer) { 436 observeIframeInsertion(adContainer); 437 var iframes = adContainer.querySelectorAll('iframe[id^="google_ads_iframe"]'); 438 iframes.forEach(applyResponsiveStyles); 439 } 440 }); 441 } 442 443 // Function to observe iframe insertion - from original code 444 function observeIframeInsertion(container) { 445 var observer = new MutationObserver(function (mutations) { 446 mutations.forEach(function (mutation) { 447 if (mutation.addedNodes) { 448 mutation.addedNodes.forEach(function (node) { 449 if (node.tagName === 'IFRAME' && node.id.startsWith('google_ads_iframe')) { 450 applyResponsiveStyles(node); 451 observeIframeChanges(node); 452 } 453 }); 454 } 455 }); 456 }); 457 458 observer.observe(container, { 459 childList: true, 460 subtree: true 461 }); 462 } 463 464 function applyResponsiveStyles(iframe) { 465 if (!iframe) return; 466 467 // Presenting sponsor (desktop AND mobile, ALL templates): one proportional 468 // fit â scale the creative to its reserved nav slot, no crop. (Previously this 469 // was template-19-only; every other template clipped via the default box.) 470 if (iframe.closest('.gam-presenting-sponsor-2') || iframe.closest('#gam-presenting-sponsor-mobile')) { 471 fitPresentingSponsor(iframe); 472 return; 473 } 474 475 // Banner / sport-banner ads â unchanged. 476 if ( 477 iframe.closest('.gam-banner-ad') || 478 iframe.closest('.gam-banner-ad-2') || 479 iframe.closest('.gam-sport-banner-ad') || 480 iframe.closest('.gam-sport-banner-ad-2') 481 ) { 482 var isTemplate19 = !!document.querySelector('.sticky-header-19'); 483 var isTemplate19Banner = isTemplate19 && iframe.closest('.gam-banner-ad'); 484 485 if (isMobile() && !isTemplate19Banner) { 486 iframe.style.width = '100%'; 487 iframe.style.height = 'auto'; 488 try { 489 var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 490 // Template 19's top banner sits at the very top of the sticky 491 // header with nothing overlapping it; the 20% push-down other 492 // templates use just renders as dead white space above the ad. 493 iframeDoc.querySelectorAll('img').forEach(function (img) { 494 img.style.maxWidth = '100%'; 495 img.style.height = 'auto'; 496 img.style.marginTop = iframe.closest('.gam-banner-ad') ? '20%' : '0'; 497 }); 498 } catch (e) { 499 console.error('Could not access iframe content:', e); 500 } 501 } 502 503 // Template 19's top banner ad: pin the iframe to the creative's true 504 // rendered height on EVERY device, not just mobile (AB-6411 â the 505 // sticky ad row is a fixed 122px box on desktop; see main.less/ 506 // CSSStyle19). Set inline with !important so it wins regardless of 507 // CSS state â GAM ad sizing lives here in JS, not in template CSS, 508 // which is easy to defeat via selector specificity drift (this exact 509 // element had multiple overlapping height:auto rules quietly taking 510 // turns winning). 511 if (isTemplate19Banner) { 512 try { 513 var iframeDoc19 = iframe.contentDocument || iframe.contentWindow.document; 514 if (iframeDoc19.documentElement) { iframeDoc19.documentElement.style.margin = '0'; iframeDoc19.documentElement.style.padding = '0'; } 515 if (iframeDoc19.body) { iframeDoc19.body.style.margin = '0'; iframeDoc19.body.style.padding = '0'; } 516 var bannerImg = iframeDoc19.querySelector('img'); 517 var fitBannerHeight = function () {
518 if (!bannerImg.naturalWidth) return; 519 var w = iframe.getBoundingClientRect().width; 520 var h = Math.round(w * bannerImg.naturalHeight / bannerImg.naturalWidth); 521 if (h > 0) iframe.style.setProperty('height', h + 'px', 'important'); 522 }; 523 if (bannerImg) { 524 bannerImg.style.maxWidth = '100%'; 525 bannerImg.style.height = 'auto'; 526 bannerImg.style.display = 'block'; 527 bannerImg.style.marginTop = '0'; 528 if (bannerImg.complete && bannerImg.naturalWidth) { fitBannerHeight(); } 529 else { bannerImg.addEventListener('load', fitBannerHeight); } 530 } 531 } catch (e) { 532 console.error('Could not access iframe content:', e); 533 } 534 } 535 } 536 } 537 538 // Scale the presenting sponsor to fit its reserved nav slot from the creative's 539 // TRUE dimensions, preserving aspect ratio (never crop). Generalized from the old 540 // template-19-only version so EVERY template gets the same treatment. Per the 541 // business-rules GAM section, sizing lives here in JS â CSS can't reach the creative 542 // inside the friendly iframe. The iframe still loads the native creative so GAM 543 // impression/click/viewability tracking fires correctly; we only change how it paints. 544 function fitPresentingSponsor(iframe) { 545 var container = iframe.closest('.gam-presenting-sponsor-2, #gam-presenting-sponsor-mobile'); 546 if (!container) return; 547 var isMobileSlot = container.id === 'gam-presenting-sponsor-mobile'; 548 549 // Target box = the slot each template reserves in its nav. Read it from the 550 // rendered container; fall back / sanity-cap so an unbounded (e.g. max-width:none) 551 // or not-yet-sized container can't blow the ad out across the nav. 552 var boxW = container.clientWidth; 553 var boxH = container.clientHeight; 554 if (!boxW || boxW < 40 || boxW > 400) boxW = isMobileSlot ? Math.max(200, window.innerWidth - 24) : 240; 555 if (!boxH || boxH < 20 || boxH > 120) boxH = isMobileSlot ? 64 : 72; 556 557 function apply(nativeW, nativeH) { 558 if (!nativeW || !nativeH) return; 559 // Fit WITHIN the box on both dimensions, preserving aspect ratio â no crop. 560 var scale = Math.min(boxW / nativeW, boxH / nativeH); 561 iframe.style.setProperty('width', nativeW + 'px', 'important'); 562 iframe.style.setProperty('height', nativeH + 'px', 'important'); 563 iframe.style.setProperty('transform', 'scale(' + scale + ')', 'important'); 564 iframe.style.transformOrigin = 'top left'; 565 // display:block so the iframe ignores inherited line-height (e.g. 85px on 566 // template 14's .upper-side) and its own vertical-align:bottom, which push an 567 // inline iframe DOWN inside the slot and let overflow:hidden clip the bottom. 568 iframe.style.setProperty('display', 'block', 'important'); 569 // Collapse the container to the painted size so there's no gap or overflow. 570 container.style.width = Math.round(nativeW * scale) + 'px'; 571 container.style.height = Math.round(nativeH * scale) + 'px'; 572 container.style.overflow = 'hidden'; 573 // Desktop sponsor sits inline in the greedy nav â now that it has a real 574 // width, let the nav reserve it (pushes overflow links into MORE). 575 if (!isMobileSlot) nudgeGreedyNav(); 576 } 577 578 try { 579 var doc = iframe.contentDocument || iframe.contentWindow.document; 580 var img = doc && doc.querySelector('img'); 581 if (img) { 582 // GAM's friendly iframe ships an 8px <body> margin that nudges the creative 583 // down/right (then overflow:hidden crops it). Zero margins + block-level the 584 // image to kill the inline baseline gap, then measure true dimensions. 585 if (doc.documentElement) { doc.documentElement.style.margin = '0'; doc.documentElement.style.padding = '0'; } 586 if (doc.body) { doc.body.style.margin = '0'; doc.body.style.padding = '0'; } 587 img.style.display = 'block'; 588 img.style.maxWidth = 'none'; 589 img.style.width = 'auto'; 590 img.style.height = 'auto';
591 if (img.complete && img.naturalWidth) { 592 apply(img.naturalWidth, img.naturalHeight); 593 } else { 594 img.addEventListener('load', function () { 595 apply(img.naturalWidth, img.naturalHeight); 596 }); 597 } 598 } 599 } catch (e) { 600 // Cross-origin (safe-frame) creative â can't measure it; leave the CSS default. 601 console.error('Could not size presenting sponsor:', e); 602 } 603 } 604 605 function observeIframeChanges(iframe) { 606 iframe.addEventListener('load', function () { 607 applyResponsiveStyles(iframe); 608 }); 609 610 var observer = new MutationObserver(function (mutations) { 611 mutations.forEach(function (mutation) { 612 if (mutation.type === 'childList' || (mutation.type === 'attributes' && mutation.attributeName === 'src')) { 613 applyResponsiveStyles(iframe); 614 } 615 }); 616 }); 617 618 observer.observe(iframe, { 619 childList: true, 620 subtree: true, 621 attributes: true, 622 attributeFilter: ['src'] 623 }); 624 } 625 }); 626 </script>
626 627 628 <!-- Google tag (gtag.js) -->
vendor: 73 bytes, lines 628-629
628 629 <script async src="https://www.googletagmanager.com/gtag/js?id=
629G-540PHGNH3P
vendor: 21 bytes, lines 629-630
629"></script> 630
630<script> 631
vendor: 171 bytes, lines 631-635
631window.dataLayer = window.dataLayer || []; 632 function gtag() { dataLayer.push(arguments); } 633 gtag('js', new Date()); 634 635 gtag('config', '
635G-540PHGNH3P
vendor: 13 bytes, lines 635-636
635'); 636
636</script>
636 637 638 639 <meta charset="utf-8" /> 640 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes" /> 641 <title>T.L. Hanna High School Baseball</title> 642 <meta name="description" content="The official Baseball page for the T.L. Hanna Yellow Jackets." /> 643 <meta name="keywords" content="t.l. hanna high school, yellow jackets, athletics, schedules, scores, news, broadcasting, mobile, video, rosters, photos, sports, high school" /> 644 <meta property="og:image" content="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/eaef9e97-6c21-4696-a0c0-eb5fa3e29b4c.png"> 645 <link rel="canonical" href="https://www.tlhannasports.com/sport/baseball/boys/" /> 646<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" /> 647
647<script type="application/ld+json">{"@context":"https://schema.org","@type":"SportsOrganization","name":"T.L. Hanna High School","url":"https://www.tlhannasports.com","logo":"https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/eaef9e97-6c21-4696-a0c0-eb5fa3e29b4c.png","description":"The official Baseball page for the T.L. Hanna Yellow Jackets.","alternateName":"T.L. Hanna High School Yellow Jackets","address":{"@type":"PostalAddress","addressLocality":"Anderson","addressRegion":"SC"}}</script>
647 648
648<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"T.L. Hanna High School","url":"https://www.tlhannasports.com","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.tlhannasports.com/search?keyword={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
648 649 650 651 652 653 <!-- latest CDN compiled and minified CSS for lity (simple lightbox) --> 654 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lity/2.3.1/lity.min.css" integrity="sha256-0SZxASYAglrmIuTx+ZYHE3hzTnCZWB7XLu+iA8AG0Z0=" crossorigin="anonymous" /> 655 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 656 <link href="/css/mm.css" rel="stylesheet" /> 657 <!-- latest CDN compiled and minified CSS for slick slider --> 658 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css" integrity="sha256-UK1EiopXIL+KVhfbFa8xrmAWPeBjMVdvYMYkTAEv/HI=" crossorigin="anonymous" /> 659 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css" integrity="sha256-4hqlsNP9KM6+2eA8VUT0kk4RsMRTeS7QGHIM+MZ5sLY=" crossorigin="anonymous" /> 660 <!-- latest CDN compiled and minified CSS for font awesome --> 661 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" integrity="sha256-NuCn4IvuZXdBaFKJOAcsU2Q3ZpwbdFisd5dux4jkQ5w=" crossorigin="anonymous" /> 662 <link rel="stylesheet" href="/lib/yamm3/yamm/yamm.min.css" /> 663 <link rel="stylesheet" href="/lib/datatables/media/css/dataTables.bootstrap.min.css" /> 664 <link rel="stylesheet" href="/less/templates/14/main.min.css?v=2.4" /> 665 <link rel="icon" type="image/png" href="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/eaef9e97-6c21-4696-a0c0-eb5fa3e29b4c.png"> 666 <link href="/lib/sweetalert/dist/sweetalert.css" rel="stylesheet" /> 667 <link rel="stylesheet" href="/less/Components/AIAgent.min.css" /> 668 669 670 <style> 671 html, body{background:url(https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/1655c56d-8eb8-493a-81e6-2a0b9611c49f.png) no-repeat fixed;background-size: cover;overflow-x: hidden;} 672 h1,h2,h3,h4,h5,h6{color: #c2b380} 673 hr {border: 0;height: 2px; background-image: linear-gradient(to right, #ccc, #c2b380, #ccc);} 674 .border-bottom-primary-thick{border-bottom: 4px solid #c2b380;} 675 .border-all-thin-primary{border: solid 1px #c2b380;} 676 .bg-primary{background-color: #c2b380;} 677 .text-primary{color: #c2b380 !important;} 678 .text-primary-font{color: #ffffff !important;} 679 .bg-gradient-primary{background-image: linear-gradient(180deg,#fff,#c2b380);} 680 .bg-gradient-primary-angle{border-color: transparent #c2b380;} 681 .bg-gradient-primary-dark{background-image: linear-gradient(180deg,#000,#c2b380);} 682 .slick-next:before, .slick-prev:before{color: #c2b380;} 683 .navbar-inverse .navbar-nav > li > a:hover {color: #252021!important; } 684 @media (max-width: 991px) { 685 .gen-navigation .collapse.in {background-color:#c2b380;} 686 .gen-navigation nav .menu-drop ul a {color:#ffffff !important;} 687 } 688 .ticker-19-badge-today, .ticker-19-badge-upcoming, .ticker-19-badge-final { background-color: #c2b380; } 689 .ticker-19-calendar-link { background-color: #c2b380; color: #fff !important; min-width: 80px !important; padding: 0 20px !important; border: none !important; border-right: 3px solid rgba(255,255,255,0.3) !important; font-size: 1rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 1px !important; gap: 4px !important; } 690 .ticker-19-calendar-link:hover { filter: brightness(1.15); } 691 .ticker-19-calendar-link i { font-size: 1.3rem !important; } 692 .ticker-19-calendar-link span { color: #fff !important; font-size: 0.7rem !important; font-weight: 700 !important; letter-spacing: 1px !important; } 693</style> 694 695 696 697 698 699</head> 700<body viewport="fixed" id="top"> 701 <a href="#main-content" class="skip-link">Skip to main content</a> 702 703 <div class="ticker-19-section" aria-label="Game Schedule"> 704 <div class="ticker-19-bar"> 705 <!-- Composite calendar link â LEFT side like OU --> 706 <a href="/calendar" class="ticker-19-calendar-link" aria-label="View full schedule"> 707 <i class="fa fa-calendar" aria-hidden="true"></i>
708 <span>Composite</span> 709 </a> 710 711 <!-- Tabs --> 712 <div class="ticker-19-tabs" role="tablist"> 713 <button class="ticker-19-tab active" id="ticker19-ev-btn" role="tab" aria-controls="ticker19-events" aria-selected="true" tabindex="0">Events</button> 714 <button class="ticker-19-tab" id="ticker19-res-btn" role="tab" aria-controls="ticker19-results" aria-selected="false" tabindex="0">Results</button> 715 </div> 716 717 <!-- Events Panel --> 718 <div class="ticker-19-panel active" id="ticker19-events" role="tabpanel" aria-labelledby="ticker19-ev-btn"> 719 <div class="ticker-19-scroll-container"> 720 <button class="ticker-19-arrow ticker-19-arrow-left" aria-label="Previous games"><i class="fa fa-chevron-left" aria-hidden="true"></i></button> 721 <div class="ticker-19-track events-slider-19"> 722 <div class="ticker-19-empty">No upcoming events <a href="/calendar">View calendar</a></div> 723 </div> 724 <button class="ticker-19-arrow ticker-19-arrow-right" aria-label="Next games"><i class="fa fa-chevron-right" aria-hidden="true"></i></button> 725 </div> 726 </div> 727 728 <!-- Results Panel --> 729 <div class="ticker-19-panel" id="ticker19-results" role="tabpanel" aria-labelledby="ticker19-res-btn" hidden> 730 <div class="ticker-19-scroll-container"> 731 <button class="ticker-19-arrow ticker-19-arrow-left" aria-label="Previous results"><i class="fa fa-chevron-left" aria-hidden="true"></i></button> 732 <div class="ticker-19-track results-slider-19"> 733 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Volleyball result â L 0 - 3"> 734 <div class="ticker-19-card-top"> 735 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-final" style="background-color:#c2b380;">Oct. 7</span> · <span class="ticker-19-final-label">Final</span></span> 736 </div> 737 <div class="ticker-19-sport">Volleyball - Varsity</div> 738 <div class="ticker-19-opponent"> 739 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="ticker-19-opp-logo" alt="Woodmont" loading="lazy" /> 740 <span class="ticker-19-opp-name">vs Woodmont</span> 741 <span class="ticker-19-result-score">L 0 - 3</span> 742 </div> 743 </div> 744 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Golf result â W 159 - 179"> 745 <div class="ticker-19-card-top"> 746 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-final" style="background-color:#c2b380;">Oct. 7</span> · <span class="ticker-19-final-label">Final</span></span> 747 </div> 748 <div class="ticker-19-sport">Golf - Varsity</div> 749 <div class="ticker-19-opponent"> 750 <img src="https://5starassets.blob.core.windows.net/mascots/generics/10.png" class="ticker-19-opp-logo" alt="Greenwood, Greenville" loading="lazy" /> 751 <span class="ticker-19-opp-name">vs Greenwood, Greenville</span> 752 <span class="ticker-19-result-score">W 159 - 179</span> 753 </div> 754 </div> 755 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Volleyball result â W 3 - 0"> 756 <div class="ticker-19-card-top">
757 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-final" style="background-color:#c2b380;">Oct. 6</span> · <span class="ticker-19-final-label">Final</span></span> 758 </div> 759 <div class="ticker-19-sport">Volleyball - Varsity</div> 760 <div class="ticker-19-opponent"> 761 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="ticker-19-opp-logo" alt="Greenwood" loading="lazy" /> 762 <span class="ticker-19-opp-name">vs Greenwood</span> 763 <span class="ticker-19-result-score">W 3 - 0</span> 764 </div> 765 </div> 766 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Volleyball result â W 3 - 0"> 767 <div class="ticker-19-card-top"> 768 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-final" style="background-color:#c2b380;">Oct. 6</span> · <span class="ticker-19-final-label">Final</span></span> 769 </div> 770 <div class="ticker-19-sport">Volleyball - Varsity</div> 771 <div class="ticker-19-opponent"> 772 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="ticker-19-opp-logo" alt="Greenwood" loading="lazy" /> 773 <span class="ticker-19-opp-name">vs Greenwood</span> 774 <span class="ticker-19-result-score">W 3 - 0</span> 775 </div> 776 </div> 777 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Golf result â W 1st Place"> 778 <div class="ticker-19-card-top"> 779 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-final" style="background-color:#c2b380;">Oct. 6</span> · <span class="ticker-19-final-label">Final</span></span> 780 </div> 781 <div class="ticker-19-sport">Golf - Varsity</div> 782 <div class="ticker-19-opponent"> 783 <img src="https://5starassets.blob.core.windows.net/mascots/generics/10.png" class="ticker-19-opp-logo" alt="Lady Patriot Invitational" loading="lazy" /> 784 <span class="ticker-19-opp-name">vs Lady Patriot Invitational</span> 785 <span class="ticker-19-result-score">W 1st Place</span> 786 </div> 787 </div> 788 </div> 789 <button class="ticker-19-arrow ticker-19-arrow-right" aria-label="Next results"><i class="fa fa-chevron-right" aria-hidden="true"></i></button> 790 </div> 791 </div> 792 </div> 793 </div> 794
794<script> 795 (function loadTicker() { 796 if (typeof jQuery !== 'undefined') { 797 var s = document.createElement('script'); 798 s.src = '/js/UpcomingEventsStyle19.js'; 799 document.body.appendChild(s); 800 } else { 801 setTimeout(loadTicker, 50); 802 } 803 })(); 804 </script>
804 805 806<!-- Mobile: collapsible mini schedule (future events only) --> 807 <div class="mobile-mini-sched" id="mobileMinSched" aria-label="Upcoming events" hidden> 808 <div class="mms-filter"> 809 <select id="mmsSportFilter" class="mms-sport-select" aria-label="Filter by sport"> 810 <option value="">All Sports</option> 811 <option value="Adaptive PE">Adaptive PE</option> 812 <option value="Baseball">Baseball</option> 813 <option value="Basketball">Basketball</option> 814 <option value="Bass Fishing">Bass Fishing</option> 815 <option value="Competitive Cheer">Competitive Cheer</option> 816 <option value="Cross Country">Cross Country</option> 817 <option value="Flag Football">Flag Football</option> 818 <option value="Football">Football</option> 819 <option value="Golf">Golf</option> 820 <option value="Lacrosse">Lacrosse</option> 821 <option value="Soccer">Soccer</option> 822 <option value="Softball">Softball</option> 823 <option value="Swimming">Swimming</option> 824 <option value="Tennis">Tennis</option> 825 <option value="Track and Field">Track and Field</option> 826 <option value="Volleyball">Volleyball</option> 827 <option value="Wrestling">Wrestling</option> 828 </select> 829 </div> 830 <div class="mms-events" id="mmsEvents" aria-live="polite"> 831 </div> 832 <a href="/calendar" class="mms-full-link"><i class="fa fa-calendar" aria-hidden="true"></i> Full Schedule</a> 833 </div> 834 835<style> 836 /* Game footnote (Homecoming, Senior Night, ...) under the matchup */ 837 .ticker-19-footnote { 838 font-size: 0.7rem; 839 font-style: italic; 840 font-weight: 600; 841 color: #444; 842 text-align: center; 843 white-space: nowrap; 844 overflow: hidden; 845 text-overflow: ellipsis; 846 max-width: 190px; 847 margin: 1px auto 0; 848 } 849 850 /* Auto-scroll card text that overflows its max-width (JS flags with .t19-marq) */ 851 .ticker-19-sport.t19-marq, .ticker-19-opp-name.t19-marq { text-overflow: clip; } 852 .t19-marq .t19-marq-inner { 853 display: inline-block; 854 white-space: nowrap; 855 animation: t19-marq-slide var(--t19-marq-dur, 6s) ease-in-out infinite alternate; 856 } 857 .ticker-19-card:hover .t19-marq .t19-marq-inner, 858 .ticker-19-card:focus-within .t19-marq .t19-marq-inner { animation-play-state: paused; } 859 @keyframes t19-marq-slide { 860 0%, 20% { transform: translateX(0); } 861 80%, 100% { transform: translateX(var(--t19-marq-shift, 0px)); } 862 } 863 @media (prefers-reduced-motion: reduce) { 864 .ticker-19-sport.t19-marq, .ticker-19-opp-name.t19-marq { text-overflow: ellipsis; } 865 .t19-marq .t19-marq-inner { animation: none; } 866 } 867 868 .mobile-cal-bar { display: none; } 869 .mobile-mini-sched { display: none; } 870 @media (max-width: 991px) { 871 .ticker-19-section { display: none !important; } 872 873 /* Calendar bar: toggle + full schedule link */ 874 .mobile-cal-bar { 875 display: flex !important; 876 align-items: center; 877 justify-content: center; 878 padding: 0; 879 margin: 0; 880 } 881 .mcb-toggle { 882 flex: 1; 883 display: flex; 884 align-items: center; 885 justify-content: center; 886 gap: 8px; 887 color: #fff; 888 background: transparent; 889 border: none; 890 font-size: 1.1rem; 891 font-weight: 700; 892 text-transform: uppercase; 893 letter-spacing: 0.4px; 894 padding: 8px 14px; 895 cursor: pointer; 896 } 897 .mcb-caret { 898 transition: transform 0.2s; 899 font-size: 0.95rem; 900 } 901 .mcb-toggle[aria-expanded="true"] .mcb-caret { 902 transform: rotate(180deg); 903 } 904 .mcb-full { 905 display: flex; 906 align-items: center; 907 justify-content: center; 908 padding: 8px 16px; 909 color: rgba(255,255,255,0.9); 910 text-decoration: none; 911 border-left: 1px solid rgba(255,255,255,0.15); 912 font-size: 1.05rem; 913 } 914 .mcb-full:hover { color: #fff; text-decoration: none; } 915 916 /* Mini schedule (collapsed by default) */ 917 .mobile-mini-sched { 918 background: #fff; 919 border-bottom: 1px solid #e5e7eb; 920 overflow: hidden; 921 max-height: 0; 922 transition: max-height 0.3s ease; 923 } 924 .mobile-mini-sched.mms-open { 925 display: block; 926 max-height: 1200px; 927 } 928 .mms-event { 929 display: flex; 930 align-items: center; 931 gap: 14px; 932 padding: 14px 16px;
933 border-bottom: 1px solid #f0f0f0; 934 } 935 .mms-event:last-child { border-bottom: none; } 936 .mms-date { 937 display: flex; 938 flex-direction: column; 939 align-items: center; 940 min-width: 56px; 941 flex-shrink: 0; 942 } 943 .mms-month { 944 font-size: 1rem; 945 font-weight: 700; 946 text-transform: uppercase; 947 color: #444; 948 line-height: 1; 949 } 950 .mms-day { 951 font-size: 1.85rem; 952 font-weight: 800; 953 color: #000; 954 line-height: 1.2; 955 } 956 .mms-info { 957 flex: 1; 958 min-width: 0; 959 } 960 .mms-sport { 961 display: block; 962 font-size: 1.05rem; 963 font-weight: 700; 964 text-transform: uppercase; 965 color: #444; 966 letter-spacing: 0.3px; 967 } 968 .mms-matchup { 969 display: flex; 970 align-items: center; 971 gap: 8px; 972 font-size: 1.2rem; 973 font-weight: 700; 974 color: #000; 975 white-space: nowrap; 976 overflow: hidden; 977 text-overflow: ellipsis; 978 } 979 .mms-logo { 980 width: 32px; 981 height: 32px; 982 object-fit: contain; 983 border-radius: 50%; 984 flex-shrink: 0; 985 } 986 .mms-right { 987 flex-shrink: 0; 988 text-align: right; 989 } 990 .mms-time { 991 font-size: 1.15rem; 992 font-weight: 600; 993 color: #000; 994 } 995 .mms-filter { 996 padding: 12px 16px; 997 border-bottom: 1px solid #e5e7eb; 998 } 999 .mms-sport-select { 1000 width: 100%; 1001 padding: 12px 14px; 1002 font-size: 1.2rem; 1003 font-weight: 600; 1004 border: 1px solid #d1d5db; 1005 border-radius: 4px; 1006 background: #fff; 1007 color: #000; 1008 -webkit-appearance: menulist; 1009 } 1010 .mms-sport-select option { 1011 color: #000; 1012 background: #fff; 1013 font-size: 1.2rem; 1014 } 1015 .mms-full-link { 1016 display: flex; 1017 align-items: center; 1018 justify-content: center; 1019 gap: 10px; 1020 padding: 16px; 1021 font-size: 1.2rem; 1022 font-weight: 700; 1023 text-transform: uppercase; 1024 letter-spacing: 0.5px; 1025 color: #000; 1026 text-decoration: none; 1027 border-top: 1px solid #e5e7eb; 1028 } 1029 .mms-full-link:hover { color: #1a1a1a; text-decoration: none; } 1030 } 1031</style>
1032<script> 1033document.addEventListener('DOMContentLoaded', function () { 1034 var btn = document.getElementById('mcbToggle'); 1035 var sched = document.getElementById('mobileMinSched'); 1036 var calBar = document.querySelector('.mobile-cal-bar'); 1037 if (!btn || !sched || !calBar) return; 1038 1039 // Move the schedule right after the calendar bar so it expands downward 1040 calBar.parentNode.insertBefore(sched, calBar.nextSibling); 1041 1042 // Toggle expand/collapse 1043 btn.addEventListener('click', function () { 1044 var open = sched.classList.toggle('mms-open'); 1045 sched.hidden = !open; 1046 btn.setAttribute('aria-expanded', open ? 'true' : 'false'); 1047 }); 1048 1049 // Sport filter: fetch filtered events from server 1050 var filter = document.getElementById('mmsSportFilter'); 1051 var eventsContainer = document.getElementById('mmsEvents'); 1052 if (filter && eventsContainer) { 1053 filter.addEventListener('change', function () { 1054 var sport = this.value; 1055 eventsContainer.style.opacity = '0.5'; 1056 fetch('/api/mobile-events?sport=' + encodeURIComponent(sport)) 1057 .then(function (r) { return r.json(); }) 1058 .then(function (events) { 1059 var html = ''; 1060 events.forEach(function (g) { 1061 html += '<div class="mms-event" data-sport="' + (g.sport || '') + '">' 1062 + '<div class="mms-date"><span class="mms-month">' + g.month + '</span><span class="mms-day">' + g.day + '</span></div>' 1063 + '<div class="mms-info"><span class="mms-sport">' + g.sportLabel + '</span>' 1064 + '<span class="mms-matchup">' 1065 + (g.opponentLogo ? '<img src="' + g.opponentLogo + '" class="mms-logo" alt="" loading="lazy" />' : '') 1066 + g.matchup + '</span></div>' 1067 + '<div class="mms-right"><span class="mms-time">' + g.time + '</span></div></div>'; 1068 }); 1069 eventsContainer.innerHTML = html || '<div style="padding:18px;text-align:center;color:#555;font-size:1rem;font-weight:500;">No upcoming events</div>'; 1070 eventsContainer.style.opacity = '1'; 1071 }) 1072 .catch(function () { eventsContainer.style.opacity = '1'; }); 1073 }); 1074 } 1075}); 1076</script>
1076 1077 1078 1079 <input type="hidden" value="2579830" id="schoolId" /> 1080 <input type="hidden" value="true" id="customAppSchool" /> 1081 <input type="hidden" value="6/23/2025 12:00:00 AM" id="adServingDateBegins" /> 1082 <div class="row"> 1083 <div class="col-md-12"> 1084 1085 <div class="gen-navigation"> 1086 <nav class="navbar navbar-inverse navbar-fixed-top border-bottom-primary-thick" role="navigation" data-sponsor-model="false"> 1087 <div class="all-toppers"> 1088 1089 1090 1091 <div class="row"> 1092 <div class="col-lg-2 col-md-2 hidden-sm hidden-xs"> 1093 <div class="upper-side"> 1094 <a href="/" id="ps"> 1095 <img src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/b74d8d02-6247-4c85-8d67-e7253bd009d6.png" class="img-responsive" aria-label="T.L. Hanna Logo" alt="T.L. Hanna Logo" /> 1096 </a> 1097 </div> 1098 </div> 1099 <div class="col-lg-7 col-md-8 col-sm-12"> 1100 <div id="nav-container"> 1101 <div class="navbar-header"> 1102 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#mobile-toggle-button"> 1103 <span class="sr-only">Toggle navigation</span> 1104 <span class="icon-bar"></span> 1105 <span class="icon-bar"></span> 1106 <span class="icon-bar"></span> 1107 </button> 1108 <div class="brand-wrapper"> 1109 <a class="navbar-brand" href="/"> 1110 <img src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/b74d8d02-6247-4c85-8d67-e7253bd009d6.png" class="img-responsive tag" aria-label="T.L. Hanna Logo" alt="T.L. Hanna Logo" /> 1111 </a> 1112 <div class="presenting-sponsor hidden-md hidden-lg"> 1113 <div class="adzone adzone-0 presenting-sponsor"> 1114 <div class="ad-placement"> 1115 <div id='gam-presenting-sponsor-mobile' class="gam_ps"></div> 1116 </div> 1117 1118 </div> 1119 </div> 1120 </div> 1121 </div> 1122 <div id="mobile-toggle-button" class="navbar-collapse collapse"> 1123 <ul class="nav navbar-nav" id="nav-links"> 1124 <li id="home"><a class="text-primary-font" href="/">HOME</a></li> 1125 <li class="dropdown"> 1126 <a href="#" class="dropdown-toggle text-primary-font" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span>SPORTS</span> <span class="caret"></span></a> 1127 <ul class="dropdown-menu" id="sport-drop"> 1128 <li> 1129 <div class="menu-drop"> 1130 <ul> 1131 <li> 1132 <div class="row"> 1133 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1134 <a class="text-primary" href="/sport/adaptive pe/coed/">ADAPTIVE PE</a> 1135 </div> 1136 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1137 <a class="text-primary" href="/sport/adaptive pe/coed/?tab=schedule" role="menuitem" aria-label="Adaptive PE - Schedules">schedules</a><span> /</span> 1138 <a class="text-primary" href="/sport/adaptive pe/coed/?tab=roster" role="menuitem" aria-label="Adaptive PE - Rosters">rosters</a><span> /</span> 1139 <a class="text-primary" href="/sport/adaptive pe/coed/?tab=news" role="menuitem" aria-label="Adaptive PE - News">news</a> 1140 </div> 1141 </div> 1142 </li> 1143 <li> 1144 <div class="row"> 1145 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1146 <a class="text-primary" href="/sport/baseball/boys/">BASEBALL</a> 1147 </div> 1148 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1149 <a class="text-primary" href="/sport/baseball/boys/?tab=schedule" role="menuitem" aria-label="Baseball - Schedules">schedules</a><span> /</span> 1150 <a class="text-primary" href="/sport/baseball/boys/?tab=roster" role="menuitem" aria-label="Baseball - Rosters">rosters</a><span> /</span> 1151 <a class="text-primary" href="/sport/baseball/boys/?tab=news" role="menuitem" aria-label="Baseball - News">news</a> 1152 </div> 1153 </div> 1154 </li> 1155 <li> 1156 <div class="row"> 1157 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1158 <a class="text-primary" href="/sport/baseball/boys/">BASEBALL(BOYS)</a> 1159 </div> 1160 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1161 <a class="text-primary" href="/sport/baseball/boys/?tab=schedule" role="menuitem" aria-label="Baseball(Boys) - Schedules">schedules</a><span> /</span> 1162 <a class="text-primary" href="/sport/baseball/boys/?tab=roster" role="menuitem" aria-label="Baseball(Boys) - Rosters">rosters</a><span> /</span> 1163 <a class="text-primary" href="/sport/baseball/boys/?tab=news" role="menuitem" aria-label="Baseball(Boys) - News">news</a> 1164 </div> 1165 </div> 1166 </li> 1167 <li> 1168 <div class="row"> 1169 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1170 <a class="text-primary" href="/sport/basketball/boys/">BASKETBALL(BOYS)</a> 1171 </div> 1172 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1173 <a class="text-primary" href="/sport/basketball/boys/?tab=schedule" role="menuitem" aria-label="Basketball(Boys) - Schedules">schedules</a><span> /</span> 1174 <a class="text-primary" href="/sport/basketball/boys/?tab=roster" role="menuitem" aria-label="Basketball(Boys) - Rosters">rosters</a><span> /</span> 1175 <a class="text-primary" href="/sport/basketball/boys/?tab=news" role="menuitem" aria-label="Basketball(Boys) - News">news</a> 1176 </div> 1177 </div> 1178 </li> 1179 <li> 1180 <div class="row"> 1181 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1182 <a class="text-primary" href="/sport/basketball/girls/">BASKETBALL(GIRLS)</a> 1183 </div> 1184 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1185 <a class="text-primary" href="/sport/basketball/girls/?tab=schedule" role="menuitem" aria-label="Basketball(Girls) - Schedules">schedules</a><span> /</span> 1186 <a class="text-primary" href="/sport/basketball/girls/?tab=roster" role="menuitem" aria-label="Basketball(Girls) - Rosters">rosters</a><span> /</span> 1187 <a class="text-primary" href="/sport/basketball/girls/?tab=news" role="menuitem" aria-label="Basketball(Girls) - News">news</a> 1188 </div> 1189 </div> 1190 </li> 1191 <li> 1192 <div class="row"> 1193 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1194 <a class="text-primary" href="/sport/bass fishing/coed/">BASS FISHING</a> 1195 </div> 1196 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1197 <a class="text-primary" href="/sport/bass fishing/coed/?tab=schedule" role="menuitem" aria-label="Bass Fishing - Schedules">schedules</a><span> /</span> 1198 <a class="text-primary" href="/sport/bass fishing/coed/?tab=roster" role="menuitem" aria-label="Bass Fishing - Rosters">rosters</a><span> /</span> 1199 <a class="text-primary" href="/sport/bass fishing/coed/?tab=news" role="menuitem" aria-label="Bass Fishing - News">news</a> 1200 </div> 1201 </div> 1202 </li> 1203 <li> 1204 <div class="row"> 1205 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1206 <a class="text-primary" href="/sport/competitive cheer/coed/">COMPETITIVE CHEER</a> 1207 </div> 1208 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1209 <a class="text-primary" href="/sport/competitive cheer/coed/?tab=schedule" role="menuitem" aria-label="Competitive Cheer - Schedules">schedules</a><span> /</span> 1210 <a class="text-primary" href="/sport/competitive cheer/coed/?tab=roster" role="menuitem" aria-label="Competitive Cheer - Rosters">rosters</a><span> /</span> 1211 <a class="text-primary" href="/sport/competitive cheer/coed/?tab=news" role="menuitem" aria-label="Competitive Cheer - News">news</a> 1212 </div> 1213 </div> 1214 </li> 1215 <li> 1216 <div class="row"> 1217 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1218 <a class="text-primary" href="/sport/cross country/coed/">CROSS COUNTRY(COED)</a> 1219 </div> 1220 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1221 <a class="text-primary" href="/sport/cross country/coed/?tab=schedule" role="menuitem" aria-label="Cross Country(Coed) - Schedules">schedules</a><span> /</span> 1222 <a class="text-primary" href="/sport/cross country/coed/?tab=roster" role="menuitem" aria-label="Cross Country(Coed) - Rosters">rosters</a><span> /</span> 1223 <a class="text-primary" href="/sport/cross country/coed/?tab=news" role="menuitem" aria-label="Cross Country(Coed) - News">news</a> 1224 </div> 1225 </div> 1226 </li> 1227 <li> 1228 <div class="row"> 1229 <div class="sport-link col-lg-6 col-md-6 col-sm-
12296 col-xs-6"> 1230 <a class="text-primary" href="/sport/flag football/girls/">FLAG FOOTBALL(GIRLS)</a> 1231 </div> 1232 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1233 <a class="text-primary" href="/sport/flag football/girls/?tab=schedule" role="menuitem" aria-label="Flag Football(Girls) - Schedules">schedules</a><span> /</span> 1234 <a class="text-primary" href="/sport/flag football/girls/?tab=roster" role="menuitem" aria-label="Flag Football(Girls) - Rosters">rosters</a><span> /</span> 1235 <a class="text-primary" href="/sport/flag football/girls/?tab=news" role="menuitem" aria-label="Flag Football(Girls) - News">news</a> 1236 </div> 1237 </div> 1238 </li> 1239 <li> 1240 <div class="row"> 1241 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1242 <a class="text-primary" href="/sport/football/boys/">FOOTBALL</a> 1243 </div> 1244 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1245 <a class="text-primary" href="/sport/football/boys/?tab=schedule" role="menuitem" aria-label="Football - Schedules">schedules</a><span> /</span> 1246 <a class="text-primary" href="/sport/football/boys/?tab=roster" role="menuitem" aria-label="Football - Rosters">rosters</a><span> /</span> 1247 <a class="text-primary" href="/sport/football/boys/?tab=news" role="menuitem" aria-label="Football - News">news</a> 1248 </div> 1249 </div> 1250 </li> 1251 <li> 1252 <div class="row"> 1253 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1254 <a class="text-primary" href="/sport/golf/boys/">GOLF(BOYS)</a> 1255 </div> 1256 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1257 <a class="text-primary" href="/sport/golf/boys/?tab=schedule" role="menuitem" aria-label="Golf(Boys) - Schedules">schedules</a><span> /</span> 1258 <a class="text-primary" href="/sport/golf/boys/?tab=roster" role="menuitem" aria-label="Golf(Boys) - Rosters">rosters</a><span> /</span> 1259 <a class="text-primary" href="/sport/golf/boys/?tab=news" role="menuitem" aria-label="Golf(Boys) - News">news</a> 1260 </div> 1261 </div> 1262 </li> 1263 <li> 1264 <div class="row"> 1265 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1266 <a class="text-primary" href="/sport/golf/girls/">GOLF(GIRLS)</a> 1267 </div> 1268 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1269 <a class="text-primary" href="/sport/golf/girls/?tab=schedule" role="menuitem" aria-label="Golf(Girls) - Schedules">schedules</a><span> /</span> 1270 <a class="text-primary" href="/sport/golf/girls/?tab=roster" role="menuitem" aria-label="Golf(Girls) - Rosters">rosters</a><span> /</span> 1271 <a class="text-primary" href="/sport/golf/girls/?tab=news" role="menuitem" aria-label="Golf(Girls) - News">news</a> 1272 </div> 1273 </div> 1274 </li> 1275 <li> 1276 <div class="row"> 1277 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1278 <a class="text-primary" href="/sport/lacrosse/boys/">LACROSSE(BOYS)</a> 1279 </div> 1280 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1281 <a class="text-primary" href="/sport/lacrosse/boys/?tab=schedule" role="menuitem" aria-label="Lacrosse(Boys) - Schedules">schedules</a><span> /</span> 1282 <a class="text-primary" href="/sport/lacrosse/boys/?tab=roster" role="menuitem" aria-label="Lacrosse(Boys) - Rosters">rosters</a><span> /</span> 1283 <a class="text-primary" href="/sport/lacrosse/boys/?tab=news" role="menuitem" aria-label="Lacrosse(Boys) - News">news</a> 1284 </div> 1285 </div> 1286 </li> 1287 <li> 1288 <div class="row"> 1289 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1290 <a class="text-primary" href="/sport/lacrosse/girls/">LACROSSE(GIRLS)</a> 1291 </div> 1292 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1293 <a class="text-primary" href="/sport/lacrosse/girls/?tab=schedule" role="menuitem" aria-label="Lacrosse(Girls) - Schedules">schedules</a><span> /</span> 1294 <a class="text-primary" href="/sport/lacrosse/girls/?tab=roster" role="menuitem" aria-label="Lacrosse(Girls) - Rosters">rosters</a><span> /</span> 1295 <a class="text-primary" href="/sport/lacrosse/girls/?tab=news" role="menuitem" aria-label="Lacrosse(Girls) - News">news</a> 1296 </div> 1297 </div> 1298 </li> 1299 <li> 1300 <div class="row"> 1301 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1302 <a class="text-primary" href="/sport/soccer/boys/">SOCCER(BOYS)</a> 1303 </div> 1304 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1305 <a class="text-primary" href="/sport/soccer/boys/?tab=schedule" role="menuitem" aria-label="Soccer(Boys) - Schedules">schedules</a><span> /</span> 1306 <a class="text-primary" href="/sport/soccer/boys/?tab=roster" role="menuitem" aria-label="Soccer(Boys) - Rosters">rosters</a><span> /</span> 1307 <a class="text-primary" href="/sport/soccer/boys/?tab=news" role="menuitem" aria-label="Soccer(Boys) - News">news</a> 1308 </div> 1309 </div> 1310 </li> 1311 <li> 1312 <div class="row"> 1313 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1314 <a class="text-primary" href="/sport/soccer/girls/">SOCCER(GIRLS)</a> 1315 </div> 1316 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1317 <a class="text-primary" href="/sport/soccer/girls/?tab=schedule" role="menuitem" aria-label="Soccer(Girls) - Schedules">schedules</a><span> /</span> 1318 <a class="text-primary" href="/sport/soccer/girls/?tab=roster" role="menuitem" aria-label="Soccer(Girls) - Rosters">rosters</a><span> /</span> 1319 <a class="text-primary" href="/sport/soccer/girls/?tab=news" role="menuitem" aria-label="Soccer(Girls) - News">news</a> 1320 </div> 1321 </div> 1322 </li> 1323 <li> 1324 <div class="row"> 1325 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1326 <a class="text-primary" href="/sport/softball/girls/">SOFTBALL(GIRLS)</a> 1327 </div> 1328 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1329 <a class="text-primary" href="/sport/softball/girls/?tab=schedule" role="menuitem" aria-label="Softball(Girls) - Schedules">schedules</a><span> /</span> 1330 <a class="text-primary" href="/sport/softball/girls/?tab=roster" role="menuitem" aria-label="Softball(Girls) - Rosters">rosters</a><span> /</span> 1331 <a class="text-primary" href="/sport/softball/girls/?tab=news" role="menuitem" aria-label="Softball(Girls) - News">news</a> 1332 </div> 1333 </div> 1334 </li> 1335 <li> 1336 <div class="row"> 1337 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1338 <a class="text-primary" href="/sport/swimming/coed/">SWIMMING</a> 1339 </div> 1340 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1341 <a class="text-primary" href="/sport/swimming/coed/?tab=schedule" role="menuitem" aria-label="Swimming - Schedules">schedules</a><span> /</span> 1342 <a class="text-primary" href="/sport/swimming/coed/?tab=roster" role="menuitem" aria-label="Swimming - Rosters">rosters</a><span> /</span> 1343 <a class="text-primary" href="/sport/swimming/coed/?tab=news" role="menuitem" aria-label="Swimming - News">news</a> 1344 </div> 1345 </div> 1346 </li> 1347 <li> 1348 <div class="row"> 1349 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1350 <a class="text-primary" href="/sport/tennis/boys/">TENNIS(BOYS)</a> 1351 </div> 1352 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1353 <a class="text-primary" href="/sport/tennis/boys/?tab=schedule" role="menuitem" aria-label="Tennis(Boys) - Schedules">schedules</a><span> /</span> 1354
1354 <a class="text-primary" href="/sport/tennis/boys/?tab=roster" role="menuitem" aria-label="Tennis(Boys) - Rosters">rosters</a><span> /</span> 1355 <a class="text-primary" href="/sport/tennis/boys/?tab=news" role="menuitem" aria-label="Tennis(Boys) - News">news</a> 1356 </div> 1357 </div> 1358 </li> 1359 <li> 1360 <div class="row"> 1361 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1362 <a class="text-primary" href="/sport/tennis/girls/">TENNIS(GIRLS)</a> 1363 </div> 1364 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1365 <a class="text-primary" href="/sport/tennis/girls/?tab=schedule" role="menuitem" aria-label="Tennis(Girls) - Schedules">schedules</a><span> /</span> 1366 <a class="text-primary" href="/sport/tennis/girls/?tab=roster" role="menuitem" aria-label="Tennis(Girls) - Rosters">rosters</a><span> /</span> 1367 <a class="text-primary" href="/sport/tennis/girls/?tab=news" role="menuitem" aria-label="Tennis(Girls) - News">news</a> 1368 </div> 1369 </div> 1370 </li> 1371 <li> 1372 <div class="row"> 1373 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1374 <a class="text-primary" href="/sport/track and field/coed/">TRACK AND FIELD</a> 1375 </div> 1376 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1377 <a class="text-primary" href="/sport/track and field/coed/?tab=schedule" role="menuitem" aria-label="Track and Field - Schedules">schedules</a><span> /</span> 1378 <a class="text-primary" href="/sport/track and field/coed/?tab=roster" role="menuitem" aria-label="Track and Field - Rosters">rosters</a><span> /</span> 1379 <a class="text-primary" href="/sport/track and field/coed/?tab=news" role="menuitem" aria-label="Track and Field - News">news</a> 1380 </div> 1381 </div> 1382 </li> 1383 <li> 1384 <div class="row"> 1385 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1386 <a class="text-primary" href="/sport/volleyball/boys/">VOLLEYBALL(BOYS)</a> 1387 </div> 1388 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1389 <a class="text-primary" href="/sport/volleyball/boys/?tab=schedule" role="menuitem" aria-label="Volleyball(Boys) - Schedules">schedules</a><span> /</span> 1390 <a class="text-primary" href="/sport/volleyball/boys/?tab=roster" role="menuitem" aria-label="Volleyball(Boys) - Rosters">rosters</a><span> /</span> 1391 <a class="text-primary" href="/sport/volleyball/boys/?tab=news" role="menuitem" aria-label="Volleyball(Boys) - News">news</a> 1392 </div> 1393 </div> 1394 </li> 1395 <li> 1396 <div class="row"> 1397 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1398 <a class="text-primary" href="/sport/volleyball/girls/">VOLLEYBALL(GIRLS)</a> 1399 </div> 1400 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1401 <a class="text-primary" href="/sport/volleyball/girls/?tab=schedule" role="menuitem" aria-label="Volleyball(Girls) - Schedules">schedules</a><span> /</span> 1402 <a class="text-primary" href="/sport/volleyball/girls/?tab=roster" role="menuitem" aria-label="Volleyball(Girls) - Rosters">rosters</a><span> /</span> 1403 <a class="text-primary" href="/sport/volleyball/girls/?tab=news" role="menuitem" aria-label="Volleyball(Girls) - News">news</a> 1404 </div> 1405 </div> 1406 </li> 1407 <li> 1408 <div class="row"> 1409 <div class="sport-link col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1410 <a class="text-primary" href="/sport/wrestling/boys/">WRESTLING(BOYS)</a> 1411 </div> 1412 <div class="sport-nfo col-lg-6 col-md-6 col-sm-6 col-xs-6"> 1413 <a class="text-primary" href="/sport/wrestling/boys/?tab=schedule" role="menuitem" aria-label="Wrestling(Boys) - Schedules">schedules</a><span> /</span> 1414 <a class="text-primary" href="/sport/wrestling/boys/?tab=roster" role="menuitem" aria-label="Wrestling(Boys) - Rosters">rosters</a><span> /</span> 1415 <a class="text-primary" href="/sport/wrestling/boys/?tab=news" role="menuitem" aria-label="Wrestling(Boys) - News">news</a> 1416 </div> 1417 </div> 1418 </li> 1419 </ul> 1420 </div> 1421 </li> 1422 </ul> 1423 </li> 1424 <li> 1425 <a class="text-primary-font" href="https://wofproduction.blob.core.windows.net/embed/dfd3d68e178f4c28ae06e3dd6bc1eeea/walloffame.html" target="_blank" aria-label="go to link to HOF/Records">HOF/Records</a> 1426 </li> 1427 <li> 1428 <a class="text-primary-font" href="/HTtickets">TICKETS</a> 1429 </li> 1430 <li> 1431 <a class="text-primary-font" href="/broadcasts">BROADCASTS</a> 1432 </li> 1433 <li> 1434 <a class="text-primary-font" href="/news">NEWS</a> 1435 </li> 1436 <li class="dropdown" role="presentation"> 1437 <a href="#" class="dropdown-toggle text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false"> 1438 Game Day 1439 </a> 1440 <ul class="dropdown-menu" role="menu"> 1441 <li> 1442 <a class="text-primary" href="https://view.gogipper.com/page/3116341" target="_blank">
1442Football Gameday Guide</a> 1443 </li> 1444 <li> 1445 <a class="text-primary" href="https://view.gogipper.com/page/3116291" target="_blank">Fall Sports Gameday Guide</a> 1446 </li> 1447 <li> 1448 <a class="text-primary" href="https://view.gogipper.com/page/3194454" target="_blank">Basketball/Wrestling Gameday Guide</a> 1449 </li> 1450 <li> 1451 <a class="text-primary" href="https://view.gogipper.com/page/2793876" target="_blank">Spring Sports Gameday Guide</a> 1452 </li> 1453 <li> 1454 <a class="text-primary" href="https://view.gogipper.com/page/3951976" target="_blank">MEDIA GUIDE</a> 1455 </li> 1456 </ul> 1457 </li> 1458 1459 <li id="more" class="hidden" role="presentation"> 1460 <a class="dropdown-toggle text-primary-font" data-toggle="dropdown" aria-haspopup="true" href="#" role="menuitem" aria-expanded="false"> 1461 More <span class="caret"></span> 1462 </a> 1463 <ul class="dropdown-menu dropdown-menu-right"></ul> 1464 </li> 1465 </ul> 1466 </div> 1467 <!--/.nav-collapse --> 1468 </div> 1469 </div> 1470 <div class="col-lg-2 col-md-2 hidden-sm hidden-xs"> 1471 <div class="upper-side"> 1472 <div class="feed-wrapper"> 1473 <a href="https://www.facebook.com/HailTLHanna" target="_blank" rel="noopener" aria-label="Visit our Facebook page"> 1474 <i class="fa fa-facebook text-primary-font" aria-hidden="true"></i> 1475 <span class="sr-only">Facebook</span> 1476 </a> 1477 <a href="https://www.instagram.com/tlhanna_sports/?hl=en" target="_blank" rel="noopener" aria-label="Visit our Instagram page"> 1478 <i class="fa fa-instagram text-primary-font" aria-hidden="true"></i> 1479 <span class="sr-only">Instagram</span> 1480 </a> 1481 <a href="https://twitter.com/TLH_Updates" target="_blank" rel="noopener" aria-label="Visit our X page"> 1482 <i class="fa fa-twitter text-primary-font" aria-hidden="true"></i> 1483 <span class="sr-only">X</span> 1484 </a> 1485</div> 1486 1487 <div class="app-icon-dl"> 1488 <a href="https://apps.apple.com/us/app/t-l-hanna-athletics/id6748661360"><img aria-label="T.L. Hanna App Icon" alt="T.L. Hanna App Icon" src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/2f03d3d2-4d9a-4c8c-bd7f-0d75a3344e9f.png" class="img-responsive app-icon" /></a> 1489 </div> 1490 <div class="presenting-sponsor hidden-sm hidden-xs"> 1491 <div class="adzone adzone-0 presenting-sponsor"> 1492 <div class="ad-placement"> 1493 <div id='gam-presenting-sponsor-2' class="gam-presenting-sponsor-2"></div> 1494 </div> 1495 1496 </div> 1497 </div> 1498 </div> 1499 </div> 1500 </div> 1501 1502 </div> 1503 <div class="mobile-cal-bar bg-primary"><button type="button" class="mcb-toggle" id="mcbToggle" aria-expanded="false"><i class="fa fa-calendar"></i> Calendar <i class="fa fa-caret-down mcb-caret"></i></button><a href="/calendar" class="mcb-full"><i class="fa fa-arrow-right"></i></a></div> 1504 </nav> 1505</div> 1506 1507 1508 </div> 1509 <div class="clearfix"></div> 1510 </div> 1511 <div class="banner-ad-container-sticky-footer"> 1512 <div class="banner-ad"> 1513 <div class="banner"> 1514 <div class="row"> 1515 <div class="col-md-12 col-sm-12"> 1516 <div class="ad-placement"> 1517 <div id='gam-banner-ad' class="gam-banner-ad"> 1518
1518<script> 1519 googletag.cmd.push(function () { googletag.display('gam-banner-ad'); }); 1520 </script>
1520 1521 </div> 1522 </div> 1523 </div> 1524 </div> 1525</div> 1526 1527 </div> 1528 </div> 1529 1530 1531<link rel="stylesheet" href="/less/Components/AppDownloadCta.min.css" /> 1532 1533<div class="app-download-cta" id="appDownloadCta" role="region" aria-labelledby="appDownloadCtaTitle"> 1534 <button type="button" class="app-download-cta__close" id="appDownloadCtaClose" aria-label="Close">Ã</button> 1535 <div class="app-download-cta__icon" aria-hidden="true">ð±</div> 1536 <div class="app-download-cta__title" id="appDownloadCtaTitle"> 1537 Stay connected with <em>T.L. Hanna</em> athletics 1538 </div> 1539 <div class="app-download-cta__body"> 1540 Get scores, schedules, and live streaming notifications. 1541 </div> 1542 <div class="app-download-cta__buttons"> 1543 <a href="https://apps.apple.com/us/app/t-l-hanna-athletics/id6748661360" target="_blank" rel="noopener" aria-label="Download on the App Store"> 1544 <img src="/images/dl-apple.png" alt="Download on the App Store" /> 1545 </a> 1546 <a href="https://play.google.com/store/apps/details?id=mm.sctlhanna" target="_blank" rel="noopener" aria-label="Get it on Google Play"> 1547 <img src="/images/dl-google.png" alt="Get it on Google Play" /> 1548 </a> 1549 </div> 1550 <button type="button" class="app-download-cta__dismiss" id="appDownloadCtaHaveIt"> 1551 I already have it 1552 </button> 1553</div> 1554
1555<script> 1556 (function () { 1557 var el = document.getElementById('appDownloadCta'); 1558 if (!el) return; 1559 1560 var SHOW_DELAY_MS = 5000; 1561 var AUTO_HIDE_MS = 15000; 1562 var FADE_MS = 300; 1563 var COOKIE_NAME = 'mm_app_cta_dismissed'; 1564 var COOKIE_DAYS = 90; 1565 1566 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { 1567 FADE_MS = 0; 1568 } 1569 1570 function setCookie(name, value, days) { 1571 var d = new Date(); 1572 d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); 1573 document.cookie = name + '=' + value + '; expires=' + d.toUTCString() + '; path=/; SameSite=Lax'; 1574 } 1575 1576 function hide() { 1577 // if keyboard focus is inside the card, hand it off before removal so it is not lost 1578 if (el.contains(document.activeElement)) { 1579 var main = document.getElementById('main-content') || document.body; 1580 if (!main.hasAttribute('tabindex')) main.setAttribute('tabindex', '-1'); 1581 main.focus({ preventScroll: true }); 1582 } 1583 el.classList.remove('is-visible'); 1584 setTimeout(function () { 1585 if (el.parentNode) el.parentNode.removeChild(el); 1586 }, FADE_MS); 1587 } 1588 1589 var autoHideTimer = null; 1590 1591 setTimeout(function () { 1592 requestAnimationFrame(function () { el.classList.add('is-visible'); }); 1593 autoHideTimer = setTimeout(hide, AUTO_HIDE_MS); 1594 }, SHOW_DELAY_MS); 1595 1596 document.getElementById('appDownloadCtaClose').addEventListener('click', function () { 1597 if (autoHideTimer) clearTimeout(autoHideTimer); 1598 hide(); 1599 }); 1600 1601 document.getElementById('appDownloadCtaHaveIt').addEventListener('click', function () { 1602 if (autoHideTimer) clearTimeout(autoHideTimer); 1603 setCookie(COOKIE_NAME, '1', COOKIE_DAYS); 1604 hide(); 1605 }); 1606 1607 // auto-hide pauses while the user is engaging (mouse over or keyboard focus inside) 1608 // and resumes with a fresh countdown when they leave (WCAG 2.2.1) 1609 function pauseAutoHide() { 1610 if (autoHideTimer) { clearTimeout(autoHideTimer); autoHideTimer = null; } 1611 } 1612 1613 function resumeAutoHideIfIdle() { 1614 setTimeout(function () { 1615 var matches = el.matches || el.msMatchesSelector; 1616 var mouseOver = matches ? matches.call(el, ':hover') : false; 1617 var focusInside = el.contains(document.activeElement); 1618 if (!mouseOver && !focusInside && el.parentNode && !autoHideTimer) { 1619 autoHideTimer = setTimeout(hide, AUTO_HIDE_MS); 1620 } 1621 }, 0); 1622 } 1623 1624 el.addEventListener('mouseenter', pauseAutoHide); 1625 el.addEventListener('mouseleave', resumeAutoHideIfIdle); 1626 el.addEventListener('focusin', pauseAutoHide); 1627 el.addEventListener('focusout', resumeAutoHideIfIdle); 1628 1629 el.addEventListener('keydown', function (e) { 1630 if (e.key === 'Escape') { 1631 pauseAutoHide(); 1632 hide(); 1633 } 1634 }); 1635 })(); 1636</script>
1636 1637 1638 <div class="row"> 1639 <div class="col-md-12" id="main-content" role="main"> 1640
1640<script> 1641 window.googletag = window.googletag || { cmd: [] }; 1642 googletag.cmd.push(function () { 1643 var REFRESH_KEY = 'refresh'; 1644 var REFRESH_VALUE = 'true'; 1645 1646 var useProgrammaticAds = false; 1647 // 30s is Google's minimum refresh interval for any slot AdX can fill do not lower 1648 var REFRESH_MS = 30000; 1649 1650 var sport = 'baseball'; 1651 var siteId = '2579830'; 1652 var isSchoolPay = '1'; 1653 var firstAdRendered = false; 1654 1655 // === sizes === 1656 var baseSizes = [[300, 100], [640, 100]]; 1657 var baseWith728 = useProgrammaticAds ? [[300, 100], [640, 100], [728, 90]] : baseSizes; 1658 var mobileProgrammaticOnly = [[320, 50]]; // << mobile exclusive 1659 1660 // === size mapping === 1661 var mapping = googletag.sizeMapping() 1662 .addSize([1024, 0], baseWith728) // desktop 1663 .addSize([768, 0], baseWith728) // tablet 1664 .addSize([0, 0], useProgrammaticAds 1665 ? mobileProgrammaticOnly // mobile = 320x50 ONLY 1666 : baseSizes) // fallback mobile = 300x100 + 640x100 1667 .build(); 1668 1669 googletag.defineSlot('/22870419559/sportsweb', baseWith728, 'gam-sport-banner-ad') 1670 .defineSizeMapping(mapping) 1671 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 1672 .setTargeting('siteid', siteId) 1673 .setTargeting('isschoolpay', isSchoolPay) 1674 .setTargeting('sport', sport) 1675 .addService(googletag.pubads()); 1676 1677 googletag.defineSlot('/22870419559/sportsweb', baseWith728, 'gam-sport-banner-ad-2') 1678 .defineSizeMapping(mapping) 1679 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 1680 .setTargeting('siteid', siteId) 1681 .setTargeting('isschoolpay', isSchoolPay) 1682 .setTargeting('sport', sport) 1683 .addService(googletag.pubads()); 1684 1685 // Pool of additional in-list repeat slots (gam-sport-banner-ad-3 .. -10), same ad 1686 // unit as the slots above. ScheduleStyle views use as many of these as the 1687 // schedule length calls for (one every 4th game); unused ones simply never get 1688 // display() called and never request an ad. 1689 var SPORT_BANNER_REPEAT_MAX = 10; 1690 for (var repeatIndex = 3; repeatIndex <= SPORT_BANNER_REPEAT_MAX; repeatIndex++) { 1691 googletag.defineSlot('/22870419559/sportsweb', baseWith728, 'gam-sport-banner-ad-' + repeatIndex) 1692 .defineSizeMapping(mapping) 1693 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 1694 .setTargeting('siteid', siteId) 1695 .setTargeting('isschoolpay', isSchoolPay) 1696 .setTargeting('sport', sport) 1697 .addService(googletag.pubads()); 1698 } 1699 1700 // === rest unchanged === 1701 googletag.pubads().addEventListener('slotRenderEnded', function (event) { 1702 var slotId = event.slot.getSlotElementId(); 1703 if (slotId === 'gam-sport-banner-ad') { 1704 var row = document.getElementById('gam-sport-banner-row'); 1705 if (!event.isEmpty) { 1706 firstAdRendered = true; 1707 if (row) row.style.visibility = 'visible'; 1708 } else { 1709 if (row) row.style.visibility = 'collapse'; 1710 } 1711 } 1712 if (firstAdRendered && slotId === 'gam-sport-banner-ad-2') { 1713 googletag.display('gam-sport-banner-ad-2'); 1714 } 1715 // Repeat in-list slots (-3 and up): collapse their row on an empty response, 1716 // same as the first in-list slot above. 1717 if (/^gam-sport-banner-ad-([3-9]|10)$/.test(slotId)) { 1718 var repeatRow = document.getElementById(slotId.replace('gam-sport-banner-ad-', 'gam-sport-banner-row-')); 1719 if (repeatRow) repeatRow.style.visibility = event.isEmpty ? 'collapse' : 'visible'; 1720 } 1721 }); 1722 1723 googletag.pubads().addEventListener('impressionViewable', function (event) { 1724 var slot = event.slot; 1725 if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) { 1726 setTimeout(function () { googletag.pubads().refresh([slot]); }, REFRESH_MS); 1727 } 1728 }); 1729 1730 googletag.enableServices(); 1731 googletag.display('gam-sport-banner-ad'); 1732 }); 1733 </script>
1733 1734 1735 <div class="new-team-page"> 1736 <div class="team-page-container"> 1737 <div class="team-header-box bg-primary"> 1738 <div class="team-header-logo"> 1739 <img src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/eaef9e97-6c21-4696-a0c0-eb5fa3e29b4c.png" aria-label="T.L. Hanna 1" alt="T.L. Hanna 2" /> 1740 </div> 1741 <div class="team-header-text"> 1742 <span>Baseball</span> 1743 </div> 1744 </div> 1745 <div class="row"> 1746 <div class="col-md-12"> 1747 1748 1749 <div class="jumbotron-slider"> 1750 <div class="row"> 1751 <div class="col-md-12"> 1752 <div id="myCarousel" class="carousel slide" data-ride="carousel" aria-label="T.L. Hanna Image Carousel"> 1753 <!-- Indicators --> 1754 <ol class="carousel-indicators hidden-sm hidden-xs"> 1755 <li data-target="#myCarousel" aria-label="Go to slide 0" data-slide-to="0" class="active"></li> 1756 <li data-target="#myCarousel" aria-label="Go to slide 1" data-slide-to="1" class=""></li> 1757 <li data-target="#myCarousel" aria-label="Go to slide 2" data-slide-to="2" class=""></li> 1758 <li data-target="#myCarousel" aria-label="Go to slide 3" data-slide-to="3" class=""></li> 1759 <li data-target="#myCarousel" aria-label="Go to slide 4" data-slide-to="4" class=""></li> 1760 <li data-target="#myCarousel" aria-label="Go to slide 5" data-slide-to="5" class=""></li> 1761 <li data-target="#myCarousel" aria-label="Go to slide 6" data-slide-to="6" class=""></li> 1762 </ol> 1763 <!-- Wrapper for slides --> 1764 <div class="carousel-inner"> 1765 1766 <div class="item active"> 1767 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/bcc111be-f210-4897-a9e0-a17a3eeae46a_1920x1080.jpg" alt="Slide 0"> 1768 <div class="container"> 1769 <div class="carousel-caption"> 1770 </div> 1771 </div> 1772 </div> 1773 <div class="item "> 1774 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/0f5e27a5-13ce-4f47-a3e0-d1d573d3cc49_1920x1080.jpg" alt="Slide 1 - The Slipper Still Fits; Cinderella Jackets Headed to State Championship Series"> 1775 <div class="container"> 1776 <div class="carousel-caption"> 1777 <h1 style="color: white !important" class="slider-caption">The Slipper Still Fits; Cinderella Jackets Headed to State Championship Series</h1> 1778 </div> 1779 </div> 1780 </div> 1781 <div class="item "> 1782 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/c8c5a066-6b1f-485a-8c68-7de463abaf81_1920x1080.jpg" alt="Slide 2 - Cinderella Playoff Run Continues for Jackets With Walk Off Win"> 1783 <div class="container"> 1784 <div class="carousel-caption"> 1785 <h1 style="color: white !important" class="slider-caption">Cinderella Playoff Run Continues for Jackets With Walk Off Win</h1> 1786 </div> 1787 </div> 1788 </div> 1789 <div class="item "> 1790 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/9c9d2b70-9e6b-4d92-adee-07822246de3d_1920x1080.jpg" alt="Slide 3"> 1791 <div class="container"> 1792 <div class="carousel-caption"> 1793 </div> 1794 </div> 1795 </div> 1796 <div class="item "> 1797 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/22b49b7b-a55d-478e-8b5e-c9d7dcb6769d_1920x1080.jpg" alt="Slide 4"> 1798 <div class="container"> 1799 <div class="carousel-caption"> 1800 </div> 1801 </div> 1802 </div> 1803 <div class="item "> 1804 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/b1112a71-bfa3-4fa6-9f0e-e573c0c9ddf8_1920x1080.jpg" alt="Slide 5"> 1805 <div class="container"> 1806 <div class="carousel-caption"> 1807 </div> 1808 </div> 1809 </div> 1810 <div class="item "> 1811 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/1e85a1a7-20cf-4240-82b5-684fc4dd0c95_1920x1080.jpg" alt="Slide 6"> 1812 <div class="container"> 1813 <div class="carousel-caption"> 1814 </div> 1815 </div> 1816 </div> 1817 1818 1819 </div> 1820 <!-- Left and right controls --> 1821 <a class="left carousel-control" href="#myCarousel" data-sli
1821de="prev" aria-label="Previous slide"> 1822 <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> 1823 <span class="sr-only">Previous</span> 1824 </a> 1825 <a class="right carousel-control" href="#myCarousel" data-slide="next" aria-label="Next slide"> 1826 <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 1827 <span class="sr-only">Next</span> 1828 </a> 1829 </div> 1830 </div> 1831 </div> 1832 </div> 1833
1834<script> 1835 1836 var isPaused = false; 1837 function toggleCarousel() { 1838 if (isPaused) { 1839 $('#myCarousel').carousel('cycle'); 1840 $('#carouselPausePlayIcon').removeClass('fa-play').addClass('fa-pause'); 1841 $('#carouselPausePlay').attr('aria-label', 'Pause carousel'); 1842 $('#carouselPausePlay .sr-only').text('Pause'); 1843 } else { 1844 $('#myCarousel').carousel('pause'); 1845 $('#carouselPausePlayIcon').removeClass('fa-pause').addClass('fa-play'); 1846 $('#carouselPausePlay').attr('aria-label', 'Play carousel'); 1847 $('#carouselPausePlay .sr-only').text('Play'); 1848 } 1849 isPaused = !isPaused; 1850 } 1851</script>
1851 1852<style> 1853 1854 .carousel-caption a 1855 { 1856 text-decoration: none !important; 1857 } 1858 1859 .slider-caption 1860 { 1861 color: white !important; 1862 font-weight: bold; 1863 text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7); 1864 } 1865 1866 .slider-cta 1867 { 1868 display: flex; 1869 width: fit-content; 1870 margin-left: auto; 1871 align-items: center; 1872 font-size: 0.85rem; 1873 font-weight: 700; 1874 text-transform: uppercase; 1875 letter-spacing: 1.5px; 1876 color: #fff !important; 1877 background: rgba(0, 0, 0, 0.4); 1878 border: 2px solid rgba(255, 255, 255, 0.7); 1879 padding: 10px 24px; 1880 border-radius: 4px; 1881 text-decoration: none !important; 1882 transition: all 0.25s ease; 1883 } 1884 1885 .slider-cta .fa, 1886 .slider-cta svg 1887 { 1888 margin-left: 8px; 1889 transition: transform 0.25s ease; 1890 } 1891 1892 .slider-cta:hover, 1893 .slider-cta:focus 1894 { 1895 background: rgba(255, 255, 255, 0.25); 1896 border-color: #fff; 1897 color: #fff !important; 1898 } 1899 1900 .slider-cta:hover .fa, 1901 .slider-cta:hover svg 1902 { 1903 transform: translateX(4px); 1904 } 1905 1906</style> 1907 1908 1909 </div> 1910 </div> 1911 <div class="team-page-content"> 1912 <section class="upcoming-events-wrapper"> 1913 1914 <div class="row"> 1915 <div class="col-md-12"> 1916 <div class="row"> 1917 <div class="col-lg-4 col-lg-push-8"> 1918 <div class="row"> 1919 <div class="col-md-12 sport-capsule"> 1920 <table> 1921 <thead> 1922 <tr> 1923 <th class="bg-primary border-all-thin-primary">TEAM INFO</th> 1924 </tr> 1925 </thead> 1926 <tbody> 1927 <tr class="border-all-thin-primary"> 1928 <td><a href="?tab=schedules"><i class="fa fa-calendar"></i> Schedules</a></td> 1929 </tr> 1930 <tr class="border-all-thin-primary"> 1931 <td><a href="?tab=roster"><i class="fa fa-users"></i> Rosters</a></td> 1932 </tr> 1933 <tr class="border-all-thin-primary"> 1934 <td><a href="?tab=staff"><i class="fa fa-bullhorn"></i> Coaches</a></td> 1935 </tr> 1936 <tr class="border-all-thin-primary"> 1937 <td><a href="?tab=news"><i class="fa fa-newspaper-o"></i> News</a></td> 1938 </tr> 1939 </tbody> 1940 </table> 1941 </div> 1942 </div> 1943 <div style="margin: 5px;" id="rectangle_1"></div> 1944 <div class="row"> 1945 <div class="col-md-12"> 1946 1947 1948 <div class="sport-capsule"> 1949 <div class="row"> 1950 <div class="col-md-12"> 1951 <table> 1952 <thead> 1953 <tr> 1954 <th class="bg-primary border-all-thin-primary" colspan="2" scope="colgroup">ANNOUNCEMENTS</th> 1955 </tr> 1956 </thead> 1957 <tbody> 1958 <tr class="border-all-thin-primary"> 1959 <td colspan="2">No new announcements</td> 1960 </tr> 1961 </tbody> 1962 </table> 1963 </div> 1964 </div> 1965 </div> 1966 </div> 1967 </div> 1968 <br /> 1969 <div class="row"> 1970 <div class="col-md-12"> 1971 1972 1973 <div class="sport-capsule"> 1974 <div class="row"> 1975 <div class="col-md-12"> 1976 <table> 1977 <thead> 1978 <tr> 1979 <th class="bg-primary border-all-thin-primary" scope="col">FORMS</th> 1980 </tr> 1981 </thead> 1982 <tbody> 1983 <tr class="border-all-thin-primary"> 1984 <td><a href="https://drive.google.com/file/d/1-WrV5gb-jMi28CdCXJpkXg5bNLy0kb47/view?usp=sharing" target="_blank">2026-27 Booster Club Sponsorship Brochure</a></td> 1985 </tr> 1986 <tr class="border-all-thin-primary"> 1987 <td><a href="https://5starassets.blob.core.windows.net/multi-media/2579830/hub/Athletic%20HOF%20Nomination%20Form.docx" target="_blank">TL Hanna Hall of Fame Nomination Form</a></td> 1988 </tr> 1989 <tr class="border-all-thin-primary"> 1990 <td><a href="https://5starassets.blob.core.windows.net/multi-media/2579830/hub/Physical-Form%20HSL.pdf" target="_blank">2026-27 Physical Form</a></td> 1991 </tr> 1992 </tbody> 1993 </table> 1994 </div> 1995 </div> 1996 </div> 1997 </div> 1998 </div> 1999 <br /> 2000 <div class="row"> 2001 <div class="col-md-12"> 2002 2003 2004 <div class="sport-capsule"> 2005 <div class="row"> 2006 <div class="col-md-12"> 2007 <table> 2008 <thead> 2009 <tr> 2010 <th class="bg-primary border-all-thin-primary" scope="col">LINKS</th> 2011 </tr> 2012 </thead> 2013 <tbody> 2014 <tr class="border-all-thin-primary"> 2015 <td><a href="https://drive.google.com/file/d/15RAJmq942RgPWoDAf1BkEvz9q6R49WiZ/view?usp=sharing" target="_blank">
2015Arbiter Registration Getting Started Guide</a></td> 2016 </tr> 2017 <tr class="border-all-thin-primary"> 2018 <td><a href="https://arbiter.io/" target="_blank">Arbiter Registration Page</a></td> 2019 </tr> 2020 <tr class="border-all-thin-primary"> 2021 <td><a href="https://arbitersportshelp.zendesk.com/hc/en-us/articles/19923837812365-How-do-I-Register-for-the-First-Time-For-Parents" target="_blank">Arbiter Registration Help Guide</a></td> 2022 </tr> 2023 <tr class="border-all-thin-primary"> 2024 <td><a href="https://wofproduction.blob.core.windows.net/embed/dfd3d68e178f4c28ae06e3dd6bc1eeea/walloffame.html#/walloffame/attract" target="_blank">TLH Hall of Fame and Records</a></td> 2025 </tr> 2026 <tr class="border-all-thin-primary"> 2027 <td><a href="https://schsl.org/" target="_blank">South Carolina High School League</a></td> 2028 </tr> 2029 <tr class="border-all-thin-primary"> 2030 <td><a href="https://www.youtube.com/@tlhannabroadcastchannel4268" target="_blank">TL Hanna Broadcast Channel- Youtube</a></td> 2031 </tr> 2032 <tr class="border-all-thin-primary"> 2033 <td><a href="https://www.youtube.com/@tlhannaathleticsmedia664" target="_blank">TL Hanna Athletic Media- Youtube</a></td> 2034 </tr> 2035 </tbody> 2036 </table> 2037 </div> 2038 </div> 2039 </div> 2040 </div> 2041 </div> 2042 </div> 2043 <div class="col-lg-8 col-lg-pull-4"> 2044 <div class="row"> 2045 <div class="col-md-12"> 2046 <div class="filler"> 2047 <div class="cd-main-content"> 2048 <div class="sport-capsule"> 2049 <table> 2050 <thead> 2051 <tr> 2052 <th class="bg-primary">UPCOMING EVENTS</th> 2053 </tr> 2054 </thead> 2055 </table> 2056 </div> 2057 <span id="no-games">Currently, there are no upcoming games. Please check back or go to our composite schedule <a href="/calendar">here.</a></span> 2058 </div> 2059</div> 2060 2061 </div> 2062 </div> 2063 2064 <div class="row"> 2065 <div class="col-md-12"> 2066 <h1 class="news-header text-primary">Latest News</h1> 2067 <div class="row"> 2068 <div class="col-md-4 col-sm-6 col-xs-12"> 2069 <div class="news-detail-container border-all-thin-primary"> 2070 <div class="row"> 2071 <div class="col-md-12"> 2072 <div class="embed-responsive embed-responsive-4by3 news-detail-image-container"> 2073 <img class="embed-responsive-item" src="https://5starassets.blob.core.windows.net/article-photos/2579830/4982f4cd-ee28-49d7-bee9-77978b91d152_640x480.jpg" alt="Jenkins, Campbell, Allred, Hall, and Boulware Brothers Inducted into TLH Hall of Fame" /> 2074 </div> 2075 </div> 2076 </div> 2077 <div class="news-info"> 2078 <div class="row"> 2079 <div class="col-md-12"> 2080 <a class="text-primary" id="read-more-link" href="/news/117844"> 2081 <h2> Jenkins, Campbell, Allred, Hall, and Boulware Brothers Inducted i...</h2></a> 2082 </div> 2083 </div> 2084 <div class="row"> 2085 <div class="col-md-12"> 2086 <div class="news-article-body"> 2087 <p> 2088 The T. L. Hanna Athletic Hall of Fame was established to recognize those whose accomplishments have ... 2089 </p> 2090 </div> 2091 </div> 2092 </div> 2093 2094 <div class="row"> 2095 <div class="col-xs-12 col-md-12 text-center"> 2096 <hr /> 2097 <h3>9/20/2026</h3> 2098 </div> 2099 </div> 2100 </div> 2101 </div> 2102 </div> 2103 <div class="col-md-4 col-sm-6 col-xs-12"> 2104 <div class="news-detail-container border-all-thin-primary"> 2105 <div class="row"> 2106 <div class="col-md-12"> 2107 <div class="embed-responsive embed-responsive-4by3 news-detail-image-container"> 2108 <img class="embed-responsive-item" src="https://5starassets.blob.core.windows.net/article-photos/2579830/7dcf1a57-0dc5-4684-83dc-dd2bc4009509_640x480.jpg" alt="TLH Hall of Fame Donations Now Accepted" /> 2109 </div> 2110 </div> 2111 </div> 2112 <div class="news-info"> 2113 <div class="row"> 2114 <div class="col-md-12"> 2115 <a class="text-primary" id="read-more-link" href="/news/115660"> 2116 <h2> TLH Hall of Fame Donations Now Accepted...</h2></a> 2117 </div> 2118 </div> 2119 <div class="row"> 2120 <div class="col-md-12"> 2121 <div class="news-article-body"> 2122 <p> 2123 The TL Hanna Hall of Fame committee continues to recognize the outstanding work of coaches and athle... 2124 </p> 2125 </div> 2126 </div> 2127 </div> 2128 2129 <div class="row"> 2130 <div class="col-xs-12 col-md-12 text-center"> 2131 <hr /> 2132 <h3>7/29/2026</h3> 2133 </div> 2134 </div> 2135 </div> 2136 </div> 2137 </div> 2138 <div class="col-md-4 col-sm-6 col-xs-12"> 2139 <div class="news-detail-container border-all-thin-primary"> 2140 <div class="row"> 2141 <div class="col-md-12"> 2142 <div class="embed-responsive embed-responsive-4by3 news-detail-image-container"> 2143 <img class="embed-responsive-item" src="https://5starassets.blob.core.windows.net/article-photos/2579830/9aaf6a78-1a77-4e83-93ad-b9f6df967db9_640x480.jpg" alt="TL Hanna Announce
2143s Hall of Fame Class of 2026" /> 2144 </div> 2145 </div> 2146 </div> 2147 <div class="news-info"> 2148 <div class="row"> 2149 <div class="col-md-12"> 2150 <a class="text-primary" id="read-more-link" href="/news/115542"> 2151 <h2> TL Hanna Announces Hall of Fame Class of 2026...</h2></a> 2152 </div> 2153 </div> 2154 <div class="row"> 2155 <div class="col-md-12"> 2156 <div class="news-article-body"> 2157 <p> 2158 The TL Hanna Athletic Hall of Fame committee recently announced the six inductees for the Class of 2... 2159 </p> 2160 </div> 2161 </div> 2162 </div> 2163 2164 <div class="row"> 2165 <div class="col-xs-12 col-md-12 text-center"> 2166 <hr /> 2167 <h3>7/7/2026</h3> 2168 </div> 2169 </div> 2170 </div> 2171 </div> 2172 </div> 2173 </div> 2174 2175 </div> 2176 </div> 2177 </div> 2178 </div> 2179 </div> 2180 2181 2182 </div> 2183 </section> 2184 2185 <section class="recent-videos-wrapper"> 2186 <div class="row"> 2187 <div class="col-md-12"> 2188
2188<script src="https://content.jwplatform.com/libraries/Sz4mVdAk.js"></script>
2188 2189 2190 </div> 2191 </div> 2192 </section> 2193 2194 <section class="photo-gallery-wrapper"> 2195 <div class="row"> 2196 <div class="col-md-12"> 2197 <div class="cd-main-content"> 2198 <div class="school-box"> 2199 <div class="mascot-logo bg-primary"> 2200 <img src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/eaef9e97-6c21-4696-a0c0-eb5fa3e29b4c.png" alt="T.L. Hanna" /> 2201 </div> 2202 <div class="mascot-txt"> 2203 <h1>Yellow Jackets <span>Photos</span></h1> 2204 </div> 2205 </div> 2206 <hr /> 2207 <div class="photo-banner"> 2208 <div class="row"> 2209 <div class="col-md-12"> 2210 <img alt="Photo Gallery Banner" src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/a38b2891-61a3-4456-a877-77c3d2238625.png" class="img-responsive" /> 2211 </div> 2212 </div> 2213 </div> 2214 <hr /> 2215 <div class="row"> 2216 <div class="col-md-12"> 2217 <div class="row"> 2218 <div class="col-md-3 col-sm-6 col-xs-12"> 2219 <div class="photo"> 2220 <a href="/TeamPhotos/team/143458" aria-label="go to Boys C Team Football photo gallery"> 2221 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/fbc5453e-a953-435c-96ab-6eeee73e01fa.jpg" class="img-responsive" loading="lazy" alt="Boys C Team Football gallery" /> 2222 </a> 2223 </div> 2224 <div class="text-center"><span>Boys C Team Football</span></div> 2225 </div> 2226 <div class="col-md-3 col-sm-6 col-xs-12"> 2227 <div class="photo"> 2228 <a href="/TeamPhotos/team/143900" aria-label="go to Boys JV Baseball photo gallery"> 2229 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/7e6da917-0b95-4f99-922d-6d2b697a77e6.jpg" class="img-responsive" loading="lazy" alt="Boys JV Baseball gallery" /> 2230 </a> 2231 </div> 2232 <div class="text-center"><span>Boys JV Baseball</span></div> 2233 </div> 2234 <div class="col-md-3 col-sm-6 col-xs-12"> 2235 <div class="photo"> 2236 <a href="/TeamPhotos/team/143457" aria-label="go to Boys JV Football photo gallery"> 2237 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/497c9f0a-adb2-4521-a665-ff2e92de7dbe.jpg" class="img-responsive" loading="lazy" alt="Boys JV Football gallery" /> 2238 </a> 2239 </div> 2240 <div class="text-center"><span>Boys JV Football</span></div> 2241 </div> 2242 <div class="col-md-3 col-sm-6 col-xs-12"> 2243 <div class="photo"> 2244 <a href="/TeamPhotos/team/148657" aria-label="go to Boys JV Golf photo gallery"> 2245 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/fee7779d-df89-4517-a3c3-ddb87b95e638.jpg" class="img-responsive" loading="lazy" alt="Boys JV Golf gallery" /> 2246 </a> 2247 </div> 2248 <div class="text-center"><span>Boys JV Golf</span></div> 2249 </div> 2250 <div class="col-md-3 col-sm-6 col-xs-12"> 2251 <div class="photo"> 2252 <a href="/TeamPhotos/team/143910" aria-label="go to Boys JV Soccer photo gallery"> 2253 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/76c5803b-8382-429b-a27d-f64b25ae6a11.jpg" class="img-responsive" loading="lazy" alt="Boys JV Soccer gallery" /> 2254 </a> 2255 </div> 2256 <div class="text-center"><span>
2256Boys JV Soccer</span></div> 2257 </div> 2258 <div class="col-md-3 col-sm-6 col-xs-12"> 2259 <div class="photo"> 2260 <a href="/TeamPhotos/team/143916" aria-label="go to Boys JV Tennis photo gallery"> 2261 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/3edb66b7-8589-4d80-8bb5-08ba8f618449.jpg" class="img-responsive" loading="lazy" alt="Boys JV Tennis gallery" /> 2262 </a> 2263 </div> 2264 <div class="text-center"><span>Boys JV Tennis</span></div> 2265 </div> 2266 <div class="col-md-3 col-sm-6 col-xs-12"> 2267 <div class="photo"> 2268 <a href="/TeamPhotos/team/143899" aria-label="go to Boys Varsity Baseball photo gallery"> 2269 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/1f065ffc-856c-4267-bf77-154fcb3c1b95.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Baseball gallery" /> 2270 </a> 2271 </div> 2272 <div class="text-center"><span>Boys Varsity Baseball</span></div> 2273 </div> 2274 <div class="col-md-3 col-sm-6 col-xs-12"> 2275 <div class="photo"> 2276 <a href="/TeamPhotos/team/143901" aria-label="go to Boys Varsity Basketball photo gallery"> 2277 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/b1235b7c-fcb5-45fb-9e2a-5993447c7157.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Basketball gallery" /> 2278 </a> 2279 </div> 2280 <div class="text-center"><span>Boys Varsity Basketball</span></div> 2281 </div> 2282 <div class="col-md-3 col-sm-6 col-xs-12"> 2283 <div class="photo"> 2284 <a href="/TeamPhotos/team/143456" aria-label="go to Boys Varsity Football photo gallery"> 2285 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/d3a4ad87-03a3-4029-b703-3bee3b0eae85.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Football gallery" /> 2286 </a> 2287 </div> 2288 <div class="text-center"><span>Boys Varsity Football</span></div> 2289 </div> 2290 <div class="col-md-3 col-sm-6 col-xs-12"> 2291 <div class="photo"> 2292 <a href="/TeamPhotos/team/144009" aria-label="go to Boys Varsity Golf photo gallery"> 2293 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/7d4dded1-80ad-430e-8e0d-de400d0f1470.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Golf gallery" /> 2294 </a> 2295 </div> 2296 <div class="text-center"><span>Boys Varsity Golf</span></div> 2297 </div> 2298 <div class="col-md-3 col-sm-6 col-xs-12"> 2299 <div class="photo"> 2300 <a href="/TeamPhotos/team/143909" aria-label="go to Boys Varsity Soccer photo gallery"> 2301 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/b07b1c6d-b6a8-45a8-9e47-33d934b6727a.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Soccer gallery" /> 2302 </a> 2303 </div> 2304 <div class="text-center"><span>Boys Varsity Soccer</span></div> 2305 </div> 2306 <div class="col-md-3 col-sm-6 col-xs-12"> 2307 <div class="photo"> 2308 <a href="/TeamPhotos/team/143915" aria-label="go to Boys Varsity Tennis photo gallery"> 2309 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/ac5a74c6-1ad3-4858-9c03-6d0cb669c92e.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Tennis gallery" /> 2310 </a> 2311 </div> 2312 <div class="text-center"><span>Boys Varsity Tennis</span></div> 2313 </div> 2314 <div class="col-md-3 col-sm-6 col-xs-12"> 2315 <div class="photo"> 2316 <a href="/TeamPhotos/team/143463" aria-label="go to Boys Varsity Volleyball photo gallery"> 2317 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/969af8e5-4b49-46e7-8065-9a4e635a13cc.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Volleyball gallery" /> 2318 </a> 2319 </div> 2320 <div class="text-center"><span>Boys Varsity Volleyball</span></div> 2321 </div> 2322 <div class="col-md-3 col-sm-6 col-xs-12"> 2323 <div class="photo"> 2324 <a href="/TeamPhotos/team/143464" aria-label="go to Boys Varsity Wrestling photo gallery"> 2325 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/71033bfb-ac9f-4589-ac57-efcb9313db30.jpg" class="img-responsive" loading="lazy" alt="Boys Varsity Wrestling gallery" /> 2326 </a> 2327 </div> 2328 <div class="text-center"><span>Boys Varsity Wrestling</span></div> 2329 </div> 2330 <div class="col-md-3 col-sm-6 col-xs-12"> 2331 <div class="photo"> 2332 <a href="/TeamPhotos/team/146592" aria-label="go to Coed Varsity Adaptive PE photo gallery"> 2333 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/e5fb5ef3-cc0e-4878-85e2-aa6c5f4dd647.jpg" class="img-responsive" loading="lazy" alt="Coed Varsity Adaptive PE gallery" /> 2334 </a> 2335 </div> 2336 <div class="text-center"><span>Coed Varsity Adaptive PE</span></div> 2337 </div> 2338 <div class="col-md-3 col-sm-6 col-xs-12"> 2339 <div class="photo"> 2340 <a href="/TeamPhotos/team/144007" aria-label="go to Coed Varsity Competitive Cheer photo gallery"> 2341 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/fbd85ce0-7a41-4082-8f12-3db2ee55f2a5.jpg" class="img-responsive" loading="lazy" alt="Coed Varsity Competitive Cheer gallery" /> 2342 </a> 2343 </div> 2344 <div class="text-center"><span>Coed Varsity Competitive Cheer</span></div> 2345 </div> 2346 <div class="col-md-3 col-sm-6 col-xs-12"> 2347 <div class="photo"> 2348 <a href="/TeamPhotos/team/143905" aria-label="go to Coed Varsity Cross Country photo gallery"> 2349 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/15079e28-a73d-40e9-a9d8-68bb7ed06ff0.jpg" class="img-responsive" loading="lazy" alt="Coed Varsity Cross Country gallery" /> 2350 </a> 2351 </div> 2352 <div class="text-center"><span>Coed Varsity Cross Country</span></div> 2353 </div> 2354 <div class="col-md-3 col-sm-6 col-xs-12"> 2355 <div class="photo"> 2356 <a href="/TeamPhotos/team/143906" aria-label="go to Coed Varsity Swimming photo gallery"> 2357 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/7be82327-4a4f-4fcf-a82d-847bb599dcf6.jpg" class="img-responsive" loading="lazy" alt="Coed Varsity Swimming gallery" /> 2358 </a> 2359 </div> 2360 <div class="text-center"><span>Coed Varsity Swimming</span></div> 2361 </div> 2362 <div class="col-md-3 col-sm-6 col-xs-12"> 2363 <div class="photo"> 2364 <a href="/TeamPhotos/team/143917" aria-label="go to Coed Varsity Track and Field photo gallery"> 2365 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/2c2a64dd-40a3-4d55-a708-072bf8693767.jpg" class="img-responsive" loading="lazy" alt="Coed Varsity Track and Field gallery" /> 2366 </a> 2367 </div> 2368 <div class="text-center"><span>Coed Varsity Track and Field</span></div> 2369 </div> 2370 <div class="col-md-3 col-sm-6 col-xs-12"> 2371 <div class="photo"> 2372 <a href="/TeamPhotos/team/144011" aria-label="go to Girls JV Lacrosse photo gallery"> 2373 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/877bd7e4-d21c-4f45-b06a-40a9269c24a4.jpg" class="img-responsive" loading="lazy" alt="Girls JV Lacrosse gallery" /> 2374 </a> 2375 </div> 2376 <div class="text-center"><span>Girls JV Lacrosse</span></div> 2377 </div> 2378 <div class="col-md-3 col-sm-6 col-xs-12"> 2379 <div class="photo"> 2380 <a href="/TeamPhotos/team/143912" aria-label="go to Girls JV Soccer photo gallery"> 2381 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/fdb36551-c852-4d82-87db-92be1b207438.jpg" class="img-responsive" loading="lazy" alt="Girls JV Soccer gallery" /> 2382 </a> 2383 </div> 2384 <div class="text-center"><span>
2384Girls JV Soccer</span></div> 2385 </div> 2386 <div class="col-md-3 col-sm-6 col-xs-12"> 2387 <div class="photo"> 2388 <a href="/TeamPhotos/team/143460" aria-label="go to Girls JV Tennis photo gallery"> 2389 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/a8d2fea2-1f44-4a12-bb6c-b8170f470833.jpg" class="img-responsive" loading="lazy" alt="Girls JV Tennis gallery" /> 2390 </a> 2391 </div> 2392 <div class="text-center"><span>Girls JV Tennis</span></div> 2393 </div> 2394 <div class="col-md-3 col-sm-6 col-xs-12"> 2395 <div class="photo"> 2396 <a href="/TeamPhotos/team/143462" aria-label="go to Girls JV Volleyball photo gallery"> 2397 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/b0702944-8b17-4c07-9d5a-1c169c4e9441.jpg" class="img-responsive" loading="lazy" alt="Girls JV Volleyball gallery" /> 2398 </a> 2399 </div> 2400 <div class="text-center"><span>Girls JV Volleyball</span></div> 2401 </div> 2402 <div class="col-md-3 col-sm-6 col-xs-12"> 2403 <div class="photo"> 2404 <a href="/TeamPhotos/team/143903" aria-label="go to Girls Varsity Basketball photo gallery"> 2405 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/9399907f-b518-4eb7-8056-8d6e0361cabb.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Basketball gallery" /> 2406 </a> 2407 </div> 2408 <div class="text-center"><span>Girls Varsity Basketball</span></div> 2409 </div> 2410 <div class="col-md-3 col-sm-6 col-xs-12"> 2411 <div class="photo"> 2412 <a href="/TeamPhotos/team/150822" aria-label="go to Girls Varsity Flag Football photo gallery"> 2413 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/c55ce145-464e-477d-90b3-1a03e93a94fa.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Flag Football gallery" /> 2414 </a> 2415 </div> 2416 <div class="text-center"><span>Girls Varsity Flag Football</span></div> 2417 </div> 2418 <div class="col-md-3 col-sm-6 col-xs-12"> 2419 <div class="photo"> 2420 <a href="/TeamPhotos/team/144008" aria-label="go to Girls Varsity Golf photo gallery"> 2421 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/23b4775b-7bd4-4ce8-8d37-24ae9491a62e.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Golf gallery" /> 2422 </a> 2423 </div> 2424 <div class="text-center"><span>Girls Varsity Golf</span></div> 2425 </div> 2426 <div class="col-md-3 col-sm-6 col-xs-12"> 2427 <div class="photo"> 2428 <a href="/TeamPhotos/team/143908" aria-label="go to Girls Varsity Lacrosse photo gallery"> 2429 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/a202cc1b-906a-4d70-bd80-445c4f715a59.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Lacrosse gallery" /> 2430 </a> 2431 </div> 2432 <div class="text-center"><span>Girls Varsity Lacrosse</span></div> 2433 </div> 2434 <div class="col-md-3 col-sm-6 col-xs-12"> 2435 <div class="photo"> 2436 <a href="/TeamPhotos/team/143911" aria-label="go to Girls Varsity Soccer photo gallery"> 2437 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/12ce85ee-d6c9-4ee5-9cbd-e883e2e8f28b.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Soccer gallery" /> 2438 </a> 2439 </div> 2440 <div class="text-center"><span>
2440Girls Varsity Soccer</span></div> 2441 </div> 2442 <div class="col-md-3 col-sm-6 col-xs-12"> 2443 <div class="photo"> 2444 <a href="/TeamPhotos/team/143913" aria-label="go to Girls Varsity Softball photo gallery"> 2445 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/368e60c1-ab24-4492-a618-182db827e4e4.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Softball gallery" /> 2446 </a> 2447 </div> 2448 <div class="text-center"><span>Girls Varsity Softball</span></div> 2449 </div> 2450 <div class="col-md-3 col-sm-6 col-xs-12"> 2451 <div class="photo"> 2452 <a href="/TeamPhotos/team/143459" aria-label="go to Girls Varsity Tennis photo gallery"> 2453 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/e6f4493d-ec34-48bb-a84f-b5c487101c56.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Tennis gallery" /> 2454 </a> 2455 </div> 2456 <div class="text-center"><span>Girls Varsity Tennis</span></div> 2457 </div> 2458 <div class="col-md-3 col-sm-6 col-xs-12"> 2459 <div class="photo"> 2460 <a href="/TeamPhotos/team/143461" aria-label="go to Girls Varsity Volleyball photo gallery"> 2461 <img src="https://5starassets.blob.core.windows.net/photogallery/2579830/b5d41c3b-c46a-4bb1-b6fa-d8f9f6c08523.jpg" class="img-responsive" loading="lazy" alt="Girls Varsity Volleyball gallery" /> 2462 </a> 2463 </div> 2464 <div class="text-center"><span>Girls Varsity Volleyball</span></div> 2465 </div> 2466 2467 </div> 2468 </div> 2469 </div> 2470 </div> 2471 2472 </div> 2473 </div> 2474 </section> 2475 </div> 2476 </div> 2477 </div> 2478 2479 </div> 2480 </div> 2481 <footer> 2482 2483 2484 <div class="footer bg-gradient-primary"> 2485 <div class="footer-contain"> 2486 2487 <div class="row"> 2488 <div class="col-md-12"> 2489 <div id="app-downloads"> 2490 <div id="badges"> 2491 <div class="row"> 2492 <div class="col-xs-12"> 2493 <img alt="T.L. Hanna Custom App Icon" 2494 aria-label="T.L. Hanna Custom App Icon" 2495 src="https://5starassets.blob.core.windows.net/athleticsites/2579830/1162/images/2f03d3d2-4d9a-4c8c-bd7f-0d75a3344e9f.png"
2496 class="img-responsive app-icon" /> 2497 </div> 2498 </div> 2499 <div class="row"> 2500 <div class="col-xs-6"> 2501 <a href="https://apps.apple.com/us/app/t-l-hanna-athletics/id6748661360" target="_blank"><img class="img-responsive download" src="/images/dl-apple.png" aria-label="Apple App Badge" alt="Apple App Badge" /></a> 2502 </div> 2503 <div class="col-xs-6"> 2504 <span id="googleplay"> 2505 <a href="https://play.google.com/store/apps/details?id=mm.sctlhanna" target="_blank"><img class="img-responsive download" src="/images/dl-google.png" aria-label="Google Play App Badge" alt="Google Play App Badge" /></a> 2506 </span> 2507 </div> 2508 </div> 2509 </div> 2510 </div> 2511 </div> 2512 </div> 2513 <div class="row"> 2514 <div class="col-md-12"> 2515 <div id="affiliate-imgs"> 2516 2517 </div> 2518 </div> 2519 </div> 2520 <hr /> 2521 <div class="row"> 2522 <div class="col-md-12"> 2523 <div id="policy"> 2524 <span class="text-primary-font">© 2026 MASCOT MEDIA, LLC</span> 2525 </div> 2526 </div> 2527 <div class="col-md-12"> 2528 <div class="contact-us text-primary-font"> 2529 CONTACT US 2530 <span id="phone-remove" class="text-primary-font">(864) 260-5110</span> |
2531 2600 N HWY 81, Anderson, SC 29621 2532 <br /> 2533 <span>Thank you to all of our <a href="/sponsor/SponsorsPage">Sponsors!</a></span> 2534 </div> 2535 </div> 2536 </div> 2537 </div> 2538</div> 2539
2540<script type="text/javascript"> 2541 //Going to check the operating system, if iOS, we will hide Google Play Icon 2542 var getOS = { 2543 iOS: function () { 2544 return navigator.platform.match(/iPhone|iPad|iPod/i); 2545 }, 2546 Mac: function () { 2547 return navigator.platform.match("MacIntel"); 2548 }, 2549 Windows: function () { 2550 return navigator.platform.match("Win32"); 2551 }, 2552 Android: function () { 2553 return navigator.platform.match(/Android/i); 2554 }, 2555 }; 2556 if (getOS.iOS() || getOS.Mac()) { 2557 document.getElementById('googleplay').style.display = "none"; 2558 } 2559 else { 2560 document.getElementById('googleplay').style.display = "inline"; 2561 } 2562</script>
2562 2563 2564 </footer> 2565 <div class="privacy-terms"> 2566 <a href="http://www.mascotmedia.net/privacy-policy/" target="_blank">PRIVACY POLICY</a> | 2567 <span>© 2026 MASCOT MEDIA, LLC</span> 2568 </div> 2569 <div class="ad-space"> 2570 </div> 2571 2572
2572<script src="/js/CenterPopup.min.js"></script>
2572 2573
2573<script src="/lib/jquery/dist/jquery.min.js"></script>
2573 2574
2574<script src="/js/jquery.easing.1.3.js"></script>
2574 2575
2575<script src="/js/lity.js"></script>
2575 2576
2576<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
2576 2577
2577<script src="/js/latestheadlines.min.js"></script>
2577 2578 <!-- CDN compiled and minified slick slider js --> 2579
2579<script src="https://cdn.jsdelivr.net/jquery.slick/1.3.15/slick.min.js"></script>
2579 2580
2580<script src="/lib/datatables/media/js/jquery.dataTables.min.js"></script>
2580 2581
2581<script src="/lib/datatables/media/js/dataTables.bootstrap.min.js"></script>
2581 2582
2582<script src="/lib/datatables-responsive/js/dataTables.responsive.min.js"></script>
2582 2583
2583<script src="/lib/jquery.menu-aim/jquery.menu-aim.min.js"></script>
2583 2584
2584<script src="/js/arrow-down.js"></script>
2584 2585
2585<script src="/js/UpcomingBroadcastSideTabStyle14.min.js"></script>
2585 2586
2586<script src="/js/topmenu5.min.js?v=2.3"></script>
2586 2587
2587<script src="/js/StagingButtons.min.js"></script>
2587 2588
2588<script src="/lib/sweetalert/dist/sweetalert.min.js"></script>
2588 2589
2589<script src="/lib/slick-carousel/slick/slick.min.js"></script>
2589 2590
2590<script src="/js/PlatinumSponsorStyle2.min.js"></script>
2590 2591
2591<script src="/js/CommitmentsStyle1.min.js"></script>
2591 2592 2593 2594 2595
2595<script src="/lib/slick-carousel/slick/slick.min.js"></script>
2595 2596
2596<script src="/js/UpcomingEventsStyle14.min.js"></script>
2596 2597
2597<script src="/js/recent-videos.js"></script>
2597 2598
2598<script src="/lib/readmore-js/readmore.min.js"></script>
2598 2599 <style> 2600 body:before 2601 { 2602 content: ""; 2603 } 2604 </style> 2605 <div id="fb-root"></div> 2606
2606<script> 2607 (function (d, s, id) { 2608 var js, fjs = d.getElementsByTagName(s)[0]; 2609 if (d.getElementById(id)) return; 2610 js = d.createElement(s); js.id = id; 2611 js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9"; 2612 fjs.parentNode.insertBefore(js, fjs); 2613 }(document, 'script', 'facebook-jssdk'));</script>
2613 2614
2614<script src="/js/TeamMenuStyle3.min.js?v=1.0.0"></script>
2614 2615
2615<script src="/lib/jQuery.print/jQuery.print.js"></script>
2615 2616
2616<script type="text/javascript"> 2617 $(document).ready(function () { 2618 var slider = document.getElementById("jumbotron-slider"); 2619 if (slider == null || slider == undefined){ 2620 //$(".team-capsule-wrapper").css("padding-top","100px"); 2621 } 2622 $('article').readmore(); 2623 2624 $(".schedule-tab").addClass("active"); 2625 $('[id^=sub-]').attr('class', ''); 2626 $('.print-athlete').hide(); 2627 $('[id^=sub-]').addClass('form-control schedule-submenu'); 2628 $('[id^=school-year-]').attr('class', ''); 2629 $('[id^=school-year-]').addClass('schedule-school-year'); 2630 $('[id^=school-year-]').addClass('form-control'); 2631 2632 2633 2634 }) 2635 $(document).ready(function () { 2636 $('#games-tab').tab('show'); 2637 $('#schedule-table').DataTable(); 2638 $('#practice-schedule-table').DataTable(); 2639 }); 2640 </script>
2640 2641
2641<script> 2642 $(function () { 2643 //var url = "https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8"; //on-air 2644 //var url = ""; //broadcast URL could be off-air 2645 var url = ""; 2646 2647 $.ajax({ 2648 url: "/home/GetVideoBroadcastUrl", 2649 type: "GET", 2650 dataType: "json", 2651 success: function (data) { 2652 url = data.url; 2653 } 2654 }); 2655 2656 if (url !== "") { 2657 $.ajax(url, { 2658 statusCode: { 2659 200: function () { 2660 $('#broadcast-on').show(); 2661 $('#broadcast-off').hide(); 2662 }, 2663 404: function () { 2664 $('#broadcast-off').show(); 2665 $('#broadcast-on').hide(); 2666 } 2667 } 2668 }); 2669 } 2670 else { 2671 $('#broadcast-off').show(); 2672 $('#broadcast-on').hide(); 2673 } 2674 }); 2675 </script>
2675 2676 2677 2678 2679
2679<script type="text/javascript"> 2680 $.extend(true, $.fn.dataTable.defaults, { 2681 language: { 2682 "processing": "<i class='fa fa-refresh fa-spin fa-2x'></i><br />Loading..." 2683 } 2684 }); 2685 </script>
2685 2686
2686<script type='text/javascript'> 2687 var url = 'https://apps.apple.com/us/app/t-l-hanna-athletics/id6748661360'; 2688 var regex = /([\d]{10,})/g; 2689 var meta = document.createElement('meta'); 2690 meta.setAttribute('name', 'apple-itunes-app'); 2691 meta.setAttribute('content', 'app-id=' + url.match(regex)); 2692 document.getElementsByTagName('head')[0].appendChild(meta); 2693 </script>
2693 2694
2694<script type="text/javascript"> 2695 $(function () { 2696 $('ul.menu a').bind('click', function (event) { 2697 var $anchor = $(this); 2698 2699 $('html, body').stop().animate({ 2700 scrollTop: $($anchor.attr('href')).offset().top 2701 }, 1500, 'easeInOutExpo'); 2702 event.preventDefault(); 2703 }); 2704 }); 2705 </script>
2705 2706 <!-- Quantcast Tag --> 2707
2707<script type="text/javascript"> 2708 window._qevents = window._qevents || []; 2709 (function () { 2710 var elem = document.createElement('script'); 2711 elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js"; 2712 elem.async = true; 2713 elem.type = "text/javascript"; 2714 var scpt = document.getElementsByTagName('script')[0]; 2715 scpt.parentNode.insertBefore(elem, scpt); 2716 })(); 2717 window._qevents.push({ 2718 qacct: "p-L8Vz-DsnmdfCj", 2719 uid: "__INSERT_EMAIL_HERE__" 2720 }); 2721 </script>
2721 2722 <noscript> 2723 <div style="display:none;"> 2724 <img src="//pixel.quantserve.com/pixel/p-L8Vz-DsnmdfCj.gif" border="0" height="1" width="1" alt="Quantcast" /> 2725 </div> 2726 </noscript> 2727 <!-- End Quantcast tag --> 2728</body> 2729</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.