tehachapi staff teaser sort version
<script>
document.addEventListener('DOMContentLoaded', () => {
  const container = document.querySelector('.items');
  if (!container) return;
  const cards = Array.from(container.querySelectorAll('article.poc-instance'));
  if (!cards.length) return;
  const slugify = s => (s || '')
    .toString()
    .normalize('NFKD').replace(/[\u0300-\u036f]/g, '')
    .toLowerCase()
    .replace(/&/g, ' and ')
    .replace(/[^a-z0-9]+/g, '-')
    .replace(/^-+|-+$/g, '');
  const parseCard = card => {
    const titleEl = card.querySelector('h3 span, h3');
    const raw = titleEl ? titleEl.textContent.trim() : '';
    const m = raw.match(/^(.*?)\s*\(([^)]+)\)\s*$/);
    const name = (m ? m[1] : raw).trim();
    const team = (m ? m[2] : 'Other').trim();
    return { card, titleEl, name, team, teamSlug: slugify(team) };
  };
  const data = cards.map(parseCard).map(d => {
    if (d.titleEl) d.titleEl.textContent = d.name;
    return d;
  });
  // Custom order for specific teams
  const teamPriority = ['Management', 'Administration', 'Operations'];
  // Sort: priority first, then alphabetically for others, then by name
  data.sort((a, b) => {
    const aPriority = teamPriority.indexOf(a.team);
    const bPriority = teamPriority.indexOf(b.team);
    if (aPriority !== -1 || bPriority !== -1) {
      // both in list or one in list
      if (aPriority === -1) return 1;
      if (bPriority === -1) return -1;
      return aPriority - bPriority;
    }
    // fallback alphabetical
    const t = a.team.localeCompare(b.team);
    return t !== 0 ? t : a.name.localeCompare(b.name);
  });
  const frag = document.createDocumentFragment();
  const tabpanels = document.createElement('div');
  tabpanels.className = 'tabpanels';
  frag.appendChild(tabpanels);
  const panel = document.createElement('div');
  panel.className = 'staff-grid';
  panel.setAttribute('role', 'tabpanel');
  tabpanels.appendChild(panel);
  let lastTeam = null;
  data.forEach(d => {
    if (d.team !== lastTeam) {
      const h3 = document.createElement('h3');
      h3.className = 'staff-heading';
      h3.id = d.teamSlug;
      h3.textContent = d.team;
      panel.appendChild(h3);
      lastTeam = d.team;
    }
    panel.appendChild(d.card);
  });
  container.innerHTML = '';
  container.appendChild(frag);
});
</script>
<style>
.items .tabpanels .staff-heading {
  flex: 0 0 100%;
  margin: 32px 0 12px 0;
  font-size: 22px;
  line-height: 1.35;
  font-weight: 700;
  text-align: center;       /* 👈 centers the headers */
}
/* grid container for the rebuilt panel */
.items .tabpanels .staff-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  padding: 1rem;
  box-sizing: border-box;
}
/* make headers span full width between card rows */
.items .tabpanels .staff-heading {
  flex: 0 0 100%;
  margin: 32px 0 12px 6px;
  font-size: 2em;
  line-height: 1.35;
  font-weight: 700;
}
/* cards in responsive columns */
.items .tabpanels .poc-instance {
  flex: 0 0 calc((100% - 2rem)/3);
  max-width: calc((100% - 2rem)/3);
  box-sizing: border-box;
}
@media (max-width: 800px) {
  .items .tabpanels .poc-instance {
    flex: 0 0 calc((100% - 1rem)/2);
    max-width: calc((100% - 1rem)/2);
  }
}
@media (max-width: 480px) {
  .items .tabpanels .poc-instance {
    flex: 0 0 100%;
    max-width: 100%;
  }
}
.items .tabpanels .staff-heading {
     margin-top: -10px !important;
}
</style>