, 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); })(); River City Improv | °ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

°ÄÃÅÁùºÏ²Ê¿ª½±¼Ç¼×ÊÁÏ

Skip to main content

Events Calendar

River City Improv

S M T W T F S
29
 
30
 
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
31
 
1
 
2
 

River City Improv

  • 9:00 pm - 10:30 pm
$15 public, $5 faculty/staff/students/under 18
Image
River City improv members smiling for a photo

Get your laugh on! , a Calvin favorite, is returning to perform at Homecoming and Family Weekend this year. They'll be opened by student organization Calvin Improv at 9 p.m. sharp. Get your tickets today!

About River City Improv

A Grand Rapids staple, River City Improv has been performing since 1993. We do improv, which is like an unscripted movie, plus the addition of lots of variety... and a bathroom break! 

Our team members are all local members of the West Michigan Community. We love Grand Rapids, and we love comedy. We are as passionate and varied as the scenes we portray onstage. We base our performances on live audience suggestions, from the mundane to the endearingly wacky. If you're always making other people say "Dad, you're so weird," you were BORN to be a member of our audience. This is your moment in the sun. 

At River City, we believe that laughter can bring us plenty of those sunny moments. Humor doesn't need to be scummy or taboo to be funny. In fact, we believe laughter is best when it can be shared. At an RCI show, co-workers can laugh alongside grumpy supervisors. Looking-for-Loves can laugh alongside their newly-met Tinder dates. And because it's "everyone-friendly," you're free to share with everyone from your nephew, to your yoga instructor, to your great-great Aunt Myrtle!