, 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); })(); Support Us Ecosystem Preserve | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Support Us

Image
A group of students and professors stand around a table full of seedlings in a greenhouse, with the text, you make a difference!

Three are three primary ways you can support our work—by making a donation, volunteering to help out at the Preserve, or sign up for our newsletter to keep up-to-date with what we're doing!

Donate

Your donations make a huge difference! The ÃÛÌÒapp Ecosystem Preserve & Native Gardens relies on generous donors to support our education and land management work. By investing in the Preserve, you can secure its impact on the thousands of children, college and university students, and adults who benefit from its programs each year and ensure that this irreplaceable habitat for hundreds of plants and animal species is maintained. Gifts of all sizes work together to make a big impact.

If you prefer to write a check, please make it payable to ÃÛÌÒapp and put "Ecosystem Preserve" on the memo line. Mail to:

Development Office
ÃÛÌÒapp
3201 Burton St SE
Grand Rapids MI 49546

Volunteer

If you’d like to make a tangible difference, we need your passion and your talent. In return, you’ll find a welcoming, supportive, and appreciative environment. Volunteer opportunities are available for youth, adults, and groups.

Learn more about volunteering

Subscribe to our newsletter

Keep up with what’s happening at the Preserve! When you sign up for our email newsletter, you’ll receive periodic updates about new Preserve programs, upcoming events, and more. Fill out the information below and click Subscribe to sign up!

* indicates required