, but this code // executes before the first paint, when

ÇÑ×ÓÊÓÆµ

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); })(); Kenneth Erffmeyer | ÇÑ×ÓÊÓÆµ

ÇÑ×ÓÊÓÆµ

Skip to main content

Mr. Kenneth Erffmeyer

Vice President for Advancement

Biography

Ken currently serves ÇÑ×ÓÊÓÆµ as the Interim Vice President for Advancement, supervising 50 employees. He oversees Calvin’s alumni, parent and community relations department, the January Series program, event services and the development office. Sub-departments within the development office include planned giving, the annual fund, grants and foundations, and advancement services.

Education

  • MBA (1988)&²Ô²ú²õ±è;–&²Ô²ú²õ±è;University of Minnesota Carlson School of Management, marketing
  • BS (1986)&²Ô²ú²õ±è;–&²Ô²ú²õ±è;Calvin College, accountancy

Professional Experience

  • 2024-present – Vice President for Advancement, ÇÑ×ÓÊÓÆµ
  • 2023-2024 – Senior Gift Officer, ÇÑ×ÓÊÓÆµ
  • 2021-2023 – Senior Vice President for Advancement, The Fuller Foundation
  • 2008-2021 – Vice President for Advancement, ÇÑ×ÓÊÓÆµ
  • 2003-2008 – Vice President of Human Resources, Thomson Reuters
  • 1996-2003 – Management Consultant, Deloitte & Touche 
  • 1988-1996 – Manager, Andersen Consulting, Chicago, IL

Professional Associations

Memberships past and present:

  • Calvin Alumni Association Board
  • Board of Directors at Calvin Christian School, Edina, MN
  • Board of Directors at Ada Christian School, Ada, MI
  • Board of Directors at St. Cecilia Music Center
  • Board of Directors of the Barnabas Foundation