.tracker-container{ display:flex; -webkit-display:flex; width:100%; max-width:640px; margin:0 auto 48px auto; border-radius:12px; overflow:hidden; box-shadow: 0 6px 0 #967bb6; font-family: 'Rajdhani', sans-serif; font-weight:bold; font-size:22px; text-transform:uppercase; } .tracker-label{ padding:24px; text-align:center; background-color:#613290; color:#ffffff; width:65%; } .tracker-number{ padding:24px; text-align:center; background-color:#7a57a2; color:#ffffff; width:35%; } .images{ display:flex; justify-content:center; } .button{ display:inline-block; padding:8px 12px; font-weight: 700; text-decoration:none; background-color:#fff; color:#582c83; border:1px solid #582c83; transition:.15s; font-family: 'Rajdhani', sans-serif; text-transform:uppercase; position:relative; z-index:2; } .button:after{ content:''; display:block; position:absolute; left:0; top:0; height:100%; width:0; transition:.15s; z-index:-1; background:#582c83; } .button:hover{ color:#fff; } .button:hover:after{ width:100%; } .headsup{ display:flex; flex-wrap:wrap; }
NU Reading Program Logo


About:

PLEASE NOTE: THE 2025 READING PROGRAM HAS CONCLUDED, WITH 230 KIDS READING OVER 3,482 BOOKS IN THE MONTH OF MARCH! CHECK BACK IN FEBRUARY 2026 FOR NEXT YEAR'S PROGRAM. 

Every March, Northwestern Athletics encourages youth to get out and read! Local students in grades K-8 can earn prizes by reading books throughout the month. For every three books read, up to 18 books, students can earn a prize from Northwestern Athletics and Willie the Wildcat!  

There are two ways to get involved. 

Participate as a classroom:  
Local organizations – such as schools, individual classrooms, and before and after school programs can participate as a collective. To participate, your teacher or group leader can email rebekah.sigman@northwestern.edu with the estimated number of participants and your group name. Your group leader can submit one list via email for all students, including the number of books read by each student, by 5:00 pm on April 1, 2025. Prize packs will be delivered to your organization on April 3rd.   
 
Participate as an individual:  
If your child is interested in the reading program and they are not affiliated with a classroom or organization already participating, a parent or guardian can complete our online submission form. At any time between March 1 and April 1, complete the sign-up form below indicating the number of books the student has read. Prizes can then be picked up on April 4th from 9:00-11:30 or 2:00-3:45 at 2701 Ashland Avenue. You can email rebekah.sigman@northwestern.edu with any questions.


PLEASE NOTE: THIS FORM IS NO LONGER ACCEPTING SUBMISSIONS AND WILL REOPEN IN 2026. 

Submit Your ReadINg Total & Claim Your Prize

Northwestern University’s student-athletes visited with students ages 5-12 at Books for Breakfast, a before school program offering a nutritious breakfast, homework assistance, and emotional care to Evanston students. Students who read 18 books won the grand prize package.


Resources for Readers:

Click here to download the Book Tracker. var image = document.getElementById("img1"); var src = ["/images/2021/1/27/Rose_Coloring.png", "/images/2021/1/27/IMG_7713_71.JPG", "/images/2022/6/28/20211102_080030.jpg", "/images/2022/6/28/20211102_081715.jpg", "/images/2022/6/28/20211102_081709.jpg", "/images/2022/6/28/20211102_081729.jpg", "/images/2022/6/28/20211102_081741.jpg", "/images/2021/1/27/Books_for_Buckets_Palchak2_71.jpg",]; var home = "default"; var alt =["Books for Buckets Rose", "Books for Buckets image 2", "Books for Buckets image 3", "Books for Buckets image 4", "Books for Buckets image 5", "Books for Buckets image 6", "Books for Buckets image 7", "Books for Buckets image 1"] if (home == "mscr") { image.src = "scr_img.jpg"; image.alt = "Men's Soccer Facilities Photo" } else if (home == "wtrk") { image.src = "wtrk_img.jpg"; image.alt = "Women's Track Facilities Photo" } else { var step=0 function slideit() { image.src = src[step]; image.alt = alt[step]; if(step<7){ step++; }else{ step=0; } } setInterval(slideit,5000); } .footer{ margin: auto; width: 100%; text-align: center; padding: 10px; background-color:#003DA5; border: 1px solid #fff; color:#fff; } .footer a{ color:#fff; } .carousel-wrapper { overflow: hidden; box-sizing: border-box; } .carousel-wrapper-two { overflow: hidden; width:50%; margin:auto; box-sizing: border-box; } .carousel { transform-style: preserve-3d; } .carousel__photo { opacity: 0; position: absolute; top:0; width: 100%; margin: auto; padding: 1rem 4rem; z-index: 100; transition: transform .5s, opacity .5s, z-index .5s; } .carousel__photo.initial, .carousel__photo.active { opacity: 1; position: relative; z-index: 900; } .carousel__photo.prev, .carousel__photo.next { z-index: 800; } .carousel__photo.prev { transform: translateX(-100%); /* Move 'prev' item to the left */ } .carousel__photo.next { transform: translateX(100%); /* Move 'next' item to the right */ } .carousel__button--prev, .carousel__button--next { position: absolute; top:50%; width: 3rem; height: 3rem; background-color:rgba(255,255,255,0.0); transform: translateY(-50%); border-radius: 50%; cursor: pointer; z-index: 1001; /* Sit on top of everything */ } .carousel__button--prev { left:0; } .carousel__button--next { right:0; } .carousel__button--prev::after, .carousel__button--next::after { content: " "; position: absolute; width: 10px; height: 10px; top: 50%; left: 54%; border-right: 2px solid black; border-bottom: 2px solid black; transform: translate(-50%, -50%) rotate(135deg); } .carousel__button--next::after { left: 47%; transform: translate(-50%, -50%) rotate(-45deg); } .carousel-two { transform-style: preserve-3d; } .carousel__photo-two { opacity: 0; position: absolute; top:0; width: 100%; margin: auto; padding: 1rem 4rem; z-index: 100; transition: transform .5s, opacity .5s, z-index .5s; } .carousel__photo-two.initial, .carousel__photo-two.active { opacity: 1; position: relative; z-index: 900; } .carousel__photo-two.prev, .carousel__photo-two.next { z-index: 800; } .carousel__photo-two.prev { transform: translateX(-100%); /* Move 'prev' item to the left */ } .carousel__photo-two.next { transform: translateX(100%); /* Move 'next' item to the right */ } .carousel__button-two--prev, .carousel__button-two--next { position: absolute; top:50%; width: 3rem; height: 3rem; background-color:rgba(255,255,255,0.0); transform: translateY(-50%); border-radius: 50%; cursor: pointer; z-index: 1001; /* Sit on top of everything */ } .carousel__button-two--prev { left:0; } .carousel__button-two--next { right:0; } .carousel__button-two--prev::after, .carousel__button-two--next::after { content: " "; position: absolute; width: 10px; height: 10px; top: 50%; left: 54%; border-right: 2px solid black; border-bottom: 2px solid black; transform: translate(-50%, -50%) rotate(135deg); } .carousel__button-two--next::after { left: 47%; transform: translate(-50%, -50%) rotate(-45deg); } @media screen and (max-width: 800px) { .carousel-wrapper-two { width:100%; } } !(function(d){ // Variables to target our base class, get carousel items, count how many carousel items there are, set the slide to 0 (which is the number that tells us the frame we're on), and set motion to true which disables interactivity. var itemClassName = "carousel__photo"; items = d.getElementsByClassName(itemClassName), totalItems = items.length, slide = 0, moving = true; // To initialise the carousel we'll want to update the DOM with our own classes function setInitialClasses() { // Target the last, initial, and next items and give them the relevant class. // This assumes there are three or more items. items[totalItems - 1].classList.add("prev"); items[0].classList.add("active"); items[1].classList.add("next"); } // Set click events to navigation buttons function setEventListeners() { var next = d.getElementsByClassName('carousel__button--next')[0], prev = d.getElementsByClassName('carousel__button--prev')[0]; next.addEventListener('click', moveNext); prev.addEventListener('click', movePrev); } // Disable interaction by setting 'moving' to true for the same duration as our transition (0.5s = 500ms) function disableInteraction() { moving = true; setTimeout(function(){ moving = false }, 500); } function moveCarouselTo(slide) { // Check if carousel is moving, if not, allow interaction if(!moving) { // temporarily disable interactivity disableInteraction(); // Preemptively set variables for the current next and previous slide, as well as the potential next or previous slide. var newPrevious = slide - 1, newNext = slide + 1, oldPrevious = slide - 2, oldNext = slide + 2; // Test if carousel has more than three items if ((totalItems - 1) > 3) { // Checks if the new potential slide is out of bounds and sets slide numbers if (newPrevious <= 0) { oldPrevious = (totalItems - 1); } else if (newNext >= (totalItems - 1)){ oldNext = 0; } // Check if current slide is at the beginning or end and sets slide numbers if (slide === 0) { newPrevious = (totalItems - 1); oldPrevious = (totalItems - 2); oldNext = (slide + 1); } else if (slide === (totalItems -1)) { newPrevious = (slide - 1); newNext = 0; oldNext = 1; } // Now we've worked out where we are and where we're going, by adding and removing classes, we'll be triggering the carousel's transitions. // Based on the current slide, reset to default classes. items[oldPrevious].className = itemClassName; items[oldNext].className = itemClassName; // Add the new classes items[newPrevious].className = itemClassName + " prev"; items[slide].className = itemClassName + " active"; items[newNext].className = itemClassName + " next"; } } } // Next navigation handler function moveNext() { // Check if moving if (!moving) { // If it's the last slide, reset to 0, else +1 if (slide === (totalItems - 1)) { slide = 0; } else { slide++; } // Move carousel to updated slide moveCarouselTo(slide); } } // Previous navigation handler function movePrev() { // Check if moving if (!moving) { // If it's the first slide, set as the last slide, else -1 if (slide === 0) { slide = (totalItems - 1); } else { slide--; } // Move carousel to updated slide moveCarouselTo(slide); } } // Initialise carousel function initCarousel() { setInitialClasses(); setEventListeners(); // Set moving to false now that the carousel is ready moving = false; } // make it rain initCarousel(); }(document)); !(function(b){ // Variables to target our base class, get carousel items, count how many carousel items there are, set the slide to 0 (which is the number that tells us the frame we're on), and set motion to true which disables interactivity. var itemClassN = "carousel__photo-two"; itemz = b.getElementsByClassName(itemClassN), totalItemz = itemz.length, slyde = 0, movin = true; // To initialise the carousel we'll want to update the DOM with our own classes function setInitClasses() { // Target the last, initial, and next items and give them the relevant class. // This assumes there are three or more items. itemz[totalItemz - 1].classList.add("prev"); itemz[0].classList.add("active"); itemz[1].classList.add("next"); } // Set click events to navigation buttons function setEvntListeners() { var next = b.getElementsByClassName('carousel__button-two--next')[0], prev = b.getElementsByClassName('carousel__button-two--prev')[0]; next.addEventListener('click', moveNxt); prev.addEventListener('click', movePrv); } // Disable interaction by setting 'moving' to true for the same duration as our transition (0.5s = 500ms) function disInteraction() { movin = true; setTimeout(function(){ movin = false }, 500); } function moveCarouselT(slyde) { // Check if carousel is moving, if not, allow interaction if(!movin) { // temporarily disable interactivity disInteraction(); // Preemptively set variables for the current next and previous slyde, as well as the potential next or previous slide. var newPrev = slyde - 1, newNxt = slyde + 1, oldPrev = slyde - 2, oldNxt = slyde + 2; // Test if carousel has more than three items if ((totalItemz - 1) > 3) { // Checks if the new potential slide is out of bounds and sets slide numbers if (newPrev <= 0) { oldPrev = (totalItemz - 1); } else if (newNxt >= (totalItemz - 1)){ oldNxt = 0; } // Check if current slide is at the beginning or end and sets slide numbers if (slyde === 0) { newPrev = (totalItemz - 1); oldPrev = (totalItemz - 2); oldNxt = (slyde + 1); } else if (slyde === (totalItemz -1)) { newPrev = (slyde - 1); newNxt = 0; oldNxt = 1; } // Now we've worked out where we are and where we're going, by adding and removing classes, we'll be triggering the carousel's transitions. // Based on the current slide, reset to default classes. itemz[oldPrev].className = itemClassN; itemz[oldNxt].className = itemClassN; // Add the new classes itemz[newPrev].className = itemClassN + " prev"; itemz[slyde].className = itemClassN + " active"; itemz[newNxt].className = itemClassN + " next"; } } } // Next navigation handler function moveNxt() { // Check if moving if (!movin) { // If it's the last slide, reset to 0, else +1 if (slyde === (totalItemz - 1)) { slyde = 0; } else { slyde++; } // Move carousel to updated slide moveCarouselT(slyde); } } // Previous navigation handler function movePrv() { // Check if moving if (!movin) { // If it's the first slide, set as the last slide, else -1 if (slyde === 0) { slyde = (totalItemz - 1); } else { slyde--; } // Move carousel to updated slide moveCarouselT(slyde); } } // Initialise carousel function iCarousel() { setInitClasses(); setEvntListeners(); // Set moving to false now that the carousel is ready movin = false; } // make it rain iCarousel(); }(document));