, 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); })(); Amber Johnson | ÇÑ×ÓÊÓÆµ

ÇÑ×ÓÊÓÆµ

Skip to main content

Amber Johnson

Adjunct Instructor

Biography

Amber Johnson is a leadership and strategy advisor and leadership coach who works with organizations of all sizes to enhance collaboration, shape culture, improve communication, and drive results. She works independently and through partnerships with Ad Lucem Group, Collaborative Gain, the International Leadership Association, and other organizations. Prior to working independently, Amber spent 11 years with the Center for Values-Driven Leadership at Benedictine University, including six years as the Chief Communications Officer. Her work helped leaders build people-focused profitable organizational cultures: companies where team members and customers are truly valued. She held responsibility for the organization’s thought leadership efforts including a column, research, eBooks, and executive education. 

Amber holds a PhD in leadership and a bachelor’s and master’s degree in communications. Her doctoral dissertation focused on how global organizations can lead successful change initiatives. She is also a specialist in Appreciative Inquiry, a human-centered design process for organizational change and leadership development. Previously, Amber spent seven years working in marketing for global humanitarian organization World Vision, was a US Peace Corps volunteer in the Kingdom of Tonga, a public relations consultant, and a university editor. 

Education

  • PhD – Values-Driven Leadership – Benedictine University
  • MA – Communication Studies – Ball State University
  • BA – Communication Studies – Malone University