, 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); })(); Art Workshops - Ecosystem Preserve | ÃÛÌÒapp

ÃÛÌÒapp

Skip to main content

Art Workshops

Image
art workshops

Join Us for Creative Exploration

Art Workshops with Rine Wakeman! Join us this semester for inspiring sessions led by our talented alum. For ages 16+. Open to all skill levels!

Ìý

Printmaking | Saturday, March 22 | 1-4 PM

One of the best parts of printmaking is its wide accessibility – almost anything can be used to make a mark! Learn how to use common household bits like junk mail, shipping containers, and natural items to make stencils, stamps, and imprints with instruction and practice. Bring your own things to repurpose, or come and use provided materials! Light snacks provided; bring your own drink.

Limit 20 participants
Cost: $15
Students: $10 with code PRINT5

Ìý

Ìý

Guided Watercolor: Turtle | Saturday, April 12 | 4:00-6:30 PM

This is a post-Turtlefest workshop. Stick around after TurtleFest events for a guided turtle watercolor tutorial. Celebrate the diversity and reflect the beauty of our dear shelled neighbors. A snack is included. Bring your own beverage.

(Please note: As part of Turtlefest from 2-4PM, bring a clothing item to stamp an artist-carved Eastern Box Turtle image onto clothes, books, or paper.)

Limit 15 participants
Cost: $15
Students: $10 with code TURTLE5

Ìý

Plein Air Painting | Saturday, May 10 | 9 AM - 12 PM

We're celebrating our 2025 graduates and emerging spring foliage with a pleinair painting session at the Bunker Interpretive Center plaza. We welcome families of grads to join us for this workshop for those age 16+. Start with a guided painting session for the basics, then dive into your own exploration! You'll leave with two finished pieces. (Public also welcome)

Limit 12 participants

Cost: $15
Students: $10 with code PLEIN10Ìý

Ìý

Follow us on or to hear about our plans!