, 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); })(); About Clean Water Institute | app

app

Skip to main content

About

Our mission

CWI unleashes discerning students and researchers to improve the availability of clean water around the globe.

Our vision

A world saturated with impactful Christians who are wise stewards of water.

About the Clean Water Institute

The Clean Water Institute is committed to an attainable goal. “It’s relatively easy to find water and treat water; the hard part is maintaining water treatment and making it sustainable. That’s what makes the multidisciplinary efforts of CWI so valuable,” says David Wunder, one of the founding members of the Clean Water Institute.

By supporting projects, research, and learning dedicated to real, lasting solutions for water safety, CWI is not only addressing individual situations, but generating a steady stream of competent, inspired young people to address the problem. Drawing on students and ideas from all different disciplines – engineering, public health, global development, social work – the institute works for transformation not just in the communities we serve, but in the students and faculty involved as well.

How can I get involved?

Pray

Join the app community in praying for the everyday operations of the institute, furthering kingdom work worldwide. Pray for our partnering communities around the globe, as we participate in service learning together.

Give

Support CWIC with a gift that will help us carry out our transformational work while shaping students.

Connect

Do you know of an ongoing clean water initiative? Contact us at cwi@calvin.edu about partnership opportunities or to stay updated on projects, events, and ways to get involved.