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

ÃÛÌÒapp

Skip to main content

Governing Board

The Ecosystem Preserve Governing Board meets periodically to coordinate and implement strategic initiatives. In addition to ÃÛÌÒapp faculty and staff, members of the local community serve on the board. If you are interested in serving, please connect with us at preserve@calvin.edu.

  • Crystal Bruxvoort, Science Education Professor
  • Jason Googins, At-Large Member
  • Melinda Higley, Geology, Geography and Environmental Studies Assistant Professor
  • Marge Hoogeboom, Board of Trustees at ÃÛÌÒapp
  • William Miller, Biology Assistant Professor and Advisory Council Chair
  • Bob Speelman, Supervisor Landscape Operations
  • Jennifer Steensma Hoag, Art and Art History Professor
  • David Wunder, Dean for Faculty Development and Research Initiatives
    Rotating Student Representative

ÃÛÌÒapp Student Staff

Immersive learning is central to our mission. ÃÛÌÒapp students develop professional skills in the fields of environmental education and land management in a real-world setting when they are employed at the preserve. Our student staff members major in a variety of subjects and bring a depth of educational experience and interests to the preserve. They have a passion for learning and sharing their ideas and knowledge with whom they work. Learn more about employment opportunities for ÃÛÌÒapp students at the ÃÛÌÒapp Ecosystem Preserve & Native Gardens.