Find my RETC

The Learning Technology Center divides the state into five regions: North, East Central, West Central, South, and Chicagoland. Each region is supported by a Regional Educational Technology Coordinator (RETC) who provides direct consulting, professional development, and technology support to districts.

var areaData = {“Chicagoland”:{“image”:”https:\/\/www.ltcillinois.org\/wp-content\/uploads\/2026\/03\/Brian-Krause-scaled.png”,”title”:”Brian Krause”,”bio”:”Regional Educational Technology Coordinator for the Chicagoland region”},”East”:{“image”:”https:\/\/www.ltcillinois.org\/wp-content\/uploads\/2020\/01\/Patricia-LTC-Staff-Photos-Template-2024-Color-Blobs.png”,”title”:”Patricia Ferris, M.Ed”,”bio”:”Regional Educational Technology Coordinator for the East Central region”},”North”:{“image”:”https:\/\/www.ltcillinois.org\/wp-content\/uploads\/2020\/01\/ben-sondgeroth.jpg”,”title”:”Ben Sondgeroth”,”bio”:”Lead Regional Educational Technology Coordinator for Northern Illinois”},”South”:{“image”:”https:\/\/www.ltcillinois.org\/wp-content\/uploads\/2020\/01\/emily-flach.jpg”,”title”:”Emily Flach”,”bio”:”Regional Educational Technology Coordinator for the Southern region”},”West”:{“image”:”https:\/\/www.ltcillinois.org\/wp-content\/uploads\/2020\/01\/lisa-schwartz.jpg”,”title”:”Lisa Schwartz”,”bio”:”Regional Educational Technology Coordinator for the West Central region”}};

Chicagoland

Brian Krause

East

Patricia Ferris, M.Ed

North

Ben Sondgeroth

South

Emily Flach

West

