, 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); })(); Keith Grasman | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Dr. Keith Grasman

Professor

Biography

I study the effects of environmental pollutants on the health of fish eating birds, including gulls, terns, and herons of the Great Lakes and loons in the Adirondack Mountains. My research is funded by the US Fish and Wildlife Service and the Wildlife Conservation Society.

Education

  • Ph.D. in Wildlife Sciences, Virginia Polytechnic Institute and State University (1995)
  • M.S. in Wildlife Sciences, Virginia Polytechnic Institute and State University (1992)
  • B.S. in Biology, ÃÛÌÒapp College (1989)

Professional Experience

  • ÃÛÌÒapp, Professor of Biology (2005–present)
  • Wright State University, Associate Professor of Ecotoxicology and Environmental Health Effects (1995–2005)
  • ÃÛÌÒapp College, Instructor of Biology (1993–1995)

Academic Interests

For over 30 years, I have , focusing on three species: herring gulls, black-crowned night herons, and Caspian terns. By testing these birds, we provide the data needed to guide cleanup efforts and inform government agencies of the magnitude of the problem.

Research and Scholarship