/* ------------------------------------------- All -------------------------------------------------- */
.fade-up {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-up.show {
  opacity: 1;
  transform: translateY(0);
}

.section-padding {
  padding: 4rem 0;
}

/* -------------------------------------- Management Team ------------------------------------------- */
.management-team-card-hover {
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.management-team-card-hover:hover {
  transform: translateY(-6px);
  box-shadow: 0 10px 25px rgba(0,0,0,0.15);
}

.management-team-social a {
  color: #555;
  margin: 0 8px;
  font-size: 1.2rem;
  transition: color 0.2s ease;
}

.management-team-social a:hover {
  color: #0d6efd;
}

/* ---------------------------------------------- Core Team ---------------------------------------- */
.staff-bios-grid {
  border-top:  1px solid var(--bs-border-color, #dee2e6);
  border-left: 1px solid var(--bs-border-color, #dee2e6);
}

.staff-bios-grid .bio-col {
  border-right:  1px solid var(--bs-border-color, #dee2e6);
  border-bottom: 1px solid var(--bs-border-color, #dee2e6);
}

.staff-bio-card {
  padding: 2rem 2rem 1.75rem;
  background: var(--bs-body-bg, #fff);
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  transition: background 0.2s ease;
}

.staff-bio-card:hover {
  background: var(--bs-light, #f8f9fa);
}

/* Animated primary-colour underline on hover */
.staff-bio-card::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 2rem;
  right: 2rem;
  height: 2px;
  background: var(--cassiopeia-color-primary, #0088cc);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s ease;
}

.staff-bio-card:hover::after {
  transform: scaleX(1);
}

.staff-bio-card .bio-index {
  font-size: 0.7rem;
  font-style: italic;
  color: var(--bs-secondary-color, #6c757d);
  position: absolute;
  top: 1.25rem;
  right: 1.5rem;
}

.staff-bio-avatar {
  width: 150px;
  height: 150px;
  border-radius: 4px;
  overflow: hidden;
  border: 1px solid var(--bs-border-color, #dee2e6);
  flex-shrink: 0;
  transition: border-color 0.2s;
}

.staff-bio-card:hover .staff-bio-avatar {
  border-color: var(--cassiopeia-color-primary, #0088cc);
}

.staff-bio-avatar .bio-initials {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  font-weight: 700;
  color: #fff;
  letter-spacing: 0.04em;
}

.bio-dept {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--cassiopeia-color-primary, #0088cc);
  margin-bottom: 0.3rem;
}

.bio-name {
  font-size: 1.25rem;
  font-weight: 600;
  line-height: 1.2;
  color: var(--bs-heading-color, var(--bs-body-color));
  margin-bottom: 0.2rem;
}

.bio-jobtitle {
  font-size: 0.8rem;
  color: var(--bs-secondary-color, #6c757d);
  margin-bottom: 0;
}

.bio-rule {
  width: 24px;
  height: 1px;
  background: var(--bs-border-color, #dee2e6);
  margin: 1rem 0;
}

.bio-body {
  font-size: 0.875rem;
  line-height: 1.78;
  color: var(--bs-secondary-color, #6c757d);
  flex: 1;
  margin-bottom: 1.5rem;
}

.bio-links {
  display: flex;
  gap: 1.25rem;
  flex-wrap: wrap;
  margin-top: auto;
}

.bio-col.featured .bio-name {
  font-size: 1.5rem;
}

.bio-col.featured .staff-bio-avatar {
  width: 80px;
  height: 80px;
}

@keyframes cassio-fadeUp {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.staff-bios-grid .bio-col {
  animation: cassio-fadeUp 0.4s ease both;
}

.staff-bios-grid .bio-col:nth-child(1) { animation-delay: 0.08s; }
.staff-bios-grid .bio-col:nth-child(2) { animation-delay: 0.14s; }
.staff-bios-grid .bio-col:nth-child(3) { animation-delay: 0.20s; }
.staff-bios-grid .bio-col:nth-child(4) { animation-delay: 0.26s; }
.staff-bios-grid .bio-col:nth-child(5) { animation-delay: 0.32s; }
.staff-bios-grid .bio-col:nth-child(6) { animation-delay: 0.38s; }
.staff-bios-grid .bio-col:nth-child(7) { animation-delay: 0.44s; }

@media (max-width: 576px) {
  .staff-bio-card {
    padding: 1.5rem 1.25rem;
  }
}

/* ---------------------------------------------- Community ---------------------------------------- */
.community-hero {
  background: linear-gradient(135deg, #e8f4f2 0%, #fff 100%);
  border: 1px solid #e2eeec;
}

.community-section-label {
  font-size      : .7rem;
  font-weight    : 600;
  letter-spacing : .18em;
  text-transform : uppercase;
  color          : var(--cassiopeia-color-primary);
  margin-bottom  : .4rem;
}

.community-section-label--light {
  color : rgba(255,255,255,.45);
}

.community-rule { border-color: #e2eeec; }

.community-callout {
  background : var(--cassiopeia-color-primary);
  color      : rgba(255,255,255,.92);
  font-size  : 1rem;
  line-height: 1.65;
}

.community-callout-icon {
  display     : block;
  font-size   : 2.4rem;
  line-height : 1;
  margin-bottom: .5rem;
  color       : rgba(255,255,255,.3);
}

.community-card {
  border-color : #e9ecef !important;
  transition   : box-shadow .2s, transform .2s, border-color .2s;
}

.community-card:hover {
  box-shadow   : 0 4px 20px rgba(26,122,110,.1);
  transform    : translateY(-2px);
  border-color : #a8d5cf !important;
}

.community-icon-wrap {
  width           : 44px;
  height          : 44px;
  background      : #e8f4f2;
  display         : flex;
  align-items     : center;
  justify-content : center;
  font-size       : 1.2rem;
}

.community-activity-list .list-group-item {
  border-left  : none;
  border-right : none;
}

.community-num {
  color     : var(--cassiopeia-color-primary);
  min-width : 2rem;
  font-size : .85rem;
}

.community-value {
  background  : #e8f4f2;
  border-left : 4px solid var(--cassiopeia-color-primary);
  border-radius: 0 .375rem .375rem 0 !important;
}

.community-value h5 { color: var(--cassiopeia-color-primary); }

.community-dark { background: #0f1c2e; }

.community-tag {
  display       : inline-block;
  background    : rgba(255,255,255,.08);
  border        : 1px solid rgba(255,255,255,.2);
  color         : rgba(255,255,255,.85);
  font-size     : .75rem;
  padding       : .3em .85em;
  border-radius : 2em;
  margin        : .2rem;
  transition    : background .15s;
}

.community-tag:hover { background: rgba(26,122,110,.35); }

.community-tag--featured {
  background   : var(--cassiopeia-color-primary);
  border-color : var(--cassiopeia-color-primary);
  color        : #fff;
}
/* ---------------------------------------------- Events ---------------------------------------- */
.events-row {
    align-items: center;
    cursor: pointer;
    transition: all 0.2s ease-in-out;
}
.events-row:hover {
    background-color: #e9ecef;
    transform: scale(1.01);
}

.events-actions button {
    min-width: 80px;
}

.events-date {
  width: 72px;
  text-align: center;
  border-radius: 8px;
  padding: 6px 4px;
  font-weight: 600;
  line-height: 1.1;
  flex-shrink: 0;
}

.events-date .day {
  font-size: 1.4rem;
}

.events-date .month {
  font-size: 0.75rem;
  text-transform: uppercase;
}

.events-date .year {
  font-size: 0.75rem;
  opacity: 0.8;
}

.events-date.range {
  width: auto;
  padding: 6px 10px;
  font-size: 0.8rem;
}

@media (max-width: 768px) {
  .events-date {
    margin-bottom: 15px;
  }
}

/* ---------------------------------------------- Workshops ---------------------------------------- */
.workshopcard {
  transition: transform 0.4s ease, box-shadow 0.4s ease;
  cursor: pointer;
  border: 1.5px solid #dee2e6; /* visible border */
  border-radius: 0.75rem;
  padding: 16px;
}

.workshopcard:hover {
  transform: translateY(-4px);
  box-shadow: 0 1rem 2rem rgba(0,0,0,0.2);
}

.workshopcard-horizontal {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.workshopcard-horizontal img {
  max-width: 120px;
  object-fit: cover;
  border-radius: 0.5rem;
  margin-right: 15px;
}

.workshopcard-summary {
  font-size: 0.9rem;
  color: #555;
}

.workshopbadge-category {
  margin-top: 0.5rem;
}

@media (max-width: 768px) {
  .workshopcard-horizontal {
    flex-direction: column;
    text-align: center;
  }

  .workshopcard-horizontal img {
    margin-right: 0;
    margin-bottom: 10px;
  }
}

.workshopbadge-repo {
  float: right;
  padding: 1px
}

.workshopbadge-build {
  float: right;
  padding: 1px;
}

.modalworkshop-summarytext {
  clear: right;
  padding-top: 5px;
}

/* ---------------------------------------------- Software ---------------------------------------- */
.software-btn-outline-primary {
    --btn-color: var(--btncolor);
    --btn-bg: var(--btnbg);
    --btn-border-color: var(--btnbg);
    --btn-hover-color: var(--btncolorh);
    --btn-hover-bg: var(--btnbgh);
    --btn-hover-border-color: var(--btnbgh);
    --btn-active-color: var(--btncolorh);
    --btn-active-bg: var(--btnbgh);
    --btn-active-border-color: var(--btnbgh);
    --btn-disabled-color: var(--btncolor);
    --btn-disabled-bg: var(--btnbg);
    --btn-disabled-border-color: var(--btnbg);
    --btn-active-shadow: inset 0 3px 5px #00000020;
    --btn-disabled-color: #010156;
    --btn-disabled-bg: transparent;
    --btn-disabled-border-color: #010156;
    --gradient: none;
    background-color: var(--btn-bg);
    border-color: var(--btn-bg);
}


.software-category-bar{
  background:white;
  padding:15px;
  border-radius:10px;
  margin-bottom:25px;
}

.software-category-btn{
  margin:5px;
}

.software-card{
  cursor:pointer;
  transition:0.25s;
  text-align:center;
}

.software-card:hover{
  transform:translateY(-6px);
  box-shadow:0 10px 30px rgba(0,0,0,0.15);
}

.software-logo-box{
  height:80px;
  display:flex;
  align-items:center;
  justify-content:center;
  margin-bottom:10px;
}

.software-logo-box img{
  max-height:60px;
  max-width:100%;
}

.software-modal-logo{
  max-height:120px;
  margin-bottom:15px;
}

/* ---------------------------------------------- Modules ---------------------------------------- */
/* ---------------------------------------------- Hero    ---------------------------------------- */
/* HERO VIDEO */
.hero {
  position: relative;
  min-height: 90vh;
  color: white;
  overflow: hidden;
}

.hero video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 0;
}

.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    rgba(15, 30, 60, 0.75),
    rgba(15, 30, 60, 0.85)
  );
  z-index: 1;
}

.hero-content {
  position: relative;
  z-index: 2;
}

/* ---------------------------------------------- Youtube ---------------------------------------- */
/* Header — centred title + YouTube channel link */
.youtube_mod_header {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 1rem;
}
 
.youtube_mod_channel_link {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    text-decoration: none;
    color: inherit;
    font-size: var(--h3size);
    font-weight: 600;
    transition: opacity .2s;
}
 
.youtube_mod_channel_link:hover,
.youtube_mod_channel_link:focus-visible {
    opacity: .75;
    text-decoration: none;
    color: inherit;
}
 
.youtube_mod_header_text {
    font-size: 1.75rem;
    font-weight: 600;
}
 
.youtube_mod_yt_icon {
    width: 44px;
    height: 31px;
    flex-shrink: 0;
}
 
.youtube_mod_yt_bg    { fill: #ff0000; }
.youtube_mod_yt_arrow { fill: #ffffff; }
 
/* Slides */
.youtube_mod_slide        { display: none; }
.youtube_mod_slide.active { display: block; }
 
/* Thumbnail wrapper — 16:9 aspect ratio, clips zoom-on-hover */
.youtube_mod_thumb_wrap {
    position: relative;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    background: #000;
    border-radius: var(--bs-card-inner-border-radius, .375rem) var(--bs-card-inner-border-radius, .375rem) 0 0;
}
 
.youtube_mod_thumb {
    width: 100%; height: 100%;
    object-fit: cover; display: block;
    transition: transform .4s ease, opacity .4s ease;
}

.youtube_mod_slide .card:hover .youtube_mod_thumb {
    transform: scale(1.04);
    opacity: .88;
}
 
/* Play button overlay */
.youtube_mod_play_btn {
    position: absolute; inset: 0;
    display: flex; align-items: center; justify-content: center;
    background: transparent; border: none; cursor: pointer; padding: 0;
}
 
.youtube_mod_play_btn svg {
    width: 68px; height: 48px;
    filter: drop-shadow(0 2px 8px rgba(0,0,0,.5));
    transition: transform .2s ease, filter .2s ease;
}
 
.youtube_mod_play_btn:hover svg,
.youtube_mod_play_btn:focus-visible svg {
    transform: scale(1.1);
    filter: drop-shadow(0 4px 16px rgba(0,0,0,.7));
}
 
.youtube_mod_play_bg    { fill: rgba(20,20,20,.78); transition: fill .2s; }
.youtube_mod_play_btn:hover .youtube_mod_play_bg { fill: #dc3545; }
.youtube_mod_play_arrow { fill: #fff; }
 
/* Inline player — Bootstrap ratio handles 16:9 sizing */
.youtube_mod_player {
    border-radius: var(--bs-card-inner-border-radius, .375rem) var(--bs-card-inner-border-radius, .375rem) 0 0;
    overflow: hidden;
}

.youtube_mod_player iframe {
    border: none;
}
 
/* Title: clamp to 2 lines */
.youtube_mod_title {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
 
.youtube_mod_title a           { color: inherit; text-decoration: none; }
.youtube_mod_title a:hover,
.youtube_mod_title a:focus     { color: #dc3545; text-decoration: underline; }
 
/* Description: clamp to 3 lines */
.youtube_mod_desc {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
 
/* Dot indicators */
.youtube_mod_dot {
    width: 10px; height: 10px; border-radius: 50%;
    border: 2px solid #adb5bd; background: transparent;
    padding: 0; cursor: pointer;
    transition: background .2s, border-color .2s, transform .2s;
}

.youtube_mod_dot.active,
.youtube_mod_dot:hover {
    background: #dc3545;
    border-color: #dc3545;
    transform: scale(1.3);
}
 
.youtube_mod_dot:focus-visible {
    outline: 2px solid #dc3545;
    outline-offset: 3px;
}
 
/* Autoplay progress bar */
.youtube_mod_progress {
    height: 3px;
    background: #dee2e6;
    border-radius: 2px;
    overflow: hidden;
}
 
.youtube_mod_bar {
    height: 100%;
    background: #dc3545;
    border-radius: 2px;
    width: 0;
}
 
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    .youtube_mod_thumb,
    .youtube_mod_play_btn svg,
    .youtube_mod_dot,
    .youtube_mod_bar { transition: none !important; }
}