Lisa Schwartz
/* General Container */ .account-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; padding: 0 20px; max-width: 1200px; margin: 0 auto; } /* Search Results Container */ #searchResults { margin-top: 32px; width: 100%; } #searchResults .account-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; grid-auto-rows: auto; padding: 0 20px; max-width: 1200px; margin: 0 auto; } /* No Results Message */ .no-results { text-align: center; padding: 40px; font-size: 16px; color: #666; } /* Individual Cards */ .account-card { background: #FFFFFF; border: 1px solid #E6E6E6; border-radius: 8px; overflow: hidden; text-decoration: none; color: #333; transition: all 0.3s ease; display: flex; flex-direction: column; min-height: 160px; height: 100%; box-shadow: 0 1px 3px rgba(0,0,0,0.1); padding: 24px; position: relative; } /* Card Content Wrapper */ .card-content { display: flex; flex-direction: column; height: 100%; } /* Card Title */ .account-card h3 { font-size: 18px; font-weight: 600; color: #2C2C2C; margin: 0 0 4px 0; line-height: 1.4; transition: color 0.3s ease; /* Ensure text doesn’t overflow */ overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } /* City Styling */ .city { font-size: 14px; color: #666; margin: 0 0 16px 0; line-height: 1.4; /* Ensure text doesn’t overflow */ overflow: hidden; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; } /* LTC Area Tag */ .ltc-area-tag { display: none; /* Hidden by default */ font-size: 13px; color: #007bff; background-color: #F0F7FF; padding: 8px 16px; border-radius: 50px; margin-top: auto; font-weight: 500; transition: all 0.3s ease; position: absolute; bottom: 24px; left: 24px; right: 24px; text-align: center; } /* Show area tag only in search results and your org */ #searchResults .ltc-area-tag, .your-org .ltc-area-tag { display: inline-block; } /* Search Results Specific Styles */ #searchResults .account-card { min-height: 160px; height: auto; margin-bottom: 0; } /* Mobile Responsive */ @media screen and (max-width: 1200px) { .account-grid, #searchResults .account-grid { grid-template-columns: repeat(2, 1fr); } } @media screen and (max-width: 768px) { .account-grid, #searchResults .account-grid { grid-template-columns: 1fr; padding: 0 16px; gap: 20px; } } /* Section Headers */ .ltc-header-container { text-align: center; width: 100%; margin: 48px 0 32px 0; } .ltc-header { font-size: 28px; font-weight: 700; color: #2C2C2C; margin-bottom: 8px; line-height: 1.3; } .ltc-name { font-size: 16px; color: #666; margin-bottom: 16px; font-weight: 500; } .ltc-underline { width: 60px; height: 3px; background-color: #007bff; margin: 0 auto; border-radius: 2px; } /* Search Box */ .search-container { text-align: center; margin: 48px auto 32px; max-width: 500px; padding: 0 20px; } #searchBox { width: 100%; padding: 16px 24px; border: 2px solid #E6E6E6; border-radius: 50px; font-size: 15px; transition: all 0.3s ease; background-color: #F8FAFF; } #searchBox:focus { outline: none; border-color: #007bff; box-shadow: 0 0 0 4px rgba(0,123,255,0.1); background-color: white; } #searchBox::placeholder { color: #666; } /* Your Organization Section */ .your-org-container { margin: 40px auto; max-width: 800px; text-align: center; } .your-org { /* Removing special styling to match regular cards */ } /* View More Button */ .view-more-container { text-align: center; margin: 32px 0; } .view-more-btn { background-color: transparent; color: #007bff; border: 2px solid #007bff; padding: 12px 32px; border-radius: 50px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .view-more-btn:hover { background-color: #007bff; color: white; } /* Hidden Card */ .hidden-card { display: none; } /* Area Bio Container */ .area-bio-container { position: fixed; right: -400px; top: 50%; transform: translateY(-50%); width: 350px; background: white; border-radius: 16px 0 0 16px; box-shadow: -2px 0 15px rgba(0, 0, 0, 0.1); padding: 20px; transition: right 0.3s ease; z-index: 1000; } .area-bio-container.visible { right: 0; } .bio-content { text-align: center; } .bio-image { width: 120px; height: 120px; border-radius: 60px; margin-bottom: 15px; object-fit: cover; } .bio-title { font-size: 20px; color: #007bff; margin-bottom: 10px; } .bio-text { font-size: 14px; color: #666; line-height: 1.6; } @media screen and (max-width: 768px) { .area-bio-container { display: none; /* Hide on mobile */ } // … existing mobile styles … } /* Search Results Section */ .search-results-section { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 20px; } /* General Container */ .account-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin: 0 auto 32px; } /* Search Results Container */ #searchResults { margin-top: 32px; } /* No Results Message */ .no-results { text-align: center; padding: 40px; font-size: 16px; color: #666; max-width: 1200px; margin: 0 auto; } /* View More Container */ .view-more-container { text-align: center; margin: 32px 0; display: flex; justify-content: center; } .view-more-btn { background-color: transparent; color: #007bff; border: 2px solid #007bff; padding: 12px 32px; border-radius: 50px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; margin: 0 auto; } .view-more-btn:hover { background-color: #007bff; color: white; } /* Mobile Responsive */ @media screen and (max-width: 1200px) { .account-grid { grid-template-columns: repeat(2, 1fr); } } @media screen and (max-width: 768px) { .account-grid { grid-template-columns: 1fr; gap: 20px; } .search-results-section { padding: 0 16px; } } document.addEventListener(“DOMContentLoaded”, function () { const searchBox = document.getElementById(‘searchBox’); const accountGrid = document.getElementById(‘accountGrid’); const searchResults = document.getElementById(‘searchResults’); const allCards = document.querySelectorAll(‘.account-card:not(.your-org)’); const sections = document.querySelectorAll(‘.ltc-header-container’); const viewMoreButtons = document.querySelectorAll(‘.view-more-btn’); const isMobile = window.innerWidth { card.addEventListener(‘mouseenter’, function() { const ltcArea = this.dataset.ltcArea; if (ltcArea) { showBio(ltcArea); } }); card.addEventListener(‘mouseleave’, function() { hideBio(); }); }); // Keep bio visible while hovering over it bioContainer.addEventListener(‘mouseenter’, function() { bioContainer.classList.add(‘visible’); }); bioContainer.addEventListener(‘mouseleave’, function() { bioContainer.classList.remove(‘visible’); }); // Calculate items per row based on screen size const calculateItemsPerRow = () => window.innerWidth { const itemsPerRow = calculateItemsPerRow(); const currentLimit = itemsPerRow * rowsToShow; grid.dataset.currentLimit = currentLimit; grid.dataset.itemsPerRow = itemsPerRow; // Show/hide cards based on initial limit const cards = grid.querySelectorAll(‘.account-card’); cards.forEach((card, index) => { if (index ({ element: card, searchText: card.innerText.toLowerCase(), clone: null })); // Cache for search results const searchCache = new Map(); // Debounce function function debounce(func, wait) { let timeout; return function executedFunction(…args) { const later = () => { clearTimeout(timeout); func(…args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } // Function to render visible results function renderSearchResults(results) { searchResults.innerHTML = ”; if (results.length === 0) { searchResults.innerHTML = ‘
No organizations found matching your search.
‘; return; } // Create a container for the search results section const searchSection = document.createElement(‘div’); searchSection.className = ‘search-results-section’; // Add a header for search results const headerContainer = document.createElement(‘div’); headerContainer.className = ‘ltc-header-container’; headerContainer.innerHTML = `

Search Results

