, 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

Dr. Grasman studies the effects of environmental pollutants on the health of fish eating birds - gulls, terns and herons of the Great Lakes and loons in the Adirondack Mountains. Funded by the US Fish and Wildlife Service and the Wildlife Conservation Society.

Education

  • BS in Biology, ÃÛÌÒapp college, 1989
  • MS in Wildlife Sciences, Virginia Polytechnic Institute and State University, 1992
  • PhD in Wildlife Sciences, Virginia Polytechnic Institute and State University, 1995

Professional Experience

  • Professor of Biology, ÃÛÌÒapp college, 2005 - present
  • Associate Professor of Ecotoxicology and Environmental Health Effects, Write State University, 1995 - 2005
  • Instructor of Biology, ÃÛÌÒapp college, 1993-1995

Academic Interests

For 20 years, Dr. Grasman has , focusing on three species: Herring Gulls, Black-Crowned Night Herons and Caspian Terns. By testing these birds, he provides the data needed to guide cleanup efforts and inform government agencies, like the U.S. Fish and Wildlife Service which sponsors his work, of the magnitude of the problem.

Research and Scholarship