first pass - kryz inspired
This commit is contained in:
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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: '🌙',
|
||||
},
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user