1<!DOCTYPE html> 2<html lang="en"> 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 208 209
209<script src="https://adklip.net/prebid/mascotmedia.js"></script>
209 210
210<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
210 211
211<script> 212 window.googletag = window.googletag || { cmd: [] }; 213 214 function isMobile() { 215 return window.innerWidth <= 768; 216 } 217 218 // The greedy "MORE" nav (topmenu.js, Header Style 8/9/15) lays out BEFORE the GAM 219 // presenting-sponsor iframe paints, so it never reserves the ad's width and the 220 // sponsor wraps to a line below the nav. Re-running AdjustNav() once the creative is 221 // sized makes the nav recount the sponsor <li> and tuck overflow links into MORE, 222 // keeping the sponsor inline. No-op on templates without the greedy nav (AdjustNav 223 // is undefined there), so it's safe to call unconditionally. 224 function nudgeGreedyNav() { 225 if (typeof AdjustNav === 'function') { 226 try { AdjustNav(); } catch (e) { /* greedy nav not present on this template */ } 227 } 228 } 229 230 googletag.cmd.push(function () { 231 var isMobileDevice = isMobile(); 232 var REFRESH_KEY = 'refresh'; 233 var REFRESH_VALUE = 'true'; 234 235 // NEW: programmatic flag + refresh timing 236 var useProgrammaticAds = true; 237 // 30s is Google's minimum refresh interval for any slot AdX can fill do not lower 238 var REFRESH_MS = 30000; 239 240 // NEW: add a body class only when programmatic + mobile (for stable layout) 241 if (useProgrammaticAds && isMobileDevice) { 242 document.body.classList.add('prog-mobile-banners'); 243 } 244 245 // ------- PRESENTING SPONSOR------- 246 // Define BOTH slots unconditionally. Defining a slot does NOT request an ad 247 // (only display()/refresh() does), and the responsive-fill block below 248 // displays exactly ONE at a time â so this adds no load-time impressions. 249 // The old isMobileDevice (innerWidth<=768) branch defined only one slot for 250 // the page's life; combined with CSS that switches the sponsor container at 251 // 992px, that stranded 769-991px on a visible-but-empty slot (the tablet dead 252 // zone). We now align the fill to the 992 CSS boundary (see below). 253 var sponsorSlotsById = {}; 254 sponsorSlotsById['gam-presenting-sponsor-mobile'] = googletag.defineSlot('/22870419559/headerwebmobile', [[300, 75]], 'gam-presenting-sponsor-mobile') 255 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 256 .addService(googletag.pubads()); 257 sponsorSlotsById['gam-presenting-sponsor-2'] = googletag.defineSlot('/22870419559/headerwebdesktop', [[300, 75]], 'gam-presenting-sponsor-2') 258 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 259 .addService(googletag.pubads()); 260 261 // Build base arrays of allowed sizes 262 var desktopTabletProgrammatic = [[640, 100], [728, 90]]; 263 var mobileProgrammatic = [[320, 50]]; // << mobile = 320x50 ONLY 264 var desktopTabletDefault = [[640, 100]]; 265 var mobileDefault = [[640, 100]]; 266 267 var allProgrammaticSizes = [[640, 100], [728, 90], [320, 50]]; 268 var allDefaultSizes = [[640, 100]]; 269 270 var bannerMapping = googletag.sizeMapping() 271 .addSize([1024, 0], useProgrammaticAds ? desktopTabletProgrammatic : desktopTabletDefault) // desktop 272 .addSize([768, 0], useProgrammaticAds ? desktopTabletProgrammatic : desktopTabletDefault) // tablet 273 .addSize([0, 0], useProgrammaticAds ? mobileProgrammatic : mobileDefault) // phones 274 .build(); 275 276 googletag.defineSlot( 277 '/22870419559/bannerweb', 278 useProgrammaticAds ? allProgrammaticSizes : allDefaultSizes, 279 'gam-banner-ad' 280 ) 281 .defineSizeMapping(bannerMapping) 282 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 283 .addService(googletag.pubads()); 284 285 googletag.defineSlot( 286 '/22870419559/bannerweb', 287 useProgrammaticAds ? allProgrammaticSizes : allDefaultSizes, 288 'gam-banner-ad-2' 289 ) 290 .defineSizeMapping(bannerMapping) 291 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 292 .addService(googletag.pubads()); 293 294 googletag.defineSlot('/22870419559/agent', [[300, 75]], 'gam-agent-ad') 295 .setTargeting(REFRESH_KEY, REFRESH_VALUE) 296 .addService(googletag.pubads()); 297 298 googletag.pubads().setTargeting('siteid', '2636178'); 299 googletag.pubads().setTargeting('isschoolpay', '0'); 300 301 googletag.pubads().addEventListener('impressionViewable', function (event) { 302 var slot = event.slot; 303 if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) { 304 setTimeout(function () { 305 googletag.pubads().refresh([slot]); 306 }, REFRESH_MS); 307 } 308 }); 309 310 googletag.enableServices(); 311 312 // ------- PRESENTING SPONSOR: responsive fill (AB-6152 follow-up) ------- 313 // The desktop/mobile split is owned entirely by each header's NATIVE Bootstrap 314 // visibility classes (no universal @media here anymore). We fill whichever slot 315 // the CSS currently shows, and re-fill on resize so a breakpoint cross is never 316 // stranded on an empty slot. Only ONE slot is displayed at a time, so load-time 317 // impression volume is unchanged â the filled slot is always the VISIBLE (and 318 // viewable) one. For the greedy "MORE" nav the desktop sponsor is an inline <li>; 319 // nudgeGreedyNav() (called after the creative paints) re-runs AdjustNav so the nav 320 // reserves the ad's width and keeps it inline instead of wrapping it below. 321 (function () { 322 var sponsorDisplayed = { 'gam-presenting-sponsor-2': false, 'gam-presenting-sponsor-mobile': false }; 323 // Is the element actually rendered (not display:none on it or any ancestor)? 324 function isShown(el) { return !!(el && (el.offsetParent !== null || el.getClientRects().length)); } 325 // Fill whichever slot the CSS currently shows. The desktop/mobile split is owned 326 // entirely by the header CSS (the @media block above sets <=992 -> mobile on the 327 // standard menus; layout 19 keeps its reserved desktop slot, etc.), so the JS just 328 // follows it â no width is hard-coded here, and template-specific breakpoints 329 // (e.g. 19's reserved slot) are honored automatically. Fall back to a 993 width 330 // split only if neither container has been laid out yet. 331 function activeSponsorId() { 332 var d = document.getElementById('gam-presenting-sponsor-2'); 333 var m = document.getElementById('gam-presenting-sponsor-mobile'); 334 if (isShown(d)) return 'gam-presenting-sponsor-2'; 335 if (isShown(m)) return 'gam-presenting-sponsor-mobile'; 336 if (!d && !m) return null; 337 return window.innerWidth >= 993 ? 'gam-presenting-sponsor-2' : 'gam-presenting-sponsor-mobile'; 338 } 339 function fillActiveSponsor() { 340 var id = activeSponsorId(); 341 if (!id || !document.getElementById(id)) return; // this template doesn't render that slot 342 var slot = sponsorSlotsById[id]; 343 if (!slot) return; 344 if (!sponsorDisplayed[id]) { 345 googletag.display(id); 346 sponsorDisplayed[id] = true; 347 } else { 348 googletag.pubads().refresh([slot]); // already shown once -> re-serve on return 349 } 350 } 351 function whenReady(fn) { 352 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn); 353 else fn(); 354 } 355 whenReady(fillActiveSponsor); 356 // Re-fill the now-visible slot after a resize crosses any template's CSS breakpoint. 357 var resizeTimer; 358 window.addEventListener('resize', function () { 359 clearTimeout(resizeTimer); 360 resizeTimer = setTimeout(fillActiveSponsor, 200);
361 }); 362 })(); 363 364 // Add event listeners for responsive image handling 365 document.addEventListener('DOMContentLoaded', function () { 366 handleResponsiveImages(); 367 368 // Add debounced resize handler 369 var resizeTimeout = null; 370 window.addEventListener('resize', function () { 371 if (resizeTimeout) { 372 clearTimeout(resizeTimeout); 373 } 374 375 resizeTimeout = setTimeout(function () { 376 handleResponsiveImages(); 377 }, 250); 378 }); 379 }); 380 381 // Add slotRenderEnded event to handle styling right after ads render 382 googletag.pubads().addEventListener('slotRenderEnded', function (event) { 383 // Give a small delay to ensure content is available 384 setTimeout(function () { 385 var id = event.slot.getSlotElementId(); 386 var container = document.getElementById(id); 387 if (container) { 388 var iframes = container.querySelectorAll('iframe[id^="google_ads_iframe"]'); 389 iframes.forEach(applyResponsiveStyles); 390 } 391 if (id === 'gam-presenting-sponsor-2') { 392 // Belt-and-suspenders for the greedy nav: re-run after the creative has 393 // settled, covering the cross-origin safe-frame path where 394 // fitPresentingSponsor (and thus its inline nudge) can't measure the ad. 395 setTimeout(nudgeGreedyNav, 250); 396 } 397 }, 50); 398 }); 399 400 // Function to handle responsive images 401 function handleResponsiveImages() { 402 ['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 => { 403 var adContainer = document.querySelector(`#${adId}`); 404 if (adContainer) { 405 observeIframeInsertion(adContainer); 406 var iframes = adContainer.querySelectorAll('iframe[id^="google_ads_iframe"]'); 407 iframes.forEach(applyResponsiveStyles); 408 } 409 }); 410 } 411 412 // Function to observe iframe insertion - from original code 413 function observeIframeInsertion(container) { 414 var observer = new MutationObserver(function (mutations) { 415 mutations.forEach(function (mutation) { 416 if (mutation.addedNodes) { 417 mutation.addedNodes.forEach(function (node) { 418 if (node.tagName === 'IFRAME' && node.id.startsWith('google_ads_iframe')) { 419 applyResponsiveStyles(node); 420 observeIframeChanges(node); 421 } 422 }); 423 } 424 }); 425 }); 426 427 observer.observe(container, { 428 childList: true, 429 subtree: true 430 }); 431 } 432 433 function applyResponsiveStyles(iframe) { 434 if (!iframe) return; 435 436 // Presenting sponsor (desktop AND mobile, ALL templates): one proportional 437 // fit â scale the creative to its reserved nav slot, no crop. (Previously this 438 // was template-19-only; every other template clipped via the default box.) 439 if (iframe.closest('.gam-presenting-sponsor-2') || iframe.closest('#gam-presenting-sponsor-mobile')) { 440 fitPresentingSponsor(iframe); 441 return; 442 } 443 444 // Banner / sport-banner ads â unchanged. 445 if ( 446 iframe.closest('.gam-banner-ad') || 447 iframe.closest('.gam-banner-ad-2') || 448 iframe.closest('.gam-sport-banner-ad') || 449 iframe.closest('.gam-sport-banner-ad-2') 450 ) { 451 var isTemplate19 = !!document.querySelector('.sticky-header-19'); 452 var isTemplate19Banner = isTemplate19 && iframe.closest('.gam-banner-ad'); 453 454 if (isMobile() && !isTemplate19Banner) { 455 iframe.style.width = '100%'; 456 iframe.style.height = 'auto'; 457 try { 458 var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 459 // Template 19's top banner sits at the very top of the sticky 460 // header with nothing overlapping it; the 20% push-down other 461 // templates use just renders as dead white space above the ad. 462 iframeDoc.querySelectorAll('img').forEach(function (img) { 463 img.style.maxWidth = '100%'; 464 img.style.height = 'auto'; 465 img.style.marginTop = iframe.closest('.gam-banner-ad') ? '20%' : '0'; 466 }); 467 } catch (e) { 468 console.error('Could not access iframe content:', e); 469 } 470 } 471 472 // Template 19's top banner ad: pin the iframe to the creative's true 473 // rendered height on EVERY device, not just mobile (AB-6411 â the 474 // sticky ad row is a fixed 122px box on desktop; see main.less/ 475 // CSSStyle19). Set inline with !important so it wins regardless of 476 // CSS state â GAM ad sizing lives here in JS, not in template CSS, 477 // which is easy to defeat via selector specificity drift (this exact 478 // element had multiple overlapping height:auto rules quietly taking 479 // turns winning). 480 if (isTemplate19Banner) { 481 try { 482 var iframeDoc19 = iframe.contentDocument || iframe.contentWindow.document; 483 if (iframeDoc19.documentElement) { iframeDoc19.documentElement.style.margin = '0'; iframeDoc19.documentElement.style.padding = '0'; } 484 if (iframeDoc19.body) { iframeDoc19.body.style.margin = '0'; iframeDoc19.body.style.padding = '0'; } 485 var bannerImg = iframeDoc19.querySelector('img'); 486 var fitBannerHeight = function () {
487 if (!bannerImg.naturalWidth) return; 488 var w = iframe.getBoundingClientRect().width; 489 var h = Math.round(w * bannerImg.naturalHeight / bannerImg.naturalWidth); 490 if (h > 0) iframe.style.setProperty('height', h + 'px', 'important'); 491 }; 492 if (bannerImg) { 493 bannerImg.style.maxWidth = '100%'; 494 bannerImg.style.height = 'auto'; 495 bannerImg.style.display = 'block'; 496 bannerImg.style.marginTop = '0'; 497 if (bannerImg.complete && bannerImg.naturalWidth) { fitBannerHeight(); } 498 else { bannerImg.addEventListener('load', fitBannerHeight); } 499 } 500 } catch (e) { 501 console.error('Could not access iframe content:', e); 502 } 503 } 504 } 505 } 506 507 // Scale the presenting sponsor to fit its reserved nav slot from the creative's 508 // TRUE dimensions, preserving aspect ratio (never crop). Generalized from the old 509 // template-19-only version so EVERY template gets the same treatment. Per the 510 // business-rules GAM section, sizing lives here in JS â CSS can't reach the creative 511 // inside the friendly iframe. The iframe still loads the native creative so GAM 512 // impression/click/viewability tracking fires correctly; we only change how it paints. 513 function fitPresentingSponsor(iframe) { 514 var container = iframe.closest('.gam-presenting-sponsor-2, #gam-presenting-sponsor-mobile'); 515 if (!container) return; 516 var isMobileSlot = container.id === 'gam-presenting-sponsor-mobile'; 517 518 // Target box = the slot each template reserves in its nav. Read it from the 519 // rendered container; fall back / sanity-cap so an unbounded (e.g. max-width:none) 520 // or not-yet-sized container can't blow the ad out across the nav. 521 var boxW = container.clientWidth; 522 var boxH = container.clientHeight; 523 if (!boxW || boxW < 40 || boxW > 400) boxW = isMobileSlot ? Math.max(200, window.innerWidth - 24) : 240; 524 if (!boxH || boxH < 20 || boxH > 120) boxH = isMobileSlot ? 64 : 72; 525 526 function apply(nativeW, nativeH) { 527 if (!nativeW || !nativeH) return; 528 // Fit WITHIN the box on both dimensions, preserving aspect ratio â no crop. 529 var scale = Math.min(boxW / nativeW, boxH / nativeH); 530 iframe.style.setProperty('width', nativeW + 'px', 'important'); 531 iframe.style.setProperty('height', nativeH + 'px', 'important'); 532 iframe.style.setProperty('transform', 'scale(' + scale + ')', 'important'); 533 iframe.style.transformOrigin = 'top left'; 534 // display:block so the iframe ignores inherited line-height (e.g. 85px on 535 // template 14's .upper-side) and its own vertical-align:bottom, which push an 536 // inline iframe DOWN inside the slot and let overflow:hidden clip the bottom. 537 iframe.style.setProperty('display', 'block', 'important'); 538 // Collapse the container to the painted size so there's no gap or overflow. 539 container.style.width = Math.round(nativeW * scale) + 'px'; 540 container.style.height = Math.round(nativeH * scale) + 'px'; 541 container.style.overflow = 'hidden'; 542 // Desktop sponsor sits inline in the greedy nav â now that it has a real 543 // width, let the nav reserve it (pushes overflow links into MORE). 544 if (!isMobileSlot) nudgeGreedyNav(); 545 } 546 547 try { 548 var doc = iframe.contentDocument || iframe.contentWindow.document; 549 var img = doc && doc.querySelector('img'); 550 if (img) { 551 // GAM's friendly iframe ships an 8px <body> margin that nudges the creative 552 // down/right (then overflow:hidden crops it). Zero margins + block-level the 553 // image to kill the inline baseline gap, then measure true dimensions. 554 if (doc.documentElement) { doc.documentElement.style.margin = '0'; doc.documentElement.style.padding = '0'; } 555 if (doc.body) { doc.body.style.margin = '0'; doc.body.style.padding = '0'; } 556 img.style.display = 'block'; 557 img.style.maxWidth = 'none'; 558 img.style.width = 'auto'; 559 img.style.height = 'auto';
560 if (img.complete && img.naturalWidth) { 561 apply(img.naturalWidth, img.naturalHeight); 562 } else { 563 img.addEventListener('load', function () { 564 apply(img.naturalWidth, img.naturalHeight); 565 }); 566 } 567 } 568 } catch (e) { 569 // Cross-origin (safe-frame) creative â can't measure it; leave the CSS default. 570 console.error('Could not size presenting sponsor:', e); 571 } 572 } 573 574 function observeIframeChanges(iframe) { 575 iframe.addEventListener('load', function () { 576 applyResponsiveStyles(iframe); 577 }); 578 579 var observer = new MutationObserver(function (mutations) { 580 mutations.forEach(function (mutation) { 581 if (mutation.type === 'childList' || (mutation.type === 'attributes' && mutation.attributeName === 'src')) { 582 applyResponsiveStyles(iframe); 583 } 584 }); 585 }); 586 587 observer.observe(iframe, { 588 childList: true, 589 subtree: true, 590 attributes: true, 591 attributeFilter: ['src'] 592 }); 593 } 594 }); 595 </script>
595 596 597 <!-- End GPT Tag --> 598 <!-- Google tag (gtag.js) -->
vendor: 73 bytes, lines 598-599
598 599 <script async src="https://www.googletagmanager.com/gtag/js?id=
599G-K3Y2DS54H3
vendor: 21 bytes, lines 599-600
599"></script> 600
600<script> 601
vendor: 171 bytes, lines 601-605
601window.dataLayer = window.dataLayer || []; 602 function gtag() { dataLayer.push(arguments); } 603 gtag('js', new Date()); 604 605 gtag('config', '
605G-K3Y2DS54H3
vendor: 13 bytes, lines 605-606
605'); 606
606</script>
606 607 608 609 <meta charset="utf-8" /> 610 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes" /> 611 <title>Triangle Math and Science Academy (Apex, NC) Athletics</title> 612 <meta name="description" /> 613 <meta name="keywords" /> 614 <meta property="og:image" content="https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/73d485c7-3090-4c81-b105-46b424d2ea9c.png"> 615 <link rel="canonical" href="https://www.tigerathletics.net/sponsors" /> 616<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" /> 617
617<script type="application/ld+json">{"@context":"https://schema.org","@type":"SportsOrganization","name":"Triangle Math and Science Academy","url":"https://www.tigerathletics.net","logo":"https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/73d485c7-3090-4c81-b105-46b424d2ea9c.png","alternateName":"Triangle Math and Science Academy Tigers","address":{"@type":"PostalAddress","addressLocality":"Apex","addressRegion":"NC"}}</script>
617 618
618<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Triangle Math and Science Academy","url":"https://www.tigerathletics.net","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.tigerathletics.net/search?keyword={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
618 619 620 621 622 623
623<script src="https://unpkg.com/focus-visible/dist/focus-visible.min.js"></script>
623 624 625 <!-- fonts now reside in the less config file --> 626 <!-- latest CDN compiled and minified CSS for lity (simple lightbox) --> 627 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lity/2.3.1/lity.min.css" integrity="sha256-0SZxASYAglrmIuTx+ZYHE3hzTnCZWB7XLu+iA8AG0Z0=" crossorigin="anonymous" /> 628 <!-- latest CDN compiled and minified CSS for font awesome --> 629 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" integrity="sha256-NuCn4IvuZXdBaFKJOAcsU2Q3ZpwbdFisd5dux4jkQ5w=" crossorigin="anonymous" /> 630 <!-- latest CDN compiled and minified CSS for slick slider --> 631 <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" /> 632 <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" /> 633 <!-- latest CDN compiled and minified CSS for bootstrap 3 --> 634 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 635 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 636 <!-- locally stored compiled and minified CSS for yamm --> 637 <link rel="stylesheet" href="/lib/yamm3/yamm/yamm.min.css" /> 638 <!-- locally stored compiled and minified CSS for datatables --> 639 <link rel="stylesheet" href="/lib/datatables/media/css/dataTables.bootstrap.min.css" /> 640 <!-- creates browser icon using schools mascot logo --> 641 <link rel="icon" type="image/png" href="https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/73d485c7-3090-4c81-b105-46b424d2ea9c.png"> 642 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/3.3.0/ekko-lightbox.min.css" integrity="sha512-vC3vvXGPI9bplTilrP7d0YKtmHrMAH4q9dF6QSfIL/uOFIMsHu2wkmAITtFRkNisTKt1e4EAhIiXpyXJgiJW4Q==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <!-- created CSS from less config file; compiled, minified and stored locally --> 643 <link rel="stylesheet" href="/less/templates/5/main.min.css?v=2.3" /> 644 645 <link href="/lib/sweetalert/dist/sweetalert.css" rel="stylesheet" /> 646 <link rel="stylesheet" href="/less/Components/AIAgent.min.css?v=639266606703723180" /> 647 648 649 650 <style> 651 .navbar-nav > li > a:hover{color: #b62424 !important;} 652</style> 653<style> 654 h1, h2, h3, h4, h5, h6 {color: #003da5;} 655 ul li a {color: #003da5;} 656 table tr{color:#003da5;} 657 .header-topper:before{background:#003da5;} 658 .header-topper .row:before {background:#003da5;} 659 .border-right-xl-secondary{border-right: 20px solid #b62424;} 660 /* resused */ 661 .bg-primary{background-color: #003da5;} 662 .bg-secondary{background-color: #b62424;} 663 .text-primary{color: #003da5 !important;} 664 .text-primary-font{color: #ffffff !important;} 665 .text-secondary{color: #b62424 !important;} 666 .border-all-thin-primary {border: solid 1px #003da5; } 667 .border-right-xl-secondary{border-right: 20px solid #b62424;} 668 .border-right-xl-primary{border-right: 20px solid #003da5;} 669 .bg-gradient-primary-dark{background-image: linear-gradient(180deg,#000,#003da5);} 670 .ticker-19-badge-today, .ticker-19-badge-upcoming, .ticker-19-badge-final { background-color: #003da5; } 671 .ticker-19-calendar-link { background-color: #003da5; 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; } 672 .ticker-19-calendar-link:hover { filter: brightness(1.15); }
673 .ticker-19-calendar-link i { font-size: 1.3rem !important; } 674 .ticker-19-calendar-link span { color: #fff !important; font-size: 0.7rem !important; font-weight: 700 !important; letter-spacing: 1px !important; } 675</style> 676 677 678 679 680 681</head> 682<body viewport="fixed"> 683 <a href="#main-content" class="skip-link">Skip to Main Content</a> 684 685 <div class="ticker-19-section" aria-label="Game Schedule"> 686 <div class="ticker-19-bar"> 687 <!-- Composite calendar link â LEFT side like OU --> 688 <a href="/calendar" class="ticker-19-calendar-link" aria-label="View full schedule"> 689 <i class="fa fa-calendar" aria-hidden="true"></i> 690 <span>Composite</span> 691 </a> 692 693 <!-- Tabs --> 694 <div class="ticker-19-tabs" role="tablist"> 695 <button class="ticker-19-tab active" id="ticker19-ev-btn" role="tab" aria-controls="ticker19-events" aria-selected="true" tabindex="0">Events</button> 696 <button class="ticker-19-tab" id="ticker19-res-btn" role="tab" aria-controls="ticker19-results" aria-selected="false" tabindex="0">Results</button> 697 </div> 698 699 <!-- Events Panel --> 700 <div class="ticker-19-panel active" id="ticker19-events" role="tabpanel" aria-labelledby="ticker19-ev-btn"> 701 <div class="ticker-19-scroll-container"> 702 <button class="ticker-19-arrow ticker-19-arrow-left" aria-label="Previous games"><i class="fa fa-chevron-left" aria-hidden="true"></i></button> 703 <div class="ticker-19-track events-slider-19"> 704 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Soccer vs Voyager Academy â Oct. 5"> 705 <div class="ticker-19-card-top"> 706 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 5</span> · 6:30 PM</span> 707 </div> 708 <div class="ticker-19-sport">Mens Soccer - Varsity</div> 709 <div class="ticker-19-opponent"> 710 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="ticker-19-opp-logo" alt="Voyager Academy" loading="lazy" /> 711 <span class="ticker-19-opp-name">vs Voyager Academy</span> 712 </div> 713 </div> 714 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Volleyball vs Raleigh Charter â Oct. 5"> 715 <div class="ticker-19-card-top"> 716 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 5</span> · 4:30 PM</span> 717 </div> 718 <div class="ticker-19-sport">Womens Volleyball - Varsity</div> 719 <div class="ticker-19-opponent"> 720 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="ticker-19-opp-logo" alt="Raleigh Charter" loading="lazy" /> 721 <span class="ticker-19-opp-name">vs Raleigh Charter</span> 722 </div> 723 </div> 724 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Volleyball vs Raleigh Charter â Oct. 5"> 725 <div class="ticker-19-card-top"> 726 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 5</span> · 6:00 PM</span> 727 </div> 728 <div class="ticker-19-sport">Womens Volleyball - Varsity</div> 729 <div class="ticker-19-opponent"> 730 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="ticker-19-opp-logo" alt="Raleigh Charter" loading="lazy" />
731 <span class="ticker-19-opp-name">vs Raleigh Charter</span> 732 </div> 733 </div> 734 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Football vs Wake Prep Academy â Oct. 8"> 735 <div class="ticker-19-card-top"> 736 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 8</span> · 7:00 PM</span> 737 </div> 738 <div class="ticker-19-sport">Football - Varsity</div> 739 <div class="ticker-19-opponent"> 740 <img src="https://5starassets.blob.core.windows.net/mascots/generics/1.png" class="ticker-19-opp-logo" alt="Wake Prep Academy" loading="lazy" /> 741 <span class="ticker-19-opp-name">vs Wake Prep Academy</span> 742 </div> 743 </div> 744 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Soccer vs Research Triangle Charter Academy â Oct. 12"> 745 <div class="ticker-19-card-top"> 746 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 12</span> · 6:30 PM</span> 747 </div> 748 <div class="ticker-19-sport">Mens Soccer - Varsity</div> 749 <div class="ticker-19-opponent"> 750 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="ticker-19-opp-logo" alt="Research Triangle Charter Academy" loading="lazy" /> 751 <span class="ticker-19-opp-name">vs Research Triangle Charter Academy</span> 752 </div> 753 </div> 754 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Soccer at Roxboro Community â Oct. 14"> 755 <div class="ticker-19-card-top"> 756 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 14</span> · 6:00 PM</span> 757 </div> 758 <div class="ticker-19-sport">Mens Soccer - Varsity</div> 759 <div class="ticker-19-opponent"> 760 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="ticker-19-opp-logo" alt="Roxboro Community" loading="lazy" /> 761 <span class="ticker-19-opp-name">at Roxboro Community</span> 762 </div> 763 </div> 764 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Soccer at NCSSM: Durham â Oct. 16"> 765 <div class="ticker-19-card-top"> 766 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 16</span> · 6:00 PM</span> 767 </div> 768 <div class="ticker-19-sport">Mens Soccer - Varsity</div> 769 <div class="ticker-19-opponent"> 770 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="ticker-19-opp-logo" alt="NCSSM: Durham" loading="lazy" />
771 <span class="ticker-19-opp-name">at NCSSM: Durham</span> 772 </div> 773 </div> 774 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Tennis at 2A Mid East Regional â Oct. 16"> 775 <div class="ticker-19-card-top"> 776 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 16</span> · 12:00 PM</span> 777 </div> 778 <div class="ticker-19-sport">Womens Tennis - Varsity</div> 779 <div class="ticker-19-opponent"> 780 <img src="https://5starassets.blob.core.windows.net/app-sport-icons/12/aa9a4e04-8415-4f0e-81e5-fda8d3e7ef15_.png" class="ticker-19-opp-logo" alt="2A Mid East Regional" loading="lazy" /> 781 <span class="ticker-19-opp-name">at 2A Mid East Regional</span> 782 </div> 783 </div> 784 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Football vs Hobgood Charter â Oct. 16"> 785 <div class="ticker-19-card-top"> 786 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 16</span> · 7:00 PM</span> 787 </div> 788 <div class="ticker-19-sport">Football - Varsity</div> 789 <div class="ticker-19-opponent"> 790 <img src="https://5starassets.blob.core.windows.net/mascots/generics/1.png" class="ticker-19-opp-logo" alt="Hobgood Charter" loading="lazy" /> 791 <span class="ticker-19-opp-name">vs Hobgood Charter</span> 792 </div> 793 </div> 794 <div class="ticker-19-card" tabindex="0" role="button" aria-expanded="false" aria-label="Tennis at 2A Mid East Regional â Oct. 17"> 795 <div class="ticker-19-card-top"> 796 <span class="ticker-19-date"><span class="ticker-19-badge ticker-19-badge-today" style="background-color:#003da5;">Oct. 17</span> · 8:00 AM</span> 797 </div> 798 <div class="ticker-19-sport">Womens Tennis - Varsity</div> 799 <div class="ticker-19-opponent"> 800 <img src="https://5starassets.blob.core.windows.net/app-sport-icons/12/aa9a4e04-8415-4f0e-81e5-fda8d3e7ef15_.png" class="ticker-19-opp-logo" alt="2A Mid East Regional" loading="lazy" /> 801 <span class="ticker-19-opp-name">at 2A Mid East Regional</span> 802 </div> 803 </div> 804 </div> 805 <button class="ticker-19-arrow ticker-19-arrow-right" aria-label="Next games"><i class="fa fa-chevron-right" aria-hidden="true"></i></button> 806 </div> 807 </div> 808 809 <!-- Results Panel --> 810 <div class="ticker-19-panel" id="ticker19-results" role="tabpanel" aria-labelledby="ticker19-res-btn" hidden> 811 <div class="ticker-19-scroll-container"> 812 <button class="ticker-19-arrow ticker-19-arrow-left" aria-label="Previous results"><i class="fa fa-chevron-left" aria-hidden="true"></i></button> 813 <div class="ticker-19-track results-slider-19"> 814 <div class="ticker-19-empty">No recent results</div> 815 </div> 816 <button class="ticker-19-arrow ticker-19-arrow-right" aria-label="Next results"><i class="fa fa-chevron-right" aria-hidden="true"></i></button> 817 </div> 818 </div> 819 </div> 820 </div> 821
821<script> 822 (function loadTicker() { 823 if (typeof jQuery !== 'undefined') { 824 var s = document.createElement('script'); 825 s.src = '/js/UpcomingEventsStyle19.js'; 826 document.body.appendChild(s); 827 } else { 828 setTimeout(loadTicker, 50); 829 } 830 })(); 831 </script>
831 832 833<!-- Mobile: collapsible mini schedule (future events only) --> 834 <div class="mobile-mini-sched" id="mobileMinSched" aria-label="Upcoming events" hidden> 835 <div class="mms-filter"> 836 <select id="mmsSportFilter" class="mms-sport-select" aria-label="Filter by sport"> 837 <option value="">All Sports</option> 838 <option value="Baseball">Baseball</option> 839 <option value="Basketball">Basketball</option> 840 <option value="Football">Football</option> 841 <option value="Golf">Golf</option> 842 <option value="Soccer">Soccer</option> 843 <option value="Tennis">Tennis</option> 844 <option value="Volleyball">Volleyball</option> 845 </select> 846 </div> 847 <div class="mms-events" id="mmsEvents" aria-live="polite"> 848 <div class="mms-event" data-sport="Soccer"> 849 <div class="mms-date"> 850 <span class="mms-month">OCT</span> 851 <span class="mms-day">5</span> 852 </div> 853 <div class="mms-info"> 854 <span class="mms-sport">Mens Soccer - Varsity</span> 855 <span class="mms-matchup"> 856 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="mms-logo" alt="" loading="lazy" /> 857 vs Voyager Academy 858 </span> 859 </div> 860 <div class="mms-right"> 861 <span class="mms-time">6:30 PM</span> 862 </div> 863 </div> 864 <div class="mms-event" data-sport="Volleyball"> 865 <div class="mms-date"> 866 <span class="mms-month">OCT</span> 867 <span class="mms-day">5</span> 868 </div> 869 <div class="mms-info"> 870 <span class="mms-sport">Womens Volleyball - Varsity</span> 871 <span class="mms-matchup"> 872 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="mms-logo" alt="" loading="lazy" /> 873 vs Raleigh Charter 874 </span> 875 </div> 876 <div class="mms-right"> 877 <span class="mms-time">4:30 PM</span> 878 </div> 879 </div> 880 <div class="mms-event" data-sport="Volleyball"> 881 <div class="mms-date"> 882 <span class="mms-month">OCT</span> 883 <span class="mms-day">5</span> 884 </div> 885 <div class="mms-info"> 886 <span class="mms-sport">Womens Volleyball - Varsity</span> 887 <span class="mms-matchup"> 888 <img src="https://5starassets.blob.core.windows.net/mascots/generics/5.png" class="mms-logo" alt="" loading="lazy" /> 889 vs Raleigh Charter 890 </span> 891 </div> 892 <div class="mms-right"> 893 <span class="mms-time">6:00 PM</span> 894 </div> 895 </div> 896 <div class="mms-event" data-sport="Football"> 897 <div class="mms-date"> 898 <span class="mms-month">OCT</span> 899 <span class="mms-day">8</span> 900 </div> 901 <div class="mms-info"> 902 <span class="mms-sport">Football - Varsity</span> 903 <span class="mms-matchup"> 904 <img src="https://5starassets.blob.core.windows.net/mascots/generics/1.png" class="mms-logo" alt="" loading="lazy" /> 905 vs Wake Prep Academy 906 </span> 907 </div> 908 <div class="mms-right">
909 <span class="mms-time">7:00 PM</span> 910 </div> 911 </div> 912 <div class="mms-event" data-sport="Soccer"> 913 <div class="mms-date"> 914 <span class="mms-month">OCT</span> 915 <span class="mms-day">12</span> 916 </div> 917 <div class="mms-info"> 918 <span class="mms-sport">Mens Soccer - Varsity</span> 919 <span class="mms-matchup"> 920 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="mms-logo" alt="" loading="lazy" /> 921 vs Research Triangle Charter Academy 922 </span> 923 </div> 924 <div class="mms-right"> 925 <span class="mms-time">6:30 PM</span> 926 </div> 927 </div> 928 <div class="mms-event" data-sport="Soccer"> 929 <div class="mms-date"> 930 <span class="mms-month">OCT</span> 931 <span class="mms-day">14</span> 932 </div> 933 <div class="mms-info"> 934 <span class="mms-sport">Mens Soccer - Varsity</span> 935 <span class="mms-matchup"> 936 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="mms-logo" alt="" loading="lazy" /> 937 at Roxboro Community 938 </span> 939 </div> 940 <div class="mms-right"> 941 <span class="mms-time">6:00 PM</span> 942 </div> 943 </div> 944 <div class="mms-event" data-sport="Soccer"> 945 <div class="mms-date"> 946 <span class="mms-month">OCT</span> 947 <span class="mms-day">16</span> 948 </div> 949 <div class="mms-info"> 950 <span class="mms-sport">Mens Soccer - Varsity</span> 951 <span class="mms-matchup"> 952 <img src="https://5starassets.blob.core.windows.net/mascots/generics/4.png" class="mms-logo" alt="" loading="lazy" /> 953 at NCSSM: Durham 954 </span> 955 </div> 956 <div class="mms-right"> 957 <span class="mms-time">6:00 PM</span> 958 </div> 959 </div> 960 <div class="mms-event" data-sport="Tennis"> 961 <div class="mms-date"> 962 <span class="mms-month">OCT</span> 963 <span class="mms-day">16</span> 964 </div> 965 <div class="mms-info"> 966 <span class="mms-sport">Womens Tennis - Varsity</span> 967 <span class="mms-matchup"> 968 <img src="https://5starassets.blob.core.windows.net/app-sport-icons/12/aa9a4e04-8415-4f0e-81e5-fda8d3e7ef15_.png" class="mms-logo" alt="" loading="lazy" /> 969 at 2A Mid East Regional 970 </span> 971 </div> 972 <div class="mms-right"> 973 <span class="mms-time">12:00 PM</span> 974 </div> 975 </div> 976 <div class="mms-event" data-sport="Football"> 977 <div class="mms-date"> 978 <span class="mms-month">OCT</span> 979 <span class="mms-day">16</span> 980 </div> 981 <div class="mms-info"> 982 <span class="mms-sport">Football - Varsity</span> 983 <span class="mms-matchup"> 984 <img src="https://5starassets.blob.core.windows.net/mascots/generics/1.png" class="mms-logo" alt="" loading="lazy" /> 985 vs Hobgood Charter 986 </span> 987 </div> 988 <div class="mms-right">
989 <span class="mms-time">7:00 PM</span> 990 </div> 991 </div> 992 <div class="mms-event" data-sport="Tennis"> 993 <div class="mms-date"> 994 <span class="mms-month">OCT</span> 995 <span class="mms-day">17</span> 996 </div> 997 <div class="mms-info"> 998 <span class="mms-sport">Womens Tennis - Varsity</span> 999 <span class="mms-matchup"> 1000 <img src="https://5starassets.blob.core.windows.net/app-sport-icons/12/aa9a4e04-8415-4f0e-81e5-fda8d3e7ef15_.png" class="mms-logo" alt="" loading="lazy" /> 1001 at 2A Mid East Regional 1002 </span> 1003 </div> 1004 <div class="mms-right"> 1005 <span class="mms-time">8:00 AM</span> 1006 </div> 1007 </div> 1008 </div> 1009 <a href="/calendar" class="mms-full-link"><i class="fa fa-calendar" aria-hidden="true"></i> Full Schedule</a> 1010 </div> 1011 1012<style> 1013 /* Game footnote (Homecoming, Senior Night, ...) under the matchup */ 1014 .ticker-19-footnote { 1015 font-size: 0.7rem; 1016 font-style: italic; 1017 font-weight: 600; 1018 color: #444; 1019 text-align: center; 1020 white-space: nowrap; 1021 overflow: hidden; 1022 text-overflow: ellipsis; 1023 max-width: 190px; 1024 margin: 1px auto 0; 1025 } 1026 1027 /* Auto-scroll card text that overflows its max-width (JS flags with .t19-marq) */ 1028 .ticker-19-sport.t19-marq, .ticker-19-opp-name.t19-marq { text-overflow: clip; } 1029 .t19-marq .t19-marq-inner { 1030 display: inline-block; 1031 white-space: nowrap; 1032 animation: t19-marq-slide var(--t19-marq-dur, 6s) ease-in-out infinite alternate; 1033 } 1034 .ticker-19-card:hover .t19-marq .t19-marq-inner, 1035 .ticker-19-card:focus-within .t19-marq .t19-marq-inner { animation-play-state: paused; } 1036 @keyframes t19-marq-slide { 1037 0%, 20% { transform: translateX(0); } 1038 80%, 100% { transform: translateX(var(--t19-marq-shift, 0px)); } 1039 } 1040 @media (prefers-reduced-motion: reduce) { 1041 .ticker-19-sport.t19-marq, .ticker-19-opp-name.t19-marq { text-overflow: ellipsis; } 1042 .t19-marq .t19-marq-inner { animation: none; } 1043 } 1044 1045 .mobile-cal-bar { display: none; } 1046 .mobile-mini-sched { display: none; } 1047 @media (max-width: 991px) { 1048 .ticker-19-section { display: none !important; } 1049 1050 /* Calendar bar: toggle + full schedule link */ 1051 .mobile-cal-bar { 1052 display: flex !important; 1053 align-items: center; 1054 justify-content: center; 1055 padding: 0; 1056 margin: 0; 1057 } 1058 .mcb-toggle { 1059 flex: 1; 1060 display: flex; 1061 align-items: center; 1062 justify-content: center; 1063 gap: 8px; 1064 color: #fff; 1065 background: transparent; 1066 border: none; 1067 font-size: 1.1rem; 1068 font-weight: 700; 1069 text-transform: uppercase; 1070 letter-spacing: 0.4px; 1071 padding: 8px 14px; 1072 cursor: pointer; 1073 } 1074 .mcb-caret { 1075 transition: transform 0.2s; 1076 font-size: 0.95rem; 1077 } 1078 .mcb-toggle[aria-expanded="true"] .mcb-caret { 1079 transform: rotate(180deg); 1080 } 1081 .mcb-full { 1082 display: flex; 1083 align-items: center; 1084 justify-content: center; 1085 padding: 8px 16px; 1086 color: rgba(255,255,255,0.9); 1087 text-decoration: none; 1088 border-left: 1px solid rgba(255,255,255,0.15); 1089 font-size: 1.05rem; 1090 } 1091 .mcb-full:hover { color: #fff; text-decoration: none; } 1092 1093 /* Mini schedule (collapsed by default) */ 1094 .mobile-mini-sched { 1095 background: #fff; 1096 border-bottom: 1px solid #e5e7eb; 1097 overflow: hidden; 1098 max-height: 0; 1099 transition: max-height 0.3s ease; 1100 } 1101 .mobile-mini-sched.mms-open { 1102 display: block; 1103 max-height: 1200px; 1104 } 1105 .mms-event { 1106 display: flex; 1107 align-items: center; 1108 gap: 14px; 1109 padding: 14px 16px;
1110 border-bottom: 1px solid #f0f0f0; 1111 } 1112 .mms-event:last-child { border-bottom: none; } 1113 .mms-date { 1114 display: flex; 1115 flex-direction: column; 1116 align-items: center; 1117 min-width: 56px; 1118 flex-shrink: 0; 1119 } 1120 .mms-month { 1121 font-size: 1rem; 1122 font-weight: 700; 1123 text-transform: uppercase; 1124 color: #444; 1125 line-height: 1; 1126 } 1127 .mms-day { 1128 font-size: 1.85rem; 1129 font-weight: 800; 1130 color: #000; 1131 line-height: 1.2; 1132 } 1133 .mms-info { 1134 flex: 1; 1135 min-width: 0; 1136 } 1137 .mms-sport { 1138 display: block; 1139 font-size: 1.05rem; 1140 font-weight: 700; 1141 text-transform: uppercase; 1142 color: #444; 1143 letter-spacing: 0.3px; 1144 } 1145 .mms-matchup { 1146 display: flex; 1147 align-items: center; 1148 gap: 8px; 1149 font-size: 1.2rem; 1150 font-weight: 700; 1151 color: #000; 1152 white-space: nowrap; 1153 overflow: hidden; 1154 text-overflow: ellipsis; 1155 } 1156 .mms-logo { 1157 width: 32px; 1158 height: 32px; 1159 object-fit: contain; 1160 border-radius: 50%; 1161 flex-shrink: 0; 1162 } 1163 .mms-right { 1164 flex-shrink: 0; 1165 text-align: right; 1166 } 1167 .mms-time { 1168 font-size: 1.15rem; 1169 font-weight: 600; 1170 color: #000; 1171 } 1172 .mms-filter { 1173 padding: 12px 16px; 1174 border-bottom: 1px solid #e5e7eb; 1175 } 1176 .mms-sport-select { 1177 width: 100%; 1178 padding: 12px 14px; 1179 font-size: 1.2rem; 1180 font-weight: 600; 1181 border: 1px solid #d1d5db; 1182 border-radius: 4px; 1183 background: #fff; 1184 color: #000; 1185 -webkit-appearance: menulist; 1186 } 1187 .mms-sport-select option { 1188 color: #000; 1189 background: #fff; 1190 font-size: 1.2rem; 1191 } 1192 .mms-full-link { 1193 display: flex; 1194 align-items: center; 1195 justify-content: center; 1196 gap: 10px; 1197 padding: 16px; 1198 font-size: 1.2rem; 1199 font-weight: 700; 1200 text-transform: uppercase; 1201 letter-spacing: 0.5px; 1202 color: #000; 1203 text-decoration: none; 1204 border-top: 1px solid #e5e7eb; 1205 } 1206 .mms-full-link:hover { color: #1a1a1a; text-decoration: none; } 1207 } 1208</style>
1209<script> 1210document.addEventListener('DOMContentLoaded', function () { 1211 var btn = document.getElementById('mcbToggle'); 1212 var sched = document.getElementById('mobileMinSched'); 1213 var calBar = document.querySelector('.mobile-cal-bar'); 1214 if (!btn || !sched || !calBar) return; 1215 1216 // Move the schedule right after the calendar bar so it expands downward 1217 calBar.parentNode.insertBefore(sched, calBar.nextSibling); 1218 1219 // Toggle expand/collapse 1220 btn.addEventListener('click', function () { 1221 var open = sched.classList.toggle('mms-open'); 1222 sched.hidden = !open; 1223 btn.setAttribute('aria-expanded', open ? 'true' : 'false'); 1224 }); 1225 1226 // Sport filter: fetch filtered events from server 1227 var filter = document.getElementById('mmsSportFilter'); 1228 var eventsContainer = document.getElementById('mmsEvents'); 1229 if (filter && eventsContainer) { 1230 filter.addEventListener('change', function () { 1231 var sport = this.value; 1232 eventsContainer.style.opacity = '0.5'; 1233 fetch('/api/mobile-events?sport=' + encodeURIComponent(sport)) 1234 .then(function (r) { return r.json(); }) 1235 .then(function (events) { 1236 var html = ''; 1237 events.forEach(function (g) { 1238 html += '<div class="mms-event" data-sport="' + (g.sport || '') + '">' 1239 + '<div class="mms-date"><span class="mms-month">' + g.month + '</span><span class="mms-day">' + g.day + '</span></div>' 1240 + '<div class="mms-info"><span class="mms-sport">' + g.sportLabel + '</span>' 1241 + '<span class="mms-matchup">' 1242 + (g.opponentLogo ? '<img src="' + g.opponentLogo + '" class="mms-logo" alt="" loading="lazy" />' : '') 1243 + g.matchup + '</span></div>' 1244 + '<div class="mms-right"><span class="mms-time">' + g.time + '</span></div></div>'; 1245 }); 1246 eventsContainer.innerHTML = html || '<div style="padding:18px;text-align:center;color:#555;font-size:1rem;font-weight:500;">No upcoming events</div>'; 1247 eventsContainer.style.opacity = '1'; 1248 }) 1249 .catch(function () { eventsContainer.style.opacity = '1'; }); 1250 }); 1251 } 1252}); 1253</script>
1253 1254 1255 1256 <input type="hidden" value="2636178" id="schoolId" /> 1257 <input type="hidden" value="true" id="customAppSchool" /> 1258 <input type="hidden" value="6/7/2023 12:00:00 AM" id="adServingDateBegins" /> 1259 <header> 1260 1261 1262 1263 <div class="row"> 1264 <div class="col-md-12"> 1265 1266 </div> 1267 </div> 1268 <div class="header-topper"> 1269 <div class="row"> 1270 <h1 class="site-title"><small> <i>THE OFFICIAL SITE OF </i></small><br /><i>Triangle Math and Science Academy Athletics</i></h1> 1271 </div> 1272 </div> 1273 <div class="row"> 1274 <div class="col-md-12"> 1275 <div class="main-menu-container bg-primary" id="fixedscroll"> 1276 <div class="fixed-menu-container"> 1277 <div class="header-social-media"> 1278 <div class="feed-wrapper"> 1279 <a href="https://www.facebook.com/groups/415203722899282/" target="_blank" rel="noopener" aria-label="Visit our Facebook page"> 1280 <i class="fa fa-facebook text-primary-font" aria-hidden="true"></i> 1281 <span class="sr-only">Facebook</span> 1282 </a> 1283 <a href="https://www.instagram.com/tmsa_tiger_athletics/" target="_blank" rel="noopener" aria-label="Visit our Instagram page"> 1284 <i class="fa fa-instagram text-primary-font" aria-hidden="true"></i> 1285 <span class="sr-only">Instagram</span> 1286 </a> 1287 <a href="https://twitter.com/tmsathletics" target="_blank" rel="noopener" aria-label="Visit our X page"> 1288 <i class="fa fa-twitter text-primary-font" aria-hidden="true"></i> 1289 <span class="sr-only">X</span> 1290 </a> 1291</div> 1292 1293 </div> 1294 <div id="center"> 1295 <div class="header-gfx border-right-xl-secondary"> 1296 <a href="/" aria-label="Return to TMSA Home Page" tabindex="0"> 1297 <img src="https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/6acd1123-94d5-4039-856d-23f231d45ffb.png" aria-label="TMSA" alt="TMSA Logo" /> 1298 <span class="mk-blank">-</span> 1299 </a> 1300 </div> 1301 1302 <div class="primary-line border-right-xl-primary"></div> 1303 </div> 1304 <div class=""> 1305 1306 <nav class="custom-nav" role="navigation" aria-label="Main Navigation" data-sponsor-model="true"> 1307 <div class="navbar yamm navbar-static-top"> 1308 <div class="container" id="nav-container"> 1309 <div class="navbar-header"> 1310 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 1311 <span class="sr-only">Toggle navigation</span> 1312 <span class="icon-bar bg-secondary"></span> 1313 <span class="icon-bar bg-secondary"></span> 1314 <span class="icon-bar bg-secondary"></span> 1315 </button> 1316 <a class="navbar-brand" href="/" aria-label="Return to TMSA Home Page"> 1317 <img src="https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/fe44320c-d909-4fb7-abe6-5193f330861e.png" class="img-responsive tag" aria-label="TMSA Logo" alt="TMSA Logo" /> 1318 </a> 1319 <div class="presenting-sponsor hidden-md hidden-lg"> 1320 <div class="adzone adzone-0 presenting-sponsor"> 1321 <div class="ad-placement"> 1322 <div id='gam-presenting-sponsor-mobile' class="gam_ps"></div> 1323 </div> 1324 1325 </div> 1326 </div> 1327 </div> 1328 <div id="navbar" class="navbar-collapse collapse" aria-expanded="false"> 1329 <ul class="nav navbar-nav" id="nav-links" role="menubar"> 1330 1331 <li role="presentation"> 1332 <a class="slanted-btn text-primary-font" href="/sponsors" role="menuitem" tabindex="0"><span>
1332Sponsors</span></a> 1333 </li> 1334 <li class="dropdown yamm-fw" role="presentation"> 1335 <a href="#" data-toggle="dropdown" class="dropdown-toggle text-primary-font" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0">SPORTS</a> 1336 <ul id="dropdown2" class="dropdown-menu two-columns" role="menu"> 1337 <li role="menuitem"> 1338 <div class="sport-link-nfo"> 1339 <div class="row"> 1340 <div class="col-xs-12 col-sm-6"> 1341 <div class="link"> 1342 <a class="text-primary" href="/sport/baseball/mens/" role="menuitem" tabindex="0" aria-label="Baseball go to Main Team Page">BASEBALL</a> 1343 </div> 1344 </div> 1345 <div class="hidden-xs col-sm-6"> 1346 <div class="nfo"> 1347 <a class="text-primary" href="/sport/baseball/mens/?tab=schedule" role="menuitem" aria-label="Baseball - Schedules" tabindex="0">Schedules</a><span> /</span> 1348 <a class="text-primary" href="/sport/baseball/mens/?tab=roster" role="menuitem" aria-label="Baseball - Rosters" tabindex="0">Rosters</a><span> /</span> 1349 <a class="text-primary" href="/sport/baseball/mens/?tab=news" role="menuitem" aria-label="Baseball - News" tabindex="0">News</a> 1350 </div> 1351 </div> 1352 </div> 1353 </div> 1354 </li> 1355 <li role="menuitem"> 1356 <div class="sport-link-nfo"> 1357 <div class="row"> 1358 <div class="col-xs-12 col-sm-6"> 1359 <div class="link"> 1360 <a class="text-primary" href="/sport/basketball/boys/" role="menuitem" tabindex="0" aria-label="Basketball(Boys) go to Main Team Page">BASKETBALL(BOYS)</a> 1361 </div> 1362 </div> 1363 <div class="hidden-xs col-sm-6"> 1364 <div class="nfo"> 1365 <a class="text-primary" href="/sport/basketball/boys/?tab=schedule" role="menuitem" aria-label="Basketball(Boys) - Schedules" tabindex="0">Schedules</a><span> /</span> 1366 <a class="text-primary" href="/sport/basketball/boys/?tab=roster" role="menuitem" aria-label="Basketball(Boys) - Rosters" tabindex="0">Rosters</a><span> /</span> 1367 <a class="text-primary" href="/sport/basketball/boys/?tab=news" role="menuitem" aria-label="Basketball(Boys) - News" tabindex="0">News</a> 1368 </div> 1369 </div> 1370 </div> 1371 </div> 1372 </li> 1373 <li role="menuitem"> 1374 <div class="sport-link-nfo"> 1375 <div class="row"> 1376 <div class="col-xs-12 col-sm-6"> 1377 <div class="link"> 1378 <a class="text-primary" href="/sport/basketball/girls/" role="menuitem" tabindex="0" aria-label="Basketball(Girls) go to Main Team Page">BASKETBALL(GIRLS)</a> 1379 </div> 1380 </div> 1381 <div class="hidden-xs col-sm-6"> 1382 <div class="nfo"> 1383 <a class="text-primary" href="/sport/basketball/girls/?tab=schedule" role="menuitem" aria-label="Basketball(Girls) - Schedules" tabindex="0">Schedules</a><span> /</span> 1384 <a class="text-primary" href="/sport/basketball/girls/?tab=roster" role="menuitem" aria-label="Basketball(Girls) - Rosters" tabindex="0">Rosters</a><span> /</span> 1385 <a class="text-primary" href="/sport/basketball/girls/?tab=news" role="menuitem" aria-label="Basketball(Girls) - News" tabindex="0">News</a> 1386 </div> 1387 </div> 1388 </div> 1389 </div> 1390 </li> 1391 <li role="menuitem"> 1392 <div class="sport-link-nfo"> 1393 <div class="row"> 1394 <div class="col-xs-12 col-sm-6"> 1395 <div class="link"> 1396 <a class="text-primary" href="/sport/basketball/mens/" role="menuitem" tabindex="0" aria-label="Basketball(Mens) go to Main Team Page">BASKETBALL(MENS)</a> 1397 </div> 1398 </div> 1399 <div class="hidden-xs col-sm-6"> 1400 <div class="nfo"> 1401 <a class="text-primary" href="/sport/basketball/mens/?tab=schedule" role="menuitem" aria-label="Basketball(Mens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1402 <a class="text-primary" href="/sport/basketball/mens/?tab=roster" role="menuitem" aria-label="Basketball(Mens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1403 <a class="text-primary" href="/sport/basketball/mens/?tab=news" role="menuitem" aria-label="Basketball(Mens) - News" tabindex="0">News</a> 1404 </div> 1405 </div> 1406 </div> 1407 </div> 1408 </li> 1409 <li role="menuitem"> 1410 <div class="sport-link-nfo"> 1411 <div class="row"> 1412 <div class="col-xs-12 col-sm-6"> 1413 <div class="link"> 1414 <a class="text-primary" href="/sport/basketball/womens/" role="menuitem" tabindex="0" aria-label="Basketball(Womens) go to Main Team Page">BASKETBALL(WOMENS)</a> 1415 </div> 1416 </div> 1417 <div class="hidden-xs col-sm-6"> 1418 <div class="nfo"> 1419 <a class="text-primary" href="/sport/basketball/womens/?tab=schedule" role="menuitem" aria-label="Basketball(Womens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1420 <a class="text-primary" href="/sport/basketball/womens/?tab=roster" role="menuitem" aria-label="Basketball(Womens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1421 <a class="text-primary" href="/sport/basketball/womens/?tab=news" role="menuitem" aria-label="Basketball(Womens) - News" tabindex="0">News</a> 1422 </div> 1423 </div> 1424 </div> 1425 </div> 1426 </li> 1427 <li role="menuitem"> 1428 <div class="sport-link-nfo"> 1429 <div class="row"> 1430 <div class="col-xs-12 col-sm-6"> 1431 <div class="link"> 1432 <a class="text-primary" href="/sport/football/boys/" role="menuitem" tabindex="0" aria-label="Football go to Main Team Page">FOOTBALL</a> 1433 </div> 1434 </div> 1435 <div class="hidden-xs col-sm-6"> 1436 <div class="nfo"> 1437 <a class="text-primary" href="/sport/football/boys/?tab=schedule" role="menuitem" aria-label="Football - Schedules" tabindex="0">Schedules</a><span> /</span> 1438 <a class="text-primary" href="/sport/football/boys/?tab=roster" role="menuitem" aria-label="Football - Rosters" tabindex="0">Rosters</a><span> /</span> 1439 <a class="text-primary" href="/sport/football/boys/?tab=news" role="menuitem" aria-label="Football - News" tabindex="0">News</a> 1440 </div> 1441 </div> 1442 </div> 1443 </div> 1444 </li> 1445 <li role="menuitem"> 1446 <div class="sport-link-nfo"> 1447 <div class="row"> 1448 <div class="col-xs-12 col-sm-6"> 1449 <div class="link"> 1450 <a class="text-primary" href="/sport/football/boys/" role="menuitem" tabindex="0" aria-label="Football(Boys) go to Main Team Page">FOOTBALL(BOYS)</a> 1451 </div> 1452 </div> 1453 <div class="hidden-xs col-sm-6"> 1454 <div class="nfo"> 1455 <a class="text-primary" href="/sport/football/boys/?tab=schedule" role="menuitem" aria-label="Football(Boys) - Schedules" tabindex="0">Schedules</a><span> /</span> 1456 <a class="text-primary" href="/sport/football/boys/?tab=roster" role="menuitem" aria-label="Football(Boys) - Rosters" tabindex="0">Rosters</a><span> /</span> 1457 <a class="text-primary" href="/sport/football/boys/?tab=news" role="menuitem" aria-label="Football(Boys) - News" tabindex="0">News</a> 1458 </div> 1459 </div> 1460 </div> 1461 </div> 1462 </li> 1463 <li role="menuitem"> 1464 <div class="sport-link-nfo"> 1465 <div class="row"> 1466 <div class="col-xs-12 col-sm-6"> 1467 <div class="link"> 1468 <a class="text-primary" href="/sport/golf/mens/" role="menuitem" tabindex="0" aria-label="Golf(Mens) go to Main Team Page">GOLF(MENS)</a> 1469 </div> 1470 </div> 1471 <div class="hidden-xs col-sm-6"> 1472 <div class="nfo"> 1473 <a class="text-primary" href="/sport/golf/mens/?tab=schedule" role="menuitem" aria-label="Golf(Mens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1474 <a class="text-primary" href="/sport/golf/mens/?tab=roster" role="menuitem" aria-label="Golf(Mens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1475 <a class="text-primary" href="/sport/golf/mens/?tab=news" role="menuitem" aria-label="Golf(Mens) - News" tabindex="0">News</a> 1476 </div> 1477 </div> 1478 </div> 1479 </div> 1480 </li> 1481 <li role="menuitem"> 1482 <div class="sport-link-nfo"> 1483 <div class="row"> 1484 <div class="col-xs-12 col-sm-6"> 1485 <div class="link"> 1486 <a class="text-primary" href="/sport/soccer/boys/" role="menuitem" tabindex="0" aria-label="Soccer(Boys) go to Main Team Page">SOCCER(BOYS)</a> 1487 </div> 1488 </div> 1489 <div class="hidden-xs col-sm-6"> 1490 <div class="nfo"> 1491 <a class="text-primary" href="/sport/soccer/boys/?tab=schedule" role="menuitem" aria-label="Soccer(Boys) - Schedules" tabindex="0">Schedules</a><span> /</span> 1492
1492 <a class="text-primary" href="/sport/soccer/boys/?tab=roster" role="menuitem" aria-label="Soccer(Boys) - Rosters" tabindex="0">Rosters</a><span> /</span> 1493 <a class="text-primary" href="/sport/soccer/boys/?tab=news" role="menuitem" aria-label="Soccer(Boys) - News" tabindex="0">News</a> 1494 </div> 1495 </div> 1496 </div> 1497 </div> 1498 </li> 1499 <li role="menuitem"> 1500 <div class="sport-link-nfo"> 1501 <div class="row"> 1502 <div class="col-xs-12 col-sm-6"> 1503 <div class="link"> 1504 <a class="text-primary" href="/sport/soccer/girls/" role="menuitem" tabindex="0" aria-label="Soccer(Girls) go to Main Team Page">SOCCER(GIRLS)</a> 1505 </div> 1506 </div> 1507 <div class="hidden-xs col-sm-6"> 1508 <div class="nfo"> 1509 <a class="text-primary" href="/sport/soccer/girls/?tab=schedule" role="menuitem" aria-label="Soccer(Girls) - Schedules" tabindex="0">Schedules</a><span> /</span> 1510 <a class="text-primary" href="/sport/soccer/girls/?tab=roster" role="menuitem" aria-label="Soccer(Girls) - Rosters" tabindex="0">Rosters</a><span> /</span> 1511 <a class="text-primary" href="/sport/soccer/girls/?tab=news" role="menuitem" aria-label="Soccer(Girls) - News" tabindex="0">News</a> 1512 </div> 1513 </div> 1514 </div> 1515 </div> 1516 </li> 1517 <li role="menuitem"> 1518 <div class="sport-link-nfo"> 1519 <div class="row"> 1520 <div class="col-xs-12 col-sm-6"> 1521 <div class="link"> 1522 <a class="text-primary" href="/sport/soccer/mens/" role="menuitem" tabindex="0" aria-label="Soccer(Mens) go to Main Team Page">SOCCER(MENS)</a> 1523 </div> 1524 </div> 1525 <div class="hidden-xs col-sm-6"> 1526 <div class="nfo"> 1527 <a class="text-primary" href="/sport/soccer/mens/?tab=schedule" role="menuitem" aria-label="Soccer(Mens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1528 <a class="text-primary" href="/sport/soccer/mens/?tab=roster" role="menuitem" aria-label="Soccer(Mens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1529 <a class="text-primary" href="/sport/soccer/mens/?tab=news" role="menuitem" aria-label="Soccer(Mens) - News" tabindex="0">News</a> 1530 </div> 1531 </div> 1532 </div> 1533 </div> 1534 </li> 1535 <li role="menuitem"> 1536 <div class="sport-link-nfo"> 1537 <div class="row"> 1538 <div class="col-xs-12 col-sm-6"> 1539 <div class="link"> 1540 <a class="text-primary" href="/sport/soccer/womens/" role="menuitem" tabindex="0" aria-label="Soccer(Womens) go to Main Team Page">SOCCER(WOMENS)</a> 1541 </div> 1542 </div> 1543 <div class="hidden-xs col-sm-6"> 1544 <div class="nfo"> 1545 <a class="text-primary" href="/sport/soccer/womens/?tab=schedule" role="menuitem" aria-label="Soccer(Womens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1546 <a class="text-primary" href="/sport/soccer/womens/?tab=roster" role="menuitem" aria-label="Soccer(Womens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1547 <a class="text-primary" href="/sport/soccer/womens/?tab=news" role="menuitem" aria-label="Soccer(Womens) - News" tabindex="0">News</a> 1548 </div> 1549 </div> 1550 </div> 1551 </div> 1552 </li> 1553 <li role="menuitem"> 1554 <div class="sport-link-nfo"> 1555 <div class="row"> 1556 <div class="col-xs-12 col-sm-6"> 1557 <div class="link"> 1558 <a class="text-primary" href="/sport/tennis/mens/" role="menuitem" tabindex="0" aria-label="Tennis(Mens) go to Main Team Page">TENNIS(MENS)</a> 1559 </div> 1560 </div> 1561 <div class="hidden-xs col-sm-6"> 1562 <div class="nfo"> 1563 <a class="text-primary" href="/sport/tennis/mens/?tab=schedule" role="menuitem" aria-label="Tennis(Mens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1564 <a class="text-primary" href="/sport/tennis/mens/?tab=roster" role="menuitem" aria-label="Tennis(Mens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1565 <a class="text-primary" href="/sport/tennis/mens/?tab=news" role="menuitem" aria-label="Tennis(Mens) - News" tabindex="0">News</a> 1566 </div> 1567 </div> 1568 </div> 1569 </div> 1570 </li> 1571 <li role="menuitem"> 1572 <div class="sport-link-nfo"> 1573 <div class="row"> 1574 <div class="col-xs-12 col-sm-6"> 1575 <div class="link"> 1576 <a class="text-primary" href="/sport/tennis/womens/" role="menuitem" tabindex="0" aria-label="Tennis(Womens) go to Main Team Page">TENNIS(WOMENS)</a> 1577 </div> 1578 </div> 1579 <div class="hidden-xs col-sm-6"> 1580 <div class="nfo"> 1581 <a class="text-primary" href="/sport/tennis/womens/?tab=schedule" role="menuitem" aria-label="Tennis(Womens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1582 <a class="text-primary" href="/sport/tennis/womens/?tab=roster" role="menuitem" aria-label="Tennis(Womens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1583 <a class="text-primary" href="/sport/tennis/womens/?tab=news" role="menuitem" aria-label="Tennis(Womens) - News" tabindex="0">News</a> 1584 </div> 1585 </div> 1586 </div> 1587 </div> 1588 </li> 1589 <li role="menuitem"> 1590 <div class="sport-link-nfo"> 1591 <div class="row"> 1592 <div class="col-xs-12 col-sm-6"> 1593 <div class="link"> 1594 <a class="text-primary" href="/sport/volleyball/girls/" role="menuitem" tabindex="0" aria-label="Volleyball(Girls) go to Main Team Page">VOLLEYBALL(GIRLS)</a> 1595 </div> 1596 </div> 1597 <div class="hidden-xs col-sm-6"> 1598 <div class="nfo"> 1599 <a class="text-primary" href="/sport/volleyball/girls/?tab=schedule" role="menuitem" aria-label="Volleyball(Girls) - Schedules" tabindex="0">Schedules</a><span> /</span> 1600 <a class="text-primary" href="/sport/volleyball/girls/?tab=roster" role="menuitem" aria-label="Volleyball(Girls) - Rosters" tabindex="0">Rosters</a><span> /</span> 1601 <a class="text-primary" href="/sport/volleyball/girls/?tab=news" role="menuitem" aria-label="Volleyball(Girls) - News" tabindex="0">News</a> 1602 </div> 1603 </div> 1604 </div> 1605 </div> 1606 </li> 1607 <li role="menuitem"> 1608 <div class="sport-link-nfo"> 1609 <div class="row"> 1610 <div class="col-xs-12 col-sm-6"> 1611 <div class="link"> 1612 <a class="text-primary" href="/sport/volleyball/mens/" role="menuitem" tabindex="0" aria-label="Volleyball(Mens) go to Main Team Page">VOLLEYBALL(MENS)</a> 1613 </div> 1614 </div> 1615 <div class="hidden-xs col-sm-6"> 1616 <div class="nfo"> 1617 <a class="text-primary" href="/sport/volleyball/mens/?tab=schedule" role="menuitem" aria-label="Volleyball(Mens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1618 <a class="text-primary" href="/sport/volleyball/mens/?tab=roster" role="menuitem" aria-label="Volleyball(Mens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1619 <a class="text-primary" href="/sport/volleyball/mens/?tab=news" role="menuitem" aria-label="Volleyball(Mens) - News" tabindex="0">News</a> 1620 </div> 1621 </div> 1622 </div> 1623 </div> 1624 </li> 1625 <li role="menuitem"> 1626 <div class="sport-link-nfo"> 1627 <div class="row"> 1628 <div class="col-xs-12 col-sm-6"> 1629 <div class="link"> 1630 <a class="text-primary" href="/sport/volleyball/womens/" role="menuitem" tabindex="0" aria-label="Volleyball(Womens) go to Main Team Page">VOLLEYBALL(WOMENS)</a> 1631 </div> 1632 </div> 1633 <div class="hidden-xs col-sm-6"> 1634 <div class="nfo"> 1635 <a class="text-primary" href="/sport/volleyball/womens/?tab=schedule" role="menuitem" aria-label="Volleyball(Womens) - Schedules" tabindex="0">Schedules</a><span> /</span> 1636 <a class="text-primary" href="/sport/volleyball/womens/?tab=roster" role="menuitem" aria-label="Volleyball(Womens) - Rosters" tabindex="0">Rosters</a><span> /</span> 1637 <a class="text-primary" href="/sport/volleyball/womens/?tab=news" role="menuitem" aria-label="Volleyball(Womens) - News" tabindex="0">News</a> 1638 </div> 1639 </div> 1640 </div> 1641 </div> 1642 </li> 1643 </ul> 1644 </li> 1645 <li class="dropdown" role="presentation"> 1646 <a href="#" class="dropdown-toggle dropdown-text text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0"> 1647 ATHLETIC FORMS 1648 </a> 1649 <ul class="dropdown-menu two-columns dr-text" role="menu"> 1650 <li role="presentation"> 1651 <a class="text-primary" style="padding:10px" href="https://max.dragonflyathletics.com/maxweb/max-cover/login" role="menuitem" tabindex="0" aria-label="DragonFly (Sign-Up) (opens in a new tab
1651)">DragonFly (Sign-Up)</a> 1652 </li> 1653 <li role="presentation"> 1654 <a class="text-primary" style="padding:10px" href="https://www.dragonflymax.com/academy/parents" role="menuitem" tabindex="0" aria-label="The Parent's Guide to DragonFly (opens in a new tab)">The Parent's Guide to DragonFly</a> 1655 </li> 1656 </ul> 1657 </li> 1658 <li class="dropdown" role="presentation"> 1659 <a href="#" class="dropdown-toggle dropdown-text text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0"> 1660 STUDENTS/PARENTS 1661 </a> 1662 <ul class="dropdown-menu two-columns dr-text" role="menu"> 1663 <li role="presentation"> 1664 <a class="text-primary" style="padding:10px" href="https://docs.google.com/document/d/1u5jMHyXG1i-plq-okZqa9tnvkT_LNJcQLVT-iQ7jDsU/edit?usp=sharing" role="menuitem" tabindex="0" aria-label="Athletics Code of Conduct (opens in a new tab)">Athletics Code of Conduct</a> 1665 </li> 1666 <li role="presentation"> 1667 <a class="text-primary" style="padding:10px" href="https://docs.google.com/document/d/1Kdp7IBEf_sfrRgy6-VJKrSEaV2l6fZgp/edit" role="menuitem" tabindex="0" aria-label="Important Athletic Information (opens in a new tab)">Important Athletic Information</a> 1668 </li> 1669 <li role="presentation"> 1670 <a class="text-primary" style="padding:10px" href="/mission-and-vision" role="menuitem" tabindex="0">Mission and Vision</a> 1671 </li> 1672 <li role="presentation"> 1673 <a class="text-primary" style="padding:10px" href="/required-student-athlete-education-vi
1673deos" role="menuitem" tabindex="0">Required Student-Athlete Education Videos</a> 1674 </li> 1675 <li role="presentation"> 1676 <a class="text-primary" style="padding:10px" href="/required-parent-education-videos" role="menuitem" tabindex="0">Required Parent Education Videos</a> 1677 </li> 1678 <li role="presentation"> 1679 <a class="text-primary" style="padding:10px" href="/nchsaa-information" role="menuitem" tabindex="0">NCHSAA Information</a> 1680 </li> 1681 <li role="presentation"> 1682 <a class="text-primary" style="padding:10px" href="https://docs.google.com/document/d/1OJOAj-F5OxDord7oceS0UZEcEW9ELWjeJpiO0AMKbYw/edit?usp=sharing" role="menuitem" tabindex="0" aria-label="Varsity Lettering (opens in a new tab)">Varsity Lettering</a> 1683 </li> 1684 <li role="presentation"> 1685 <a class="text-primary" style="padding:10px" href="https://www.jostens.com/apps/store/productDetail/2767325/Triangle-Math-and-Science-Academy-High-School/-/1174894562/CATALOG_REPOSITORY/WEB-Version/1882867269/" role="menuitem" tabindex="0" aria-label="Varsity Letter Jackets (opens in a new tab)">Varsity Letter Jackets</a> 1686 </li> 1687 <li role="presentation"> 1688 <a class="text-primary" style="padding:10px" href="http://fs.ncaa.org/Docs/eligibility_center/Student_Resources/CBSA.pdf" role="menuitem" tabindex="0" aria-label="NCAA Guide for the College-Bound Student-Athlete (opens in a new tab)">NCAA Guide for the College-Bound Student-Athlete</a> 1689 </li> 1690 <li role="presentation"> 1691 <a class="text-primary" style="padding:10px" href="https://cdn1.sportngin.com/attachments/document/9503-1787554/NCAA__Initial-Eligibility_Brochure.pdf#_ga=2.200515304.755742196.1655132360-749786580.1654716455" role="menuitem" tabindex="0" aria-label="NCAA Eligibility Brochure (opens in a new tab)">NCAA Eligibility Brochure</a> 1692 </li> 1693 <li role="presentation"> 1694 <a class="text-primary" style="padding:10px" href="https://web3.ncaa.org/hsportal/exec/homeAction" role="menuitem" tabindex="0" aria-label="NCAA ELIGIBILITY CENTER (HIGH SCHOOL PORTAL) (opens in a new tab)">NCAA ELIGIBILITY CENTER (HIGH SCHOOL PORTAL)</a> 1695 </li> 1696 <li role="presentation"> 1697 <a class="text-primary" style="padding:10px" href="/sportsmanship-video" role="menuitem" tabindex="0">Sportsmanship Video</a> 1698 </li> 1699 <li role="presentation"> 1700 <a class="text-primary" style="padding:10px" href="/tmsa-spirit-store" role="menuitem" tabindex="0">TMSA Spirit Store</a> 1701 </li> 1702 <li role="presentation"> 1703 <a class="text-primary" style="padding:10px" href="/athletics-newsletter" role="menuitem" tabindex="0">Athletics Newsletter</a> 1704 </li> 1705 </ul> 1706 </li> 1707 <li class="dropdown" role="presentation"> 1708 <a href="#" class="dropdown-toggle dropdown-text text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0"> 1709 TICKETING 1710 </a> 1711 <ul class="dropdown-menu two-columns dr-text" role="menu"> 1712 <li role="presentation"> 1713 <a class="text-primary" style="padding:10px" href="https://gofan.co/app/school/NC86475" role="menuitem" tabindex="0" aria-label="Tickets (opens in a new tab)">Tickets</a> 1714 </li> 1715 </ul> 1716 </li> 1717 <li class="dropdown" role="presentation"> 1718 <a href="#" class="dropdown-toggle dropdown-text text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0"> 1719 INSIDE ATHLETICS 1720 </a> 1721 <ul class="dropdown-menu two-columns dr-text" role="menu"> 1722 <li role="presentation"> 1723 <a class="text-primary" style="padding:10px" href="/news" role="menuitem" tabindex="0">NEWS</a> 1724 </li> 1725 <li role="presentation"> 1726 <a class="text-primary" style="padding:10px" href="/directory" role="menuitem" tabindex="0">Staff Directory</a> 1727 </li> 1728 <li role="presentation"> 1729 <a class="text-primary" style="padding:10px" href="/photos" role="menuitem" tabindex="0">PHOTOS</a> 1730 </li> 1731 <li role="presentation"> 1732 <a class="text-primary" style="padding:10px" href="https://www.maxpreps.com/nc/cary/triangle-math-and-science-tigers/" role="menuitem" tabindex="0" aria-label="MaxPreps (opens in a new tab)">MaxPreps</a> 1733 </li> 1734 <li role="presentation"> 1735 <a class="text-primary" style="padding:10px" href="/facilities" role="menuitem" tabindex="0">FACILITIES</a> 1736 </li> 1737 <li role="presentation"> 1738 <a class="text-primary" style="padding:10px" href="/socialmedia" role="menuitem" tabindex="0">SOCIAL MEDIA</a> 1739 </li> 1740 <li role="presentation"> 1741 <a class="text-primary" style="padding:10px" href="/broadcasts" role="menuitem" tabindex="0">BROADCASTS</a> 1742 </li> 1743 <li role="presentation"> 1744 <a class="text-primary" style="padding:10px" href="/championships" role="menuitem" tabindex="0">CHAMPIONSHIPS</a> 1745 </li> 1746 <li role="presentation"> 1747 <a class="text-primary" style="padding:10px" href="/alumni" role="menuitem" tabindex="0">ALUMNI</a> 1748 </li> 1749 <li role="presentation"> 1750 <a class="text-primary" style="padding:10px" href="/boosterclub" role="menuitem" tabindex="0">BOOSTER CLUB</a> 1751 </li> 1752 <li role="presentation"> 1753 <a class="text-primary" style="padding:10px" href="/tmsa-sponsorship-opportunities" role="menuitem" tabindex="0">
1753TMSA Sponsorship Opportunities</a> 1754 </li> 1755 <li role="presentation"> 1756 <a class="text-primary" style="padding:10px" href="/student-athletes-of-the-week" role="menuitem" tabindex="0">Student-Athletes of the Week</a> 1757 </li> 1758 </ul> 1759 </li> 1760 <li class="dropdown" role="presentation"> 1761 <a href="#" class="dropdown-toggle dropdown-text text-primary-font" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false" tabindex="0"> 1762 ACADEMICS 1763 </a> 1764 <ul class="dropdown-menu two-columns dr-text" role="menu"> 1765 <li role="presentation"> 1766 <a class="text-primary" style="padding:10px" href="/academics" role="menuitem" tabindex="0">ACADEMICS</a> 1767 </li> 1768 </ul> 1769 </li> 1770 <li id="more" class="hidden" role="presentation"> 1771 <a class="dropdown-toggle text-primary-font" data-toggle="dropdown" aria-haspopup="true" href="#" role="menuitem" aria-expanded="false" tabindex="0"> 1772 More <span class="caret"></span> 1773 </a> 1774 <ul class="dropdown-menu dropdown-menu-right" role="menu"></ul> 1775 </li> 1776 </ul> 1777 1778 <div class="presenting-sponsor-mobile-menu hidden-sm hidden-xs"> 1779 <div class="adzone adzone-0 presenting-sponsor"> 1780 <div class="ad-placement"> 1781 <div id='gam-presenting-sponsor-2' class="gam-presenting-sponsor-2"></div> 1782 </div> 1783 1784 </div> 1785 </div> 1786 </div> 1787 </div> 1788 </div> 1789 <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> 1790</nav> 1791 1792<!--Centerville--> 1793 1794 1795 </div> 1796 <div class="clearfix"></div> 1797 </div> 1798 </div> 1799 </div> 1800 </div> 1801 <div class="row"> 1802 <div class="col-md-12"> 1803 1804 </div> 1805 </div> 1806 </header> 1807 <div class="banner-ad-container-sticky-footer"> 1808 <div class="banner-ad"> 1809 <div class="banner"> 1810 <div class="row"> 1811 <div class="col-md-12 col-sm-12"> 1812 <div class="ad-placement"> 1813 <div id='gam-banner-ad' class="gam-banner-ad"> 1814
1814<script> 1815 googletag.cmd.push(function () { googletag.display('gam-banner-ad'); }); 1816 </script>
1816 1817 </div> 1818 </div> 1819 </div> 1820 </div> 1821</div> 1822 1823 </div> 1824 </div> 1825 1826 1827<link rel="stylesheet" href="/less/Components/AppDownloadCta.min.css" /> 1828 1829<div class="app-download-cta" id="appDownloadCta" role="region" aria-labelledby="appDownloadCtaTitle"> 1830 <button type="button" class="app-download-cta__close" id="appDownloadCtaClose" aria-label="Close">Ã</button> 1831 <div class="app-download-cta__icon" aria-hidden="true">ð±</div> 1832 <div class="app-download-cta__title" id="appDownloadCtaTitle"> 1833 Stay connected with <em>TMSA</em> athletics 1834 </div> 1835 <div class="app-download-cta__body"> 1836 Get scores, schedules, and live streaming notifications. 1837 </div> 1838 <div class="app-download-cta__buttons"> 1839 <a href="https://apps.apple.com/us/app/tmsa-athletics/id1623888200" target="_blank" rel="noopener" aria-label="Download on the App Store"> 1840 <img src="/images/dl-apple.png" alt="Download on the App Store" /> 1841 </a> 1842 <a href="https://play.google.com/store/apps/details?id=mm.nctriangleacademy" target="_blank" rel="noopener" aria-label="Get it on Google Play"> 1843 <img src="/images/dl-google.png" alt="Get it on Google Play" /> 1844 </a> 1845 </div> 1846 <button type="button" class="app-download-cta__dismiss" id="appDownloadCtaHaveIt"> 1847 I already have it 1848 </button> 1849</div> 1850
1851<script> 1852 (function () { 1853 var el = document.getElementById('appDownloadCta'); 1854 if (!el) return; 1855 1856 var SHOW_DELAY_MS = 5000; 1857 var AUTO_HIDE_MS = 15000; 1858 var FADE_MS = 300; 1859 var COOKIE_NAME = 'mm_app_cta_dismissed'; 1860 var COOKIE_DAYS = 90; 1861 1862 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { 1863 FADE_MS = 0; 1864 } 1865 1866 function setCookie(name, value, days) { 1867 var d = new Date(); 1868 d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); 1869 document.cookie = name + '=' + value + '; expires=' + d.toUTCString() + '; path=/; SameSite=Lax'; 1870 } 1871 1872 function hide() { 1873 // if keyboard focus is inside the card, hand it off before removal so it is not lost 1874 if (el.contains(document.activeElement)) { 1875 var main = document.getElementById('main-content') || document.body; 1876 if (!main.hasAttribute('tabindex')) main.setAttribute('tabindex', '-1'); 1877 main.focus({ preventScroll: true }); 1878 } 1879 el.classList.remove('is-visible'); 1880 setTimeout(function () { 1881 if (el.parentNode) el.parentNode.removeChild(el); 1882 }, FADE_MS); 1883 } 1884 1885 var autoHideTimer = null; 1886 1887 setTimeout(function () { 1888 requestAnimationFrame(function () { el.classList.add('is-visible'); }); 1889 autoHideTimer = setTimeout(hide, AUTO_HIDE_MS); 1890 }, SHOW_DELAY_MS); 1891 1892 document.getElementById('appDownloadCtaClose').addEventListener('click', function () { 1893 if (autoHideTimer) clearTimeout(autoHideTimer); 1894 hide(); 1895 }); 1896 1897 document.getElementById('appDownloadCtaHaveIt').addEventListener('click', function () { 1898 if (autoHideTimer) clearTimeout(autoHideTimer); 1899 setCookie(COOKIE_NAME, '1', COOKIE_DAYS); 1900 hide(); 1901 }); 1902 1903 // auto-hide pauses while the user is engaging (mouse over or keyboard focus inside) 1904 // and resumes with a fresh countdown when they leave (WCAG 2.2.1) 1905 function pauseAutoHide() { 1906 if (autoHideTimer) { clearTimeout(autoHideTimer); autoHideTimer = null; } 1907 } 1908 1909 function resumeAutoHideIfIdle() { 1910 setTimeout(function () { 1911 var matches = el.matches || el.msMatchesSelector; 1912 var mouseOver = matches ? matches.call(el, ':hover') : false; 1913 var focusInside = el.contains(document.activeElement); 1914 if (!mouseOver && !focusInside && el.parentNode && !autoHideTimer) { 1915 autoHideTimer = setTimeout(hide, AUTO_HIDE_MS); 1916 } 1917 }, 0); 1918 } 1919 1920 el.addEventListener('mouseenter', pauseAutoHide); 1921 el.addEventListener('mouseleave', resumeAutoHideIfIdle); 1922 el.addEventListener('focusin', pauseAutoHide); 1923 el.addEventListener('focusout', resumeAutoHideIfIdle); 1924 1925 el.addEventListener('keydown', function (e) { 1926 if (e.key === 'Escape') { 1927 pauseAutoHide(); 1928 hide(); 1929 } 1930 }); 1931 })(); 1932</script>
1932 1933 1934 <div class="row"> 1935 <div class="col-md-12"> 1936 <div class="content-wrapper" id="main-content" role="main"> 1937 1938<div class="row"> 1939 <div id="custom-bg" class="col-md-12"> 1940 <div class="container"> 1941 <!-- Content description for screen readers --> 1942 <div class="content-description visually-hidden"> 1943 <p>This section contains dynamically generated content. Its purpose may vary depending on the context. Please refer to the following content for more information.</p> 1944 </div> 1945 1946 <!-- Dynamically generated content --> 1947 <div class="custom-page-content"> 1948 <div id="dynamic-content" aria-live="polite"> 1949 <p><a href="https://elementrealtygroup.net/" target="_blank"><b style=""><font color="#0000ff">Element Realty Group</font></b></a><br><img src="https://5starassets.blob.core.windows.net/athleticsites/2636178/20da1c08-c3f1-46ae-8062-861866dd99de.png" style="width: 900px;"><br></p> 1950 </div> 1951 </div> 1952</div> 1953<style> 1954 .visually-hidden 1955 { 1956 position: absolute !important; 1957 clip: rect(1px, 1px, 1px, 1px); 1958 padding: 0 !important; 1959 border: 0 !important; 1960 height: 1px !important; 1961 width: 1px !important; 1962 overflow: hidden !important; 1963 } 1964 1965 .custom-page-content img 1966 { 1967 max-width: 100%; 1968 height: auto; 1969 } 1970/* 1971 .custom-page-content table 1972 { 1973 width: 100%; 1974 overflow-x: auto; 1975 display: block; 1976 }*/ 1977 1978 .custom-page-content 1979 { 1980 overflow-x: auto; 1981 } 1982 1983 1984 .custom-page-content iframe 1985 { 1986 max-width: 100%; 1987 max-height: 100%; 1988 border: none; 1989 } 1990 1991</style> 1992 1993 </div> 1994</div> 1995 1996 1997 </div> 1998 </div> 1999 </div> 2000 2001 <div class="full-width-container primary-background secondary-bottom-border bg-primary"> 2002 2003 <div class="footer"> 2004 <div class="contact-us"> 2005 <div class="widget padded-box"> 2006 <p class="address"> 2007 CONTACT US 2008 <span id="phone-remove">919-335-0262</span> | 2009 3501 DROPSEED DR., Apex, NC 27502 2010 </p> 2011 <br /> 2012 <p style="color: white; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;">Thank you to all of our <a style="color: white; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; text-decoration: underline;" aria-label="Visit our Sponsors Page" href="/sponsor/SponsorsPage">Sponsors!</a></p> 2013 <!-- app promotion --> 2014 <div class="footer-items"> 2015 <div class="row"> 2016 <div class="col-md-12"> 2017 <div id="app-downloads"> 2018 <div id="badges"> 2019 <div class="row"> 2020 <div class="col-sm-12"> 2021 <a href="https://apps.apple.com/us/app/tmsa-athletics/id1623888200" target="_blank"><img class="img-responsive download" src="/images/dl-apple.png" aria-label="navigate to apple app store to download app" alt="Apple App Store Badge" /></a> 2022 2023 <img aria-label="TMSA" 2024 alt="TMSA app logo" 2025 src="https://5starassets.blob.core.windows.net/athleticsites/2636178/643/images/97aa5ba1-4ab1-4e01-9916-d5c7aa924435.png" 2026 class="img-responsive app-icon" /> 2027 <span id="googleplay"> 2028 <a href="https://play.google.com/store/apps/details?id=mm.nctriangleacademy" target="_blank"><img class="img-responsive download" src="/images/dl-google.png" aria-label="navigate to google play store to download school app" alt="Google Play Store Badge" /></a> 2029 </span> 2030 </div> 2031 </div> 2032 </div> 2033 </div> 2034 </div> 2035 </div> 2036 2037 </div> 2038 </div> 2039 <div class="feeder-schools-footer bg-primary"> 2040 </div> 2041 </div> 2042 2043</div>
2044<script type="text/javascript"> 2045 //Going to check the operating system, and if it is iOS, we will hide Google Play Icon bc it causes issues with App Store approvals 2046 var getOS = { 2047 iOS: function () { 2048 return navigator.platform.match(/iPhone|iPad|iPod/i); 2049 }, 2050 Mac: function () { 2051 return navigator.platform.match("MacIntel"); 2052 }, 2053 Windows: function () { 2054 return navigator.platform.match("Win32"); 2055 }, 2056 }; 2057 if (getOS.iOS()) { 2058 document.getElementById('googleplay').style.display = "none"; 2059 } 2060 if (getOS.Mac()) { 2061 //console.log( 'Is an iOS'); 2062 document.getElementById('googleplay').style.display = "none"; 2063 } 2064 else { 2065 document.getElementById('googleplay').style.display = "inline"; 2066 } 2067</script>
2067 2068 2069 2070 </div> 2071 <div class="container-fluid primary-background bg-primary secondary-bottom-border"> 2072 <div class="platinum-partner-container"> 2073 <div class="row"> 2074 <div class="col-md-12 off-set-md-2"> 2075 <span class="plat-part-text">PLATINUM PARTNERS</span> 2076 <hr/> 2077 <div class="sponsor-slider slider"> 2078 <div class="item"> 2079 <a href="https://elementrealtygroup.net/" target="_blank" aria-label="go to Element Realty Group website in another tab"><img src="https://5starassets.blob.core.windows.net/athleticsites/2636178/images/0854bda5-530e-4988-9ab4-498e7e680678.png" class="img-responsive" alt="Element Realty Group logo" loading="lazy"/></a> 2080 </div> 2081 </div> 2082 2083 </div> 2084 </div> 2085 </div> 2086 </div> 2087 <style> 2088 /* the slides */ 2089 .slick-slide { 2090 margin: 0 27px; 2091 } 2092 /* the parent */ 2093 .slick-list { 2094 margin: 0 -27px; 2095 } 2096 2097 </style> 2098 2099 <div class="full-width-container primary-background secondary-bottom-border"> 2100 2101 <div class="footer bg-primary"> 2102 <div class="widget padded-box"> 2103 <div class="footer-items"> 2104 <div class="row"> 2105 <div class="col-md-12"> 2106 2107 </div> 2108 </div> 2109 </div> 2110 </div> 2111</div> 2112 2113 </div> 2114 2115 <div class="privacy-terms"> 2116 <a href="http://www.mascotmedia.net/privacy-policy/" target="_blank" aria-label="Go to Mascot Media Privacy Policy">PRIVACY POLICY</a> | 2117 <a href="/Home/Accessibility" aria-label="Go to Mascot Media Accessibility Statement">ACCESSIBILITY</a> 2118 <span>© 2026 MASCOT MEDIA, LLC</span> 2119 </div> 2120 2121 <div class="ad-space"> 2122 </div> 2123 2124 <!-- CDN compiled and minified jquery 2.2.0 --> 2125
2125<script src="https://code.jquery.com/jquery-2.2.0.min.js" integrity="sha256-ihAoc6M/JPfrIiIeayPE9xjin4UWjsx2mjW/rtmxLM4=" crossorigin="anonymous"></script>
2125 2126 <!-- CDN compiled and minified slick slider js --> 2127
2127<script src="https://cdn.jsdelivr.net/jquery.slick/1.3.15/slick.min.js"></script>
2127 2128 <!-- CDN compiled and minified lity lightbox js --> 2129
2129<script src="https://cdnjs.cloudflare.com/ajax/libs/lity/2.3.1/lity.min.js" integrity="sha256-3VzI8FuSG20IfvIDKRptBR+1d4T6G57eDIf6ZEO13iY=" crossorigin="anonymous"></script>
2129 2130 <!-- fixed navbar scrolling --> 2131
2131<script type="text/javascript" src="/js/scrollfixed.min.js"></script>
2131 2132 <!-- CDN compiled and minified bootstrap 3 js --> 2133
2133<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
2133 2134
2134<script src="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/3.3.0/ekko-lightbox.min.js" integrity="sha512-J82mHQM4P5UsCSAAIYxj/UQyM/VsH/+ija5xaWr2BirVfRJHNktjd4IzGKBJMbhnvqoRUb/B+WgphcOObaaNEQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
2134 2135 <!-- locally stored compiled and minified js files for datatables --> 2136
2136<script src="/lib/datatables/media/js/jquery.dataTables.min.js"></script>
2136 2137
2137<script src="/lib/datatables/media/js/dataTables.bootstrap.min.js"></script>
2137 2138
2138<script src="/lib/datatables-responsive/js/dataTables.responsive.min.js"></script>
2138 2139
2139<script src="/js/UpcomingBroadcastSideTabStyle14.min.js"></script>
2139 2140
2140<script src="/lib/jquery.menu-aim/jquery.menu-aim.min.js"></script>
2140 2141
2141<script src="/js/topmenu2.min.js?v=1.1"></script>
2141 2142 <!-- stripe js --> 2143
2143<script src="https://js.stripe.com/v3/"></script>
2143 2144 <!-- in-house ad rotator --> 2145
2145<script src="/js/StagingButtons.min.js"></script>
2145 2146
2146<script src="/lib/sweetalert/dist/sweetalert.min.js"></script>
2146 2147
2147<script src="/lib/slick-carousel/slick/slick.min.js"></script>
2147 2148
2148<script src="/js/PlatinumSponsorStyle2.min.js"></script>
2148 2149
2149<script src="/js/CommitmentsStyle1.min.js"></script>
2149 2150 2151 2152 2153 2154 2155
2155<script type="text/javascript"> 2156 $.extend(true, $.fn.dataTable.defaults, { 2157 language: { 2158 "processing": "<i class='fa fa-refresh fa-spin fa-2x'></i><br />Loading..." 2159 } 2160 }); 2161 </script>
2161 2162 2163
2163<script type='text/javascript'> 2164 var url = 'https://apps.apple.com/us/app/tmsa-athletics/id1623888200'; 2165 var regex = /([\d]{10,})/g; 2166 var meta = document.createElement('meta'); 2167 meta.setAttribute('name', 'apple-itunes-app'); 2168 meta.setAttribute('content', 'app-id=' + url.match(regex)); 2169 document.getElementsByTagName('head')[0].appendChild(meta); 2170 </script>
2170 2171 2172 <!-- Quantcast Tag --> 2173
2173<script type="text/javascript"> 2174 window._qevents = window._qevents || []; 2175 (function () { 2176 var elem = document.createElement('script'); 2177 elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js"; 2178 elem.async = true; 2179 elem.type = "text/javascript"; 2180 var scpt = document.getElementsByTagName('script')[0]; 2181 scpt.parentNode.insertBefore(elem, scpt); 2182 })(); 2183 window._qevents.push({ 2184 qacct: "p-L8Vz-DsnmdfCj", 2185 uid: "__INSERT_EMAIL_HERE__" 2186 }); 2187 </script>
2187 2188 <noscript> 2189 <div style="display:none;"> 2190 <img src="//pixel.quantserve.com/pixel/p-L8Vz-DsnmdfCj.gif" border="0" height="1" width="1" alt="Quantcast" /> 2191 </div> 2192 </noscript> 2193 <!-- End Quantcast tag --> 2194</body> 2195</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.