, 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); })(); Clean Water Institute | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Clean Water Institute

The latest

New publication

A December 2021 journal article from the Clean Water Institute explores the possibility of using a subterranean spring capture method to improve water quality in rural Ecuador. Find the article at the .

New scholarship available

The Joseph and Sang Jin Kim scholarship is now available to help prospective students consider how they might get involved with the Clean Water Institute! Any prospective ÃÛÌÒapp students are welcome to apply. Watch for it through your financial aid application in your list of apply-to scholarships.

What’s the challenge?

Lack of clean drinking water corrodes the critical structure of communities—health, education, business—and sabotages future growth. The destructive effect is similar around the world, but its causes are unique to the history, culture and environment of each region. Any solution must be versatile, adaptable and informed by a deep and wide expertise.

How does CWI answer the challenge?

The causes of this challenge are too diverse for any one, simple solution. That is why the work of CWI is so important—and our holistic, mission-based approach sets us apart.

Transformational for at-risk communities:Ìý
Nothing transforms a community more than access to safe drinking water. Clean water not only saves lives; it makes it possible for families, businesses and schools to thrive.

Life-changing for students:Ìý
When students participate in a CWI project, they establish a model for service and citizenship that will guide them throughout their lives and careers. CWI challenges students to put their faith and education into practice, fostering tangible renewal in God’s world.

Collaborative and interdisciplinary:Ìý
CWI draws on a diversity of fields—from chemistry to psychology to engineering and beyond—to identify solutions. We partner with agencies already doing excellent work and use our resources to amplify their efforts.