{"id":7432,"date":"2026-05-20T15:58:33","date_gmt":"2026-05-20T10:28:33","guid":{"rendered":"https:\/\/tbspanthers.british-school.org\/?p=7432"},"modified":"2026-05-20T15:59:38","modified_gmt":"2026-05-20T10:29:38","slug":"panthers-summer-camp-final-list","status":"publish","type":"post","link":"https:\/\/tbspanthers.british-school.org\/index.php\/panthers-summer-camp-final-list\/","title":{"rendered":"Panthers Summer Camp &#8211; Final List"},"content":{"rendered":"\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/papaparse@5.4.1\/papaparse.min.js\"><\/script>\n\n<style>\n  .pas-wrapper {\n    max-width: 1280px;\n    margin: 30px auto;\n    padding: 18px;\n    font-family: 'Segoe UI', Arial, sans-serif;\n    color: #071733;\n  }\n\n  .pas-hero {\n    background:\n      radial-gradient(circle at top right, rgba(243,211,122,0.2), transparent 32%),\n      linear-gradient(135deg, #050b1f, #071733 55%, #172554);\n    border-radius: 34px;\n    padding: 42px 24px;\n    color: white;\n    box-shadow: 0 18px 45px rgba(7,23,51,0.25);\n    text-align: center;\n  }\n\n  .pas-hero-label {\n    display: inline-block;\n    padding: 9px 18px;\n    border-radius: 999px;\n    background: rgba(243,211,122,0.13);\n    border: 1px solid rgba(243,211,122,0.55);\n    color: #f3d37a;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    margin-bottom: 16px;\n  }\n\n  .pas-hero h2 {\n    margin: 0;\n    color: white;\n    font-size: clamp(30px, 5vw, 56px);\n    line-height: 1;\n    font-weight: 950;\n  }\n\n  .pas-hero h2 span {\n    color: #f3d37a;\n  }\n\n  .pas-hero p {\n    max-width: 820px;\n    margin: 16px auto 0;\n    color: rgba(255,255,255,0.84);\n    font-size: 16px;\n    line-height: 1.7;\n  }\n\n  .pas-filter-panel {\n    margin-top: 24px;\n    background: #ffffff;\n    border-radius: 28px;\n    padding: 20px;\n    border: 1px solid rgba(7,23,51,0.08);\n    box-shadow: 0 14px 34px rgba(7,23,51,0.08);\n  }\n\n  .pas-filters {\n    display: grid;\n    grid-template-columns: 1.4fr repeat(3, 1fr) auto;\n    gap: 14px;\n    align-items: end;\n  }\n\n  .pas-field label {\n    display: block;\n    margin: 0 0 7px 2px;\n    color: #071733;\n    font-size: 11px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .pas-field input,\n  .pas-field select {\n    width: 100%;\n    height: 46px;\n    border: 1px solid rgba(7,23,51,0.15);\n    border-radius: 16px;\n    padding: 0 14px;\n    background: #ffffff;\n    color: #071733;\n    font-size: 14px;\n    font-weight: 700;\n    outline: none;\n  }\n\n  .pas-field input:focus,\n  .pas-field select:focus {\n    border-color: #d6a437;\n    box-shadow: 0 0 0 4px rgba(214,164,55,0.16);\n  }\n\n  .pas-clear-btn {\n    height: 46px;\n    border: none;\n    border-radius: 16px;\n    background: #071733;\n    color: white;\n    padding: 0 20px;\n    cursor: pointer;\n    font-weight: 950;\n    white-space: nowrap;\n  }\n\n  .pas-clear-btn:hover {\n    background: #102a56;\n  }\n\n  .pas-result-line {\n    margin-top: 15px;\n    color: #6b7280;\n    font-size: 13px;\n    font-weight: 800;\n  }\n\n  .pas-grid {\n    margin-top: 24px;\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));\n    gap: 16px;\n  }\n\n  .pas-student-card {\n    background: #ffffff;\n    border-radius: 22px;\n    overflow: hidden;\n    border: 1px solid rgba(7,23,51,0.08);\n    box-shadow: 0 12px 30px rgba(7,23,51,0.08);\n    animation: pasCardIn 0.5s ease both;\n    transition: all 0.25s ease;\n  }\n\n  .pas-student-card:hover {\n    transform: translateY(-3px);\n    box-shadow: 0 18px 40px rgba(7,23,51,0.13);\n  }\n\n  .pas-student-card.active {\n    border-color: rgba(214,164,55,0.48);\n    box-shadow: 0 22px 48px rgba(7,23,51,0.16);\n  }\n\n  @keyframes pasCardIn {\n    from {\n      opacity: 0;\n      transform: translateY(14px) scale(0.98);\n    }\n    to {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n    }\n  }\n\n  .pas-card-toggle {\n    width: 100%;\n    border: none;\n    background: transparent;\n    padding: 0;\n    cursor: pointer;\n    text-align: left;\n    font-family: inherit;\n  }\n\n  .pas-card-head {\n    padding: 16px;\n    background:\n      radial-gradient(circle at top right, rgba(243,211,122,0.22), transparent 35%),\n      linear-gradient(135deg, #071733, #102a56);\n    color: white;\n  }\n\n  .pas-top-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n  }\n\n  .pas-avatar {\n    width: 46px;\n    height: 46px;\n    border-radius: 16px;\n    background: linear-gradient(135deg, #d6a437, #f3d37a);\n    color: #071733;\n    display: grid;\n    place-items: center;\n    font-size: 18px;\n    font-weight: 950;\n    flex-shrink: 0;\n    box-shadow: 0 10px 22px rgba(0,0,0,0.18);\n  }\n\n  .pas-name-wrap {\n    min-width: 0;\n    flex: 1;\n  }\n\n  .pas-student-name {\n    margin: 0;\n    color: white;\n    font-size: 19px;\n    line-height: 1.15;\n    font-weight: 950;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .pas-expand-icon {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    background: rgba(255,255,255,0.12);\n    border: 1px solid rgba(255,255,255,0.18);\n    color: #f3d37a;\n    display: grid;\n    place-items: center;\n    font-size: 20px;\n    font-weight: 900;\n    flex-shrink: 0;\n    transition: transform 0.25s ease;\n  }\n\n  .pas-student-card.active .pas-expand-icon {\n    transform: rotate(45deg);\n  }\n\n  .pas-summary {\n    padding: 13px 15px 15px;\n    background: linear-gradient(135deg, #fffaf0, #ffffff);\n    border-bottom: 1px solid rgba(7,23,51,0.06);\n  }\n\n  .pas-summary-clean {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n  }\n\n  .pas-summary-count {\n    color: #071733;\n    font-size: 13px;\n    font-weight: 950;\n  }\n\n  .pas-summary-hint {\n    flex-shrink: 0;\n    padding: 7px 11px;\n    border-radius: 999px;\n    background: #fff3cf;\n    border: 1px solid rgba(214,164,55,0.28);\n    color: #76530e;\n    font-size: 11px;\n    font-weight: 950;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n  }\n\n  .pas-session-list {\n    display: none;\n    padding: 15px;\n    gap: 12px;\n    background: #ffffff;\n  }\n\n  .pas-student-card.active .pas-session-list {\n    display: grid;\n  }\n\n  .pas-session {\n    background: linear-gradient(135deg, #fffaf0, #ffffff);\n    border: 1px solid rgba(7,23,51,0.09);\n    border-left: 5px solid #d6a437;\n    border-radius: 18px;\n    padding: 14px;\n  }\n\n  .pas-session-title {\n    display: flex;\n    justify-content: space-between;\n    gap: 12px;\n    align-items: flex-start;\n  }\n\n  .pas-activity-name {\n    color: #071733;\n    font-size: 15px;\n    font-weight: 950;\n    line-height: 1.25;\n  }\n\n  .pas-clean-time {\n    margin-top: 8px;\n    color: #374151;\n    font-size: 13px;\n    font-weight: 850;\n  }\n\n  .pas-week-chip-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n    margin-top: 11px;\n  }\n\n  .pas-week-chip {\n    display: inline-flex;\n    align-items: center;\n    padding: 7px 10px;\n    border-radius: 999px;\n    background: #071733;\n    color: #ffffff;\n    font-size: 11px;\n    line-height: 1;\n    font-weight: 900;\n  }\n\n  .pas-message {\n    grid-column: 1 \/ -1;\n    background: #fff8e6;\n    border-left: 6px solid #d6a437;\n    padding: 22px;\n    border-radius: 16px;\n    color: #5c4213;\n    font-weight: 850;\n    text-align: center;\n  }\n\n  @media screen and (max-width: 980px) {\n    .pas-filters {\n      grid-template-columns: repeat(2, 1fr);\n    }\n\n    .pas-clear-btn {\n      grid-column: 1 \/ -1;\n    }\n  }\n\n  @media screen and (max-width: 640px) {\n    .pas-wrapper {\n      padding: 12px;\n      margin: 20px auto;\n    }\n\n    .pas-hero {\n      border-radius: 26px;\n      padding: 32px 18px;\n    }\n\n    .pas-filter-panel {\n      border-radius: 24px;\n      padding: 16px;\n    }\n\n    .pas-filters {\n      grid-template-columns: 1fr;\n    }\n\n    .pas-grid {\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n\n    .pas-student-name {\n      font-size: 18px;\n    }\n\n    .pas-summary-clean {\n      align-items: flex-start;\n      flex-direction: column;\n    }\n  }\n<\/style>\n\n<div class=\"pas-wrapper\">\n  <section class=\"pas-hero\">\n    <div class=\"pas-hero-label\">Panthers Activity Selection<\/div>\n\n    <h2>Student <span>Activity Schedule<\/span><\/h2>\n\n    <p>\n      A compact view of each student\u2019s selected activities, training weeks and session timings.\n      Click on a student card to reveal the full schedule details.\n    <\/p>\n  <\/section>\n\n  <section class=\"pas-filter-panel\">\n    <div class=\"pas-filters\">\n      <div class=\"pas-field\">\n        <label for=\"pasSearch\">Search Student<\/label>\n        <input id=\"pasSearch\" type=\"search\" placeholder=\"Type student name\">\n      <\/div>\n\n      <div class=\"pas-field\">\n        <label for=\"pasActivityFilter\">Activity<\/label>\n        <select id=\"pasActivityFilter\">\n          <option value=\"\">All Activities<\/option>\n        <\/select>\n      <\/div>\n\n      <div class=\"pas-field\">\n        <label for=\"pasWeekFilter\">Week<\/label>\n        <select id=\"pasWeekFilter\">\n          <option value=\"\">All Weeks<\/option>\n        <\/select>\n      <\/div>\n\n      <div class=\"pas-field\">\n        <label for=\"pasTimeFilter\">Time<\/label>\n        <select id=\"pasTimeFilter\">\n          <option value=\"\">All Times<\/option>\n        <\/select>\n      <\/div>\n\n      <button type=\"button\" id=\"pasClearFilters\" class=\"pas-clear-btn\">Clear Filters<\/button>\n    <\/div>\n\n    <div id=\"pasResultLine\" class=\"pas-result-line\">\n      Loading activity selections&#8230;\n    <\/div>\n  <\/section>\n\n  <section id=\"pasStudentGrid\" class=\"pas-grid\"><\/section>\n<\/div>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const csvUrl = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vSunzDsEWIlifXCZbm4hpesrR411kFxKe79MCacyfO-kpD8VV9iRAeY_gVx9hJy24qmvkqFsbb8Ehxy\/pub?gid=1300424747&single=true&output=csv\";\n\n  let allRows = [];\n  let groupedStudents = [];\n\n  const studentGrid = document.getElementById(\"pasStudentGrid\");\n  const searchInput = document.getElementById(\"pasSearch\");\n  const activityFilter = document.getElementById(\"pasActivityFilter\");\n  const weekFilter = document.getElementById(\"pasWeekFilter\");\n  const timeFilter = document.getElementById(\"pasTimeFilter\");\n  const clearFiltersBtn = document.getElementById(\"pasClearFilters\");\n  const resultLine = document.getElementById(\"pasResultLine\");\n\n  loadActivitySelections();\n\n  function loadActivitySelections() {\n    fetch(csvUrl)\n      .then(response => response.text())\n      .then(csvText => {\n        const parsed = Papa.parse(csvText, {\n          header: true,\n          skipEmptyLines: true\n        });\n\n        allRows = parsed.data\n          .map(row => normaliseRow(row))\n          .filter(row => row.fullName && row.activity);\n\n        groupedStudents = groupRowsByStudent(allRows);\n\n        populateActivityFilter();\n        updateDependentFilters();\n        renderStudentCards();\n        attachFilterEvents();\n      })\n      .catch(error => {\n        studentGrid.innerHTML = '<div class=\"pas-message\">Unable to load activity selection data. Please check that the Google Sheet is published correctly as CSV.<\/div>';\n        resultLine.textContent = \"CSV could not be loaded.\";\n        console.error(error);\n      });\n  }\n\n  function normaliseRow(row) {\n    const fullName = clean(\n      row.Student ||\n      row[\"Student Name\"] ||\n      row.Name ||\n      row[\"Full Name\"] ||\n      row[\"Player Name\"]\n    );\n\n    const yearGroup = clean(\n      row[\"Year Group\"] ||\n      row.Year ||\n      row.Reg ||\n      row.Class ||\n      row.Category\n    );\n\n    return {\n      fullName: toProperCase(fullName),\n      firstName: getFirstName(fullName),\n      yearGroup: toProperCase(yearGroup),\n\n      activity: clean(\n        row.Activity ||\n        row.Activities ||\n        row.Sport ||\n        row.Sports ||\n        row[\"Selected Activity\"] ||\n        row[\"Activity Selected\"]\n      ),\n\n      week: clean(\n        row.Week ||\n        row.Weeks ||\n        row[\"Training Week\"] ||\n        row[\"Session Week\"] ||\n        row.Day ||\n        row.Days\n      ),\n\n      time: clean(\n        row.Time ||\n        row.Timing ||\n        row[\"Session Time\"] ||\n        row[\"Training Time\"] ||\n        row.Slot ||\n        row[\"Time Slot\"]\n      ),\n\n      gender: clean(\n        row.Gender ||\n        row.Sex\n      )\n    };\n  }\n\n  function groupRowsByStudent(rows) {\n    const groups = {};\n\n    rows.forEach(row => {\n      const key = row.fullName + \"|\" + row.yearGroup;\n\n      if (!groups[key]) {\n        groups[key] = {\n          fullName: row.fullName,\n          firstName: row.firstName,\n          yearGroup: row.yearGroup,\n          gender: row.gender,\n          sessions: []\n        };\n      }\n\n      groups[key].sessions.push({\n        activity: row.activity,\n        week: row.week,\n        time: row.time,\n        yearGroup: row.yearGroup,\n        gender: row.gender\n      });\n    });\n\n    return Object.values(groups).sort((a, b) =>\n      a.firstName.localeCompare(b.firstName, undefined, { sensitivity: \"base\" })\n    );\n  }\n\n  function groupSessionsForDisplay(sessions) {\n    const grouped = {};\n\n    sessions.forEach(session => {\n      const key = session.activity + \"|\" + session.time;\n\n      if (!grouped[key]) {\n        grouped[key] = {\n          activity: session.activity,\n          time: session.time,\n          weeks: [],\n          yearGroup: session.yearGroup,\n          gender: session.gender\n        };\n      }\n\n      if (session.week && !grouped[key].weeks.includes(session.week)) {\n        grouped[key].weeks.push(session.week);\n      }\n    });\n\n    return Object.values(grouped).map(item => {\n      item.weeks.sort((a, b) =>\n        a.localeCompare(b, undefined, { numeric: true, sensitivity: \"base\" })\n      );\n      return item;\n    });\n  }\n\n  function populateActivityFilter() {\n    addOptions(activityFilter, uniqueValues(allRows.map(row => row.activity)), \"All Activities\");\n  }\n\n  function updateDependentFilters() {\n    const currentActivity = activityFilter.value;\n    const currentWeek = weekFilter.value;\n    const currentTime = timeFilter.value;\n\n    const rowsForWeeks = allRows.filter(row => {\n      return !currentActivity || row.activity === currentActivity;\n    });\n\n    const availableWeeks = uniqueValues(rowsForWeeks.map(row => row.week));\n\n    let validWeek = currentWeek;\n    if (validWeek && !availableWeeks.includes(validWeek)) {\n      validWeek = \"\";\n    }\n\n    const rowsForTimes = allRows.filter(row => {\n      const matchActivity = !currentActivity || row.activity === currentActivity;\n      const matchWeek = !validWeek || row.week === validWeek;\n      return matchActivity && matchWeek;\n    });\n\n    const availableTimes = uniqueValues(rowsForTimes.map(row => row.time));\n\n    let validTime = currentTime;\n    if (validTime && !availableTimes.includes(validTime)) {\n      validTime = \"\";\n    }\n\n    addOptions(weekFilter, availableWeeks, \"All Weeks\");\n    weekFilter.value = validWeek;\n\n    addOptions(timeFilter, availableTimes, \"All Times\");\n    timeFilter.value = validTime;\n  }\n\n  function addOptions(select, values, defaultLabel) {\n    select.innerHTML = '<option value=\"\">' + defaultLabel + '<\/option>';\n\n    values.forEach(value => {\n      const option = document.createElement(\"option\");\n      option.value = value;\n      option.textContent = value;\n      select.appendChild(option);\n    });\n  }\n\n  function getFilteredStudents() {\n    const searchValue = searchInput.value.toLowerCase().trim();\n    const activityValue = activityFilter.value;\n    const weekValue = weekFilter.value;\n    const timeValue = timeFilter.value;\n\n    return groupedStudents\n      .map(studentGroup => {\n        const filteredSessions = studentGroup.sessions.filter(session => {\n          const matchActivity = !activityValue || session.activity === activityValue;\n          const matchWeek = !weekValue || session.week === weekValue;\n          const matchTime = !timeValue || session.time === timeValue;\n\n          return matchActivity && matchWeek && matchTime;\n        });\n\n        return {\n          fullName: studentGroup.fullName,\n          firstName: studentGroup.firstName,\n          yearGroup: studentGroup.yearGroup,\n          gender: studentGroup.gender,\n          sessions: filteredSessions\n        };\n      })\n      .filter(studentGroup => {\n        const matchSearch =\n          !searchValue ||\n          studentGroup.firstName.toLowerCase().includes(searchValue) ||\n          studentGroup.fullName.toLowerCase().includes(searchValue) ||\n          studentGroup.yearGroup.toLowerCase().includes(searchValue) ||\n          studentGroup.sessions.some(session =>\n            session.activity.toLowerCase().includes(searchValue)\n          );\n\n        return matchSearch && studentGroup.sessions.length > 0;\n      });\n  }\n\n  function renderStudentCards() {\n    const students = getFilteredStudents();\n\n    studentGrid.innerHTML = \"\";\n\n    resultLine.textContent =\n      students.length +\n      \" student\" +\n      (students.length === 1 ? \"\" : \"s\") +\n      \" shown. Click a card to view full details.\";\n\n    if (!students.length) {\n      studentGrid.innerHTML =\n        '<div class=\"pas-message\">No matching student selections found. Please adjust or clear the filters.<\/div>';\n      return;\n    }\n\n    students.forEach((studentGroup, index) => {\n      const card = document.createElement(\"article\");\n      card.className = \"pas-student-card\";\n      card.style.animationDelay = (index * 0.035) + \"s\";\n\n      const groupedSessions = groupSessionsForDisplay(studentGroup.sessions);\n\n      const displayName = studentGroup.yearGroup\n        ? studentGroup.firstName + \" (\" + studentGroup.yearGroup + \")\"\n        : studentGroup.firstName;\n\n      const selectedText = groupedSessions.length === 1\n        ? \"1 selected activity\"\n        : groupedSessions.length + \" selected activities\";\n\n      const sessionHtml = groupedSessions.map(session => {\n        return `\n          <div class=\"pas-session\">\n            <div class=\"pas-session-title\">\n              <div class=\"pas-activity-name\">${escapeHtml(session.activity || \"Activity\")}<\/div>\n            <\/div>\n\n            ${session.time ? `<div class=\"pas-clean-time\">${escapeHtml(session.time)}<\/div>` : \"\"}\n\n            <div class=\"pas-week-chip-row\">\n              ${session.weeks.map(week => `\n                <span class=\"pas-week-chip\">${escapeHtml(week)}<\/span>\n              `).join(\"\")}\n            <\/div>\n          <\/div>\n        `;\n      }).join(\"\");\n\n      card.innerHTML = `\n        <button type=\"button\" class=\"pas-card-toggle\" aria-expanded=\"false\">\n          <div class=\"pas-card-head\">\n            <div class=\"pas-top-row\">\n              <div class=\"pas-avatar\">${escapeHtml(getInitials(studentGroup.firstName))}<\/div>\n\n              <div class=\"pas-name-wrap\">\n                <h3 class=\"pas-student-name\">${escapeHtml(displayName)}<\/h3>\n              <\/div>\n\n              <div class=\"pas-expand-icon\">+<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"pas-summary\">\n            <div class=\"pas-summary-clean\">\n              <div class=\"pas-summary-count\">\n                ${escapeHtml(selectedText)}\n              <\/div>\n\n              <div class=\"pas-summary-hint\">\n                Click to view\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/button>\n\n        <div class=\"pas-session-list\">\n          ${sessionHtml}\n        <\/div>\n      `;\n\n      const toggleButton = card.querySelector(\".pas-card-toggle\");\n\n      toggleButton.addEventListener(\"click\", function () {\n        const isOpen = card.classList.toggle(\"active\");\n        toggleButton.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n      });\n\n      studentGrid.appendChild(card);\n    });\n  }\n\n  function attachFilterEvents() {\n    searchInput.addEventListener(\"input\", function () {\n      renderStudentCards();\n    });\n\n    activityFilter.addEventListener(\"change\", function () {\n      updateDependentFilters();\n      renderStudentCards();\n    });\n\n    weekFilter.addEventListener(\"change\", function () {\n      updateDependentFilters();\n      renderStudentCards();\n    });\n\n    timeFilter.addEventListener(\"change\", function () {\n      renderStudentCards();\n    });\n\n    clearFiltersBtn.addEventListener(\"click\", function () {\n      searchInput.value = \"\";\n      activityFilter.value = \"\";\n      weekFilter.value = \"\";\n      timeFilter.value = \"\";\n      updateDependentFilters();\n      renderStudentCards();\n    });\n  }\n\n  function clean(value) {\n    return (value || \"\").toString().trim();\n  }\n\n  function toProperCase(value) {\n    return clean(value)\n      .toLowerCase()\n      .replace(\/\\b[a-z]\/g, function (letter) {\n        return letter.toUpperCase();\n      });\n  }\n\n  function getFirstName(value) {\n    const properName = toProperCase(value);\n    return properName.split(\" \").filter(Boolean)[0] || \"\";\n  }\n\n  function uniqueValues(values) {\n    return [...new Set(values.map(value => clean(value)).filter(Boolean))]\n      .sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: \"base\" }));\n  }\n\n  function getInitials(name) {\n    return String(name || \"\")\n      .split(\" \")\n      .filter(Boolean)\n      .slice(0, 2)\n      .map(part => part.charAt(0))\n      .join(\"\")\n      .toUpperCase();\n  }\n\n  function escapeHtml(value) {\n    return String(value)\n      .replace(\/&\/g, \"&amp;\")\n      .replace(\/<\/g, \"&lt;\")\n      .replace(\/>\/g, \"&gt;\")\n      .replace(\/\"\/g, \"&quot;\")\n      .replace(\/'\/g, \"&#039;\");\n  }\n\n});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Panthers Activity Selection Student Activity Schedule A compact view of each student\u2019s selected activities, training weeks and session timings. Click on a student card to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7456,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51,142,120,148],"tags":[],"class_list":["post-7432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-events","category-latest","category-primary","category-upcoming"],"_links":{"self":[{"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/posts\/7432"}],"collection":[{"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/comments?post=7432"}],"version-history":[{"count":11,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/posts\/7432\/revisions"}],"predecessor-version":[{"id":7450,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/posts\/7432\/revisions\/7450"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/media\/7456"}],"wp:attachment":[{"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/media?parent=7432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/categories?post=7432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tbspanthers.british-school.org\/index.php\/wp-json\/wp\/v2\/tags?post=7432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}