commodore-yachting / components /course-calendar.js
bobsmith1010's picture
```
0b1db27 verified
class CourseCalendar extends HTMLElement {
connectedCallback() {
this.attachShadow({ mode: 'open' });
this.shadowRoot.innerHTML = `
<style>
:host {
display: block;
padding: 5rem 1rem;
background: #0F172A;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.section-header {
text-align: center;
margin-bottom: 3rem;
}
.section-title {
font-size: 2.5rem;
margin-bottom: 1rem;
color: #F8FAFC;
}
.section-subtitle {
color: #94A3B8;
max-width: 600px;
margin: 0 auto;
line-height: 1.6;
}
.calendar-container {
background: rgba(30, 41, 59, 0.5);
border: 1px solid #1E293B;
border-radius: 10px;
padding: 2rem;
}
.calendar-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
.calendar-title {
font-size: 1.5rem;
color: #F8FAFC;
}
.calendar-nav {
display: flex;
gap: 1rem;
}
.nav-btn {
background: transparent;
border: 1px solid #334155;
color: #CBD5E1;
width: 36px;
height: 36px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
}
.nav-btn:hover {
background: #D4AF37;
color: #0F172A;
border-color: #D4AF37;
}
.calendar-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 1px;
background: #1E293B;
border: 1px solid #1E293B;
border-radius: 5px;
overflow: hidden;
}
.calendar-day-header {
background: rgba(212, 175, 55, 0.1);
color: #D4AF37;
text-align: center;
padding: 0.75rem 0;
font-weight: 600;
}
.calendar-day {
background: rgba(30, 41, 59, 0.8);
min-height: 100px;
padding: 0.5rem;
position: relative;
}
.calendar-day.other-month {
background: rgba(15, 23, 42, 0.5);
color: #475569;
}
.day-number {
font-weight: 600;
margin-bottom: 0.5rem;
}
.course-event {
background: rgba(212, 175, 55, 0.2);
color: #F8FAFC;
padding: 0.25rem;
border-radius: 3px;
font-size: 0.75rem;
margin-bottom: 0.25rem;
cursor: pointer;
transition: all 0.3s ease;
}
.course-event:hover {
background: rgba(212, 175, 55, 0.3);
}
.booking-cta {
text-align: center;
margin-top: 3rem;
}
.btn-book {
background: linear-gradient(45deg, #D4AF37, #F8FAFC);
color: #0F172A;
border: none;
padding: 1rem 2rem;
border-radius: 30px;
font-weight: 600;
font-size: 1.125rem;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-book:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(212, 175, 55, 0.3);
}
</style>
<div class="container">
<div class="section-header">
<h2 class="section-title">2026 Course Calendar</h2>
<p class="section-subtitle">Plan your sailing education with our comprehensive course schedule</p>
</div>
<div class="calendar-container">
<div class="calendar-header">
<h3 class="calendar-title">June 2026</h3>
<div class="calendar-nav">
<button class="nav-btn">
<i data-feather="chevron-left"></i>
</button>
<button class="nav-btn">
<i data-feather="chevron-right"></i>
</button>
</div>
</div>
<div class="calendar-grid">
<div class="calendar-day-header">Sun</div>
<div class="calendar-day-header">Mon</div>
<div class="calendar-day-header">Tue</div>
<div class="calendar-day-header">Wed</div>
<div class="calendar-day-header">Thu</div>
<div class="calendar-day-header">Fri</div>
<div class="calendar-day-header">Sat</div>
<!-- Previous month days -->
<div class="calendar-day other-month">
<div class="day-number">26</div>
</div>
<div class="calendar-day other-month">
<div class="day-number">27</div>
</div>
<div class="calendar-day other-month">
<div class="day-number">28</div>
</div>
<div class="calendar-day other-month">
<div class="day-number">29</div>
</div>
<div class="calendar-day other-month">
<div class="day-number">30</div>
</div>
<div class="calendar-day other-month">
<div class="day-number">31</div>
</div>
<!-- Current month days -->
<div class="calendar-day">
<div class="day-number">1</div>
</div>
<div class="calendar-day">
<div class="day-number">2</div>
<div class="course-event">Day Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">3</div>
<div class="course-event">Day Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">4</div>
<div class="course-event">Day Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">5</div>
<div class="course-event">Day Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">6</div>
<div class="course-event">Day Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">7</div>
</div>
<div class="calendar-day">
<div class="day-number">8</div>
</div>
<div class="calendar-day">
<div class="day-number">9</div>
<div class="course-event">Coastal Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">10</div>
<div class="course-event">Coastal Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">11</div>
<div class="course-event">Coastal Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">12</div>
<div class="course-event">Coastal Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">13</div>
<div class="course-event">Coastal Skipper</div>
</div>
<div class="calendar-day">
<div class="day-number">14</div>
</div>
<div class="calendar-day">
<div class="day-number">15</div>
</div>
<div class="calendar-day">
<div class="day-number">16</div>
<div class="course-event">Powerboat Level 2</div>
</div>
<div class="calendar-day">
<div class="day-number">17</div>
<div class="course-event">Powerboat Level 2</div>
</div>
<div class="calendar-day">
<div class="day-number">18</div>
</div>
<div class="calendar-day">
<div class="day-number">19</div>
</div>
<div class="calendar-day">
<div class="day-number">20</div>
</div>
<div class="calendar-day">
<div class="day-number">21</div>
</div>
<div class="calendar-day">
<div class="day-number">22</div>
</div>
<div class="calendar-day">
<div class="day-number">23</div>
<div class="course-event">Yachtmaster</div>
</div>
<div class="calendar-day">
<div class="day-number">24</div>
<div class="course-event">Yachtmaster</div>
</div>
<div class="calendar-day">
<div class="day-number">25</div>
<div class="course-event">Yachtmaster</div>
</div>
<div class="calendar-day">
<div class="day-number">26</div>
<div class="course-event">Yachtmaster</div>
</div>
<div class="calendar-day">
<div class="day-number">27</div>
<div class="course-event">Yachtmaster</div>
</div>
<div class="calendar-day">
<div class="day-number">28</div>
</div>
<div class="calendar-day">
<div class="day-number">29</div>
</div>
<div class="calendar-day">
<div class="day-number">30</div>
</div>
</div>
<div class="booking-cta">
<button class="btn-book">Book Your Course Now</button>
</div>
</div>
</div>
`;
// Initialize feather icons
import('https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js').then(() => {
feather.replace({ icons: this.shadowRoot.querySelectorAll('[data-feather]') });
});
}
}
customElements.define('course-calendar', CourseCalendar);