first pass - kryz inspired

This commit is contained in:
2026-06-10 18:34:23 +00:00
parent 3063d01ec5
commit 771e1e166f
53 changed files with 10521 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
<section class="events">
<div class="container">
<div class="events-header">
<img src="assets/svg/small-flower.svg" alt="" class="events-flower" aria-hidden="true">
<h2>Upcoming <span class="text-accent">Events</span></h2>
<p class="section-intro">
Come meet the team, enjoy live music, and support public radio in
person. All events are open to the community — friends and family of
listeners welcome.
</p>
</div>
<div class="events-list">
<div class="event-card" *ngFor="let event of upcomingEvents">
<div class="event-date">
<span class="event-month">Jul</span>
<span class="event-day">12</span>
<span class="event-year">2026</span>
</div>
<div class="event-content">
<h3>{{ event.title }}</h3>
<p>{{ event.description }}</p>
<div class="event-meta">
<span class="event-location">
<span aria-hidden="true">📍</span> {{ event.location }}
</span>
<a href="#" class="event-rsvp">Learn More →</a>
</div>
</div>
<div class="event-icon" aria-hidden="true">{{ event.icon }}</div>
</div>
</div>
</div>
</section>
+135
View File
@@ -0,0 +1,135 @@
@use '../../styles/variables' as *;
@use '../../styles/mixins' as *;
.events {
padding: $spacing-3xl 0;
background: var(--color-white);
}
.events-header {
text-align: center;
margin-bottom: $spacing-2xl;
.events-flower {
width: 50px;
height: 50px;
margin: 0 auto $spacing-md;
opacity: 0.5;
}
}
.events-list {
max-width: 800px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: $spacing-lg;
}
.event-card {
@include card-style;
display: flex;
background: var(--color-white);
overflow: hidden;
.event-date {
flex-shrink: 0;
background: $mixed-gradient;
color: var(--color-white);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: $spacing-md $spacing-lg;
min-width: 90px;
text-align: center;
.event-month {
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: 600;
}
.event-day {
font-size: 2.2rem;
font-weight: 700;
line-height: 1;
}
.event-year {
font-size: 0.75rem;
opacity: 0.8;
}
}
.event-content {
flex: 1;
padding: $spacing-lg;
h3 {
font-size: 1.3rem;
color: var(--color-primary);
margin-bottom: $spacing-sm;
}
p {
font-size: 0.95rem;
color: var(--color-dark);
line-height: 1.6;
margin-bottom: $spacing-sm;
}
}
.event-meta {
display: flex;
gap: $spacing-md;
align-items: center;
flex-wrap: wrap;
font-size: 0.85rem;
color: var(--color-medium);
.event-location {
display: flex;
align-items: center;
gap: 4px;
}
.event-rsvp {
color: var(--color-accent);
font-weight: 600;
transition: color $transition-fast;
&:hover {
color: var(--color-accent-dark);
}
}
}
.event-icon {
flex-shrink: 0;
font-size: 3rem;
display: flex;
align-items: center;
padding-right: $spacing-md;
opacity: 0.7;
}
}
@media (max-width: #{$bp-md - 1px}) {
.event-card {
flex-direction: column;
.event-date {
flex-direction: row;
gap: $spacing-sm;
padding: $spacing-sm $spacing-md;
}
.event-icon {
padding-right: 0;
padding-top: $spacing-sm;
justify-content: flex-end;
}
}
}
+50
View File
@@ -0,0 +1,50 @@
import { Component } from '@angular/core';
import { NgFor } from '@angular/common';
interface Event {
date: string;
title: string;
description: string;
location: string;
icon: string;
}
@Component({
selector: 'app-events',
standalone: true,
imports: [NgFor],
templateUrl: './events.component.html',
styleUrl: './events.component.scss',
})
export class EventsComponent {
readonly upcomingEvents: Event[] = [
{
date: 'July 12, 2026',
title: 'Summer Sounds Festival',
description: 'A full day of live local music, community booths, and station meet-and-greet at the foothills park. Free admission — donations welcome.',
location: 'Foothills Community Park',
icon: '🎵',
},
{
date: 'August 5, 2026',
title: 'Annual Fundraiser Gala',
description: 'Our biggest fundraiser of the year! Enjoy dinner, silent auction, and performances from past guest artists.',
location: 'Mountain View Ballroom',
icon: '🎙️',
},
{
date: 'September 18, 2026',
title: 'Volunteer Open House',
description: 'Tour the studio, meet the team, and learn how you can help keep our free stream alive. New volunteers always welcome!',
location: 'KMTN Studio — 42 Pine St',
icon: '🤝',
},
{
date: 'October 30, 2026',
title: 'Harvest Moon Broadcast',
description: 'Special live broadcast from the harvest moon gathering. Featuring folk, bluegrass, and indigenous music.',
location: 'Ridgefield Amphitheater',
icon: '🌙',
},
];
}