${results.length} organizations found
`; searchSection.appendChild(headerContainer); // Create a container for the grid const gridContainer = document.createElement(‘div’); gridContainer.className = ‘account-grid’; searchSection.appendChild(gridContainer); // Display initial results const displayLimit = isMobile ? 6 : 12; // Show more items initially results.slice(0, displayLimit).forEach(result => { if (!result.clone) { result.clone = result.element.cloneNode(true); result.clone.classList.remove(‘hidden-card’); result.clone.style.display = ‘block’; } gridContainer.appendChild(result.clone.cloneNode(true)); }); // If there are more results, add a “View More” button if (results.length > displayLimit) { const viewMoreContainer = document.createElement(‘div’); viewMoreContainer.className = ‘view-more-container’; const showMoreBtn = document.createElement(‘button’); showMoreBtn.className = ‘view-more-btn’; const remaining = results.length – displayLimit; const increment = isMobile ? 6 : 12; // Show more items per click showMoreBtn.textContent = `View More (${remaining} remaining)`; showMoreBtn.onclick = () => { const currentResults = gridContainer.querySelectorAll(‘.account-card’).length; const nextBatch = results.slice(currentResults, currentResults + increment); nextBatch.forEach(result => { if (!result.clone) { result.clone = result.element.cloneNode(true); result.clone.classList.remove(‘hidden-card’); result.clone.style.display = ‘block’; } gridContainer.appendChild(result.clone.cloneNode(true)); }); if (currentResults + increment >= results.length) { viewMoreContainer.remove(); } else { showMoreBtn.textContent = `View More (${results.length – (currentResults + increment)} remaining)`; } }; viewMoreContainer.appendChild(showMoreBtn); searchSection.appendChild(viewMoreContainer); } searchResults.appendChild(searchSection); } // Optimized search function const performSearch = debounce(function(searchTerm) { // Check cache first if (searchCache.has(searchTerm)) { accountGrid.style.display = ‘none’; searchResults.style.display = ‘block’; renderSearchResults(searchCache.get(searchTerm)); return; } // Perform new search const results = searchIndex.filter(item => item.searchText.includes(searchTerm.toLowerCase()) ); // Cache results searchCache.set(searchTerm, results); // Update display accountGrid.style.display = ‘none’; searchResults.style.display = ‘block’; renderSearchResults(results); }, 300); // 300ms debounce // Search event listener searchBox.addEventListener(“input”, function () { const searchTerm = this.value.trim(); if (searchTerm) { performSearch(searchTerm); } else { // Clear search searchResults.style.display = ‘none’; searchResults.innerHTML = ”; accountGrid.style.display = ‘block’; // Reset cards to their original state allCards.forEach(card => { const grid = card.closest(‘.account-grid’); if (!grid) return; // Skip if no grid found const currentLimit = parseInt(grid.dataset.currentLimit); const index = parseInt(card.dataset.index); if (index { const grid = button.parentElement.previousElementSibling; if (!grid) return; // Skip if no grid found const total = parseInt(button.dataset.total); const currentLimit = parseInt(grid.dataset.currentLimit); button.parentElement.style.display = ‘flex’; button.parentElement.style.justifyContent = ‘center’; button.style.margin = ‘0 auto’; if (currentLimit { const grid = button.parentElement.previousElementSibling; const total = parseInt(button.dataset.total); const currentLimit = parseInt(grid.dataset.currentLimit); if (currentLimit >= total) { button.style.display = ‘none’; } }); // View More functionality viewMoreButtons.forEach(button => { button.addEventListener(‘click’, function() { const grid = this.parentElement.previousElementSibling; const total = parseInt(this.dataset.total); let currentLimit = parseInt(grid.dataset.currentLimit); const itemsPerRow = parseInt(grid.dataset.itemsPerRow); const isExpanded = grid.dataset.expanded === ‘true’; if (!isExpanded) { // Show one more row const increment = itemsPerRow; const newLimit = currentLimit + increment; const cards = grid.querySelectorAll(‘.account-card’); cards.forEach(card => { const index = parseInt(card.dataset.index); if (index >= currentLimit && index = total) { this.style.display = ‘none’; } } }); }); // Handle window resize with row calculation let resizeTimeout; window.addEventListener(‘resize’, function() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { const wasIsMobile = isMobile; const newIsMobile = window.innerWidth { const currentRows = Math.ceil(parseInt(grid.dataset.currentLimit) / parseInt(grid.dataset.itemsPerRow)); const newLimit = currentRows * newItemsPerRow; grid.dataset.currentLimit = newLimit; grid.dataset.itemsPerRow = newItemsPerRow; const cards = grid.querySelectorAll(‘.account-card’); cards.forEach((card, index) => { if (index < newLimit) { card.classList.remove('hidden-card'); card.style.display = 'block'; } else { card.classList.add('hidden-card'); card.style.display = 'none'; } }); }); } }, 250); }); // Cleanup function to prevent memory leaks window.addEventListener('beforeunload', function() { searchCache.clear(); }); });