It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://www.oreillynet.com/meerkat/?_fl=atom

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.  
  5.  
  6.  
  7.  <meta charset="utf-8">
  8.  
  9.   <title>O'Reilly Media - Technology and Business Training</title>
  10. <meta name="description" content="Gain technology and business knowledge and hone your skills with learning resources created and curated by O'Reilly's experts: live online training, video, books, our platform has content from 200+ of the world's best publishers." />
  11. <meta name="date" content="2024-11-21" />
  12. <meta name="search_date" content="2021-06-24" />
  13. <meta name="search-title" content="O'Reilly Media - Technology and Business Training" />
  14. <meta name="pagename" content="O'Reilly Media - Technology and Business Training" />
  15. <meta name="site" content="O'Reilly" />
  16. <meta name="twitter:title" content="O'Reilly Media - Technology and Business Training" />
  17. <meta name="twitter:description" content="Gain technology and business knowledge and hone your skills with learning resources created and curated by O'Reilly's experts: live online training, video, books, our platform has content from 200+ of the world's best publishers." />
  18. <meta name="twitter:site" content="@OReillyMedia" />
  19. <meta property="og:type" content="website" />
  20. <meta property="og:title" content="O'Reilly Media - Technology and Business Training" />
  21. <meta name="twitter:card" content="summary" />
  22. <meta name="twitter:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" />
  23. <meta property="og:image" content="https://cdn.oreillystatic.com/oreilly/images/oreilly-social-200.png" />
  24.  
  25.  
  26.  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  27.  <meta name="viewport" content="width=device-width, initial-scale=1">
  28.  <meta name="language_name" content="English">
  29.  <meta name="native_language_name" content="English">
  30.  <meta name="format-detection" content="telephone=no">
  31.  
  32.  
  33.  
  34.  
  35.  <link rel="icon" type="image/png" href="//www.oreilly.com/favicon.ico">
  36.  
  37.  
  38.  <!--[if lte IE 9]>
  39.  <script>
  40.    'article aside footer header main nav section time'.replace(/\w+/g,function(n){document.createElement(n)})
  41.  </script>
  42.  <![endif]-->
  43.  
  44.  <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/2018_font_face.css" />
  45.  <link rel="stylesheet" type="text/css" href="https://cdn.oreillystatic.com/assets/css/odot-layout-20240226.css" />
  46.  
  47.  <!--[if IE 9]>
  48.  <style type="text/css">
  49.    #menu-toggle:checked ~ .mobile-nav { display:block; }
  50.    .mobile-nav { display: none; }
  51.  </style>
  52.  <![endif]-->
  53.  
  54.  
  55.  
  56.  
  57. <!-- Initiate dataLayer for GA -->
  58. <script>
  59. loggedInObject = new Object();
  60. var dataLayer = window.dataLayer || [];
  61.  
  62. //Check for O'Reilly Unified logged-in status
  63. if (document.cookie.split(';').filter(function(item) {
  64.  return item.indexOf('orm-jwt=') >= 0
  65. }).length) {
  66.  loggedInObject.unifiedLoggedIn = 'yes';
  67.  loggedInObject.loggedIn = 'yes';
  68.  dataLayer.push(loggedInObject);
  69.  
  70.  //Add 'loggedIn class to html tag
  71.  const htmlTag = document.querySelector('html');
  72.  if (htmlTag !== null) {
  73.    htmlTag.classList.add('loggedIn');
  74.  }
  75. }
  76. </script>
  77.  
  78. <!-- Google Tag Manager -->
  79. <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  80. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  81. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  82. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  83. })(window,document,'script','dataLayer','GTM-5P4V6Z');</script>
  84. <!-- End Google Tag Manager -->
  85.  
  86.  
  87.  
  88.  
  89.  
  90. <!-- Start VWO Async SmartCode -->
  91. <link rel="preconnect" href="https://dev.visualwebsiteoptimizer.com" />
  92. <script type='text/javascript' id='vwoCode'>
  93. window._vwo_code || (function() {
  94. var account_id=27087,
  95. version=2.1,
  96. settings_tolerance=2000,
  97. hide_element='body',
  98. hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important',
  99. /* DO NOT EDIT BELOW THIS LINE */
  100. f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var i=this.getSettings(),n=d.createElement('script'),r=this;t=t||{};if(i){n.textContent=i;d.getElementsByTagName('head')[0].appendChild(n);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var i=this.hide_element(),n=i?i+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=n;else t.appendChild(d.createTextNode(n));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var n=d.createElement('div');n.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;';n.setAttribute('id','_vis_opt_path_hides');n.classList.add('_vis_hide_layer');t.parentNode.insertBefore(n,t.nextSibling)}var o='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:o})}else{this.load(o+'&x=true')}}};w._vwo_code=code;code.init();})();
  101. </script>
  102. <!-- End VWO Async SmartCode -->
  103.  
  104. </head>
  105. <body class="homepage control">
  106.  
  107.  
  108. <!-- Google Tag Manager (noscript) -->
  109. <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5P4V6Z" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  110. <!-- End Google Tag Manager (noscript) -->
  111.  
  112.  <div class="skipToMain" id="skipToMain"><a href="#maincontent"><span class="skipToMain-text">Skip to main content</span></a></div>
  113.  
  114.  
  115.  
  116.  <header role="banner">
  117.    <div class="content">
  118.      <nav role="navigation" aria-label="site sections">
  119.        <a href="https://www.oreilly.com" class="logo" title="home page" aria-current="page"><img src="https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg" onerror="this.src='https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red_@2x.png'; this.onerror=null;" alt="O'Reilly home"></a>
  120.  
  121.        <button id="mobileNavButton" class="mobileNavButton mobileNavButton--collapse mobileNavButton--3dx" type="button" aria-expanded="false" aria-controls="menuList">
  122.          <span class="mobileNavButton-box">
  123.            <span class="mobileNavButton-inner"></span>
  124.          </span>
  125.        </button>
  126.  
  127.    
  128.        <ul id="menuList" class="menuList mobileHidden  ">
  129.          <li class="menuList-itemsP1">
  130.            <ul>
  131.              <li class="menuList-item menuList-signIn"><a id="nav-signIn" href="https://www.oreilly.com/member/login/">Sign In</a></li>
  132.              <li class="menuList-item menuList-tryNow"><a id="nav-tryNow" class="menuList-cta" href="https://www.oreilly.com/online-learning/try-now.html">Try Now</a></li>
  133.              <li class="menuList-item menuList-platform"><a id="nav-platform" class="menuList-cta" href="https://www.oreilly.com/member/login/">O&rsquo;Reilly Platform</a></li>
  134.            </ul>
  135.          </li>
  136.          <li class="menuList-itemsP2">
  137.            <ul>
  138.              <li class="menuList-item menuList-itemWithSub"><a href="https://www.oreilly.com/online-learning/teams.html">Teams</a>
  139.                <ul class="menuList-subList">
  140.                  <li class="menuList-subItem menuList-extra"><a href="https://www.oreilly.com/online-learning/teams.html">For business</a></li>
  141.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/government.html">For government</a></li>
  142.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/academic.html">For higher ed</a></li>
  143.                </ul>
  144.              </li>
  145.              <li class="menuList-item"><a href="https://www.oreilly.com/online-learning/individuals.html">Individuals</a></li>
  146.              <li class="menuList-item menuList-itemWithSub"><a href="https://www.oreilly.com/online-learning/features.html">Features</a>
  147.                <ul class="menuList-subList">
  148.                  <li class="menuList-subItem menuList-extra"><a href="https://www.oreilly.com/online-learning/features.html">All features</a></li>
  149.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/courses.html">Courses</a></li>
  150.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/feature-certification.html">Certifications</a></li>
  151.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/intro-interactive-learning.html">Interactive learning</a></li>
  152.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/live-events.html">Live events</a></li>
  153.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/feature-answers.html">Answers</a></li>
  154.                  <li class="menuList-subItem"><a href="https://www.oreilly.com/online-learning/insights-dashboard.html">Insights reporting</a></li>
  155.                </ul>
  156.              </li>
  157.              <li class="menuList-item"><a href="https://www.oreilly.com/radar/">Blog</a></li>
  158.              <li class="menuList-item" id="nav-forMarketers"><a href="https://www.oreilly.com/content-marketing-solutions.html">Content sponsorship</a></li>
  159.              <li class="menuList-item menuList-item-search" id="nav-search">
  160.                <form id="js-searchForm" class="searchForm" action="https://www.oreilly.com/search/"><input id="search" type="search" name="query" placeholder="Explore our content" autocomplete="off" required=""><button id="js-searchCloseButton" class="navSearchCloseButton">Close</button></form>
  161.                <button id="js-searchButton" class="navSearchButton">Search</button>
  162.              </li>
  163.            </ul>
  164.          </li>
  165.        </ul>
  166.      </nav>
  167.    </div>
  168.  </header>
  169.  
  170.  <main role="main" id="maincontent">
  171.  
  172.  
  173.  
  174. <style>
  175. .menuList-item.menuList-item-search.hidden {
  176.  display: none;
  177. }
  178. body.homepage .footer-subfooter .transparencyStatement {
  179.  display: inline !important;
  180. }
  181. body.control .home {
  182.  opacity: 0;
  183. }
  184. </style>
  185.  
  186.  
  187. <style>
  188. body footer.footer {
  189.  background: rgb(255, 255, 255);
  190. }
  191. .home {
  192.  opacity: 1 !important;
  193.  transition: opacity 400ms 1s;
  194. }
  195. /* .home general */
  196. .home {
  197.  display: block;
  198.  background-color: rgb(18, 25, 38);
  199. }
  200. .home .content {
  201.  width: 100%;
  202.  max-width: 1288px;
  203. }
  204. .home .sectionText {
  205.  margin: 0 auto;
  206.  max-width: 1050px;
  207.  text-align: center;
  208. }
  209. .home h2 {
  210.  margin-bottom: 16px;
  211.  font-size: 2rem;
  212.  line-height: 1.2em;
  213.  font-family: 'gilroy', Arial, sans-serif;
  214.  color: rgb(255, 255, 255);
  215. }
  216. .home p {
  217.  margin-bottom: 20px;
  218.  font-size: 1rem;
  219.  line-height: 1.5em;
  220.  font-weight: 400;
  221.  color: rgb(255, 255, 255);
  222.  text-wrap: pretty;
  223.  -moz-text-wrap: pretty;
  224. }
  225. .home .textCTA,
  226. .home .textCTA-light,
  227. .home .textCTA-dark,
  228. .home .textCTA-blue {
  229.  position: relative;
  230.  display: flex;
  231.  flex-direction: row;
  232.  align-items: center;
  233.  gap: 4px;
  234.  width: max-content;
  235.  padding: 12px 12px 12px 20px;
  236.  border-radius: 8px;
  237.  font-size: 1rem;
  238.  line-height: 1.5em;
  239.  font-weight: 600;
  240.  color: rgb(255, 255, 255);
  241.  background-color: rgb(0,113,235);
  242.  text-decoration: none;
  243.  transition: background-color 400ms;
  244. }
  245. .home .textCTA:hover,
  246. .home .textCTA:focus,
  247. .home .textCTA-light:hover,
  248. .home .textCTA-light:focus,
  249. .home .textCTA-dark:hover,
  250. .home .textCTA-dark:focus,
  251. .home .textCTA-blue:hover,
  252. .home .textCTA-blue:focus {
  253.  text-decoration: none;
  254.  background-color: rgb(0, 87, 187);
  255. }
  256. .home .textCTA:after,
  257. .home .textCTA-light:after,
  258. .home .textCTA-dark:after,
  259. .home .textCTA-blue:after {
  260.  content: "";
  261.  display: block;
  262.  padding-right: 4px;
  263.  width: 20px;
  264.  height: 20px;
  265.  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_white.svg) left center no-repeat;
  266.  background-size: contain;
  267.  opacity: 1;
  268.  transition: background-position-x 400ms;
  269. }
  270. .home .textCTA:hover:after,
  271. .home .textCTA:focus:after,
  272. .home .textCTA-light:hover:after,
  273. .home .textCTA-light:focus:after,
  274. .home .textCTA-dark:hover:after,
  275. .home .textCTA-dark:focus:after,
  276. .home .textCTA-blue:hover:after,
  277. .home .textCTA-blue:focus:after {
  278.  background-position-x: 4px;
  279. }
  280. .home .btnCTA,
  281. .home .btnCTA-blue {
  282.  display: flex;
  283.  flex-direction: row;
  284.  align-items: center;
  285.  gap: 4px;
  286.  width: max-content;
  287.  padding: 12px 12px 12px 20px;
  288.  border-radius: 8px;
  289.  background-color: rgb(0,113,235);
  290.  font-size: 1rem;
  291.  line-height: 1.5em;
  292.  font-weight: 600;
  293.  color: rgb(255, 255, 255);
  294.  text-decoration: none;
  295.  transition: background-color 400ms;
  296. }
  297. .home .btnCTA:hover,
  298. .home .btnCTA:focus,
  299. .home .btnCTA-blue:hover,
  300. .home .btnCTA-blue:focus {
  301.  text-decoration: none;
  302.  background-color: rgb(0, 87, 187);
  303. }
  304. .home .btnCTA:after,
  305. .home .btnCTA-blue:after {
  306.  content: "";
  307.  display: block;
  308.  padding-right: 4px;
  309.  width: 20px;
  310.  height: 20px;
  311.  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_white.svg) left center no-repeat;
  312.  background-size: contain;
  313.  opacity: 1;
  314.  transition: background-position-x 400ms;
  315. }
  316. .home .btnCTA:hover:after,
  317. .home .btnCTA:focus:after,
  318. .home .btnCTA-blue:hover:after,
  319. .home .btnCTA-blue:focus:after {
  320.  background-position-x: 4px;
  321. }
  322. .home .sectionIcon {
  323.  display: block;
  324.  margin: 0 auto 24px;
  325.  width: 48px;
  326.  height: 48px;
  327.  padding: 11px;
  328.  border-radius: 50%;
  329.  background: rgb(255, 255, 255);
  330.  border: 1px solid rgb(147, 196, 252);
  331.  opacity: 1;
  332.  animation: iconScroll forwards linear;
  333.  animation-timeline: view();
  334.  animation-range: entry 0% cover 15%;
  335. }
  336. .home .sectionIcon svg {
  337.  display: block;
  338. }
  339. .home .sectionLabel {
  340.  display: block;
  341.  margin: 0 auto 24px;
  342.  width: max-content;
  343.  padding: 4px 12px;
  344.  border-radius: 100px;
  345.  background: rgb(255, 255, 255);
  346.  opacity: 1;
  347.  animation: iconScroll forwards linear;
  348.  animation-timeline: view();
  349.  animation-range: entry 0% cover 15%;
  350. }
  351. .home .sectionLabel p {
  352.  margin: 0;
  353.  font-size: .875rem;
  354.  line-height: 1.25em;
  355.  font-weight: 600;
  356.  color: rgb(37, 99, 234);
  357. }
  358. .home .sectionBreak:before {
  359.  display: none;
  360. }
  361. @media (min-width: 65em) { /* 1040px */
  362.  .home h2 {
  363.    font-size: 2.5rem;
  364.    line-height: 1.2em;
  365.  }
  366.  .home p {
  367.    font-size: 1.25rem;
  368.    line-height: 1.5em;
  369.  }
  370. }
  371. /* END .home general */
  372.  
  373.  
  374.  
  375. /* .home-hero */
  376. .home-hero {
  377.  position: relative;
  378.  z-index: 1;
  379.  overflow: hidden;
  380.  /*background: rgb(18, 25, 38) url(https://cdn.oreillystatic.com/oreilly/images/raven_hero_backgroud.jpg) center bottom no-repeat;
  381.  background-size: auto 590px;*/
  382. }
  383. .home-hero .content {
  384.  position: relative;
  385.  padding: 40px 20px 0;
  386.  text-align: center;
  387. }
  388. .home-hero .content > * {
  389.  position: relative;
  390.  z-index: 2;
  391. }
  392. .home-hero .home-hero-odotAnimal {
  393.  display: block;
  394.  position: absolute;
  395.  bottom: 380px;
  396.  left: 50%;
  397.  transform: translateX(-50%);
  398. }
  399. .home-hero .home-hero-odotAnimal:before {
  400.  content: '';
  401.  position: absolute;
  402.  width: 0;
  403.  height: 0;
  404.  background: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_animation.gif);
  405. }
  406. .home-hero .home-hero-odotAnimal figure {
  407.  position: absolute;
  408.  left: -195px;
  409.  top: 170px;
  410.  height: 200px;
  411.  width: 200px;
  412.  background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif) 0 0 no-repeat;
  413.  background-size: contain;
  414.  transform: rotateZ(9deg);
  415.  opacity: .9;
  416.  animation: 24s linear 2.4s infinite animateButterfly;
  417. }
  418. .home-hero h1 {
  419.  margin: 0 auto 16px;
  420.  max-width: 818px;
  421.  font-size: 2.25rem;
  422.  line-height: 1.2em;
  423.  font-family: 'gilroy', Arial, sans-serif;
  424.  color: rgb(255,255,255);
  425.  
  426.  .light {
  427.    display: block;
  428.    font-weight: 300;
  429.  }
  430. }
  431. .home-hero p {
  432.  margin: 0 auto 32px;
  433.  max-width: 818px;
  434.  color: rgb(255,255,255);
  435. }
  436. .home-hero-cta {
  437.  display: flex;
  438.  flex-direction: row;
  439.  flex-wrap: wrap;
  440.  gap: 24px;
  441.  align-items: center;
  442.  justify-content: center;
  443. }
  444. .home .home-hero-cta .textCTA {
  445.  color: rgb(43, 45, 48);
  446.  background-color: rgba(255, 255, 255, 1);
  447. }
  448. .home .home-hero-cta .textCTA:hover {
  449.  color: rgb(43, 45, 48);
  450.  background-color: rgba(255, 255, 255, .9);
  451. }
  452. .home .home-hero-cta .textCTA:after,
  453. .home .home-hero-cta .textCTA-light:after {
  454.  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat;
  455.  background-size: contain;
  456. }
  457. .home .home-hero-cta .textCTA:hover:after,
  458. .home .home-hero-cta .textCTA:focus:after {
  459.  background-position-x: 4px;
  460. }
  461. .home .home-hero-cta .btnCTA,
  462. .home .home-hero-cta .textCTA {
  463.  margin: 0 0 20px;
  464. }
  465. .home-hero .preheadCta {
  466.  display: block;
  467.  margin: 0 auto 20px;
  468.  padding: 6px 12px 6px;
  469.  background-color: rgba(255, 255, 255, 1);
  470.  color: rgb(18, 25, 38);
  471.  width: 100%;
  472.  max-width: max-content;
  473.  border-radius: 100px;
  474.  font-size: .875rem;
  475.  line-height: 1.2em;
  476.  font-weight: 600;
  477.  opacity: 1;
  478.  text-decoration: none;
  479.  border: 1px solid rgb(18, 25, 38);
  480.  transition: box-shadow .2s;
  481.  text-wrap: balance;
  482.  transition: background-color 400ms;
  483. }
  484. .home-hero .preheadCta:hover,
  485. .home-hero .preheadCta:focus {
  486.  opacity: 1;
  487.  text-decoration: none;
  488.  background-color: rgba(255, 255, 255, .9);
  489. }
  490. .home-hero .preheadCta:after {
  491.  content: "";
  492.  display: inline-block;
  493.  margin: -8px -2px -6px 0;
  494.  width: 20px;
  495.  height: 20px;
  496.  vertical-align: middle;
  497.  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat;
  498.  background-size: contain;
  499.  transition: background-position-x 400ms;
  500. }
  501. .home-hero .preheadCta:hover:after,
  502. .home-hero .preheadCta:focus:after {
  503.  background-position-x: 4px;
  504. }
  505. @media (min-width: 40em) { /* 640px */
  506.  .home-hero .content {
  507.    padding: 40px 20px 40px;
  508.    text-align: center;
  509.  }
  510.  .home-hero h1 {
  511.    font-size: 3rem;
  512.    line-height: 1.2em;
  513.  }
  514.  .home-hero p {
  515.    margin: 0 auto 48px;
  516.  }
  517.  .home .home-hero-cta {
  518.    position: relative;
  519.    margin: 0 auto;
  520.    width: max-content;
  521.  }
  522.  .home .home-hero-cta:before {
  523.    content: '';
  524.    position: absolute;
  525.    z-index: 2;
  526.    right: -128px;
  527.    top: -32px;
  528.    width: 140px;
  529.    height: 120px;
  530.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif) 0 0 no-repeat;
  531.    background-size: contain;
  532.    transform: rotateZ(9deg);
  533.    opacity: .9;
  534.    animation: 24s linear 2.4s infinite animateButterfly;
  535.  }
  536.  .home .home-hero-cta .btnCTA,
  537.  .home .home-hero-cta .textCTA {
  538.    position: relative;
  539.    margin: 0;
  540.  }
  541. }
  542. @media (min-width: 50em) { /* 800px */
  543.  .home-hero {
  544.    background-size: auto auto;
  545.  }
  546.  .home-hero .content {
  547.    padding: 56px 20px 40px;
  548.    text-align: center;
  549.  }
  550.  .home-hero h1 {
  551.    max-width: 1072px;
  552.  }
  553.  .home-hero p {
  554.    font-size: 1.25rem;
  555.    line-height: 1.5em;
  556.    letter-spacing: -.4px;
  557.  }
  558.  .home-hero .home-hero-odotAnimal {
  559.    display: block;
  560.    position: absolute;
  561.    bottom: 380px;
  562.    left: 50%;
  563.    transform: translateX(-50%);
  564.  }
  565.  .home-hero .home-hero-odotAnimal figure {
  566.    position: absolute;
  567.    left: -423px;
  568.    top: 82px;
  569.    height: 400px;
  570.    width: 400px;
  571.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif) 0 0 no-repeat;
  572.    background-size: contain;
  573.    transform: rotateZ(9deg);
  574.    opacity: .9;
  575.    animation: 24s linear 2.4s infinite animateButterfly;
  576.  }
  577.  .home-hero .home-hero-odotAnimal:after {
  578.    content: "";
  579.    position: absolute;
  580.    left: -4px;
  581.    top: -4px;
  582.    height: 280px;
  583.    width: 280px;
  584.    transform: rotateZ(44deg);
  585.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif) 0 0 no-repeat;
  586.    background-size: contain;
  587.    opacity: .9;
  588.    animation: 24s linear 1.2s infinite animateButterfly;
  589.  }
  590.  .home-hero .preheadCta {
  591.    margin: 0 auto 30px;
  592.  }
  593. }
  594. @media (min-width: 58em) { /* 928px */
  595.  .home-hero h1 {
  596.    font-size: 3rem;
  597.    line-height: 1.2em;
  598.  }
  599. }
  600. @media (min-width: 65em) { /* 1040px */
  601.  .home-hero h1 {
  602.    font-size: 3.75rem;
  603.    line-height: 1.2em;
  604.  }
  605. }
  606. @media (min-width: 76.5em) { /* 1224px */
  607.  .home-hero .content:after {
  608.    right: 20px;
  609.  }
  610. }
  611. /* END .home-hero */
  612.  
  613.  
  614.  
  615. /* .home-aiCombo */
  616. .home-aiCombo {
  617.  position: relative;
  618.  z-index: 1;
  619. }
  620. .home-aiCombo .content {
  621.  display: flex;
  622.  flex-direction: column-reverse;
  623.  gap: 60px;
  624.  padding: 40px 20px 40px;
  625. }
  626. .home-aiCombo .sectionText {
  627.  display: block;
  628.  margin: 0 auto;
  629.  padding: 0 32px;
  630. }
  631. .home-aiCombo .sectionText h2 {
  632.  font-size: 1.5rem;
  633.  line-height: 1.3em;
  634. }
  635. .home-aiCombo .sectionText p {
  636.  margin-bottom: 32px;
  637. }
  638. .home-aiCombo .sectionText a.textCTA-blue {
  639.  margin: 0 auto;
  640.  font-size: 1rem;
  641.  line-height: 1.5em;
  642. }
  643. .home-aiCombo .sectionIcon {
  644.  margin: 0 auto 24px;
  645. }
  646. .home-aiCombo .btnGroup {
  647.  display: flex;
  648.  flex-direction: row;
  649.  flex-wrap: wrap;
  650.  gap: 24px;
  651.  align-items: center;
  652.  justify-content: center;
  653.  margin: 0 auto;
  654. }
  655. @media (min-width: 50em) {
  656.  .home-aiCombo .content {
  657.    padding: 92px 20px 92px;
  658.    display: flex;
  659.    flex-direction: row-reverse;
  660.    gap: 80px;
  661.    align-items: stretch;
  662.  }
  663.  .home-aiCombo .sectionText {
  664.    display: flex;
  665.    flex-direction: column;
  666.    margin: 0;
  667.    width: calc(50% - 40px);
  668.    text-align: center;
  669.  }
  670.  .home-aiCombo .sectionText *:last-child {
  671.    margin-bottom: 0;
  672.  }
  673.  .home-aiCombo .sectionFigure {
  674.    margin: 0;
  675.    width: calc(50% - 40px);
  676.  }
  677. }
  678. @media (min-width: 65em) {
  679.  .home-aiCombo .sectionText h2 {
  680.    font-size: 1.75rem;
  681.    line-height: 1.3em;
  682.  }
  683.  .home-aiCombo .btnGroup {
  684.    margin: auto auto 0;
  685.  }
  686.  .home-aiCombo .sectionText a.textCTA-blue {
  687.    margin: auto auto 0;
  688.  }
  689. }
  690. /* END .home-aiCombo */
  691.  
  692.  
  693.  
  694. /* .home-testimonial */
  695. .home-testimonial {
  696.  position: relative;
  697.  z-index: 1;
  698. }
  699. .home-testimonial .content {
  700.  padding: 40px 20px 40px;
  701. }
  702. .home-testimonial .sectionText p {
  703.  margin-bottom: 32px;
  704. }
  705. .home-testimonial .home-testimonial-figure {
  706.  display: block;
  707.  margin: 0 auto 40px;
  708.  width: 80%;
  709.  text-decoration: none;
  710. }
  711. .home-testimonial .home-testimonial-video {
  712.  position: relative;
  713.  margin: 20px auto 20px;
  714.  width: 100%;
  715.  padding-bottom: 56.25%;
  716.  border-radius: 8px;
  717.  box-shadow: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03);
  718. }
  719. .home-testimonial .home-testimonial-video iframe {
  720.  display: block;
  721.  max-width: 100%;
  722. }
  723. .home-testimonial .home-testimonial-video .kWidgetIframeContainer {
  724.  position: absolute;
  725.  width: 100%;
  726.  height: 100%;
  727.  border-radius: 7px;
  728.  overflow: hidden;
  729. }
  730. .home-testimonial-thumbnails {
  731.  display: flex;
  732.  flex-direction: row;
  733.  gap: 2px;
  734.  justify-content: center;
  735.  margin-top: 19px;
  736. }
  737. .home-testimonial-thumbnails-item {
  738.  display: block;
  739.  padding: 0;
  740.  margin: 0;
  741.  width: 20px;
  742.  height: 20px;
  743.  padding: 5px;
  744.  border-radius: 50%;
  745.  background-color: transparent;
  746.  border: none;
  747.  outline: none;
  748.  overflow: hidden;
  749.  cursor: pointer;
  750. }
  751. .home-testimonial-thumbnails-item:after {
  752.  content: "";
  753.  display: block;
  754.  width: 10px;
  755.  height: 10px;
  756.  border-radius: 50%;
  757.  background-color: rgba(255, 255, 255, .25);
  758.  transition: backgound-color 400ms;
  759. }
  760. .home-testimonial-thumbnails-item:hover:after,
  761. .home-testimonial-thumbnails-item:focus:after {
  762.  background-color: rgba(255, 255, 255, .5);
  763. }
  764. .home-testimonial-thumbnails-item.active:after {
  765.  background-color: rgb(8, 144, 176);
  766.  cursor: default;
  767. }
  768. .home-testimonial-thumbnails-item img {
  769.  display: none;
  770. }
  771. .home-testimonial .textCTA-blue {
  772.  margin: 0 auto;
  773. }
  774. @media (min-width: 50em) {
  775.  .home-testimonial .content {
  776.    padding: 92px 20px;
  777.    display: flex;
  778.    flex-direction: row;
  779.    align-items: center;
  780.    gap: 80px;
  781.  }
  782.  .home .home-testimonial .sectionIcon {
  783.    margin: 0 0 24px;
  784.  }
  785.  .home-testimonial .sectionText {
  786.    margin: 0;
  787.    width: calc(50% - 40px);
  788.    padding: 0 32px;
  789.    text-align: left;
  790.  }
  791.  .home-testimonial .sectionText a:last-child {
  792.    margin-bottom: 0;
  793.  }
  794.  .home-testimonial .home-testimonial-figure {
  795.    margin: 0 0 -39px;
  796.    width: calc(50% - 40px);
  797.    padding: 0 32px;
  798.  }
  799.  .home-testimonial .home-testimonial-video {
  800.    margin: 0 auto;
  801.  }
  802.  .home-testimonial .textCTA-blue {
  803.    margin: 0;
  804.  }
  805. }
  806. /* END .home-testimonial */
  807.  
  808.  
  809.  
  810. /* .home-awards */
  811. .home-awards {
  812.  position: relative;
  813.  z-index: 1;
  814. }
  815. .home-awards .content {
  816.  padding: 40px 20px 40px;
  817. }
  818. .home-awards p {
  819.  margin-bottom: 32px;
  820. }
  821. .home-awards .sectionFigure {
  822.  display: block;
  823.  margin: 0 auto 40px;
  824.  width: 80%;
  825.  text-decoration: none;
  826. }
  827. .home-awards .sectionFigure:after {
  828.  content: "";
  829.  display: block;
  830.  width: 100%;
  831.  height: 0;
  832.  padding-bottom: 76.6%;
  833.  background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_awards_2024_443x442.png) center center no-repeat;
  834.  background-size: contain;
  835. }
  836. .home-awards .sectionFigure video {
  837.  display: none;
  838. }
  839. .home-awards-logos {
  840.  display: none;
  841. }
  842. .home-awards .textCTA-light {
  843.  margin: 0 auto;
  844. }
  845. @media (min-width: 50em) {
  846.  .home-awards .content {
  847.    padding: 92px 20px;
  848.    display: flex;
  849.    flex-direction: row-reverse;
  850.    align-items: center;
  851.    gap: 80px;
  852.  }
  853.  .home .home-awards .sectionIcon {
  854.    margin: 0 0 24px;
  855.  }
  856.  .home-awards .sectionText {
  857.    margin: 0;
  858.    width: calc(50% - 40px);
  859.    padding: 0 32px;
  860.    text-align: left;
  861.  }
  862.  .home-awards .sectionFigure {
  863.    margin: -30px 0;
  864.    width: calc(50% - 40px);
  865.    padding: 0;
  866.  }
  867.  .home-awards .textCTA-light {
  868.    margin: 0;
  869.  }
  870. }
  871. /* END .home-awards */
  872.  
  873.  
  874.  
  875. /* .home-experts */
  876. .home-experts {
  877.  position: relative;
  878.  z-index: 1;
  879. }
  880. .home-experts .content {
  881.  padding: 40px 20px 40px;
  882.  display: flex;
  883.  flex-direction: column;
  884.  gap: 64px;
  885. }
  886. .home-experts .sectionText {
  887.  margin: 0 auto;
  888.  max-width: 818px;
  889. }
  890. .home-experts p {
  891.  margin-bottom: 0;
  892. }
  893. .home-experts .sectionFigure {
  894.  width: 100%;
  895.  margin: 0 auto;
  896.  width: 80%;
  897. }
  898. .home-experts .sectionFigure .button-left,
  899. .home-experts .sectionFigure .button-right {
  900.  display: none;
  901. }
  902. .home-experts-panels {
  903.  display: grid;
  904.  grid-template-columns: repeat(2, 1fr);
  905.  grid-template-rows: repeat(3, 1fr);
  906.  gap: 24px;
  907.  height: auto;
  908. }
  909. .home-experts-panels a {
  910.  display: flex;
  911.  flex-direction: column;
  912.  height: auto;
  913.  width: 100%;
  914.  background-repeat: no-repeat;
  915.  background-position: center top;
  916.  background-size: contain;
  917.  border-radius: 8px;
  918.  transition: width .5s;
  919.  border: 1px solid #fff;
  920.  background-color: #fff;
  921.  text-decoration: none;
  922.  cursor: pointer;
  923.  opacity: .9;
  924.  transition: transform 400ms ease-out, opacity 400ms ease-out;
  925. }
  926. .home-experts-panels a:before {
  927.  content: "";
  928.  display: block;
  929.  width: 100%;
  930.  height: 0;
  931.  padding-bottom: 100%;
  932. }
  933. .home-experts-panels a:hover,
  934. .home-experts-panels a:focus {
  935.  text-decoration: none;
  936.  opacity: 1;
  937.  transform: scale(108%);
  938. }
  939. .home-experts-panels a .text {
  940.  display: flex;
  941.  flex-direction: column;
  942.  gap: 4px;
  943.  padding: 16px;
  944.  font-size: 1rem;
  945.  line-height: 1.5em;
  946. }
  947. .home-experts-panels a .name {
  948.  display: block;
  949.  font-weight: bold;
  950. }
  951. .home-experts-panels a .affiliation {
  952.  font-size: .75rem;
  953.  line-height: 1.5em;
  954. }
  955. @media (min-width: 40em) {
  956.  .home-experts-panels {
  957.    grid-template-columns: repeat(3, 1fr);
  958.    grid-template-rows: repeat(2, 1fr);
  959.  }
  960. }
  961. @media (min-width: 50em) {
  962.  .home-experts .content {
  963.    padding: 92px 20px;
  964.  }
  965. }
  966. @media (min-width: 62em) {
  967.  .home-experts .sectionFigure {
  968.    width: 100%;
  969.    padding: 0 32px;
  970.  }
  971.  .home-experts-panels {
  972.    display: grid;
  973.    grid-template-columns: repeat(6, 1fr);
  974.    grid-template-rows: auto;
  975.    gap: 16px;
  976.    width: 100%;
  977.  }
  978. }
  979. /* END .home-experts */
  980.  
  981.  
  982.  
  983. /* .home-courses */
  984. .home-courses {
  985.  position: relative;
  986.  z-index: 1;
  987. }
  988. .home-courses .content {
  989.  padding: 40px 20px 40px;
  990. }
  991. .home-courses p {
  992.  margin-bottom: 32px;
  993. }
  994. .home-courses .sectionFigure {
  995.  display: block;
  996.  margin: 0 auto 40px;
  997.  width: 80%;
  998.  text-decoration: none;
  999. }
  1000. .home-courses .sectionFigure:after {
  1001.  content: "";
  1002.  display: block;
  1003.  width: 100%;
  1004.  height: 0;
  1005.  padding-bottom: 88.95%;
  1006.  background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_courses.png) center center no-repeat;
  1007.  background-size: contain;
  1008.  box-shadow: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03);
  1009. }
  1010. .home-courses .sectionFigure img {
  1011.  display: none;
  1012. }
  1013. .home-courses-logos {
  1014.  display: none;
  1015. }
  1016. .home-courses .textCTA-light {
  1017.  margin: 0 auto;
  1018. }
  1019. @media (min-width: 50em) {
  1020.  .home-courses .content {
  1021.    padding: 92px 20px;
  1022.    display: flex;
  1023.    flex-direction: row;
  1024.    align-items: center;
  1025.    gap: 80px;
  1026.  }
  1027.  .home .home-courses .sectionIcon {
  1028.    margin: 0 0 24px;
  1029.  }
  1030.  .home-courses .sectionText {
  1031.    margin: 0;
  1032.    width: calc(50% - 40px);
  1033.    padding: 0 32px;
  1034.    text-align: left;
  1035.  }
  1036.  .home-courses-logos {
  1037.    margin: 0 0 20px;
  1038.  }
  1039.  .home-courses .sectionFigure {
  1040.    margin: 0;
  1041.    width: calc(50% - 40px);
  1042.    padding: 0 32px;
  1043.  }
  1044.  .home-courses .textCTA-light {
  1045.    margin: 0;
  1046.  }
  1047. }
  1048. /* END .home-courses */
  1049.  
  1050.  
  1051.  
  1052. /* .home-live */
  1053. .home-live {
  1054.  position: relative;
  1055.  z-index: 1;
  1056. }
  1057. .home-live .content {
  1058.  padding: 40px 20px 40px;
  1059.  display: flex;
  1060.  flex-direction: column;
  1061.  gap: 64px;
  1062. }
  1063. .home-live .sectionText {
  1064.  margin: 0 auto;
  1065.  max-width: 818px;
  1066. }
  1067. .home-live .sectionFigure {
  1068.  display: none;
  1069. }
  1070. .home-live .sectionCards {
  1071.  display: grid;
  1072.  grid-template-columns: repeat(3, 1fr);
  1073.  grid-template-rows: repeat(2, 1fr);
  1074.  gap: 20px;
  1075.  margin: 0 auto;
  1076.  width: 80%;
  1077. }
  1078. .home-live .sectionCards img {
  1079.  width: 100%;
  1080.  height: auto;
  1081.  border: 1px solid rgba(188, 190, 195, .2);
  1082.  border-radius: 8px;
  1083. }
  1084. .home-live p {
  1085.  margin-bottom: 32px;
  1086. }
  1087. .home-live .textCTA-dark {
  1088.  margin: 0 auto;
  1089. }
  1090. @media (min-width: 50em) {
  1091.  .home-live .content {
  1092.    padding: 92px 20px;
  1093.  }
  1094. }
  1095. @media (min-width: 62em) {
  1096.  .home-live .sectionCards {
  1097.    grid-template-columns: repeat(6, 1fr);
  1098.    grid-template-rows: auto;
  1099.    width: 100%;
  1100.    padding: 0 32px;
  1101.  }
  1102. }
  1103. /* END .home-live */
  1104.  
  1105.  
  1106.  
  1107. /* .home-certification */
  1108. .home-certification {
  1109.  position: relative;
  1110.  z-index: 1;
  1111. }
  1112. .home-certification .content {
  1113.  padding: 40px 20px 80px;
  1114. }
  1115. .home-certification p {
  1116.  margin-bottom: 32px;
  1117. }
  1118. .home-certification .sectionFigure {
  1119.  display: block;
  1120.  margin: 0 auto;
  1121.  padding: 0;
  1122.  width: 80%;
  1123. }
  1124. .home-certification .sectionFigure img {
  1125.  display: block;
  1126.  max-width: 100%;
  1127.  padding: 36px;
  1128.  background: rgb(255, 255, 255);
  1129.  border-radius: 8px;
  1130. }
  1131. .home-certification .textCTA-dark {
  1132.  margin: 0 auto 40px;
  1133. }
  1134. @media (min-width: 50em) {
  1135.  .home-certification .content {
  1136.    padding: 92px 20px 184px;
  1137.    display: flex;
  1138.    flex-direction: row;
  1139.    align-items: center;
  1140.    gap: 80px;
  1141.  }
  1142.  .home .home-certification .sectionIcon {
  1143.    margin: 0 0 24px;
  1144.  }
  1145.  .home-certification .sectionText {
  1146.    margin: 0;
  1147.    width: calc(50% - 40px);
  1148.    padding: 0 32px;
  1149.    text-align: left;
  1150.  }
  1151.  .home-certification .sectionFigure {
  1152.    margin: 0;
  1153.    width: calc(50% - 40px);
  1154.    padding: 0 32px;
  1155.  }
  1156.  .home-certification .textCTA-dark {
  1157.    margin: 0;
  1158.  }
  1159. }
  1160. /* END .home-certification */
  1161.  
  1162.  
  1163.  
  1164.  
  1165. /* .home-cta */
  1166. .home-cta {
  1167.  position: relative;
  1168.  z-index: 1;
  1169.  background: linear-gradient(242deg, rgb(142, 34, 167) 0.01%, rgb(37, 99, 234) 97.15%);
  1170. }
  1171. .home-cta .content {
  1172.  padding: 40px 20px 40px;
  1173.  text-align: center;
  1174. }
  1175. .home-cta .sectionText {
  1176.  display: flex;
  1177.  flex-direction: column;
  1178.  gap: 24px;
  1179.  padding: 0 32px;
  1180. }
  1181. .home-cta h2 {
  1182.  margin: 0 auto;
  1183.  max-width: 818px;
  1184. }
  1185. .home-cta .home-cta-btnGroup {
  1186.  display: flex;
  1187.  flex-direction: row;
  1188.  flex-wrap: wrap;
  1189.  gap: 24px;
  1190.  align-items: center;
  1191.  justify-content: center;
  1192. }
  1193. .home .home-cta .textCTA-blue {
  1194.  color: rgb(43, 45, 48);
  1195.  background-color: rgba(255, 255, 255, 1);
  1196. }
  1197. .home .home-cta .textCTA-blue:hover {
  1198.  color: rgb(43, 45, 48);
  1199.  background-color: rgba(255, 255, 255, .9);
  1200. }
  1201. .home .home-cta .textCTA-blue:after {
  1202.  background: transparent url(https://cdn.oreillystatic.com/images/icons/icon_link_chevron_black.svg) left center no-repeat;
  1203.  background-size: contain;
  1204. }
  1205. .home .home-cta .textCTA-blue:hover:after,
  1206. .home .home-cta .textCTA-blue:focus:after {
  1207.  background-position-x: 4px;
  1208. }
  1209. .home .home-cta .btnCTA,
  1210. .home .home-cta .textCTA {
  1211.  margin: 0 0 20px;
  1212. }
  1213. @media (min-width: 80em) {
  1214.  .home-cta .content {
  1215.    padding: 50px 20px;
  1216.    text-align: center;
  1217.  }
  1218.  .home-cta .sectionText {
  1219.    display: flex;
  1220.    flex-direction: row;
  1221.    align-items: center;
  1222.    justify-content: space-between;
  1223.    gap: 24px;
  1224.    max-width: 100%;
  1225.  }
  1226.  .home-cta h2 {
  1227.    margin: 0;
  1228.    width: auto;
  1229.    font-size: 1.875rem;
  1230.    line-height: 1.2em;
  1231.    text-align: left;
  1232.  }
  1233.  .home-cta .home-cta-btnGroup {
  1234.    display: flex;
  1235.    flex-direction: row;
  1236.    gap: 12px;
  1237.    align-items: flex-end;
  1238.    width: max-content;
  1239.  }
  1240. }
  1241. /* END .home-cta */
  1242.  
  1243.  
  1244.  
  1245. /* .home-whatsNext */
  1246. .home-whatsNext {
  1247.  display: none;
  1248. }
  1249. /* END .home-whatsNext */
  1250.  
  1251.  
  1252. .home {
  1253.  contain: paint;
  1254. }
  1255. .home .ravenBlobs {
  1256.  position: absolute;
  1257.  top: 0;
  1258.  left: 50%;
  1259.  transform: translateX(-50%);
  1260.  width: 100%;
  1261.  max-width: 1280px;
  1262.  height: 100%;
  1263.  z-index: 0;
  1264.  
  1265.  div {
  1266.    opacity: 1;
  1267.  }
  1268.  
  1269.  .blob1 {
  1270.    position: absolute;
  1271.    left: calc(-675px / 1.75);
  1272.    top: -100px;
  1273.    width: 675px;
  1274.    height: 656px;
  1275.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_1.jpg) 0 0 no-repeat;
  1276.    background-size: contain;
  1277.  
  1278.    @media (min-width:50em) {
  1279.      & {
  1280.        left: calc(-1200px / 1.75);
  1281.        top: -100px;
  1282.        width: 1200px;
  1283.        height: 1200px;
  1284.      }
  1285.    }
  1286.    @media (min-width:80em) {
  1287.      & {
  1288.        left: calc(-1351px / 1.75);
  1289.        top: -100px;
  1290.        width: 1351px;
  1291.        height: 1312px;
  1292.      }
  1293.    }
  1294.  }
  1295.  .blob2 {
  1296.    position: absolute;
  1297.    right: calc(-537px / 1.75);
  1298.    top: 700px;
  1299.    width: 537px;
  1300.    height: 544px;
  1301.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_2.jpg) 0 0 no-repeat;
  1302.    background-size: contain;
  1303.  
  1304.    @media (min-width:50em) {
  1305.      & {
  1306.        right: calc(-1074px / 1.75);
  1307.        top: 700px;
  1308.        width: 1074px;
  1309.        height: 1088px;
  1310.      }
  1311.    }
  1312.    @media (min-width:80em) {
  1313.      & {
  1314.        right: calc(-1074px / 1.75);
  1315.        top: 1100px;
  1316.        width: 1074px;
  1317.        height: 1088px;
  1318.      }
  1319.    }
  1320.  }
  1321.  .blob3 {
  1322.    position: absolute;
  1323.    left: calc(-647px / 1.75);
  1324.    top: 1500px;
  1325.    width: 647px;
  1326.    height: 692px;
  1327.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_3.jpg) 0 0 no-repeat;
  1328.    background-size: contain;
  1329.  
  1330.    @media (min-width:50em) {
  1331.      & {
  1332.        left: calc(-1295px / 1.75);
  1333.        top: 1500px;
  1334.        width: 1295px;
  1335.        height: 1385px;
  1336.      }
  1337.    }
  1338.    @media (min-width:80em) {
  1339.      & {
  1340.        left: calc(-1295px / 1.75);
  1341.        top: 1700px;
  1342.        width: 1295px;
  1343.        height: 1385px;
  1344.      }
  1345.    }
  1346.  }
  1347.  .blob4 {
  1348.    position: absolute;
  1349.    right: calc(-613px / 1.75);
  1350.    top: 2500px;
  1351.    width: 613px;
  1352.    height: 621px;
  1353.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_4.jpg) 0 0 no-repeat;
  1354.    background-size: contain;
  1355.  
  1356.    @media (min-width:50em) {
  1357.      & {
  1358.        right: calc(-1226px / 1.75);
  1359.        top: 2500px;
  1360.        width: 1226px;
  1361.        height: 1242px;
  1362.      }
  1363.    }
  1364.    @media (min-width:80em) {
  1365.      & {
  1366.        right: calc(-1226px / 1.75);
  1367.        top: 2200px;
  1368.        width: 1226px;
  1369.        height: 1242px;
  1370.      }
  1371.    }
  1372.  }
  1373.  .blob5 {
  1374.    position: absolute;
  1375.    left: calc(-572px / 1.75);
  1376.    top: 3300px;
  1377.    width: 572px;
  1378.    height: 597px;
  1379.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_5.jpg) 0 0 no-repeat;
  1380.    background-size: contain;
  1381.  
  1382.    @media (min-width:50em) {
  1383.      & {
  1384.        left: calc(-1144px / 1.75);
  1385.        top: 3300px;
  1386.        width: 1144px;
  1387.        height: 1195px;
  1388.      }
  1389.    }
  1390.    @media (min-width:80em) {
  1391.      & {
  1392.        left: calc(-1144px / 1.75);
  1393.        top: 3100px;
  1394.        width: 1144px;
  1395.        height: 1195px;
  1396.      }
  1397.    }
  1398.  }
  1399.  .blob6 {
  1400.    position: absolute;
  1401.    right: calc(-836px / 1.75);
  1402.    top: 4100px;
  1403.    width: 836px;
  1404.    height: 766px;
  1405.    background: transparent url(https://cdn.oreillystatic.com/oreilly/images/raven_blob_6.jpg) 0 0 no-repeat;
  1406.    background-size: contain;
  1407.  
  1408.    @media (min-width:50em) {
  1409.      & {
  1410.        right: calc(-1672px / 1.75);
  1411.        top: 4100px;
  1412.        width: 1672px;
  1413.        height: 1533px;
  1414.      }
  1415.    }
  1416.    @media (min-width:80em) {
  1417.      & {
  1418.        right: calc(-1672px / 1.75);
  1419.        top: 3500px;
  1420.        width: 1672px;
  1421.        height: 1533px;
  1422.      }
  1423.    }
  1424.  }
  1425. }
  1426.  
  1427.  
  1428. /* Define the butterfly animation */
  1429. @keyframes animateButterfly {
  1430.  0% {
  1431.    background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_animation.gif);
  1432.  }
  1433.  4.5% {
  1434.    background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_animation.gif);
  1435.  }
  1436.  5% {
  1437.    background-image: url(https://cdn.oreillystatic.com/oreilly/images/raven_butterfly_still.gif);
  1438.  }
  1439. }
  1440.  
  1441. /* Define the icon scroll animation */
  1442. @keyframes iconScroll {
  1443.  0% {
  1444.    transform: scale(75%) translateY(20px);
  1445.    opacity: 0;
  1446.  }
  1447.  25% {
  1448.    transform: scale(75%) translateY(20px);
  1449.    opacity: 0;
  1450.  }
  1451.  100% {
  1452.    transform: scale(100%) translateY(0);
  1453.    opacity: 1;
  1454.  }
  1455. }
  1456. </style>
  1457.  
  1458.  
  1459.  
  1460. <span class="home" id="home">
  1461.  
  1462.    <section class="home-hero"><!-- with-preheadCta -->
  1463.      <div class="content">
  1464.        <a id="event-preheadCta" class="preheadCta" href="https://www.oreilly.com/pub/pr/3459">New! O&rsquo;Reilly announces launch of the AI Academy. Read now</a>
  1465.  
  1466.        <h1>Introducing the <span class="highlight">AI Academy</span> <span class="light"><span class="nowrap">Help your</span> entire org put GenAI to work</span></h1>
  1467.  
  1468.        <p>Every employee today needs to know how to prompt GenAI, use it to enhance critical thinking and productivity, and more. With the AI Academy they can. For less.</p>
  1469.  
  1470.        <div class="home-hero-cta">
  1471.          <a id="ai-academy-cta" href="https://www.oreilly.com/online-learning/ai-academy.html" class="btnCTA"><span class="inner">Learn more</span></a>
  1472.        </div>
  1473.  
  1474.      </div>
  1475.    </section>
  1476.  
  1477.  
  1478.    <section class="home-aiCombo">
  1479.      <div class="content">
  1480.        <div class="sectionText">
  1481.  
  1482.          <h2>O&rsquo;Reilly AI-powered Answers just got even smarter</h2>
  1483.  
  1484.          <p>O&rsquo;Reilly Answers instantly generates information teams can trust, sourced from thousands of titles on our learning platform.</p>
  1485.  
  1486.          <a id="answers-cta" href="https://www.oreilly.com/online-learning/feature-answers.html" class="textCTA-blue"><span class="inner">Discover Answers</span></a>
  1487.        </div>
  1488.  
  1489.  
  1490.        <div class="sectionText">
  1491.  
  1492.          <h2>Give your teams the GenAI and tech skills they need</h2>
  1493.  
  1494.          <p>More than 5,000 organizations count on our learning platform and AI Academy to help their teams learn the tools and technologies that drive business outcomes. We can help yours too.</p>
  1495.  
  1496.          <div class="btnGroup">
  1497.            <a id="requestDemo1-cta-c" href="https://www.oreilly.com/online-learning/teams.html" class="btnCTA"><span class="inner">Request a demo</span></a>
  1498.            <a id="tryFree1-cta-c" href="https://learning.oreilly.com/start-trial/" class="textCTA secondary"><span class="inner">Try it free</span></a>
  1499.          </div>
  1500.        </div>
  1501.      </div>
  1502.    </section>
  1503.  
  1504.  
  1505.    <section class="home-testimonial sectionBreak">
  1506.      <div class="content">
  1507.        <div class="home-testimonial-figure">
  1508.          <div id="js-testimonialVideo1" class="home-testimonial-video">
  1509.            <div id="kaltura_player_1689279523"></div>
  1510.          </div>
  1511.  
  1512.          <div id="js-testimonialVideo2" class="home-testimonial-video hidden">
  1513.            <div id="kaltura_player_1674688758"></div>
  1514.          </div>
  1515.  
  1516.          <div id="js-testimonialVideo3" class="home-testimonial-video hidden">
  1517.            <div id="kaltura_player_1666285022"></div>
  1518.          </div>
  1519.  
  1520.          <div id="js-testimonialVideo4" class="home-testimonial-video hidden">
  1521.            <div id="kaltura_player_1660838772"></div>
  1522.          </div>
  1523.  
  1524.          <div class="home-testimonial-thumbnails">
  1525.            <button id="js-testimonialThumbnail1" class="home-testimonial-thumbnails-item active"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20230201.jpg" alt="Testimonial video thumbnail 1"></button>
  1526.  
  1527.            <button id="js-testimonialThumbnail2" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb3-711x400-20230201.jpg" alt="Testimonial video thumbnail 2"></button>
  1528.  
  1529.            <button id="js-testimonialThumbnail3" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20221020.jpg" alt="Testimonial video thumbnail 3"></button>
  1530.  
  1531.            <button id="js-testimonialThumbnail4" class="home-testimonial-thumbnails-item"><img src="https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb2-400x225-20221019.jpg" alt="Testimonial video thumbnail 4"></button>
  1532.          </div>
  1533.        </div>
  1534.  
  1535.        <div class="sectionText">
  1536.          <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">  <path d="M21 8H3M16 2V5M8 2V5M7.8 22H16.2C17.8802 22 18.7202 22 19.362 21.673C19.9265 21.3854 20.3854 20.9265 20.673 20.362C21 19.7202 21 18.8802 21 17.2V8.8C21 7.11984 21 6.27976 20.673 5.63803C20.3854 5.07354 19.9265 4.6146 19.362 4.32698C18.7202 4 17.8802 4 16.2 4H7.8C6.11984 4 5.27976 4 4.63803 4.32698C4.07354 4.6146 3.6146 5.07354 3.32698 5.63803C3 6.27976 3 7.11984 3 8.8V17.2C3 18.8802 3 19.7202 3.32698 20.362C3.6146 20.9265 4.07354 21.3854 4.63803 21.673C5.27976 22 6.11984 22 7.8 22ZM11.9973 12.3306C11.1975 11.4216 9.8639 11.1771 8.86188 12.0094C7.85986 12.8418 7.71879 14.2335 8.50568 15.2179C9.077 15.9327 10.6593 17.3397 11.4833 18.0569C11.662 18.2124 11.7513 18.2902 11.856 18.321C11.9466 18.3477 12.0479 18.3477 12.1386 18.321C12.2432 18.2902 12.3325 18.2124 12.5112 18.0569C13.3353 17.3397 14.9175 15.9327 15.4888 15.2179C16.2757 14.2335 16.1519 12.8331 15.1326 12.0094C14.1134 11.1858 12.797 11.4216 11.9973 12.3306Z" stroke="#2563EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></figure>
  1537.  
  1538.          <div id="js-testimonialText1">
  1539.            <h2>Hear why Jose is on O&rsquo;Reilly every day</h2>
  1540.  
  1541.            <p>Jose, a principal software engineer, trusts our learning platform to filter what his teams need to know to stay ahead.</p>
  1542.          </div>
  1543.  
  1544.          <div id="js-testimonialText2" class="hidden">
  1545.            <h2>See why Addison loves our learning platform</h2>
  1546.  
  1547.            <p>Addison always appreciated O&rsquo;Reilly books, but the learning platform helped take her skills to the next level.</p>
  1548.          </div>
  1549.  
  1550.          <div id="js-testimonialText3" class="hidden">
  1551.            <h2>Amir trusts O&rsquo;Reilly to find the answers he needs. See why.</h2>
  1552.  
  1553.            <p>For over eight years Amir has counted on our learning platform whether he needs proven methods to learn new technologies or the latest management tips.</p>
  1554.          </div>
  1555.  
  1556.          <div id="js-testimonialText4" class="hidden">
  1557.            <h2>Mark&rsquo;s been an O&rsquo;Reilly member for 13 years. See why.</h2>
  1558.  
  1559.            <p>Mark credits the O&rsquo;Reilly learning platform with helping him to stay ahead at every turn throughout his tech career.</p>
  1560.          </div>
  1561.  
  1562.          <a id="testimonial-cta" href="https://www.oreilly.com/online-learning/testimonials.html" class="textCTA-blue"><span class="inner">See more testimonials</span></a>
  1563.        </div>
  1564.  
  1565.  
  1566.        <script src="https://cdnapisec.kaltura.com/p/1681692/sp/168169200/embedIframeJs/uiconf_id/47268383/partner_id/1681692"></script>
  1567.  
  1568.        <script>
  1569.        kWidget.embed({
  1570.          "targetId": "kaltura_player_1689279523",
  1571.          "wid": "_1681692",
  1572.          "uiconf_id": 47268383,
  1573.          "flashvars": {
  1574.            'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20230201.jpg',
  1575.            'autoMute': false,
  1576.            'autoPlay': false,
  1577.            'controlBarContainer.plugin': false,
  1578.          },
  1579.          "cache_st": 1689279523,
  1580.          "entry_id": "1_7le83llz"
  1581.        });
  1582.  
  1583.        kWidget.embed({
  1584.          "targetId": "kaltura_player_1674688758",
  1585.          "wid": "_1681692",
  1586.          "uiconf_id": 47268383,
  1587.          "flashvars": {
  1588.            'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb3-711x400-20230201.jpg',
  1589.            'autoMute': false,
  1590.            'autoPlay': false,
  1591.            'controlBarContainer.plugin': false,
  1592.          },
  1593.          "cache_st": 1674688758,
  1594.          "entry_id": "1_td7km9vj"
  1595.        });
  1596.  
  1597.        kWidget.embed({
  1598.          "targetId": "kaltura_player_1666285022",
  1599.          "wid": "_1681692",
  1600.          "uiconf_id": 47268383,
  1601.          "flashvars": {
  1602.            'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb1-711x400-20221020.jpg',
  1603.            'autoMute': false,
  1604.            'autoPlay': false,
  1605.            'controlBarContainer.plugin': false,
  1606.          },
  1607.          "cache_st": 1666285022,
  1608.          "entry_id": "1_nrvzd3wa"
  1609.        });
  1610.  
  1611.        kWidget.embed({
  1612.          "targetId": "kaltura_player_1660838772",
  1613.          "wid": "_1681692",
  1614.          "uiconf_id": 47268383,
  1615.          "flashvars": {
  1616.            'thumbnailUrl': 'https://cdn.oreillystatic.com/oreilly/images/home-video-testimonial-thumb2-400x225-20221019.jpg',
  1617.            'autoMute': false,
  1618.            'autoPlay': false,
  1619.            'controlBarContainer.plugin': false,
  1620.          },
  1621.          "cache_st": 1603408139,
  1622.          "entry_id": "1_4jl34ett"
  1623.        });
  1624.        </script>
  1625.      </div>
  1626.    </section>
  1627.  
  1628.  
  1629.    <section class="home-awards" id="awardsSection">
  1630.      <div class="content">
  1631.        <figure class="sectionFigure">
  1632.          <video playsinline autoplay muted loop poster="https://cdn.oreillystatic.com/oreilly/images/oreilly_award_2023_600x600.png">
  1633.            <source src="https://cdn.oreillystatic.com/oreilly/videos/oreilly_award_animation_alpha2_2023.webm" type="video/webm">
  1634.          </video>
  1635.        </figure>
  1636.  
  1637.        <div class="sectionText">
  1638.          <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M12 15C8.68629 15 6 12.3137 6 9V3.44444C6 3.0306 6 2.82367 6.06031 2.65798C6.16141 2.38021 6.38021 2.16141 6.65798 2.06031C6.82367 2 7.0306 2 7.44444 2H16.5556C16.9694 2 17.1763 2 17.342 2.06031C17.6198 2.16141 17.8386 2.38021 17.9397 2.65798C18 2.82367 18 3.0306 18 3.44444V9C18 12.3137 15.3137 15 12 15ZM12 15V18M18 4H20.5C20.9659 4 21.1989 4 21.3827 4.07612C21.6277 4.17761 21.8224 4.37229 21.9239 4.61732C22 4.80109 22 5.03406 22 5.5V6C22 6.92997 22 7.39496 21.8978 7.77646C21.6204 8.81173 20.8117 9.62038 19.7765 9.89778C19.395 10 18.93 10 18 10M6 4H3.5C3.03406 4 2.80109 4 2.61732 4.07612C2.37229 4.17761 2.17761 4.37229 2.07612 4.61732C2 4.80109 2 5.03406 2 5.5V6C2 6.92997 2 7.39496 2.10222 7.77646C2.37962 8.81173 3.18827 9.62038 4.22354 9.89778C4.60504 10 5.07003 10 6 10M7.44444 22H16.5556C16.801 22 17 21.801 17 21.5556C17 19.5919 15.4081 18 13.4444 18H10.5556C8.59188 18 7 19.5919 7 21.5556C7 21.801 7.19898 22 7.44444 22Z" stroke="#2563EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></figure>
  1639.  
  1640.          <h2>The 2024 O&rsquo;Reilly Awards winners are in!</h2>
  1641.  
  1642.          <p>Learn who best put the O&rsquo;Reilly learning platform to work for their organization and what the judges were looking for in winning submissions.</p>
  1643.  
  1644.          <a id="awards-cta" href="https://www.oreilly.com/online-learning/oreilly-awards-winners-2024.html" class="textCTA-light"><span class="inner">Get the results</span></a>
  1645.        </div>
  1646.      </div>
  1647.    </section>
  1648.  
  1649.  
  1650.  
  1651.    <section class="home-experts">
  1652.      <div class="content">
  1653.        <div class="sectionText">
  1654.          <figure class="sectionLabel">
  1655.            <p>O&rsquo;Reilly Experts</p>
  1656.          </figure>
  1657.  
  1658.          <h2>Sharing the knowledge of innovators for over 40 years</h2>
  1659.  
  1660.          <p>From books to leading tech conferences to a groundbreaking online learning platform, we&rsquo;ve focused on creating the best technical learning content for more than four decades. Your teams can benefit from that experience.</p>
  1661.        </div>
  1662.  
  1663.        <div class="sectionFigure">
  1664.          <button class="button-left" id="home-experts-slider-button-left" type="button"></button>
  1665.  
  1666.          <div class="home-experts-slider">
  1667.            <div class="home-experts-panels" id="home-experts-panels">
  1668.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Arianne%20Dee%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=suggestion&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/images/live-online-training/39040-720x720.jpg)">
  1669.                <div class="text">
  1670.                  <span class="name">Arianne Dee</span>
  1671.                  <span class="affiliation">Pearson</span>
  1672.                </div>
  1673.              </a>
  1674.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Sari%20Greene%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/home_sari_greene_720x720.jpg)">
  1675.                <div class="text">
  1676.                  <span class="name">Sari Greene</span>
  1677.                  <span class="affiliation">Cybersecurity practitioner</span>
  1678.                </div>
  1679.              </a>
  1680.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Bruno%20Gon%C3%A7alves%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/images/live-online-training/39420-720x720.jpg)">
  1681.                <div class="text">
  1682.                  <span class="name">Bruno Gon&ccedil;alves</span>
  1683.                  <span class="affiliation">Senior data scientist</span>
  1684.                </div>
  1685.              </a>
  1686.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Neal%20Ford%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/home_neal_ford_720x720.jpg)">
  1687.                <div class="text">
  1688.                  <span class="name">Neal Ford</span>
  1689.                  <span class="affiliation">Software architect</span>
  1690.                </div>
  1691.              </a>
  1692.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Kelsey%20Hightower%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/kelsey_hightower_color_400x400.jpg)">
  1693.                <div class="text">
  1694.                  <span class="name">Kelsey Hightower</span>
  1695.                  <span class="affiliation">Software engineer</span>
  1696.                </div>
  1697.              </a>
  1698.              <a href="https://learning.oreilly.com/search/?query=author%3A%22Ken%20Kousen%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false" style="background-image: url(https://cdn.oreillystatic.com/oreilly/images/ken-kousen-400x400.jpg)">
  1699.                <div class="text">
  1700.                  <span class="name">Ken Kousen</span>
  1701.                  <span class="affiliation">Java Champion</span>
  1702.                </div>
  1703.              </a>
  1704.            </div>
  1705.          </div>
  1706.  
  1707.          <button class="button-right" id="home-experts-slider-button-right" type="button"></button>
  1708.        </div>
  1709.  
  1710.      </div>
  1711.    </section>
  1712.  
  1713.  
  1714.  
  1715.    <section class="home-whatsNext">
  1716.      <div class="content">
  1717.        <div class="sectionText">
  1718.          <h2>Keep your organization ahead of what&rsquo;s next</h2>
  1719.        </div>
  1720.  
  1721.        <div class="sectionFigure">
  1722.          <button class="button-left" id="home-whatsNext-slider-button-left" type="button"></button>
  1723.  
  1724.          <div class="home-whatsNext-frame" id="home-whatsNext-frame">
  1725.            <img class="active" src="https://cdn.oreillystatic.com/oreilly/images/bento_browser_live_events.jpg" alt="" data-target="live events">
  1726.            <img src="https://cdn.oreillystatic.com/oreilly/images/bento_browser_interactive_labs.jpg" alt="" data-target="interactive labs">
  1727.            <img src="https://cdn.oreillystatic.com/oreilly/images/bento_browser_courses.jpg" alt="" data-target="courses">
  1728.            <img src="https://cdn.oreillystatic.com/oreilly/images/bento_browser_certification.jpg" alt="" data-target="certifications">
  1729.          </div>
  1730.  
  1731.          <button class="button-right" id="home-whatsNext-slider-button-right" type="button"></button>
  1732.        </div>
  1733.  
  1734.        <div class="home-whatsNext-cards" id="home-whatsNext-cards">
  1735.          <div class="home-whatsNext-cards-item active" data-target="live events">
  1736.            <h2>Live events</h2>
  1737.  
  1738.            <p>Get in the virtual room with an expert instructor who&rsquo;ll take questions and guide you through today&rsquo;s most important tools and technologies.</p>
  1739.  
  1740.            <a href="https://www.oreilly.com/online-learning/live-online-sessions.html" class="textCTA">Learn from experts</a>
  1741.          </div>
  1742.  
  1743.          <div class="home-whatsNext-cards-item" data-target="interactive labs">
  1744.            <h2>Interactive labs</h2>
  1745.  
  1746.            <p>Get step-by-step guidance in a secure coding environment to learn fundamental concepts, practice a use case, prepare for a certification, or explore a new tool.</p>
  1747.  
  1748.            <a href="https://www.oreilly.com/online-learning/intro-interactive-learning.html" class="textCTA">Hands-on learning</a>
  1749.          </div>
  1750.  
  1751.          <div class="home-whatsNext-cards-item" data-target="courses">
  1752.            <h2>Courses</h2>
  1753.  
  1754.            <p>Pick the role you have (or the role you want) and we&rsquo;ll guide you to the top live and on-demand courses to learn the technologies and skills you need to succeed.</p>
  1755.  
  1756.            <a href="https://www.oreilly.com/online-learning/courses.html" class="textCTA">Explore courses</a>
  1757.          </div>
  1758.  
  1759.          <div class="home-whatsNext-cards-item" data-target="certifications">
  1760.            <h2>Certifications</h2>
  1761.  
  1762.            <p>A certification means you can trust they&rsquo;ve mastered the skills your organization needs. We help your people prep for their exams with direct paths to the official materials and interactive practice tests.</p>
  1763.  
  1764.            <a href="https://www.oreilly.com/online-learning/feature-certification.html" class="textCTA">Get them certified</a>
  1765.          </div>
  1766.        </div>
  1767.  
  1768.      </div>
  1769.    </section>
  1770.  
  1771.  
  1772.    <section class="home-courses">
  1773.      <div class="content">
  1774.        <a id="courses-image" href="https://www.oreilly.com/online-learning/courses.html" class="sectionFigure">
  1775.          <img src="https://cdn.oreillystatic.com/oreilly/images/laptop-flat-courses-20230228.png" alt="">
  1776.        </a>
  1777.  
  1778.        <div class="sectionText">
  1779.          <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.99994 4C5.44765 4 4.99994 4.44772 4.99994 5C4.99994 5.55228 5.44765 6 5.99994 6C6.55222 6 6.99994 5.55228 6.99994 5C6.99994 4.44772 6.55222 4 5.99994 4ZM2.99994 5C2.99994 3.34315 4.34308 2 5.99994 2C7.65679 2 8.99994 3.34315 8.99994 5C8.99994 6.65685 7.65679 8 5.99994 8C4.34308 8 2.99994 6.65685 2.99994 5ZM17.9999 4C17.4477 4 16.9999 4.44772 16.9999 5C16.9999 5.55228 17.4477 6 17.9999 6C18.5522 6 18.9999 5.55228 18.9999 5C18.9999 4.44772 18.5522 4 17.9999 4ZM14.9999 5C14.9999 3.34315 16.3431 2 17.9999 2C19.6568 2 20.9999 3.34315 20.9999 5C20.9999 6.65685 19.6568 8 17.9999 8C16.3431 8 14.9999 6.65685 14.9999 5ZM11.9999 10C10.8953 10 9.99988 10.8954 9.99988 12C9.99988 13.1046 10.8953 14 11.9999 14C13.1044 14 13.9999 13.1046 13.9999 12C13.9999 10.8954 13.1044 10 11.9999 10ZM7.99988 12C7.99988 9.79086 9.79074 8 11.9999 8C14.209 8 15.9999 9.79086 15.9999 12C15.9999 14.2091 14.209 16 11.9999 16C9.79074 16 7.99988 14.2091 7.99988 12ZM1.20044 11.3988C2.29342 9.94409 4.03657 9 5.99994 9C6.55222 9 6.99994 9.44772 6.99994 10C6.99994 10.5523 6.55222 11 5.99994 11C4.6921 11 3.53091 11.6266 2.79943 12.6002C2.46769 13.0417 1.84081 13.1307 1.39926 12.799C0.957713 12.4673 0.868699 11.8404 1.20044 11.3988ZM16.9999 10C16.9999 9.44772 17.4477 9 17.9999 9C19.9636 9 21.7069 9.94434 22.7999 11.3994C23.1316 11.841 23.0425 12.4679 22.6009 12.7996C22.1593 13.1313 21.5324 13.0422 21.2007 12.6006C20.4693 11.6268 19.3079 11 17.9999 11C17.4477 11 16.9999 10.5523 16.9999 10ZM5.4336 20.4279C6.87755 18.3578 9.27968 17 11.9991 17C14.7185 17 17.1206 18.3578 18.5646 20.4279C18.8806 20.8809 18.7695 21.5042 18.3165 21.8202C17.8635 22.1361 17.2402 22.0251 16.9242 21.5721C15.8383 20.0152 14.0372 19 11.9991 19C9.96102 19 8.15991 20.0152 7.07397 21.5721C6.75801 22.0251 6.13466 22.1361 5.68169 21.8202C5.22871 21.5042 5.11764 20.8809 5.4336 20.4279Z" fill="#2563EA"/></svg></figure>
  1780.  
  1781.          <h2>5,000+ courses to keep teams on the <span class="nowrap">right path</span></h2>
  1782.  
  1783.          <p>Our live and on-demand courses are organized by skill and role, and team members get verifiable and sharable badges that use the Open Badges 2.0 standard to show off what they&rsquo;ve learned.</p>
  1784.  
  1785.          <a id="courses-cta" href="https://www.oreilly.com/online-learning/courses.html" class="textCTA-light"><span class="inner">Explore courses</span></a>
  1786.        </div>
  1787.      </div>
  1788.    </section>
  1789.  
  1790.  
  1791.    <section class="home-live">
  1792.      <div class="content">
  1793.        <div class="sectionText">
  1794.          <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M19 10V12C19 15.866 15.866 19 12 19M5 10V12C5 15.866 8.13401 19 12 19M12 19V22M8 22H16M12 15C10.3431 15 9 13.6569 9 12V5C9 3.34315 10.3431 2 12 2C13.6569 2 15 3.34315 15 5V12C15 13.6569 13.6569 15 12 15Z" stroke="#2563EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></figure>
  1795.  
  1796.          <h2>Live events keep your organization ahead of what&rsquo;s next</h2>
  1797.  
  1798.          <p>Your teams have access to nearly 1,000 live online courses and events every year, led by top experts in AI, software architecture, cloud, data, programming, and more. And they can ask questions along the way.</p>
  1799.  
  1800.          <div class="sectionFigure">
  1801.            <img src="https://cdn.oreillystatic.com/oreilly/images/home_plot3_lot_600x600.jpg" alt="">
  1802.            <p>Kai Holnes, Thoughtworks</p>
  1803.          </div>
  1804.  
  1805.          <a id="live-cta" href="https://www.oreilly.com/online-learning/live-online-sessions.html" class="textCTA-dark"><span class="inner">Learn from experts</span></a>
  1806.        </div>
  1807.  
  1808.        <div class="sectionCards">
  1809.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_live_courses_400x400.jpg" alt="">
  1810.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_whatsnew_ai_400x400.png" alt="">
  1811.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_superstream_400x400.png" alt="">
  1812.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_whatsnew_io_400x400.jpg" alt="">
  1813.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_tech_leadership_tuesday_400x400.jpg" alt="">
  1814.          <img src="https://cdn.oreillystatic.com/oreilly/images/raven_whatsnew_sa_400x400.jpg" alt="">
  1815.        </div>
  1816.      </div>
  1817.    </section>
  1818.  
  1819.  
  1820.    <section class="home-certification">
  1821.      <div class="content">
  1822.        <div class="sectionText">
  1823.          <figure class="sectionIcon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M6.5 20H5C3.89543 20 3 19.1046 3 18V4C3 2.89543 3.89543 2 5 2H19C20.1046 2 21 2.89543 21 4V18C21 19.1046 20.1046 20 19 20H17.5M12 19C13.6569 19 15 17.6569 15 16C15 14.3431 13.6569 13 12 13C10.3431 13 9 14.3431 9 16C9 17.6569 10.3431 19 12 19ZM12 19L12.0214 18.9998L8.82867 22.1926L6.00024 19.3641L9.01965 16.3447M12 19L15.1928 22.1926L18.0212 19.3641L15.0018 16.3447M9 6H15M7 9.5H17" stroke="#2563EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></figure>
  1824.  
  1825.          <h2>Certified teams are teams you can count on</h2>
  1826.  
  1827.          <p>Trust that they&rsquo;ve mastered the skills your organization needs. Help your people prep for their certification exams with direct paths to the official materials and interactive practice tests.</p>
  1828.  
  1829.          <a id="certification-cta" href="https://www.oreilly.com/online-learning/feature-certification.html" class="textCTA-dark"><span class="inner">Get them certified</span></a>
  1830.        </div>
  1831.  
  1832.        <div class="sectionFigure">
  1833.          <img src="https://cdn.oreillystatic.com/oreilly/images/cert-vendor-logos.png" alt="">
  1834.        </div>
  1835.      </div>
  1836.    </section>
  1837.  
  1838.  
  1839.    <section class="home-cta">
  1840.      <div class="content">
  1841.        <div class="sectionText">
  1842.          <h2>See how O&rsquo;Reilly can help your tech teams stay ahead</h2>
  1843.  
  1844.          <div class="home-cta-btnGroup">
  1845.            <a id="requestDemo2-cta" href="https://www.oreilly.com/online-learning/enterprise.html" class="btnCTA-blue"><span class="inner">Request a  demo</span></a>
  1846.            <a id="tryFree2-cta" href="https://learning.oreilly.com/start-trial/" class="textCTA-blue"><span class="inner">Try it free</span></a>
  1847.          </div>
  1848.        </div>
  1849.      </div>
  1850.    </section>
  1851.  
  1852.    <div class="ravenBlobs">
  1853.      <div class="blob1"></div>
  1854.      <div class="blob2"></div>
  1855.      <div class="blob3"></div>
  1856.      <div class="blob4"></div>
  1857.      <div class="blob5"></div>
  1858.      <div class="blob6"></div>
  1859.    </div>
  1860. </span>
  1861.  
  1862.  
  1863. <script>
  1864. kWidget.addReadyCallback(function( playerId ){
  1865.  var kdp = document.getElementById( playerId );
  1866.  kdp.sendNotification("changeVolume", 1);
  1867.  
  1868.  kdp.kBind("firstPlay", function() {
  1869.    //GA
  1870.    /*
  1871.    dataLayer.push({
  1872.      'event': 'eventTracker',
  1873.      'eventCat': 'marketing',
  1874.      'eventAct': 'video play',
  1875.      'eventLbl': 'start',
  1876.      'eventVal': 0,
  1877.      'nonInteraction': 0
  1878.    });
  1879.    */
  1880.  });
  1881.  
  1882.  kdp.kBind("playerPlayEnd", function() {
  1883.    //GA
  1884.    /*
  1885.    dataLayer.push({
  1886.      'event': 'eventTracker',
  1887.      'eventCat': 'marketing',
  1888.      'eventAct': 'video play',
  1889.      'eventLbl': 'complete',
  1890.      'eventVal': 0,
  1891.      'nonInteraction': 0
  1892.    });
  1893.    */
  1894.  });
  1895. });
  1896.  
  1897. (function() {
  1898.  //Add thumbnail button controls
  1899.  const thumbnail1 = document.getElementById('js-testimonialThumbnail1');
  1900.  const thumbnail2 = document.getElementById('js-testimonialThumbnail2');
  1901.  const thumbnail3 = document.getElementById('js-testimonialThumbnail3');
  1902.  const thumbnail4 = document.getElementById('js-testimonialThumbnail4');
  1903.  const video1 = document.getElementById('js-testimonialVideo1');
  1904.  const video2 = document.getElementById('js-testimonialVideo2');
  1905.  const video3 = document.getElementById('js-testimonialVideo3');
  1906.  const video4 = document.getElementById('js-testimonialVideo4');
  1907.  const text1 = document.getElementById('js-testimonialText1');
  1908.  const text2 = document.getElementById('js-testimonialText2');
  1909.  const text3 = document.getElementById('js-testimonialText3');
  1910.  const text4 = document.getElementById('js-testimonialText4');
  1911.  
  1912.  thumbnail1.addEventListener('click', function(e) {
  1913.    e.preventDefault();
  1914.  
  1915.    thumbnail1.classList.add('active');
  1916.    video1.classList.remove('hidden');
  1917.    text1.classList.remove('hidden');
  1918.    // document.getElementById('kaltura_player_1689279523').sendNotification('doPlay');
  1919.  
  1920.    thumbnail2.classList.remove('active');
  1921.    text2.classList.add('hidden');
  1922.    video2.classList.add('hidden');
  1923.    document.getElementById('kaltura_player_1674688758').sendNotification('doPause');
  1924.  
  1925.    thumbnail3.classList.remove('active');
  1926.    text3.classList.add('hidden');
  1927.    video3.classList.add('hidden');
  1928.    document.getElementById('kaltura_player_1666285022').sendNotification('doPause');
  1929.  
  1930.    thumbnail4.classList.remove('active');
  1931.    text4.classList.add('hidden');
  1932.    video4.classList.add('hidden');
  1933.    document.getElementById('kaltura_player_1660838772').sendNotification('doPause');
  1934.  });
  1935.  
  1936.  thumbnail2.addEventListener('click', function(e) {
  1937.    e.preventDefault();
  1938.  
  1939.    thumbnail2.classList.add('active');
  1940.    video2.classList.remove('hidden');
  1941.    text2.classList.remove('hidden');
  1942.    // document.getElementById('kaltura_player_1674688758').sendNotification('doPlay');
  1943.  
  1944.    thumbnail1.classList.remove('active');
  1945.    text1.classList.add('hidden');
  1946.    video1.classList.add('hidden');
  1947.    document.getElementById('kaltura_player_1689279523').sendNotification('doPause');
  1948.  
  1949.    thumbnail3.classList.remove('active');
  1950.    text3.classList.add('hidden');
  1951.    video3.classList.add('hidden');
  1952.    document.getElementById('kaltura_player_1666285022').sendNotification('doPause');
  1953.  
  1954.    thumbnail4.classList.remove('active');
  1955.    text4.classList.add('hidden');
  1956.    video4.classList.add('hidden');
  1957.    document.getElementById('kaltura_player_1660838772').sendNotification('doPause');
  1958.  });
  1959.  
  1960.  thumbnail3.addEventListener('click', function(e) {
  1961.    e.preventDefault();
  1962.  
  1963.    thumbnail3.classList.add('active');
  1964.    video3.classList.remove('hidden');
  1965.    text3.classList.remove('hidden');
  1966.    // document.getElementById('kaltura_player_1666285022').sendNotification('doPlay');
  1967.  
  1968.    thumbnail1.classList.remove('active');
  1969.    text1.classList.add('hidden');
  1970.    video1.classList.add('hidden');
  1971.    document.getElementById('kaltura_player_1689279523').sendNotification('doPause');
  1972.  
  1973.    thumbnail2.classList.remove('active');
  1974.    text2.classList.add('hidden');
  1975.    video2.classList.add('hidden');
  1976.    document.getElementById('kaltura_player_1674688758').sendNotification('doPause');
  1977.  
  1978.    thumbnail4.classList.remove('active');
  1979.    text4.classList.add('hidden');
  1980.    video4.classList.add('hidden');
  1981.    document.getElementById('kaltura_player_1660838772').sendNotification('doPause');
  1982.  });
  1983.  
  1984.  thumbnail4.addEventListener('click', function(e) {
  1985.    e.preventDefault();
  1986.  
  1987.    thumbnail4.classList.add('active');
  1988.    video4.classList.remove('hidden');
  1989.    text4.classList.remove('hidden');
  1990.    // document.getElementById('kaltura_player_1660838772').sendNotification('doPlay');
  1991.  
  1992.    thumbnail1.classList.remove('active');
  1993.    text1.classList.add('hidden');
  1994.    video1.classList.add('hidden');
  1995.    document.getElementById('kaltura_player_1689279523').sendNotification('doPause');
  1996.  
  1997.    thumbnail2.classList.remove('active');
  1998.    text2.classList.add('hidden');
  1999.    video2.classList.add('hidden');
  2000.    document.getElementById('kaltura_player_1674688758').sendNotification('doPause');
  2001.  
  2002.    thumbnail3.classList.remove('active');
  2003.    text3.classList.add('hidden');
  2004.    video3.classList.add('hidden');
  2005.    document.getElementById('kaltura_player_1666285022').sendNotification('doPause');
  2006.  });
  2007.  
  2008.  
  2009.  //Hide DEIJ module after April 1, 2024.
  2010.  var today = new Date();
  2011.  deijScholarshipStartDate = new Date('2024-03-08T07:00:00.000-07:00');
  2012.  deijScholarshipEndDate = new Date('2024-04-02T00:00:00.000-07:00');
  2013.  
  2014.  //if during date range,
  2015.  //show the deij scholarship section
  2016.  if (today > deijScholarshipStartDate && today < deijScholarshipEndDate) {
  2017.    // Target exit intent overlay
  2018.    const deijSection = document.getElementById('deijSection');
  2019.    deijSection.classList.remove('hidden');
  2020.  }
  2021. })();
  2022.  
  2023.  
  2024.  
  2025. //Bento expert carousel controls
  2026. (function() {
  2027.  let carouselInner = document.getElementById('home-experts-panels');
  2028.  let slideDistance = 196; //carousel image width + gap
  2029.  let currentX = 0;
  2030.  let timeoutID;
  2031.  let sliding = false;
  2032.  
  2033.  function moveCarousel() {
  2034.    let transform = `translateX(${currentX}px)`;
  2035.    carouselInner.style.transform = transform;
  2036.  }
  2037.  
  2038.  document.getElementById('home-experts-slider-button-left').addEventListener('click', function (e) {
  2039.    if (sliding === false) {
  2040.      currentX = currentX - slideDistance;
  2041.      sliding = true;
  2042.  
  2043.      carouselInner.classList.add("stopMove");
  2044.      carouselInner.prepend(carouselInner.lastElementChild);
  2045.      moveCarousel();
  2046.  
  2047.      timeoutID = setTimeout(() => {
  2048.        carouselInner.classList.remove("stopMove");
  2049.        currentX = 0;
  2050.        moveCarousel();
  2051.      }, 1);
  2052.  
  2053.      setTimeout(() => {
  2054.        sliding = false;
  2055.      }, 400);
  2056.    }
  2057.  });
  2058.  
  2059.  document.getElementById('home-experts-slider-button-right').addEventListener('click', function (e) {
  2060.    if (sliding === false) {
  2061.      carouselInner.classList.remove("stopMove");
  2062.      currentX = currentX - slideDistance;
  2063.      sliding = true;
  2064.  
  2065.      moveCarousel();
  2066.      timeoutID = setTimeout(() => {
  2067.        carouselInner.classList.add("stopMove");
  2068.        carouselInner.appendChild(carouselInner.children[0]);
  2069.        currentX = 0;
  2070.        moveCarousel();
  2071.        sliding = false;
  2072.      }, 400);
  2073.    }
  2074.  });
  2075. })();
  2076.  
  2077.  
  2078. (function() {
  2079.  const whatsNextImages = document.getElementById('home-whatsNext-frame');
  2080.  const whatsNextCards = document.getElementById('home-whatsNext-cards');
  2081.  
  2082.  document.getElementById('home-whatsNext-slider-button-left').addEventListener('click', function (e) {
  2083.    const activeImage = whatsNextImages.querySelector('.active');
  2084.    var nextImage;
  2085.  
  2086.    const activeCard = whatsNextCards.querySelector('.active');
  2087.    var nextCard;
  2088.  
  2089.    if (activeImage.previousElementSibling != null) {
  2090.      nextImage = activeImage.previousElementSibling;
  2091.      nextCard = activeCard.previousElementSibling;
  2092.    } else {
  2093.      nextImage = whatsNextImages.lastElementChild;
  2094.      nextCard = whatsNextCards.lastElementChild;
  2095.    }
  2096.    activeImage.classList.remove('active');
  2097.    nextImage.classList.add('active');
  2098.  
  2099.    activeCard.classList.remove('active');
  2100.    nextCard.classList.add('active');
  2101.  });
  2102.  
  2103.  document.getElementById('home-whatsNext-slider-button-right').addEventListener('click', function (e) {
  2104.    const activeImage = whatsNextImages.querySelector('.active');
  2105.    var nextImage;
  2106.  
  2107.    const activeCard = whatsNextCards.querySelector('.active');
  2108.    var nextCard;
  2109.  
  2110.    if (activeImage.nextElementSibling != null) {
  2111.      nextImage = activeImage.nextElementSibling;
  2112.      nextCard = activeCard.nextElementSibling;
  2113.    } else {
  2114.      nextImage = whatsNextImages.firstElementChild;
  2115.      nextCard = whatsNextCards.firstElementChild;
  2116.    }
  2117.    activeImage.classList.remove('active');
  2118.    nextImage.classList.add('active');
  2119.  
  2120.    activeCard.classList.remove('active');
  2121.    nextCard.classList.add('active');
  2122.  });
  2123.  
  2124.  const cardItems = whatsNextCards.querySelectorAll('.home-whatsNext-cards-item');
  2125.  const cardLinks = whatsNextCards.querySelectorAll('a.textCTA');
  2126.  
  2127.  //Activate screenshots for each card click
  2128.  cardItems.forEach((item) => {
  2129.    item.addEventListener("click", function (e) {
  2130.      //If the card is not not already active
  2131.      if (!this.classList.contains('active')) {
  2132.        const activeImage = whatsNextImages.querySelector('.active');
  2133.        const activeCard = whatsNextCards.querySelector('.active');
  2134.  
  2135.        activeImage.classList.remove('active');
  2136.        whatsNextImages.querySelector('[data-target="' + this.dataset.target + '"]').classList.add('active');
  2137.  
  2138.        activeCard.classList.remove('active');
  2139.        this.classList.add('active');
  2140.      }
  2141.    });
  2142.  });
  2143.  
  2144.  //Prevent CTA links from activating cards
  2145.  cardLinks.forEach((item) => {
  2146.    item.addEventListener("click", function (e) {
  2147.      e.stopPropagation();
  2148.    });
  2149.  });
  2150. })();
  2151.  
  2152. </script>
  2153.  
  2154.  
  2155.  
  2156. <script src="https://cdn.oreillystatic.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  2157.  
  2158. <script>
  2159. document.addEventListener("DOMContentLoaded", function(event) {
  2160.  
  2161.  //GA event for "Let's talk CTA"
  2162.  $('#letsTalk').on('click', function(e) {
  2163.    dataLayer.push({
  2164.      'event': 'eventTracker',
  2165.      'eventCat':'marketing',
  2166.      'eventAct':'click',
  2167.      'eventLbl':'lets talk',
  2168.      'eventVal':0,
  2169.      'nonInteraction': 0,
  2170.    });
  2171.  });
  2172.  
  2173.  //GA event for "Learn more CTA"
  2174.  $('#onlineLearning-cta').on('click', function(e) {
  2175.    dataLayer.push({
  2176.      'event': 'eventTracker',
  2177.      'eventCat':'marketing',
  2178.      'eventAct':'click',
  2179.      'eventLbl':'learn more',
  2180.      'eventVal':0,
  2181.      'nonInteraction': 0,
  2182.    });
  2183.  });
  2184.  
  2185.  //GA event for business hero "Get Ahead CTA"
  2186.  $('#getAhead-cta').on('click', function(e) {
  2187.    dataLayer.push({
  2188.      'event': 'eventTracker',
  2189.      'eventCat':'marketing',
  2190.      'eventAct':'click',
  2191.      'eventLbl':'get ahead',
  2192.      'eventVal':0,
  2193.      'nonInteraction': 0,
  2194.    });
  2195.  });
  2196.  
  2197.  //GA event for "Request a demo" CTA
  2198.  $('#requestDemo1-cta-a, #requestDemo1-cta-b, #requestDemo1-cta-c, #requestDemo2-cta').on('click', function(e) {
  2199.    dataLayer.push({
  2200.      'event': 'eventTracker',
  2201.      'eventCat':'marketing',
  2202.      'eventAct':'click',
  2203.      'eventLbl':'request a demo',
  2204.      'eventVal':0,
  2205.      'nonInteraction': 0,
  2206.    });
  2207.  });
  2208.  
  2209.  //GA event for "Try it free" CTA
  2210.  $('#tryFree1-cta-a, #tryFree1-cta-b, #tryFree1-cta-c, #tryFree2-cta').on('click', function(e) {
  2211.    dataLayer.push({
  2212.      'event': 'eventTracker',
  2213.      'eventCat':'marketing',
  2214.      'eventAct':'click',
  2215.      'eventLbl':'try it free',
  2216.      'eventVal':0,
  2217.      'nonInteraction': 0,
  2218.    });
  2219.  });
  2220.  
  2221.  //GA event for "Generative AI Success Stories" CTA
  2222.  $('#event-preheadCta').on('click', function(e) {
  2223.    dataLayer.push({
  2224.      'event': 'eventTracker',
  2225.      'eventCat':'marketing',
  2226.      'eventAct':'click',
  2227.      'eventLbl':'announcement: ai academy',
  2228.      'eventVal':0,
  2229.      'nonInteraction': 0,
  2230.    });
  2231.  });
  2232.  
  2233.  //GA event for "Testimonials" CTA
  2234.  $('#testimonial-cta').on('click', function(e) {
  2235.    dataLayer.push({
  2236.      'event': 'eventTracker',
  2237.      'eventCat':'marketing',
  2238.      'eventAct':'click',
  2239.      'eventLbl':'see more testimonials',
  2240.      'eventVal':0,
  2241.      'nonInteraction': 0,
  2242.    });
  2243.  });
  2244.  
  2245.  //GA event for "Awards" CTA
  2246.  $('#awards-cta').on('click', function(e) {
  2247.    dataLayer.push({
  2248.      'event': 'eventTracker',
  2249.      'eventCat':'marketing',
  2250.      'eventAct':'click',
  2251.      'eventLbl':'awards see the results',
  2252.      'eventVal':0,
  2253.      'nonInteraction': 0,
  2254.    });
  2255.  });
  2256.  
  2257.  //GA event for "Answers" CTA
  2258.  $('#answers-cta').on('click', function(e) {
  2259.    dataLayer.push({
  2260.      'event': 'eventTracker',
  2261.      'eventCat':'marketing',
  2262.      'eventAct':'click',
  2263.      'eventLbl':'answers: discover answers',
  2264.      'eventVal':0,
  2265.      'nonInteraction': 0,
  2266.    });
  2267.  });
  2268.  
  2269.  //GA event for "ai academy" CTA
  2270.  $('#ai-academy-cta').on('click', function(e) {
  2271.    dataLayer.push({
  2272.      'event': 'eventTracker',
  2273.      'eventCat':'marketing',
  2274.      'eventAct':'click',
  2275.      'eventLbl':'ai academy: learn more',
  2276.      'eventVal':0,
  2277.      'nonInteraction': 0,
  2278.    });
  2279.  });
  2280.  
  2281.  //GA event for "courses" CTA
  2282.  $('#courses-cta, #courses-image').on('click', function(e) {
  2283.    dataLayer.push({
  2284.      'event': 'eventTracker',
  2285.      'eventCat':'marketing',
  2286.      'eventAct':'click',
  2287.      'eventLbl':'explore courses',
  2288.      'eventVal':0,
  2289.      'nonInteraction': 0,
  2290.    });
  2291.  });
  2292.  
  2293.  //GA event for "deij" CTA
  2294.  $('#deij-cta').on('click', function(e) {
  2295.    dataLayer.push({
  2296.      'event': 'eventTracker',
  2297.      'eventCat':'marketing',
  2298.      'eventAct':'click',
  2299.      'eventLbl':'2024 deij learn more',
  2300.      'eventVal':0,
  2301.      'nonInteraction': 0,
  2302.    });
  2303.  });
  2304.  
  2305.  //GA event for "Learn from experts" CTA
  2306.  $('#live-cta').on('click', function(e) {
  2307.    dataLayer.push({
  2308.      'event': 'eventTracker',
  2309.      'eventCat':'marketing',
  2310.      'eventAct':'click',
  2311.      'eventLbl':'learn from experts',
  2312.      'eventVal':0,
  2313.      'nonInteraction': 0,
  2314.    });
  2315.  });
  2316.  
  2317.  //GA event for "Get them certified" CTA
  2318.  $('#certification-cta').on('click', function(e) {
  2319.    dataLayer.push({
  2320.      'event': 'eventTracker',
  2321.      'eventCat':'marketing',
  2322.      'eventAct':'click',
  2323.      'eventLbl':'get them certified',
  2324.      'eventVal':0,
  2325.      'nonInteraction': 0,
  2326.    });
  2327.  });
  2328.  
  2329.  
  2330. });
  2331. </script>
  2332.  
  2333. <script>
  2334. (function() {
  2335.  //Adelphic pixel on page load
  2336.  var adelphicPixel = new Image(1,1);
  2337.  adelphicPixel.src="https://ad.ipredictive.com/d/track/cvt/pixel?acct_id=58840&cache_buster=" + Math.floor(Date.now()/1000);
  2338. })();
  2339. </script>
  2340.  
  2341.  
  2342.  
  2343.  
  2344.  </main>
  2345.  
  2346.  
  2347.  <footer id="footer" class="footer">
  2348.    <div class="content">
  2349.  
  2350.      <div class="footer-main" aria-label="company info">
  2351.        <div class="footer-mainLeft">
  2352.          <div class="footer-mainLeftOne">
  2353.            <div class="footer-approach">
  2354.              <h2 class="footer-header"><a href="/about/">About O&rsquo;Reilly</a></h2>
  2355.              <ul class="footer-links">
  2356.                <li><a href="/work-with-us.html">Teach/write/train</a></li>
  2357.                <li><a href="/careers/">Careers</a></li>
  2358.                <li><a href="/press/">O&rsquo;Reilly news</a></li>
  2359.                <li><a href="/press/media-coverage.html">Media coverage</a></li>
  2360.                <li><a href="/partner/signup.csp">Community partners</a></li>
  2361.                <li><a href="/affiliates/">Affiliate program</a></li>
  2362.                <li><a href="/online-learning/rfp.html">Submit an RFP</a></li>
  2363.                <li><a href="/diversity/">Diversity</a></li>
  2364.                <li><a href="/content-marketing-solutions.html" id="footerSponsorshipLink">O&rsquo;Reilly for marketers</a></li>
  2365.              </ul>
  2366.            </div>
  2367.          </div>
  2368.          <div class="footer-mainLeftTwo">
  2369.            <div class="footer-contact">
  2370.              <h2 class="footer-header"><a href="/online-learning/support/">Support</a></h2>
  2371.  
  2372.              <ul class="footer-links">
  2373.                <li><a href="/about/contact.html">Contact us</a></li>
  2374.                <li><a href="/emails/newsletters/">Newsletters</a></li>
  2375.                <li><a href="/privacy.html">Privacy policy</a></li>
  2376.                <li><a href="/about/oreilly-approach-to-generative-ai.html">AI policy</a></li>
  2377.              </ul>
  2378.  
  2379.              <a href="https://www.linkedin.com/company/oreilly-media" target="_blank"><svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32.25 32.25"><defs><style>.cls-1{fill:#d30000;fill-rule:evenodd;}</style></defs><title>linkedin-logo</title><path class="cls-1" d="M17.43,13.53v0l0,0ZM16.12,0A16.13,16.13,0,1,0,32.25,16.12,16.12,16.12,0,0,0,16.12,0ZM11.77,22.92H8.12v-11h3.65ZM9.94,10.44h0a1.89,1.89,0,0,1-2-1.89A1.91,1.91,0,0,1,10,6.65a1.9,1.9,0,1,1,0,3.79Zm15,12.48H21.28V17.05c0-1.48-.53-2.49-1.85-2.49a2,2,0,0,0-1.88,1.34,2.63,2.63,0,0,0-.12.89v6.13H13.79s.05-10,0-11h3.64V13.5a3.63,3.63,0,0,1,3.29-1.82c2.4,0,4.21,1.57,4.21,4.95Z"/></svg></a>
  2380.              <a href="https://www.youtube.com/user/OreillyMedia" target="_blank"><svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32.25 32.25"><defs><style>.cls-1{fill:#d30000;fill-rule:evenodd;}</style></defs><title>youtube-logo</title><path class="cls-1" d="M18.35,18.68a.89.89,0,0,0-.86.63V16.94h-1v7.59h1v-.59a.92.92,0,0,0,.89.74c.52,0,.86-.36,1-1.07a8.56,8.56,0,0,0,.14-1.9,10.47,10.47,0,0,0-.12-1.93C19.21,19.05,18.87,18.68,18.35,18.68Zm.09,4.14c-.05.52-.2.77-.45.77s-.43-.21-.49-.63a7.22,7.22,0,0,1,0-1c0-.72,0-1.14,0-1.26.07-.58.23-.88.51-.88s.4.27.46.79c0,.09,0,.47,0,1.13S18.46,22.71,18.44,22.82ZM8.61,18.19H9.86v6.34H11V18.19H12.2V16.94H8.61Zm7.71-6.12c.27,0,.43-.22.49-.66,0-.09,0-.45,0-1.07V9.78c0-.58,0-.93,0-1-.07-.43-.23-.65-.48-.65s-.41.19-.48.57a8.79,8.79,0,0,0,0,1v.53c0,.71,0,1.09,0,1.16C15.88,11.82,16.05,12.07,16.32,12.07Zm-1.74,10.4a2.92,2.92,0,0,1-.06.71c-.07.25-.2.37-.4.37s-.32-.11-.38-.34a2.63,2.63,0,0,1-.05-.66V18.83h-1v4.48c0,.91.33,1.37,1,1.37A1,1,0,0,0,14.6,24v.57h1v-5.7h-1Zm7.1-3.79a1.35,1.35,0,0,0-1.22.59,2.48,2.48,0,0,0-.3,1.07c0,.23,0,.61,0,1.16s0,1.13,0,1.37a2.93,2.93,0,0,0,.35,1.27,1.25,1.25,0,0,0,1.14.54,1.36,1.36,0,0,0,1.13-.45,2.29,2.29,0,0,0,.37-1.43s0-.07,0-.11v-.12h-1c0,.75-.17,1.12-.51,1.12s-.38-.18-.45-.56a4.68,4.68,0,0,1-.06-.9c0-.18,0-.31,0-.37h2v-.43a4.86,4.86,0,0,0-.3-2.11A1.28,1.28,0,0,0,21.68,18.68ZM22.15,21h-1c0-.05,0-.11,0-.16v-.08a1.64,1.64,0,0,1,.11-.8.39.39,0,0,1,.38-.23.42.42,0,0,1,.43.33,2.32,2.32,0,0,1,.07.7Zm-6-21A16.13,16.13,0,1,0,32.25,16.12,16.12,16.12,0,0,0,16.12,0Zm2.51,7.2h1V11a2.52,2.52,0,0,0,.06.66c.06.23.18.34.38.34s.34-.12.41-.37a3.76,3.76,0,0,0,.05-.71V7.2h1v5.74h-1v-.57a1,1,0,0,1-.93.72c-.66,0-1-.46-1-1.38ZM15,8a1.29,1.29,0,0,1,1.33-.92A1.3,1.3,0,0,1,17.65,8a6.77,6.77,0,0,1,.23,2.1,6.77,6.77,0,0,1-.23,2.1,1.3,1.3,0,0,1-1.32.92A1.29,1.29,0,0,1,15,12.17a6.77,6.77,0,0,1-.23-2.1A6.86,6.86,0,0,1,15,8ZM11.45,5.3l.89,2.87.88-2.87H14.4L12.88,9.7v3.24h-1.1V9.7L10.24,5.3ZM24.93,23.91a3,3,0,0,1-3,3h-12a3,3,0,0,1-3-3V18.05a3,3,0,0,1,3-3h12a3,3,0,0,1,3,3Z"/></svg></a>
  2381.            </div>
  2382.  
  2383.            <div class="footer-international">
  2384.              <h2 class="footer-header">International</h2>
  2385.              <ul class="footer-links">
  2386.                <li><a href="https://www.oreilly.com/anz/">Australia &amp; New Zealand</a></li>
  2387.                <li><a href="https://oreilly.hk/">Hong Kong &amp; Taiwan</a></li>
  2388.                <li><a href="https://oreillylearning.in/">India</a></li>
  2389.                <li><a href="https://oreilly.id/">Indonesia</a></li>
  2390.                <li><a href="https://www.oreilly.co.jp/index.shtml">Japan</a></li>
  2391.              </ul>
  2392.            </div>
  2393.          </div>
  2394.        </div>
  2395.  
  2396.        <div class="footer-download" id="download-info">
  2397.          <h2 class="footer-header">Download the O&rsquo;Reilly App</h2>
  2398.  
  2399.          <p>Take O&rsquo;Reilly with you and learn anywhere, anytime on your phone <span class="nowrap">and tablet.</span></p>
  2400.  
  2401.          <div class="footer-downloadLinks">
  2402.            <a href="https://itunes.apple.com/us/app/safari-to-go/id881697395"><img src="https://cdn.oreillystatic.com/oreilly/images/app-store-logo.png" alt="Apple app store" /></a>
  2403.            <a href="https://play.google.com/store/apps/details?id=com.safariflow.queue"><img src="https://cdn.oreillystatic.com/oreilly/images/google-play-logo.png"  alt="Google play store" /></a>
  2404.          </div>
  2405.        </div>
  2406.  
  2407.        <div class="footer-download" id="tv-info">
  2408.          <h2 class="footer-header">Watch on your big screen</h2>
  2409.  
  2410.          <p>View all O&rsquo;Reilly videos, Superstream events, and Meet the Expert sessions on your <span class="nowrap">home TV.</span></p>
  2411.  
  2412.          <div class="footer-downloadLinks">
  2413.            <a href="https://channelstore.roku.com/details/c8a2d0096693eb9455f6ac165003ee06/oreilly"><img src="https://cdn.oreillystatic.com/oreilly/images/roku-tv-logo.png" alt="Roku Players and TVs" /></a>
  2414.            <a href="https://www.amazon.com/OReilly-Media-Inc/dp/B087YYHL5C/ref=sr_1_2?dchild=1&keywords=oreilly&qid=1604964116&s=mobile-apps&sr=1-2"><img src="https://cdn.oreillystatic.com/oreilly/images/amazon-appstore-logo.png"  alt="Amazon appstore" /></a>
  2415.          </div>
  2416.        </div>
  2417.        
  2418.        <div class="footer-donotsell" id="donotsell-info">
  2419.          <h2 class="footer-header"><a href="https://www.oreilly.com/privacy.html?donotsell=show">Do not sell or share my personal information</a></h2>
  2420.  
  2421.  
  2422.        </div>
  2423.      </div>
  2424.  
  2425.      <div class="footer-subfooter">
  2426.  
  2427.        <a href="https://www.oreilly.com" title="home page" aria-current="page">
  2428.          <img
  2429.          class="footer-subfooterLogo"
  2430.          id="footer-subfooterLogo"
  2431.          src="https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg"
  2432.          onerror="this.src='https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red_@2x.png'; this.onerror=null;"
  2433.          alt="O'Reilly home">
  2434.        </a>
  2435.  
  2436.        <p>&copy; 2024, O&rsquo;Reilly Media, Inc.  All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p>
  2437.        <p><a href="/terms/">Terms of service</a> &bull; <a href="/privacy.html">Privacy policy</a> &bull; <a href="/about/editorial_independence.html">Editorial independence</a><span class="transparencyStatement" style="display:none;"> &bull; <a href="/modern-slavery-act-transparency-statement.html">Modern Slavery Act Statement</a></span></p>
  2438.      </div>
  2439.  
  2440.    </div>
  2441.  </footer>
  2442.  
  2443.  <script src="https://cdn.oreillystatic.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
  2444.  
  2445.  <script>
  2446.  $(function() {
  2447.    //Toggle isActive and mobileHidden classes for mobileNavButton
  2448.    $('nav #mobileNavButton').on('click', function() {
  2449.      var expanded = $(this).attr('aria-expanded') === 'true' || false;
  2450.      $(this).attr('aria-expanded', !expanded);
  2451.      $(this).toggleClass("isActive");
  2452.      $(this).next().toggleClass("mobileHidden");
  2453.    });
  2454.  
  2455.    //Toggle isFocused class for keyboard navigation of submenus
  2456.    $('nav #menuList .menuList-subItem a').each(function(navItem) {
  2457.      $(this).on('focus', function() {
  2458.        $(this).parent().parent().toggleClass('isFocused');
  2459.      });
  2460.      $(this).on('blur', function() {
  2461.        $(this).parent().parent().toggleClass('isFocused');
  2462.      });
  2463.    });
  2464.  
  2465.    //Toggle mobileHidden class accordian elements
  2466.    $('.mobileAccordian').each(function() {
  2467.      var $btn = $(this).find('button');
  2468.      var $target =  $(this).next();
  2469.      $btn.on('click', function() {
  2470.        var expanded = $btn.attr('aria-expanded') === 'true' || false;
  2471.  
  2472.        $btn.attr('aria-expanded', !expanded);
  2473.        $target.toggleClass("mobileHidden");  
  2474.      });
  2475.    });
  2476.  
  2477.    //Search platform form action
  2478.    function searchSubmit(e) {
  2479.      e.preventDefault();
  2480.      sParameter = searchForm.search.value;
  2481.      sParameter = encodeURIComponent(sParameter.trim());
  2482.      sURL = searchForm.action + '?query=' + sParameter;
  2483.      window.location = sURL;
  2484.  
  2485.      //GA event for search
  2486.      dataLayer.push({
  2487.        'event': 'eventTracker',
  2488.        'eventCat':'site search',
  2489.        'eventAct':'search box',
  2490.        'eventLbl':'explore our content',
  2491.        'eventVal':0,
  2492.        'nonInteraction': 0,
  2493.      });
  2494.    }
  2495.    const searchForm = document.getElementById('js-searchForm');
  2496.    searchForm.addEventListener('submit', searchSubmit);
  2497.  
  2498.  
  2499.    //Search button action
  2500.    function showNavSearch(e) {
  2501.      $('.menuList-item-search').addClass('overlay');
  2502.      $('.menuList-item-search input#search').focus();
  2503.    }
  2504.    const searchButton = document.getElementById('js-searchButton');
  2505.    searchButton.addEventListener('click', showNavSearch);
  2506.  
  2507.  
  2508.    //Close search button action
  2509.    function hideNavSearch(e) {
  2510.      $('.menuList-item-search').removeClass('overlay');
  2511.    }
  2512.    const searchCloseButton = document.getElementById('js-searchCloseButton');
  2513.    searchCloseButton.addEventListener('click', hideNavSearch);
  2514.  
  2515.    //"Try Now" nav button tracking
  2516.    $('#nav-tryNow').on('click', function() {
  2517.      dataLayer.push({
  2518.        'event': 'eventTracker',
  2519.        'eventCat':'marketing',
  2520.        'eventAct':'nav',
  2521.        'eventLbl':'try now',
  2522.        'eventVal':0,
  2523.        'nonInteraction': 0,
  2524.      });
  2525.    });
  2526.  
  2527.    //"Sign in" nav button tracking
  2528.    $('#nav-signIn').on('click', function() {
  2529.      dataLayer.push({
  2530.        'event': 'eventTracker',
  2531.        'eventCat':'marketing',
  2532.        'eventAct':'nav',
  2533.        'eventLbl':'sign in',
  2534.        'eventVal':0,
  2535.        'nonInteraction': 0,
  2536.      });
  2537.    });
  2538.  
  2539.    //"O'Reilly Platform" nav button tracking
  2540.    $('#nav-platform').on('click', function() {
  2541.      dataLayer.push({
  2542.        'event': 'eventTracker',
  2543.        'eventCat':'marketing',
  2544.        'eventAct':'nav',
  2545.        'eventLbl':'oreilly platform',
  2546.        'eventVal':0,
  2547.        'nonInteraction': 0,
  2548.      });
  2549.    });
  2550.  
  2551.  });
  2552.  
  2553.  (function(document, history, location) {
  2554.    var HISTORY_SUPPORT = !!(history && history.pushState);
  2555.    FIXED_HEADER_HEIGHT = document.querySelector('body > header').offsetHeight;
  2556.    FIXED_HEADER_HEIGHT += 20;
  2557.    var anchorScrolls = {
  2558.      ANCHOR_REGEX: /^#[^ ]+$/,
  2559.      OFFSET_HEIGHT_PX: FIXED_HEADER_HEIGHT,
  2560.  
  2561.      /**
  2562.       * Establish events, and fix initial scroll position if a hash is provided.
  2563.       */
  2564.      init: function() {
  2565.        this.scrollToCurrent();
  2566.        window.addEventListener('hashchange', this.scrollToCurrent.bind(this));
  2567.        document.body.addEventListener('click', this.delegateAnchors.bind(this));
  2568.      },
  2569.  
  2570.      /**
  2571.       * Return the offset amount to deduct from the normal scroll position.
  2572.       * Modify as appropriate to allow for dynamic calculations
  2573.       */
  2574.      getFixedOffset: function() {
  2575.        return this.OFFSET_HEIGHT_PX;
  2576.      },
  2577.  
  2578.      /**
  2579.       * If the provided href is an anchor which resolves to an element on the
  2580.       * page, scroll to it.
  2581.       * @param  {String} href
  2582.       * @return {Boolean} - Was the href an anchor.
  2583.       */
  2584.      scrollIfAnchor: function(href, pushToHistory) {
  2585.        var match, rect, anchorOffset;
  2586.  
  2587.        if(!this.ANCHOR_REGEX.test(href)) {
  2588.          return false;
  2589.        }
  2590.  
  2591.        match = document.getElementById(href.slice(1));
  2592.  
  2593.        if(match) {
  2594.          rect = match.getBoundingClientRect();
  2595.          anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();
  2596.          // Wait 1ms and scroll. It wasn't consistently scrolling immediately.
  2597.          setTimeout(function(){
  2598.            window.scroll(window.pageXOffset, anchorOffset);
  2599.          }, 1);
  2600.  
  2601.          // Add the state to history as-per normal anchor links
  2602.          if(HISTORY_SUPPORT && pushToHistory) {
  2603.            history.pushState({}, document.title, location.pathname + href);
  2604.          }
  2605.        }
  2606.  
  2607.        return !!match;
  2608.      },
  2609.  
  2610.      /**
  2611.       * Attempt to scroll to the current location's hash.
  2612.       */
  2613.      scrollToCurrent: function() {
  2614.        this.scrollIfAnchor(window.location.hash);
  2615.      },
  2616.  
  2617.      /**
  2618.       * If the click event's target was an anchor, fix the scroll position.
  2619.       */
  2620.      delegateAnchors: function(e) {
  2621.        var elem = e.target;
  2622.  
  2623.        if(
  2624.          elem.nodeName === 'A' &&
  2625.          this.scrollIfAnchor(elem.getAttribute('href'), true)
  2626.        ) {
  2627.          e.preventDefault();
  2628.        }
  2629.      }
  2630.    };
  2631.  
  2632.    window.addEventListener(
  2633.      'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls)
  2634.    );
  2635.  })(window.document, window.history, window.location);
  2636.  </script><script type="text/javascript"  src="/4BMbyV/6x/TA/7-9l/IiohB1MKq3/X99SbhDwz4wp/ejN9VGIBBQ/SCBmMm/k1HxwB"></script><link rel="stylesheet" type="text/css"  href="/4BMbyV/6x/TA/7-9l/IiohB1MKq3/VQ/dARdVGIBBQ/bnsSHC/0DAg1Y">
  2637.                                        <script  src="/4BMbyV/6x/TA/7-9l/IiohB1MKq3/VQ/dARdVGIBBQ/IjcPcA/cJLX0o" async defer></script>
  2638.                                        <div id="sec-overlay" style="display:none;">
  2639.                                        <div id="sec-container">
  2640.                                        </div>
  2641.                                      </div></body>
  2642.  
  2643.  
  2644. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda