, 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); })(); Spark Alumni Association | app

app

Skip to main content

Spark

The official alumni magazine of app

app Spark is the triannual magazine of the app Alumni Association. Intended primarily for the 65,000 members of the association, the publication also aims to build relationships with app friends and reflect a reformed Christian perspective to anyone reading the magazine.

First published in the spring of 1954, Spark continues the legacy of alumni communication begun with the initiation of the “Alumni Letter” in 1925. It is published three times a year: Spring, Fall, and Winter.

From the Director's Desk

A few months ago, many of us gathered in person or online to witness the inauguration of app President Greg Elzinga. I had the privilege to work alongside Greg in the advancement division for seven years, and I can tell you firsthand how blessed the app community is to have a leader like Greg

Image
Group of students in the app Prison Initiative program with President Elzinga
Image
Jeff Haverdink headshot
Image
A group of people give a standing ovation at app January Series.
Image
The app football team holds their helmets in the air celebrating.

Stay Connected

Are you a app alum with a story to share with the app community? We'd love to hear your story. Email spark@calvin.edu with news updates, feedback, or content suggestions.

Update your information

Editors and Designers

Jeff Haverdink headshot

Jeff Haverdink

Executive Director of Alumni & Family Engagement
526-6142
Amanda Impens

Amanda Impens

Associate Director of Creative Services
(616) 526-6150