, but this code // executes before the first paint, when

ÃÛÌÒapp

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Contact Us Prison Initiative | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Contact Us

Primary Contact

Phone: 616-526-7998
Email: cpi@calvin.edu
Address: ÃÛÌÒapp Prison Initiative Office
3201 Burton St. SE
Grand Rapids, MI 49546

If your church, community, or organization is interested in learning more about our program, our Director Todd Cioffi regularly accepts speaking engagements. If you are interested in having him come to talk more about CPI, please contact us at cpi@calvin.edu.

Business Hours

Monday - Friday: 9:00 a.m.- 4:00 p.m.

CPI Team

Lisa Schra

Lisa Spoelhof Schra

Executive Director, ÃÛÌÒapp Prison Initiative
526-6061
Christina Haven

Christina Haven

Associate Director, ÃÛÌÒapp Prison Initiative
616-526-7997
Todd Cioffi

Todd V Cioffi

Senior Advisor, ÃÛÌÒapp Prison Initiative; Associate Professor, CMS; Adjunct Professor, Religion
526-7797
jake

Jake Aupperlee

CPI Academic Support Specialist
616-526-6329

Lilly Cooper

Administrative Assistant, ÃÛÌÒapp Prison Initiative