/*
Theme Name:     HCDSB Base child theme
Description:    Child theme of HCDSB Base, the starting theme for new HCDSB WordPress installs. Bootstrap 5.
Author:         HCDSB Creative Services
Author URI:     https://hcdsb.org
Template:       hcdsb-base
Version:        4.1.1
Requires PHP:   8.0
Text Domain:    hcdsb-td
*/

/* Template above is the parent theme's DIRECTORY name, not a label. It has to
   match the folder on disk or WordPress reports this theme as broken. */

/* ==========================================================================
 * CONTENTS
 * --------------------------------------------------------------------------
 *  4. Header & navigation
 *  8. Footer
 * 10. Theme skin — the :root colour tokens, and the header, menu and footer
 *     rules that use them
 * 11. Site palettes
 * --------------------------------------------------------------------------
 * This stylesheet deliberately covers only the header, menu and footer.
 * Content styling (typography, components, page sections) is to be built
 * fresh on Bootstrap 5; the section numbers are kept so the palette notes
 * and comments that refer to "section 4" or "section 10" stay correct.
 *
 * CONVENTIONS
 *  - Every colour in section 10 is a var(--sk-*) token; section 11 supplies
 *    per-site values. Do not hardcode a colour in section 10.
 *  - Section 11 must load last so palettes resolve before use.
 *  - Explain WHY in comments, not WHAT. The selector already says what.
 * ========================================================================== */

/* ==========================================================================
 * 4. HEADER & NAVIGATION
 * Top bar, mega menu, mobile toggle, header CTA.
 * ========================================================================== */

/*------------------------
Header CTA inside the mobile menu
------------------------*/

/* The Logo Bar widget area repeated at the top of the collapsed menu, printed
 * by partials/header/nav.php (child override).
 *
 * The parent hides .logo-sidebar below 992px, which took the New Student
 * Registration button with it on phones and tablets. Bootstrap collapses this
 * navbar at the same 992px, so the two swap over exactly — the button is in the
 * header above that width and in the menu below it, and there is no width where
 * neither shows.
 *
 * display:none rather than visibility or clipping, on purpose: the widget is in
 * the DOM twice, and display:none takes the inactive copy out of the
 * accessibility tree, so a screen reader meets the button once. */
.hcdsb-nav-cta {
  display: none;
}

@media (max-width: 991px) {
  .hcdsb-nav-cta {
    display: block;
    /* Top margin clears the header edge — the menu opens flush against it and
       the button read as stuck to the bottom of the navbar without this. */
    margin: 1rem 0 0.75rem;
    padding: 0 15px 0.85rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
  }

  /* The wrapper is built to sit at the right-hand end of the logo bar. In the
     menu it is a full-width block, so its flex alignment and the padding that
     matched the header container both have to be undone. */
  .hcdsb-nav-cta .hcdsb-cta-wrap {
    display: block;
    height: auto;
    padding-right: 0;
  }

  /* Full width in the menu: a centred button in a stack of left-aligned menu
     items reads as unrelated to them, and thumb targets should be generous.
     min-height rather than more padding alone: it guarantees the tap target
     whatever the font size resolves to, and the base rule already centres the
     label with flex, so the extra height is shared evenly above and below.
     48px sits just above the 44px most touch guidance asks for and matches the
     height of the menu rows beneath it — enough to hit reliably, not so much
     that it looms over the menu. */
  .hcdsb-nav-cta .hcdsb-cta {
    display: flex;
    justify-content: center;
    width: 100%;
    min-height: 48px;
    padding: 0.85em 1.15em;
  }

  /* The parent floats widgets left inside .logo-sidebar; this copy is not in
     one, but the widget's own styling may still carry over. */
  .hcdsb-nav-cta .sidebar-widget {
    float: none;
    width: 100%;
    margin: 0;
  }
}

/* Top bar widget area */
.top-bar .top p {
margin:0;
}

/* Desktop hover menus, with hover intent.
 *
 * This rule is why Appearance > Customize > Header > Hover Menu has no effect:
 * that setting only governed the parent theme's old JavaScript, and this opens the menus in
 * CSS regardless. Set it to Click and menus still open on hover above 1025px,
 * because of these rules.
 *
 * It is also why Hover Menu Delay did nothing. The old version switched
 * display, which cannot be delayed or transitioned — the menu appeared the
 * instant the pointer crossed the item, so a mouse travelling across the bar
 * threw open every menu it passed.
 *
 * The fix is to keep the menu displayed at all times and hide it with
 * visibility and opacity, which CAN be delayed:
 *
 *   opening   250ms   long enough to ignore a pointer passing through,
 *                     short enough that a deliberate hover feels immediate
 *   closing   400ms   forgives the diagonal drift from a parent item toward
 *                     the submenu under it, which is where menus that close
 *                     instantly become infuriating
 *
 * visibility is what makes the delay real: it steps between hidden and visible
 * with no in-between, so its transition-delay controls exactly when the menu
 * starts to exist. Opacity then fades it. On close, visibility waits for the
 * fade to finish (0.4s delay + 0.2s fade) before flipping back.
 *
 * display stays block throughout, which is safe because a dropdown is
 * absolutely positioned and so takes no space in the layout, and
 * visibility: hidden also removes it from the tab order and from screen
 * readers.
 *
 * Only in #masthead, the bar across the top. In a side menu (#navbar-slide)
 * the list is a column, and a dropdown that is always displayed would hold
 * its space open under its parent; there, Bootstrap's click opens it inline.
 *
 * Keyboard and click open with NO delay — a deliberate action should never
 * wait. :focus-within covers tabbing into a menu, .show covers Bootstrap's
 * click handler for any site set to Click. */
@media only screen and (min-width: 1025px) {
    #masthead .menu-item-has-children > .dropdown-menu,
    #masthead .menu-item-has-children > ul.sub-menu {
        display: block !important;
        visibility: hidden;
        opacity: 0;
        z-index: 9999;
        transition: opacity 0.2s ease 0.4s, visibility 0s linear 0.6s;
    }

    #masthead .menu-item-has-children:hover > .dropdown-menu,
    #masthead .menu-item-has-children:hover > ul.sub-menu {
        visibility: visible;
        opacity: 1;
        transition: opacity 0.2s ease 0.25s, visibility 0s linear 0.25s;
    }

    /* Deliberate: open at once. */
    #masthead .menu-item-has-children:focus-within > .dropdown-menu,
    #masthead .menu-item-has-children:focus-within > ul.sub-menu,
    #masthead .menu-item-has-children > .dropdown-menu.show,
    #masthead .menu-item-has-children > ul.sub-menu.show {
        visibility: visible;
        opacity: 1;
        transition: none;
    }
    /* A mega menu's columns are Bootstrap 5 grid columns, which only sit
       side by side in a flex row; display: block above stacked them. Same
       always-displayed approach, so the delays above still apply. */
    #masthead .menu-item-object-hcdsb_mega_menu > .dropdown-menu {
        display: flex !important;
        flex-wrap: wrap;
    }
}

@media only screen and (min-width: 1025px) and (prefers-reduced-motion: reduce) {
    /* The wait stays — it is intent, not decoration. The fade goes. */
    #masthead .menu-item-has-children > .dropdown-menu,
    #masthead .menu-item-has-children > ul.sub-menu,
    #masthead .menu-item-has-children:hover > .dropdown-menu,
    #masthead .menu-item-has-children:hover > ul.sub-menu {
        transition: opacity 0s linear 0.4s, visibility 0s linear 0.4s;
    }

    #masthead .menu-item-has-children:hover > .dropdown-menu,
    #masthead .menu-item-has-children:hover > ul.sub-menu {
        transition: opacity 0s linear 0.25s, visibility 0s linear 0.25s;
    }
}

/* Third-level flyouts open to the right of their parent item, which near the
 * right-hand end of the bar runs past the edge of the window. That happens
 * even with every menu closed: display stays block (above), and a hidden,
 * absolutely positioned menu still counts toward the page's scroll width, so
 * the whole page scrolled sideways. theme.js measures each flyout on load and
 * resize and adds .hcdsb-flyout-left where it would cross the edge. */
@media only screen and (min-width: 1025px) {
    .menu .dropdown-submenu.hcdsb-flyout-left > .dropdown-menu {
        left: auto;
        right: 100%;
    }
}

/* menu item labels start */

 

li .menu-label-black-new a:after {
    content: "NEW";
    color: #ffffff;
    font-size: 11px;
    margin-left: 8px;
    background: #000000;
	padding: 2px 7px;
    border-radius:10px;
  }

 

  li .menu-label-black-updated a:after {
    content: "UPDATED";
      color: #ffffff;
      font-size: 11px;
      margin-left: 8px;
      background: #000000;
      padding: 2px 7px;
      border-radius:10px;
  }

  li .menu-label-white-new a:after {
    content: "NEW";
      color: #000000;
      font-size: 11px;
      margin-left: 8px;
      background: #ffffff;
      padding: 2px 7px;
      border-radius:10px;
  }

  li .menu-label-white-updated a:after {
    content: "UPDATED";
      color: #000000;
      font-size: 11px;
      margin-left: 8px;
      background: #ffffff;
      padding: 2px 7px;
      border-radius:10px;
  }
 

/* menu item labels end */

@media (max-width: 991px)
{
/* The 10px bottom margin that used to be here is gone: the rows are separated
   by a hairline now (see "Compact top-level rows on mobile" below), and a gap
   plus a line is one separator too many. font-size is superseded there too. */
.menu .navbar-nav > li > a {
    border-radius: 0;
    font-size: 18px;
}
	}

.navbar-nav a.show, .navbar-nav a.show:focus, .navbar-nav a.show:hover {
    border-color: rgb(255, 255, 255, 0.30);
}

.menu-item-has-children {
	font-size: 15px;
}

.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a {
	font-size: 15px;
	line-height: 1.6em;
	color: #fff;
}

.navbar-sticky .navbar-collapse {
	max-height: 500px;
}

#masthead {
	box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.4) !important;
}

@media only screen and (min-width: 992px) and (max-width: 1100px) {
	#masthead.menu, .menu-item-has-children {
		font-size: 14px !important;
	}
  }

  @media only screen and (min-width: 992px) and (max-width: 1100px) {
  .menu .navbar-nav > li > a {
	padding-left:13px;
	padding-right:13px !important;
  }
  
  }

  .boxed-shadow {
	box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px;
	margin-bottom: 10px;
	padding: 20px;
  }

/*------------------------
Mobile menu toggle
------------------------*/
#masthead .navbar-toggler {
  position: absolute;
  top: 50%;
  right: 15px;
  transform: translateY(-50%);
  float: none;
  width: 40px;
  height: 40px;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  color: #fff;
}

/* Below 992px, where the menu collapses, every header style gets the same
   logo row: logo on the left, toggle on the right, both centred in the row.

   Each row is a flex container (theme.css section 6) and the collapsed menu
   is taken out of it (the full-screen panel below), so this only has to put
   the logo first and push the toggle to the far end. The toggle's absolute
   placement above is for the drawer style on desktop; here it is in the row,
   so it cannot slide down into the menu when the header grows.

   The styles that put the logo on the right on desktop are pulled back to the
   left here, so the row is the same everywhere. */
@media (max-width: 991.98px) {
  #masthead .navbar-brand {
    order: 1;
    margin-left: 0;
    margin-right: auto;
  }

  #masthead .navbar-toggler {
    order: 2;
    position: relative;
    top: auto;
    right: auto;
    left: auto;
    transform: none;
    flex-shrink: 0;
  }

  #masthead .logo-sidebar {
    order: 3;
  }
}

/* The three sidebar header styles (Logo Left - Menu Sidebar, Fixed Left and
   Fixed Right - Menu Sidebar) keep their side panel on desktop. Below 992px
   they open like every other style: the menu drops down under the logo row,
   full width, aligned to the same container edges, instead of a 270px
   drawer that overlaps the page or slides it sideways.

   #navbar-slide sits after #masthead in the markup rather than inside it, so
   it is put back into the flow here, and its side-padding reproduces
   Bootstrap's .container widths (540px from 576, 720px from 768) so the menu
   items line up with the logo exactly as they do in the other styles. */
@media (max-width: 991.98px) {
  #navbar-slide {
    position: relative;
    /* !important: theme.css offsets the fixed panel below the admin bar
       with .admin-bar #navbar-slide { top: 32px }, which would push the
       in-flow menu down by the same amount. */
    top: auto !important;
    left: auto;
    right: auto;
    height: auto !important;
    z-index: 1000;
    box-shadow: none;
    background-color: var(--sk-nav-bg);
    padding-left: calc(var(--bs-gutter-x, 1.5rem) * .5);
    padding-right: calc(var(--bs-gutter-x, 1.5rem) * .5);
  }

  /* body. for specificity: section 10 sets the drawer's 270px width later
     in the file. */
  body #navbar-slide {
    width: auto;
  }

  /* theme.css's admin-bar offset is itself !important; this outranks it. */
  body.admin-bar #navbar-slide {
    top: auto !important;
  }

  .slide-menu #navbar-slide.collapse:not(.show) {
    display: none;
  }

  /* The drawer repeats the logo for its own header; the logo row has it. */
  #navbar-slide > .navbar-brand {
    display: none;
  }

  /* The same 8px above and below the list as the other styles' menus. */
  #navbar-slide .navbar-nav {
    margin: 8px 0;
    max-height: none;
  }

  /* body. for specificity: section 10's slide rule comes later in the file. */
  body.slide-on #masthead,
  body.slide-on #content,
  body.slide-on #navbar-slide,
  body.slide-on .top-bar {
    transform: none;
  }
}

@media (min-width: 576px) and (max-width: 767.98px) {
  #navbar-slide {
    padding-left: calc((100% - 540px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
    padding-right: calc((100% - 540px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
  }
}

@media (min-width: 768px) and (max-width: 991.98px) {
  #navbar-slide {
    padding-left: calc((100% - 720px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
    padding-right: calc((100% - 720px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
  }
}

/* Shared, and bar 1 at rest (top, longer); bars 2 and 3 override below */
#masthead .navbar-toggler .toggler-bar {
  position: absolute;
  inset: calc(50% - 6px) auto auto 50%; /* top right bottom left */
  height: 3px;
  margin: 0 !important;
  border-radius: 999px;
  background-color: currentColor;
  box-shadow: none;
  transform-origin: 50% 50%;
  transition: top 0.25s ease, width 0.25s ease, transform 0.25s ease, opacity 0.15s ease;
  width: 26px;
  opacity: 1;
  transform: translateX(-50%);
}

/* --- Resting --- */

/* Bar 2 — hidden */
#masthead .navbar-toggler .toggler-bar + .toggler-bar {
  top: 50%;
  width: 0;
  opacity: 0;
  transform: translateX(-50%);
}

/* Bar 3 — bottom, shorter */
#masthead .navbar-toggler .toggler-bar + .toggler-bar + .toggler-bar {
  top: calc(50% + 3px);
  width: 18px;
  opacity: 1;
  transform: translateX(-50%);
}

/* --- Open --- */

/* Bar 1 → "\" */
#masthead .navbar-toggler:not(.collapsed) .toggler-bar,
#masthead .navbar-toggler[aria-expanded="true"] .toggler-bar {
  top: calc(50% - 1.5px);
  width: 26px;
  opacity: 1;
  transform: translateX(-50%) rotate(45deg);
}

/* Bar 2 — stays hidden */
#masthead .navbar-toggler:not(.collapsed) .toggler-bar + .toggler-bar,
#masthead .navbar-toggler[aria-expanded="true"] .toggler-bar + .toggler-bar {
  top: 50%;
  width: 0;
  opacity: 0;
  transform: translateX(-50%);
}

/* Bar 3 → "/" */
#masthead .navbar-toggler:not(.collapsed) .toggler-bar + .toggler-bar + .toggler-bar,
#masthead .navbar-toggler[aria-expanded="true"] .toggler-bar + .toggler-bar + .toggler-bar {
  top: calc(50% - 1.5px);
  width: 26px;
  opacity: 1;
  transform: translateX(-50%) rotate(-45deg);
}

@media (prefers-reduced-motion: reduce) {
  #masthead .navbar-toggler .toggler-bar { transition: none; }
}

/* Fonts come from the parent's pairing tokens (--hcdsb-font-heading, -body,
   -quote, -ui), set in the Customizer's Typography section. Nothing here
   names a font or forces one with !important. */

.recent-simple-os-container h4.post-list-title {
	font-weight:400 !important;
}

h4.gcp-post-title {
	font-weight:400 !important;
}

.h-black {
	color: #303c40 !important;
}

.text-light {
	color:#ffffff;
}

.h-300 {
	font-weight: 800;
	font-size: 17px;
	text-transform: uppercase;
}

/*------------------------
Main navigation — external-link icon
Class added by inc/nav-external-links.php to main-nav links that leave the
current site: other sites, the Hub, the board site, anything off-network.
------------------------*/

/* The same glyph, size and spacing as the footer's Across HCDSB links and the
   home page link list, so one icon means one thing across the site.
   currentColor keeps it the nav text colour in the bar, the dropdowns and the
   collapsed mobile menu without per-context rules.

   ::after is free on these links: the parent theme only uses it on the active top-level
   item and on an open dropdown toggle, and an external link is never the
   current page and dropdown toggles are never marked. */
.navbar-nav a.hcdsb-nav-external::after {
  content: "";
  display: inline-block;
  width: 0.75em;
  height: 0.75em;
  margin-left: 0.35em;
  vertical-align: -0.02em;
  background-color: currentColor;
  opacity: 0.65;
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 6H6a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6'/%3E%3Cpath d='M11 13l9-9'/%3E%3Cpath d='M15 4h5v5'/%3E%3C/svg%3E");
  mask-size: contain;
  mask-repeat: no-repeat;
}

.navbar-nav a.hcdsb-nav-external:hover::after,
.navbar-nav a.hcdsb-nav-external:focus-visible::after {
  opacity: 1;
}

/*------------------------
Menu readability — long dropdowns
------------------------*/

/* Sites put dozens of links behind a single tab. Three things made that hard
 * to use, and all three are fixed here in CSS: nothing below changes markup.
 *
 *   1. No caret. The menu walker outputs no caret element, so a parent
 *      item looked identical to a plain link — worst on mobile, where there is
 *      no hover to discover it with.
 *   2. Links ran together. The inherited hover changes the text colour and
 *      nothing else (`background: transparent` on the hover rule), so in a list
 *      of thirty there was no row to aim at and no boundary between rows.
 *   3. No ceiling on height. A long menu simply ran past the bottom of the
 *      screen with no way to reach the end.
 *
 * Tokens: --sk-nav-bg is the menu ground on every site, and it is always
 * dark, so the separators and hover fills below are white at low alpha rather
 * than palette colours. That way one set of rules works for every site
 * without a per-site override.
 */

/* --- 1. Carets on anything that opens --- */

/* The same chevron as the rest of the site, drawn as a mask so it takes the
   link's own colour and needs no icon font. Applied to top-level parents and
   to mega menu column headings that are themselves links. Not applied to
   .dropdown-submenu, which already has its own indicator from the parent
   theme. */
.menu .navbar-nav > li.dropdown > a::after,
#navbar-slide .navbar-nav > li.dropdown > a::after {
  content: "";
  display: inline-block;
  width: 0.9em;
  height: 0.9em;
  margin-left: 0.4em;
  vertical-align: -0.05em;
  background-color: currentColor;
  opacity: 0.75;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat center / contain;
  transition: transform 0.2s ease, opacity 0.2s ease;
}

/* Points up while the menu is open — the one cue that says "this closes
   again", which matters most on mobile where the menu pushes the page down.

   .show (Bootstrap's open state) is the honest one and is all mobile uses. */
.menu .navbar-nav > li.dropdown > a.show::after,
#navbar-slide .navbar-nav > li.dropdown > a.show::after {
  transform: rotate(180deg);
  opacity: 1;
}

/* :hover and :focus-within are DESKTOP ONLY, and that restriction is a fix,
 * not tidiness.
 *
 * A tap on a touch screen leaves both behind: the element keeps :hover until
 * something else is tapped, and the link keeps focus, so :focus-within keeps
 * matching its li. With these unscoped, closing a menu on a phone removed
 * .show and the caret still pointed up — the one cue that says "this is open"
 * was left saying it about a menu that had closed.
 *
 * They belong here anyway: above 1025px hover is what OPENS the menu, so the
 * caret should answer it. Below that, tapping is, and .show covers it. */
@media only screen and (min-width: 1025px) {
  .menu .navbar-nav > li.dropdown:hover > a::after,
  .menu .navbar-nav > li.dropdown:focus-within > a::after {
    transform: rotate(180deg);
    opacity: 1;
  }
}

/* --- 2. Rows that read as rows --- */

/* A hairline between items and a fill on hover. Both are white at low alpha so
   they sit on any site's nav colour. The 3px bar on the left is the actual
   "you are pointing at this one" signal — a fill alone is easy to miss at the
   speed people scan a menu. */
.menu .dropdown-menu > li + li > a,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li + li > a {
  border-top: 1px solid rgba(255, 255, 255, 0.09);
}

.menu .dropdown-menu > li > a,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a {
  position: relative;
  padding-left: 13px !important;
  transition: background-color 0.15s ease, padding-left 0.15s ease;
}

.menu .dropdown-menu > li > a::before,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: currentColor;
  opacity: 0;
  transition: opacity 0.15s ease;
}

/* :focus-visible as well as :hover — a keyboard user moving through thirty
   links needs the same row marked. The parent theme kills the focus outline on
   these (.menu .dropdown-menu > li > a:focus { outline: none }), so without
   this there is nothing at all. */
.menu .dropdown-menu > li > a:hover,
.menu .dropdown-menu > li > a:focus-visible,
.menu .dropdown-menu > li > a.active,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:hover,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:focus-visible {
  background-color: rgba(255, 255, 255, 0.10) !important;
  padding-left: 17px !important;
}

.menu .dropdown-menu > li > a:hover::before,
.menu .dropdown-menu > li > a:focus-visible::before,
.menu .dropdown-menu > li > a.active::before,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:hover::before,
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:focus-visible::before {
  opacity: 1;
}

/* Mega menu column headings: smaller, spaced, and unmistakably not a link, so
   the eye can use them to find its way down a wide panel. */
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > strong {
  font-size: 0.75rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.72;
  padding-top: 14px;
  padding-bottom: 6px;
  border-bottom: thin solid;
}

/* --- 3. More columns when the list is long, and NO scrolling panel --- */

/* An earlier version of this block capped every dropdown at 78vh and let it
 * scroll. That was wrong twice over, and both faults are worth recording
 * because they are easy to reintroduce:
 *
 * 1. A scroll container gives absolutely positioned DESCENDANTS a scrollable
 *    area. The mega menu's column divider is a pseudo-element 1000px tall
 *    (theme.css: `.menu-item-object-hcdsb_mega_menu .dropdown-menu > li:before`),
 *    which the parent kept out of sight with `overflow: hidden` on the panel.
 *    Replacing that with `overflow-y: auto` did not shorten the divider — it
 *    made it scrollable content, so every mega menu became a 1000px panel with
 *    its links in the top inch and empty space below. It did that whatever the
 *    menu contained, which is the giveaway: the height came from the CSS, not
 *    the links.
 * 2. It also clipped any third-level flyout, which opens to the side of a panel
 *    that is now clipping its own overflow.
 *
 * So there is no ceiling here now, and nothing in the desktop nav scrolls.
 * Height is controlled by splitting into more columns instead — at four
 * columns a 48-item menu is about twelve rows tall, which fits any desktop
 * viewport. A panel that does not scroll cannot clip, cannot trap the pointer,
 * and cannot invent space it does not need.
 */

@media only screen and (min-width: 1025px) {
  /* Thirteen or more items: two columns instead of one very long one.
     :has() counts for us — there is no other way to know how many links an
     editor added. Below thirteen nothing changes, so short menus keep the
     shape they have now. */
  .menu .navbar-nav > li > .dropdown-menu:has(> li:nth-child(13)) {
    width: 34rem;
    max-width: 90vw;
    columns: 2;
    column-gap: 0;
  }

  /* A row must not be split down the middle by the column break. */
  .menu .navbar-nav > li > .dropdown-menu:has(> li:nth-child(13)) > li {
    break-inside: avoid;
  }

  /* The hairline above the first item of the second column would otherwise be
     missing, since it is no longer preceded by a sibling on screen. */
  .menu .navbar-nav > li > .dropdown-menu:has(> li:nth-child(13)) > li > a {
    border-top: 1px solid rgba(255, 255, 255, 0.09);
  }

  /* Twenty-five or more: a third column. Thirty-seven or more: a fourth.
     Each column added is what keeps the panel short enough to read without
     scrolling, which is the whole approach here. 64rem is a little over
     1000px — still inside the narrowest desktop this network sees. */
  .menu .navbar-nav > li > .dropdown-menu:has(> li:nth-child(25)) {
    width: 50rem;
    columns: 3;
  }

  .menu .navbar-nav > li > .dropdown-menu:has(> li:nth-child(37)) {
    width: 64rem;
    columns: 4;
  }

  /* A 64rem panel hanging off a menu item near the right-hand end of the bar
     would run off the edge of the window. Bootstrap positions these from the
     left; this flips the four-column one to hang from the right instead when
     its item is one of the last three in the bar. Deliberately limited to that
     tier — the two- and three-column panels place correctly as they are, and
     the narrower fix is the one that cannot regress them. */
  .menu .navbar-nav > li:nth-last-child(-n + 3) > .dropdown-menu:has(> li:nth-child(37)) {
    left: auto;
    right: 0;
  }
}

/* --- Mobile --- */

@media only screen and (max-width: 1024px) {
  /* 44px minimum, which is the smallest reliable touch target. The parent sets
     9px 15px with !important, so this has to answer in kind. */
  .menu .dropdown-menu > li > a,
  #navbar-slide .navbar-nav .dropdown-menu > li > a {
    min-height: 44px;
    display: flex;
    align-items: center;
    padding: 10px 16px 10px 19px !important;
  }

  /* Indented, and on a slightly darker ground, so an open submenu reads as
     contained by its parent rather than as more top-level items.
   *
   * NO max-height and NO overflow here, deliberately. An earlier version
   * capped this at 60vh and let it scroll, which stacked three scrollable
   * layers on a phone — page, drawer, submenu — and a flick had to guess which
   * one you meant. The submenu now expands to its full height inside the
   * drawer, and the drawer is the only thing that scrolls. */
  .menu .navbar-nav > li > .dropdown-menu.show,
  #navbar-slide .navbar-nav > li > .dropdown-menu.show {
    background-color: rgba(0, 0, 0, 0.18);
    box-shadow: inset 3px 0 0 rgba(255, 255, 255, 0.14);
    max-height: none;
    overflow: visible;
  }

  /* Mega menu panels stack; the column headings keep their role as signposts. */
  .menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a {
    min-height: 44px;
    display: flex;
    align-items: center;
    padding: 10px 16px 10px 19px !important;
  }

  /* The column divider is a 1000px vertical line, which is meaningless once
     the columns are stacked. */
  .menu-item-object-hcdsb_mega_menu .dropdown-menu > li:before {
    display: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .menu .navbar-nav > li.dropdown > a::after,
  #navbar-slide .navbar-nav > li.dropdown > a::after,
  .menu .dropdown-menu > li > a,
  .menu .dropdown-menu > li > a::before {
    transition: none;
  }
}

/*------------------------
Menu: panel separation, and a compact mobile list
------------------------*/

/* --- The dropdown is a different surface from the bar it came from --- */

/* .menu .dropdown-menu is --sk-nav-bg, the same colour as the nav bar
   itself, so an open panel had no edge: it read as the bar getting taller.
 *
 * Lifted with a translucent white wash rather than a per-site colour. A
 * fixed hex would need an override per site and would drift the moment a
 * palette changed; this lightens whatever the site's nav colour is by the same
 * amount, and every nav colour on the network is dark enough to take it.
 * Layering it as a background-image over the inherited background-color means
 * no colour maths and no color-mix support question.
 *
 * The hairline and the shadow do the rest of the work: the panel has a top
 * edge and sits above the page rather than continuing the bar. (Desktop
 * replaces both with the deeper, borderless card further down.) */
.menu .dropdown-menu {
  background-color: var(--sk-nav-bg);
  background-image: linear-gradient( rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.07) );
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  box-shadow: 0 2px 4px var(--sk-dropdown-shadow), 0 3px 0 var(--sk-dropdown-shadow-inset) inset;
  /* Text in the panel that is not a link (mega menu column headings)
     inherits this. Bootstrap 5's dropdown defaults it to the body's dark
     text colour, which put the headings dark on navy. */
  --bs-dropdown-color: #fff;
  --bs-dropdown-link-color: #fff;
  --bs-dropdown-link-hover-color: #fff;
  --bs-dropdown-link-hover-bg: transparent;
  --bs-dropdown-link-active-color: #fff;
  --bs-dropdown-link-active-bg: transparent;
  --bs-dropdown-divider-bg: rgba(0, 0, 0, .055);
  color: #fff;
}

/* The mega menu spans the full width, so its edge matters more, not less. */
.menu-item-object-hcdsb_mega_menu .dropdown-menu {
  background-image: linear-gradient( rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.07) );
  border-top: 1px solid rgba(255, 255, 255, 0.14);
}

@media only screen and (max-width: 1024px) {
  /* Mobile goes the other way. There is no floating panel to lift — the
     submenu opens inline, underneath its parent — so it reads as contained by
     going DARKER than the bar, which is what the indent rule above already
     does. Cancel the desktop wash so the two do not fight. */
  .menu .dropdown-menu,
  .menu-item-object-hcdsb_mega_menu .dropdown-menu {
    background-image: none;
    box-shadow: none;
  }
}

/* --- Compact top-level rows on mobile --- */

@media only screen and (max-width: 991px) {
  /* The top-level items were set at 15px with generous padding, which is
     comfortable for eight links and works against you at twenty: the further
     down the list an item is, the more scrolling it takes to reach. Tightening
     the row puts noticeably more of the menu on screen at once.
     !important throughout because every rule being answered here uses it. */
  .menu .navbar-nav > li > a,
  #navbar-slide .navbar-nav > li > a {
    min-height: 40px;
    display: flex;
    align-items: center;
    padding: 6px 15px !important;
    font-size: 0.9375rem;
    line-height: 1.3 !important;
  }

  /* 40px, not the 44px used for the submenu links, and deliberately so: these
     rows are full-width and separated from each other, which is the case where
     a slightly shorter target is still comfortable. Below 40 it stops being. */

  /* THE ONLY SCROLLER ON MOBILE.
   *
   * The collapsed menu scrolled inside 500px (340px from the parent theme,
   * raised once already), with the open submenu scrolling inside that. One
   * scroll region, using the height actually available, replaces both.
   *
   * dvh rather than vh: on a phone, vh is the height with the browser chrome
   * hidden, so a vh-based menu is cut off by the address bar exactly when the
   * bar is showing. dvh tracks the real viewport. The vh line before it is the
   * fallback for anything that does not know dvh.
   *
   * 7rem is the header above it. overscroll-behavior stops a flick at the end
   * of the list from scrolling the page behind the open menu, which is the
   * other half of what made this feel unpredictable. */
  .navbar-collapse,
  .navbar-sticky .navbar-collapse {
    max-height: calc(100vh - 7rem) !important;
    max-height: calc(100dvh - 7rem) !important;
    overflow-y: auto;
    overscroll-behavior: contain;
  }

  /* The script scrolls an opened item to the top of the drawer; this keeps a
     little air above it so it does not sit flush against the edge. */
  .menu .navbar-nav > li.dropdown,
  #navbar-slide .navbar-nav > li.dropdown {
    scroll-margin-top: 0.5rem;
  }

  /* A hairline between top-level rows, matching the one already between
     submenu links. On the li rather than the a, so it spans the full width and
     sits BELOW an expanded submenu — separating one section of the menu from
     the next, rather than cutting a section in half. */
  .menu .navbar-nav > li,
  #navbar-slide .navbar-nav > li {
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  }

  .menu .navbar-nav > li:last-child,
  #navbar-slide .navbar-nav > li:last-child {
    border-bottom: 0;
  }

  /* Caret to the right-hand edge. The row is already a flex line, so auto
     margin does it — and putting the caret at the far edge is what makes a
     column of them scannable as "these open". */
  .menu .navbar-nav > li.dropdown > a::after,
  #navbar-slide .navbar-nav > li.dropdown > a::after {
    margin-left: auto;
    flex: 0 0 auto;
    /* Bigger here than on desktop: it is right-justified with the whole row
       to itself, and it is the mark that has to carry the top level of a
       menu someone is reading at arm's length. */
    width: 1.15em;
    height: 1.15em;
  }

  /* --- Mega menu columns fold behind a + --- */

  /* The button is built by assets/js/nav-mobile.js, which also writes
     aria-expanded; everything here is the look of it. The state lives in one
     class on the column, so the rules below never have to ask the button what
     it thinks.

     A + rather than a second caret, on purpose: the caret already means "this
     top-level menu opens" and a nested list of identical carets says nothing
     about which level you are on. Two marks, two depths. */
  .hcdsb-col-closed > ul {
    display: none;
  }

  .hcdsb-col-toggle {
    position: relative;
    display: flex;
    align-items: center;
    width: 100%;
    min-height: 44px;
    margin: 0;
    /* Right padding clears the + so a long heading wraps before it. */
    padding: 8px 52px 8px 19px;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: left;
    /* The row above and below it are menu links; without this the column
       heading floats between them with no edge of its own. */
    border-top: 1px solid rgba(255, 255, 255, 0.12);
  }

  /* The heading styling has to be restated here, and this is the one trap in
     the whole feature: every rule for a column heading is written
     `… .dropdown-menu > li > strong`, and wrapping it in the button makes it a
     child of the button instead. The DIRECT-CHILD combinator stops matching
     and the heading silently loses its case, tracking and size. So the look is
     repeated against the new position — minus the underline, which was there
     to separate a heading from the links below it and is now the button's own
     top border. */
  .hcdsb-col-toggle > strong {
    padding: 0 !important;
    border-bottom: 0;
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    opacity: 0.72;
  }

  /* The + itself: two bars, and the upright one goes away when the column is
     open, which turns it into a −. Drawn rather than typed so it lines up with
     the carets above it and takes the menu's own colour.
   *
   * Deliberately smaller than the caret, and the pair of sizes is the point:
   * the caret marks the top level and the + marks a level inside it, so the
   * marks are ranked the way the menu is. Both are right-aligned to the same
   * 15px edge, so they still read as one column of controls.
   *
   * The 44px tap target is the BUTTON, which is unchanged — shrinking the
   * mark does not shrink what a thumb has to hit. */
  .hcdsb-col-toggle::before,
  .hcdsb-col-toggle::after {
    content: "";
    position: absolute;
    right: 15px;
    top: calc(50% - 1px);
    width: 10px;
    height: 2px;
    border-radius: 2px;
    background: currentColor;
    opacity: 0.75;
    transition: transform 0.2s ease, opacity 0.2s ease;
  }

  .hcdsb-col-toggle::after {
    transform: rotate(90deg);
  }

  .hcdsb-col-toggle[aria-expanded="true"]::after {
    transform: rotate(0deg);
    opacity: 0;
  }

  /* :focus-visible only here. It is defined not to match a tap, so it marks a
     keyboard user and leaves no fill stuck under a thumb; the hover fill is
     added separately below, for pointers that really hover. */
  .hcdsb-col-toggle:focus-visible {
    background-color: rgba(255, 255, 255, 0.08);
  }

  /* A column whose heading is itself a link: the link stays a link and the
     toggle is a square at the end of its row, so a tap on the words still
     goes to the page. */
  .hcdsb-col--linked {
    position: relative;
  }

  /* Keep the heading's own text clear of the square. */
  .hcdsb-col--linked > a {
    padding-right: 56px !important;
  }

  .hcdsb-col-toggle--beside {
    position: absolute;
    top: 0;
    right: 0;
    width: 52px;
    min-height: 44px;
    padding: 0;
    border-top: 0;
  }

  .hcdsb-col-toggle--beside::before,
  .hcdsb-col-toggle--beside::after {
    right: 15px;
  }
}

/* A narrow desktop window is still a pointer, and gets the hover fill. A
   phone reports no hover at all, so it never sticks there. */
@media (hover: hover) and (max-width: 991px) {
  .hcdsb-col-toggle:hover {
    background-color: rgba(255, 255, 255, 0.08);
  }
}

/* --- Moved here from Theme Options > Advanced > Extra CSS (Sept 2026) --- */

/* This rule was pasted by hand into the Extra CSS box of all eleven sites,
 * character for character, and was the only thing in any of them. It is
 * reproduced here unchanged so the rendering does not move, and the option
 * field it came from has been removed — see inc/option-pages.php.
 *
 * It is NOT redundant, which is worth saying because it looks it. Below
 * 992px, where the navbar collapses, Bootstrap 5 sets
 *
 *     .navbar-nav .dropdown-menu { position: static; }
 *
 * so an open submenu flows inline instead of floating over the drawer. This
 * rule overrides `static` with `relative`, which keeps the inline flow and
 * additionally makes the open submenu a containing block and a stacking
 * context for anything absolutely positioned inside it.
 *
 * Whoever added it was almost certainly fixing a third-level flyout or a
 * z-index overlap, and there is no record of which. Since the difference is
 * real and the reason is not documented, it moves as-is rather than being
 * assumed dead. If it is ever tested and found unnecessary, it is one line in
 * a tracked file now instead of eleven database rows. */
@media (max-width: 991px) {
  .navbar-nav .dropdown-menu.show,
  .navbar-nav .dropdown-menu.show .dropdown-menu {
    position: relative;
  }
}

/*------------------------
Header search: a surface of its own
------------------------*/

/* Opening the search slides a form ACROSS the nav bar — it is
 * position: absolute over the top of it (theme.css, .top-search form) — and
 * the skin paints it --sk-nav-bg, the nav's own colour. So the search opened
 * onto a bar the same colour it already was: the links vanished and nothing
 * took their place, which reads as the menu breaking rather than as a search
 * box arriving.
 *
 * The same translucent wash as the dropdown panels rather than a white box.
 * White would make a small utility the loudest thing in the header, and it
 * would need a palette override per site; the wash lightens whatever colour
 * the site's nav already is, by the same amount, everywhere. The border and the
 * shadow do most of the work of saying "this is a layer on top", which is the
 * actual thing that was missing.
 *
 * #masthead for specificity: the skin's .top-search rules sit later in this
 * file (section 10) and would otherwise win the background outright — see the
 * note in section 11. */
@media (min-width: 992px) {
  #masthead .top-search form {
    background-image: linear-gradient( rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.09) );
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 10px;
    box-shadow: 0 10px 26px rgba(0, 0, 0, 0.30);
  }

  /* The top bar is the one place this widget can land on a LIGHT surface, and
     a white wash on a light ground is invisible. Left as the skin has it. */
  #masthead .top-bar .top-search form {
    background-image: none;
    border: 0;
    box-shadow: none;
  }
}

/*------------------------
Search: the overlay
------------------------*/

/* Everything above this point styles the form where WordPress put it — in the
 * header widget. That is now the NO-JAVASCRIPT case only. With
 * assets/js/search-overlay.js running, the form is lifted out of the header
 * and into the panel below, and the widget keeps only a button.
 *
 * Same overlay on every width, which is the answer to "desktop or mobile":
 * two behaviours would be two things to keep in step, and the phone case is
 * the one that needed it most — the form used to sit at the bottom of the
 * open drawer, below every menu link. */

/* --- The button left behind in the widget --- */

.hcdsb-search-open-btn {
  display: flex;
  align-items: center;
  gap: 0.6em;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  line-height: 1;
  cursor: pointer;
}

/* It is an icon in a nav bar, so it gets no fill in any state.
 *
 * The skin's Bootstrap styling in section 10 targets the BARE ELEMENT —
 * `.btn-primary, button, input[type="submit"]` — so every <button> on the
 * site is a primary button until something says otherwise. The rule above
 * says otherwise at rest and wins, because .hcdsb-search-open-btn (0,1,0)
 * beats `button` (0,0,1). On hover it loses: `button:hover` is (0,1,1). So
 * the magnifier sat transparent in the bar and then flashed a solid
 * --sk-primary-hover block under the pointer, on every site.
 *
 * All the states the section 10 rule lists, not just :hover — it also names
 * :focus and :active, which would have put the same block under a keyboard
 * tab stop and under a held click. (0,2,0) beats its (0,1,1) on specificity,
 * so this works from section 4 and needs no !important.
 *
 * The parent theme's .search-trigger is an <a>, not a <button>, so it never had
 * this and is not touched here. */
.hcdsb-search-open-btn:hover,
.hcdsb-search-open-btn:focus,
.hcdsb-search-open-btn:focus-visible,
.hcdsb-search-open-btn:active,
.hcdsb-search-open-btn:active:hover,
.hcdsb-search-open-btn:active:focus {
  background: none;
  color: inherit;
}

/* What replaces the fill on desktop: the icon simply comes up to full
   strength from its resting 0.9. The mobile pill already does this with its
   border and opacity, below. Drop this block if you want no hover feedback
   at all. */
@media (hover: hover) and (min-width: 992px) {
  .hcdsb-search-open-btn:hover svg,
  .hcdsb-search-open-btn:focus-visible svg {
    opacity: 1;
  }
}

/* 20px, overriding the 24 in the SVG's own attributes. The widget it replaces
   was a 24px square and the nav bar's height is measured off the tallest
   thing in the row — anything larger pushes the whole band open and leaves
   space around the icon that looks like a mistake. */
.hcdsb-search-open-btn svg {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  opacity: 0.9;
}

/* Desktop: the icon alone, in the space the old magnifier occupied. The label
   stays in the accessibility tree — it is the button's name — but the icon is
   doing the work in a bar with no room for a word. */
@media (min-width: 992px) {
  #masthead .top-search.hcdsb-search-ready {
    width: auto;
  }

  .hcdsb-search-open-btn__label {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }

  /* The same 24px box the original trigger occupied, so the row keeps its
     height. The click target is smaller than the 44px a touch screen wants,
     which is correct here: this branch is the mouse one, and the mobile rule
     below gives a full-width row. */
  .hcdsb-search-open-btn {
    width: 24px;
    height: 24px;
    justify-content: center;
  }
}

/* Mobile: an outlined pill at the end of the drawer, not another menu row.
 *
 * It was a full-width row with a hairline on top, which was wrong twice. The
 * hairline doubled up with one already above it, and matching the menu rows
 * made a search box look like a thirteenth place to go — when it is a
 * different KIND of thing: a control, not a destination.
 *
 * An outline and no fill is the whole idea. It has an edge, so it is
 * obviously pressable; it has no background, so it stays quieter than the
 * links it sits under. The width comes from the label, which is what keeps it
 * from reading as another row in the list. */
@media (max-width: 991px) {
  #masthead .top-search.hcdsb-search-ready {
    float: none;
    width: 100%;
  }

  /* inline-flex, not the flex it inherits: a block-level flex container with
     width:auto still fills its parent, so the button would have stayed full
     width no matter what the width property said. */
  .hcdsb-search-open-btn {
    display: inline-flex;
    width: auto;
    min-height: 40px;
    margin: 14px 15px 16px;
    padding: 6px 16px;
    border: 1px solid rgba(255, 255, 255, 0.38);
    border-radius: 999px;
    font-size: 0.875rem;
    opacity: 0.92;
  }

  /* :focus-visible only — it does not match a tap, so nothing stays lit under
     a thumb. The hover half is below, behind (hover: hover). */
  .hcdsb-search-open-btn:focus-visible {
    border-color: rgba(255, 255, 255, 0.7);
    opacity: 1;
  }

  .hcdsb-search-open-btn svg {
    width: 16px;
    height: 16px;
  }
}

@media (hover: hover) and (max-width: 991px) {
  .hcdsb-search-open-btn:hover {
    border-color: rgba(255, 255, 255, 0.7);
    opacity: 1;
  }
}

/* --- The overlay --- */

/* z-index above the header, which sits at 1100. The blur is progressive: a
   browser without backdrop-filter simply gets the darker wash, which is what
   the alpha is set for on its own. */
.hcdsb-search-overlay {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 12vh 16px 16px;
  background: rgba(8, 12, 20, 0.62);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity 0.18s ease;
}

.hcdsb-search-overlay.is-open {
  opacity: 1;
}

/* THIS RULE IS LOAD-BEARING. Do not remove it.
 *
 * The `hidden` attribute is nothing but `[hidden] { display: none }` in the
 * browser's own stylesheet, and ANY author `display` beats it — including the
 * `display: flex` three rules up. Without this line the overlay is never
 * hidden at all: it sits at opacity 0 across the whole viewport at z-index
 * 10000, invisible and still catching every click on the page. The header
 * looks broken — the logo does nothing, the menu will not open, the search
 * button itself cannot be clicked — and the elements are all fine. They are
 * just underneath something.
 *
 * !important so no later `display` can reintroduce it. */
.hcdsb-search-overlay[hidden] {
  display: none !important;
}

/* The page behind must not scroll while this is up — a backdrop that moves
   when you flick it is the clearest sign a dialog is not really a dialog. */
html.hcdsb-search-open,
html.hcdsb-search-open body {
  overflow: hidden;
}

.hcdsb-search-panel {
  position: relative;
  width: 100%;
  max-width: 660px;
  padding: 26px 26px 24px;
  border-radius: 14px;
  background: #fff;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
}

/* --- The form inside it --- */

.hcdsb-search-panel form {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  box-shadow: none;
}

/* WordPress wraps the field in a <label>, Bootstrap search forms wrap it in
 * .input-group, and some themes use a <p>. Whichever one this site rendered
 * is the flex item here — the input itself is a grandchild — so the wrapper
 * has to be told to grow or the field sizes to its own content and sits
 * narrow in a wide panel.
 *
 * .input-group is the one that actually bit: Bootstrap gives it
 * `display: table`, and a table shrinks to fit. It is reset to block so the
 * 100% width below has something to resolve against.
 *
 * min-width: 0 because a flex item will not shrink below its content's
 * intrinsic width without it, and a long placeholder is content. */
.hcdsb-search-panel form > label,
.hcdsb-search-panel form > .input-group,
.hcdsb-search-panel form > p,
.hcdsb-search-panel form > div {
  display: block;
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  margin: 0;
  padding: 0;
}

/* Whatever the theme rendered as a submit is hidden here — an <input> cannot
   hold an icon, so the script adds a button that can, and this stands the
   original down without needing to know which of the two it was. */
.hcdsb-search-panel .search-submit,
.hcdsb-search-panel input[type="submit"],
.hcdsb-search-panel .input-group-btn,
.hcdsb-search-panel .btn,
.hcdsb-search-panel .wp-block-search__button,
.hcdsb-search-panel label .screen-reader-text {
  display: none !important;
}

/* The Search block (block widgets) labels its field with a <label> that is
   visible unless the editor ticked "hide label". In the panel it is kept for
   screen readers but never shown: the placeholder and the dialog's own
   label say what the field is. */
.hcdsb-search-panel .wp-block-search__label {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.hcdsb-search-panel label {
  font-weight: 400;
}

/* The field is also a flex item when a form has no wrapper at all, hence the
   flex shorthand here as well as on the wrappers above. */
.hcdsb-search-panel input[type="search"],
.hcdsb-search-panel input[type="text"],
.hcdsb-search-panel .search-field,
.hcdsb-search-panel .form-control {
  flex: 1 1 auto;
  width: 100% !important;
  min-width: 0;
  max-width: none;
  height: 58px !important;
  margin: 0;
  padding: 0 16px !important;
  border: 1px solid #d3d8e0 !important;
  border-radius: 10px !important;
  background: #fff;
  color: #10131a;
  font-size: 1.1875rem !important;
  line-height: 1.4;
  box-shadow: none;
}

.hcdsb-search-panel input[type="search"]:focus,
.hcdsb-search-panel .search-field:focus {
  outline: none;
  border-color: #1a73e8 !important;
  box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.25);
}

/* The blue is fixed rather than a palette token, and deliberately: this panel
   is white on every site, so a per-site colour would be the only thing on
   it that moved, and several of the palettes are not legible at icon weight on
   white. #1a73e8 clears 3:1 against white, which is what a non-text control
   needs. */
.hcdsb-search-go {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 58px;
  height: 58px;
  padding: 0;
  border: 0;
  border-radius: 10px;
  background: rgba(26, 115, 232, 0.10);
  color: #1a73e8;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}

/* :focus and :active as well, for the same reason as the opener above: the
   section 10 `button` rule names them, and .hcdsb-search-go alone (0,1,0)
   loses to `button:active` (0,1,1), so a held click flashed --sk-primary
   over the blue. */
.hcdsb-search-go:hover,
.hcdsb-search-go:focus,
.hcdsb-search-go:focus-visible,
.hcdsb-search-go:active {
  background: #1a73e8;
  color: #fff;
}

.hcdsb-search-close {
  position: absolute;
  top: -46px;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 0;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.14);
  color: #fff;
  cursor: pointer;
  transition: background-color 0.15s ease;
}

.hcdsb-search-close:hover,
.hcdsb-search-close:focus,
.hcdsb-search-close:focus-visible,
.hcdsb-search-close:active {
  background: rgba(255, 255, 255, 0.28);
  color: #fff;
}

/* Above the panel there is room for it on a desktop; on a short screen it
   would be off the top, so it moves inside. */
@media (max-width: 600px), (max-height: 520px) {
  .hcdsb-search-overlay {
    padding-top: 6vh;
  }

  /* Sides stay equal — 18px rather than 26px, so the field gets the width
     back on a narrow screen without the panel looking lopsided. The top is
     deep enough to clear the close button, which moves inside here. */
  .hcdsb-search-panel {
    padding: 62px 18px 20px;
  }

  .hcdsb-search-close {
    top: 12px;
    right: 12px;
    background: rgba(16, 19, 26, 0.08);
    color: #10131a;
  }

  .hcdsb-search-close:hover,
  .hcdsb-search-close:focus-visible {
    background: rgba(16, 19, 26, 0.16);
  }
}

@media (prefers-reduced-motion: reduce) {
  .hcdsb-search-overlay,
  .hcdsb-search-go,
  .hcdsb-search-close {
    transition: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .hcdsb-col-toggle::before,
  .hcdsb-col-toggle::after {
    transition: none;
  }
}

/*------------------------
Menu: a rounded panel with an edge, and a tab that shows what is open
------------------------*/

/* Specificity note, because it is the whole reason these are written with
 * #masthead: the per-site skin in section 10 sets `.menu .dropdown-menu`
 * box-shadow, and it appears LATER in this file than section 4. Same
 * specificity, later wins — so the deeper shadow written up in the block above
 * never actually applied. An ID selector settles it. `#masthead.menu` (no
 * space) is the real structure: the header element carries both.
 */

@media only screen and (min-width: 1025px) {
  /* Rounded at the bottom only. The panel hangs flush off the bar, so rounding
     all four corners would cut a notch out of the join; rounding the two free
     corners reads as a card without moving it away from its tab. No border:
     the shadow alone separates the panel, and it is deep enough to lift it
     off whatever it covers — a photo header is the hard case, and 2px of
     blur was not enough for it. */
  #masthead.menu .dropdown-menu,
  #masthead .menu .dropdown-menu,
  #navbar-slide.menu .dropdown-menu {
    border: 0;
    border-radius: 0 0 10px 10px;
    box-shadow: 0 18px 38px rgba(0, 0, 0, 0.42), 0 2px 8px rgba(0, 0, 0, 0.28);
  }

  /* A third-level flyout is a card of its own laid over the edge of the
     panel it came from: it overlaps by 8px, sits a few pixels above its
     parent row, and is rounded on every corner. The shadow on its leading
     edge is what shows where one card ends and the other begins. */
  #masthead.menu .dropdown-submenu > .dropdown-menu,
  #masthead .menu .dropdown-submenu > .dropdown-menu {
    top: -6px;
    margin: 0 0 0 -8px;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: -6px 0 16px rgba(0, 0, 0, 0.22), 0 18px 38px rgba(0, 0, 0, 0.42), 0 2px 8px rgba(0, 0, 0, 0.28);
  }
  #masthead.menu .dropdown-submenu.hcdsb-flyout-left > .dropdown-menu,
  #masthead .menu .dropdown-submenu.hcdsb-flyout-left > .dropdown-menu {
    margin: 0 -8px 0 0;
    box-shadow: 6px 0 16px rgba(0, 0, 0, 0.22), 0 18px 38px rgba(0, 0, 0, 0.42), 0 2px 8px rgba(0, 0, 0, 0.28);
  }

  /* The hover fill on the last row would square the corner off again. Only for
     single-column panels: in a multi-column one the last item sits at the foot
     of the last column, not in the corner, and rounding it there is wrong. */
  #masthead.menu .navbar-nav > li > .dropdown-menu:not(:has(> li:nth-child(13))) > li:last-child > a {
    border-radius: 0 0 9px 9px;
  }

  /* The mega menu is full width and already clips its own overflow, so the
     radius applies cleanly with nothing further to do. */
  #masthead.menu .menu-item-object-hcdsb_mega_menu .dropdown-menu {
    border-radius: 0 0 10px 10px;
  }

  /* --- The open tab --- */

  /* An open menu used to be identifiable only by the panel under it; with
     several tabs in a row and a panel that can be full width, that left the
     question of WHICH tab you had opened. This fills the tab itself in the
     same wash as the panel and rounds its top corners, so the two read as one
     shape: tab above, panel below.
   *
   * The parent theme forces these to transparent
   * (`.menu .navbar-nav li.dropdown > .dropdown-toggle.show`, and the long :active
   * chain in the skin), which is the other reason for the ID here. */
  #masthead.menu .navbar-nav > li.dropdown:hover > a,
  #masthead.menu .navbar-nav > li.dropdown:focus-within > a,
  #masthead.menu .navbar-nav > li.dropdown > a.show,
  #masthead .menu .navbar-nav > li.dropdown:hover > a,
  #masthead .menu .navbar-nav > li.dropdown:focus-within > a,
  #masthead .menu .navbar-nav > li.dropdown > a.show {
    background-color: rgba(255, 255, 255, 0.10);
    border-radius: 10px 10px 0 0;
    /* The same 250ms the panel waits, so tab and panel arrive together rather
       than the tab lighting up under a pointer only passing through. */
    transition: background-color 0.2s ease 0.25s, color 0.3s;
  }

  /* Opened by keyboard or click: no wait, matching the panel. */
  #masthead.menu .navbar-nav > li.dropdown:focus-within > a,
  #masthead.menu .navbar-nav > li.dropdown > a.show,
  #masthead .menu .navbar-nav > li.dropdown:focus-within > a,
  #masthead .menu .navbar-nav > li.dropdown > a.show {
    transition: none;
  }

  /* Slightly tighter across the bar. The caret added roughly 11px to every
     parent item, which on a twelve-tab menu is most of a tab's worth of width;
     taking the horizontal padding from 20px to 14px gives that back without
     the labels touching. */
  #masthead.menu .navbar-nav > li > a,
  #masthead .menu .navbar-nav > li > a {
    padding-left: 14px;
    padding-right: 14px;
    font-size: 0.875rem;
  }
}

/*------------------------
The narrow desktop band: 992px to 1120px
------------------------*/

/* iPad portrait is 1024px, and it is the worst case this layout has — the
 * navbar stops collapsing at 992px, so the whole horizontal bar has to fit in
 * about 1024px minus the logo, with no drawer to fall back on. On sites
 * with seven top-level items and long uppercase labels (the longest measured
 * was about 98 characters before the carets, the external-link icon and the search
 * button) the last item and the search icon wrapped onto a second line, which
 * reads as the header being broken rather than as a menu that is too long.
 *
 * Until now the tightening above started at 1025px — one pixel above the
 * width where it was needed most. That was simply the wrong boundary: it was
 * written to pair with the desktop hover rules, which genuinely do belong at
 * 1025px, and nothing needed it lower at the time.
 *
 * The band runs to 1120px, not 1024px. iPad portrait is the width that gets
 * reported, but it is not the edge of the problem — a 1050px or 1100px window
 * is the same bar in barely more room, and the wrap reappears there on a
 * laptop at anything other than full screen. Ending the band at the exact
 * width of one device would have fixed the device and left the range around
 * it looking broken. 1120px is comfortably past where a seven-item menu fits
 * at these sizes, and the step down from the 1025px rules is small enough
 * that crossing it while resizing is not noticeable.
 *
 * This band gets everything the desktop gets and then some. Rough budget for
 * a seven-item menu, against the 20px/15px the bar used to use:
 *
 *     padding 20px -> 9px a side    ~154px back
 *     text    15px -> 13px          ~110px back
 *     caret   0.4em -> 0.25em        ~7px back
 *
 * About 270px, which is more than the overflow on the sites that wrapped.
 *
 * 13px is the floor. It is a navigation label in all caps, not body copy, and
 * below 13 it stops being comfortably readable at arm's length on a tablet —
 * which is exactly how an iPad is held. If a site's menu still wraps after
 * this, the answer is the collapsed drawer for that site, not smaller text.
 */
@media only screen and (min-width: 992px) and (max-width: 1120px) {
  #masthead.menu .navbar-nav > li > a,
  #masthead .menu .navbar-nav > li > a {
    padding-left: 9px;
    padding-right: 9px;
    font-size: 0.8125rem;
    letter-spacing: 0;
  }

  /* The caret is a fixed cost on every parent item, so it is worth trimming
     here even though the change is small. */
  .menu .navbar-nav > li.dropdown > a::after {
    margin-left: 0.25em;
    width: 0.8em;
    height: 0.8em;
  }

  /* Same for the external-link marker. */
  .navbar-nav a.hcdsb-nav-external::after {
    margin-left: 0.25em;
    width: 0.7em;
    height: 0.7em;
  }

  /* The search button sits at the end of the row and is the thing that gets
     pushed onto the second line first. Give it the smallest box that still
     holds a 20px icon. */
  #masthead .top-search.hcdsb-search-ready {
    width: 24px;
  }
}

/* The bar's own font size is set as an inherited 15px on the header element,
   which the dropdowns then inherit too. Only the bar shrinks — a dropdown is a
   reading list and keeps its size. */
@media only screen and (min-width: 1025px) {
  #masthead.menu .dropdown-menu,
  #masthead .menu .dropdown-menu,
  #navbar-slide.menu .dropdown-menu {
    font-size: 15px;
  }
}

/*------------------------
Mobile menu: a full-screen panel
------------------------*/

/* Below 992px the open menu is a panel filling the screen under the logo row,
 * in the manner of claude.com's mobile navigation: the page behind is still,
 * the logo and close button stay put at the top, and the menu LIST scrolls
 * on its own if it is long. Search and the header call to action (the Logo
 * Bar widget) sit in a foot that does not scroll, so they are in the same
 * place however far the list is scrolled or however many sections are open.
 * (Mirrors the secondary theme's HCDSB-child-theme/style.css.)
 *
 * It replaces a menu that grew downward inside the page with Bootstrap's
 * height animation. While the height animated the menu overflowed its box and
 * a scrollbar flashed up, and the menu was capped at the viewport minus a
 * guessed header height. Base first pushed the call to action down with
 * margin-top: auto, which held only while the list was short; with a section
 * open it scrolled away with the list.
 *
 * nav-mobile.js does the measuring: it puts html.hcdsb-menu-open on while the
 * menu is open, and sets --hcdsb-menu-header-top (below a fixed admin bar,
 * else 0) and --hcdsb-menu-top (the bottom of the logo row) at that moment. */
@media (max-width: 991.98px) {
  /* The page behind does not scroll while the menu is open. */
  html.hcdsb-menu-open,
  html.hcdsb-menu-open body {
    overflow: hidden;
  }

  /* The logo row stays at the top of the screen even if the menu was opened
     part way down the page. The header's translate3d (theme.css) would make
     it the containing block of the fixed panel inside it, so it goes. */
  html.hcdsb-menu-open #masthead {
    position: fixed;
    top: var(--hcdsb-menu-header-top, 0);
    left: 0;
    right: 0;
    z-index: 1100;
    transform: none;
  }

  html.hcdsb-menu-open #masthead .main-navbar,
  html.hcdsb-menu-open #navbar-slide {
    position: fixed !important;
    top: var(--hcdsb-menu-top, 100px) !important;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1099;
    display: flex;
    flex-direction: column;
    /* Bootstrap centres a .navbar-collapse's children; the list is full width. */
    align-items: stretch;
    width: auto;
    height: auto !important;
    max-height: none !important;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background-color: var(--sk-nav-bg);
    border-top: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow: none;
    transform: none;
  }

  /* Bootstrap animates the height while opening and closing; the panel is
     already full height, so that step is skipped and it fades in instead. */
  #masthead .main-navbar.collapsing,
  #navbar-slide.collapsing {
    height: auto !important;
    transition: none !important;
  }
  html.hcdsb-menu-open #masthead .main-navbar.show,
  html.hcdsb-menu-open #navbar-slide.show {
    animation: hcdsb-menu-in 0.22s ease-out;
  }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li {
    animation: hcdsb-menu-item-in 0.3s ease-out both;
  }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(2) { animation-delay: 0.03s; }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(3) { animation-delay: 0.06s; }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(4) { animation-delay: 0.09s; }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(5) { animation-delay: 0.12s; }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(6) { animation-delay: 0.15s; }
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li:nth-child(n + 7) { animation-delay: 0.18s; }

  /* The list: the one thing that scrolls. min-height: 0 lets a flex child
     shrink below its content, which is what makes it scroll rather than
     push the foot off the screen. */
  html.hcdsb-menu-open .main-navbar > .menu-container {
    order: 1;
    flex: 1 1 auto;
    min-height: 0;
    padding: 0.5rem calc(var(--bs-gutter-x, 1.5rem) * .5) 0;
    overflow-y: auto;
    overscroll-behavior: contain;
  }

  /* The foot: the menu-bar widgets (Search), then the call to action (it is
     earlier in the markup, so moved with order). Neither scrolls. The
     hairline marks where the list ends when it runs under the foot. */
  html.hcdsb-menu-open .main-navbar > .menu-sidebar {
    order: 2;
    flex: none;
    padding-inline: calc(var(--bs-gutter-x, 1.5rem) * .5);
    border-top: 1px solid rgba(255, 255, 255, 0.12);
  }
  html.hcdsb-menu-open .main-navbar > .hcdsb-nav-cta {
    order: 3;
    flex: none;
    margin: 0;
    padding: 1rem calc(var(--bs-gutter-x, 1.5rem) * .5) calc(1.5rem + env(safe-area-inset-bottom, 0px));
    border-bottom: 0;
  }
  /* With no Logo Bar widget, the menu-bar widgets are last and take the
     safe-area padding themselves. */
  html.hcdsb-menu-open .main-navbar > .menu-sidebar:last-child {
    padding-bottom: env(safe-area-inset-bottom, 0px);
  }

  /* The call to action's buttons are the board colour, which is also the
     panel's: they are inverted here so they read as buttons. */
  html.hcdsb-menu-open .main-navbar .hcdsb-nav-cta :is(.wp-block-button__link, .btn-primary, .hcdsb-cta) {
    color: var(--sk-nav-bg);
    background-color: #fff;
    border-color: #fff;
  }
  html.hcdsb-menu-open .main-navbar .hcdsb-nav-cta :is(.wp-block-button__link, .btn-primary, .hcdsb-cta):hover {
    color: var(--sk-nav-bg);
    background-color: rgba(255, 255, 255, 0.88);
  }
  html.hcdsb-menu-open .main-navbar .hcdsb-nav-cta .wp-block-button {
    width: 100%;
  }
  /* The header's widget spacing (#masthead .sidebar-widget) does not apply
     to this copy of the widget. */
  html.hcdsb-menu-open #masthead .hcdsb-nav-cta .sidebar-widget,
  html.hcdsb-menu-open .hcdsb-nav-cta .sidebar-widget {
    padding: 0;
    margin: 0;
  }
  html.hcdsb-menu-open .main-navbar .hcdsb-nav-cta .wp-block-button__link {
    display: flex;
    justify-content: center;
    width: 100%;
    min-height: 48px;
  }

  /* Rows sized for a thumb and read at a glance, with the text on the same
     edge as the logo above. */
  html.hcdsb-menu-open .main-navbar .navbar-nav {
    float: none;
    margin: 0;
  }
  html.hcdsb-menu-open .main-navbar .navbar-nav > li > a,
  html.hcdsb-menu-open #navbar-slide .navbar-nav > li > a {
    min-height: 56px;
    padding: 0.75rem 0 !important;
    font-size: 1.125rem;
  }
  html.hcdsb-menu-open .main-navbar .navbar-nav > li > .dropdown-menu {
    margin-bottom: 0.75rem;
  }
}

/* Wider than a phone, the panel's padding reproduces Bootstrap's .container
   width (540px, then 720px), so the menu text lines up with the logo. */
@media (min-width: 576px) and (max-width: 767.98px) {
  html.hcdsb-menu-open .main-navbar > :is(.menu-container, .menu-sidebar, .hcdsb-nav-cta) {
    padding-inline: calc((100% - 540px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
  }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  html.hcdsb-menu-open .main-navbar > :is(.menu-container, .menu-sidebar, .hcdsb-nav-cta) {
    padding-inline: calc((100% - 720px) / 2 + var(--bs-gutter-x, 1.5rem) * .5);
  }
}

@keyframes hcdsb-menu-in {
  from { opacity: 0; transform: translateY(-0.5rem); }
  to { opacity: 1; transform: none; }
}
@keyframes hcdsb-menu-item-in {
  from { opacity: 0; transform: translateY(0.375rem); }
  to { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  html.hcdsb-menu-open .main-navbar.show,
  html.hcdsb-menu-open .main-navbar.show .navbar-nav > li {
    animation: none !important;
  }
}

/* ==========================================================================
 * 8. FOOTER
 * Upper band, column region, subfooter.
 * ========================================================================== */

/* Space between footer widgets in responsive views */
@media (max-width: 991px) {
  #footer .hcdsb-footer__col .sidebar-widget {
    text-align: left;
    margin-bottom: 30px !important;
  }
}

/*==========================================================
  HCDSB Specialized — Footer
==========================================================*/

.hcdsb-footer {
  /* Footer colour comes from the site palette (section 11); the literal
     is only a fallback for a site with no palette block yet. */
  --hcdsb-footer-bg: var(--sk-footer, #111C33);

  /* The upper band sits a shade lighter so it reads as its own region.
     Override per site with --sk-footer-band in section 11. */
  --hcdsb-band-bg: var(--sk-footer-band, rgba(255, 255, 255, 0.09));

  --hcdsb-fg: #ffffff;
  --hcdsb-fg-muted: rgba(255, 255, 255, 0.72);
  --hcdsb-rule: rgba(255, 255, 255, 0.14);
  --hcdsb-rule-strong: rgba(255, 255, 255, 0.55);

  background: var(--hcdsb-footer-bg);
  color: var(--hcdsb-fg-muted);
  font-size: 0.875rem;      /* 14px — was ~17px */
  line-height: 1.55;
}

/* On a site with no --sk-footer-band, the band falls back to a translucent
   white wash over the footer colour. Sites with a very dark footer may
   want an explicit value instead — see section 11. */

/* The parent theme adds generous section padding; the regions below set their own. */
.hcdsb-footer .section {
  padding-top: 0;
  padding-bottom: 0;
}

#footer .hcdsb-subfooter__col .sidebar-widget,
#footer .hcdsb-subfooter__col .widget {
  margin: 0 !important;
}

/*----------------------------------------------------------
  Shared: headings, links, buttons
----------------------------------------------------------*/
.hcdsb-footer h1,
.hcdsb-footer h2,
.hcdsb-footer h3,
.hcdsb-footer h4,
.hcdsb-footer h5,
.hcdsb-footer .widget-title {
  margin: 0 0 1rem;
  color: var(--hcdsb-fg);
  font-size: 0.75rem;       /* 12px */
  font-weight: 600;
  letter-spacing: 0.1em;
  line-height: 1.4;
  text-transform: uppercase;
}

.hcdsb-footer p {
  margin: 0 0 0.65rem;
}

.hcdsb-footer p:last-child {
  margin-bottom: 0;
}

.hcdsb-footer a {
  color: var(--hcdsb-fg-muted);
  text-decoration: none;
  transition: color 0.2s;
}

.hcdsb-footer a:hover,
.hcdsb-footer a:focus-visible {
  color: var(--hcdsb-fg);
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.hcdsb-footer a:focus-visible,
.hcdsb-footer button:focus-visible {
  outline: 2px solid var(--hcdsb-fg);
  outline-offset: 3px;
}

/* Outlined button — used for "Full contact details", "Report an incident" */
.hcdsb-footer .hcdsb-btn {
  display: inline-block;
  padding: 0.55em 1.2em;
  border: 1px solid var(--hcdsb-rule-strong);
  border-radius: 4px;
  color: var(--hcdsb-fg);
  font-size: 0.6875rem;     /* 11px */
  font-weight: 500;
  letter-spacing: 0.09em;
  line-height: 1.3;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.2s, border-color 0.2s;
}

.hcdsb-footer .hcdsb-btn:hover,
.hcdsb-footer .hcdsb-btn:focus-visible {
  background: rgba(255, 255, 255, 0.12);
  border-color: var(--hcdsb-fg);
  color: var(--hcdsb-fg);
  text-decoration: none;
}

/*----------------------------------------------------------
  Upper band — "Report an incident"
  Set Upper Footer Columns to 1 in the Customizer.
----------------------------------------------------------*/
.hcdsb-footer__band {
  background: var(--hcdsb-band-bg);
  border-bottom: 1px solid var(--hcdsb-rule);
}

.hcdsb-footer__band .row {
  margin-left: 0;
  margin-right: 0;
  padding: 1.15rem 0;
}

.hcdsb-footer__band-col {
  padding-left: 0;
  padding-right: 0;
}

.hcdsb-band {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-wrap: wrap;
}

.hcdsb-band__text {
  flex: 1 1 420px;
  min-width: 0;
}

.hcdsb-band__title {
  margin: 0 0 0.2rem;
  color: var(--hcdsb-fg);
  font-size: 0.9375rem;     /* 15px */
  font-weight: 600;
  letter-spacing: 0;        /* not the uppercase label treatment */
  line-height: 1.35;
  text-transform: none;
}

.hcdsb-band__copy {
  margin: 0;
  color: rgba(255, 255, 255, 0.6);
  font-size: 0.8125rem;     /* 13px */
  line-height: 1.45;
}

.hcdsb-band .hcdsb-btn {
  flex: 0 0 auto;
}

/*----------------------------------------------------------
  Main column region
  Bootstrap 3 only ships col-sm-*, so the theme jumps to
  full multi-column at 768px. Converting the row to grid
  gives real breakpoints AND uneven column widths.
----------------------------------------------------------*/
.hcdsb-footer__cols .row {
  margin-left: 0;
  margin-right: 0;
  padding: 2.25rem 0 2rem;
  display: grid;
  gap: 2rem;
  grid-template-columns: 1fr;   /* mobile default */
}

/* Neutralise Bootstrap's float/width on the grid children. */
.hcdsb-footer__col {
  float: none;
  width: auto;
  padding-left: 0;
  padding-right: 0;
  min-width: 0;
}

@media (min-width: 768px) and (max-width: 991px) {
  .hcdsb-footer__cols .row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.75rem 2rem;
  }
}

@media (min-width: 992px) {
  /* Family of Schools column is widest — school names are long. */
  .hcdsb-footer__cols .row.footer-columns-3 {
    grid-template-columns: 1fr 1.15fr 1fr;
  }

  .hcdsb-footer__cols .row.footer-columns-4 {
    grid-template-columns: 1fr 1.15fr 1fr 1fr;
  }

  .hcdsb-footer__cols .row.footer-columns-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Widget resets inside the columns */
.hcdsb-footer__col .widget {
  margin: 0 0 1.75rem;
}

.hcdsb-footer__col .widget:last-child {
  margin-bottom: 0;
}

.hcdsb-footer__col ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.hcdsb-footer__col li {
  margin: 0 0 0.5rem;
  line-height: 1.5;
}

.hcdsb-footer__col li:last-child {
  margin-bottom: 0;
}

/* Contact block */
.hcdsb-contact__line {
  margin: 0 0 0.6rem;
}

.hcdsb-contact__line strong {
  color: var(--hcdsb-fg);
  font-weight: 600;
}

.hcdsb-contact .hcdsb-btn {
  margin-top: 1.1rem;
}

/* "Our school" name at the top of Family of Schools */
.hcdsb-schools__own {
  margin: 0 0 0.6rem;
  color: #fff;
  font-weight: 600 !important;
}

/* External-link glyph on Across HCDSB links, matching the homepage convention */
.hcdsb-footer__col a[target="_blank"]::after {
  content: "";
  display: inline-block;
  width: 0.75em;
  height: 0.75em;
  margin-left: 0.35em;
  vertical-align: -0.02em;
  background-color: currentColor;
  opacity: 0.65;
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 6H6a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6'/%3E%3Cpath d='M11 13l9-9'/%3E%3Cpath d='M15 4h5v5'/%3E%3C/svg%3E");
  mask-size: contain;
  mask-repeat: no-repeat;
  mask-position: center;
}

/* The band button is a link too — don't give it a glyph. */
.hcdsb-footer .hcdsb-btn[target="_blank"]::after {
  content: none;
}

/*----------------------------------------------------------
  Social icons
----------------------------------------------------------*/
.hcdsb-social {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 1.1rem 0 0;
  padding: 0;
  list-style: none;
}

.hcdsb-social li {
  margin: 0;
}

.hcdsb-social a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;              /* 34px keeps the tap target reasonable */
  height: 34px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 50%;
  color: var(--hcdsb-fg);
  font-size: 0.875rem;
  text-decoration: none;
  transition: background-color 0.2s, border-color 0.2s;
}

.hcdsb-social a:hover,
.hcdsb-social a:focus-visible {
  background: rgba(255, 255, 255, 0.12);
  border-color: var(--hcdsb-fg);
  text-decoration: none;
}

/*----------------------------------------------------------
  Subfooter — light band with logo + legal
----------------------------------------------------------*/
.hcdsb-subfooter {
  background: var(--sk-subfooter-bg);
  color: var(--sk-subfooter-text) !important;
}

/* The row's my-2 margins stay inside the band (flow-root contains them),
   so the band keeps its 8px above and below the row. */
.hcdsb-subfooter > .container {
  display: flow-root;
}

.hcdsb-subfooter .row {
  margin-left: 0;
  margin-right: 0;
  padding: 1.1rem 0;
  display: grid;
  gap: 0.85rem;
  grid-template-columns: 1fr;
  align-items: center;
}

/* The parent theme's default widget margin was the real gap on mobile */
.hcdsb-subfooter__col .widget {
  margin: 0;
}

.hcdsb-subfooter__col p {
  margin: 0;
}

.hcdsb-subfooter img {
  display: block;   /* removes the inline-image baseline gap */
  max-width: 190px;
  height: auto;
}

.hcdsb-subfooter__col {
  float: none;
  width: auto;
  padding-left: 0;
  padding-right: 0;
  min-width: 0;
}

@media (min-width: 768px) {
  .hcdsb-subfooter .row.footer-columns-2 {
    grid-template-columns: auto 1fr;
  }

  .hcdsb-subfooter__col:last-child {
    text-align: right;
  }
}


.hcdsb-subfooter,
.hcdsb-subfooter p {
  font-size: 0.78125rem;    /* 12.5px */
  line-height: 1.7;
}

.hcdsb-subfooter a {
  color: var(--sk-subfooter-link);
  text-decoration: none;
}

.hcdsb-subfooter a:hover,
.hcdsb-subfooter a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.hcdsb-subfooter a:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}

/*----------------------------------------------------------
  Back to top
----------------------------------------------------------*/
.go-top {
  padding: 0;
  background: var(--sk-gotop-bg) !important;
  border: 0;
  cursor: pointer;
  appearance: none;
}

.go-top i,
.go-top .fa {
  margin: 0 !important;
}

/*----------------------------------------------------------
  Reduced motion
----------------------------------------------------------*/
@media (prefers-reduced-motion: reduce) {
  .hcdsb-footer a,
  .hcdsb-footer .hcdsb-btn,
  .hcdsb-social a,
  .hcdsb-email-btn {
    transition: none;
  }
}

/*--- Bootstrap clearfix pseudo-elements become grid items — kill them ---*/
.hcdsb-footer__cols .row::before,
.hcdsb-footer__cols .row::after,
.hcdsb-subfooter .row::before,
.hcdsb-subfooter .row::after {
  content: none;
  display: none;
}

/*--- Parent theme centres single-column footer regions ---*/
#footer .hcdsb-footer__band,
#footer .hcdsb-footer__band .row,
#footer .hcdsb-footer__band-col,
#footer .hcdsb-band,
#footer .hcdsb-band__text {
  text-align: left;
}

/* ==========================================================================
 * 10. THEME SKIN
 * The shared colour and component rules. Every colour is a var(--sk-*)
 * token, with values on :root below and per-site overrides in section 11.
 * ==========================================================================

/* --------------------------------------------------------------------------
 * Fallback palette — HCDSB board navy
 *
 * Declared on :root so EVERY site has a complete set of values. A .site-*
 * block on <body> sits closer to the content and overrides these, so site
 * palettes still win.
 *
 * This exists because a site with no palette block renders with unresolved
 * var(--sk-*) references — which is not "default colours", it is no colours
 * at all. A new site now inherits board navy until its own block is written.
 * -------------------------------------------------------------------------- */

:root {
  /* Core palette */
  --sk-primary: #1b365d;
  --sk-primary-hover: #16294a;
  --sk-accent: #2c5490;
  --sk-heading: #1b365d;
  --sk-link-hover: #14294a;
  --sk-dark-surface: #2e3333;
  --sk-warning: #cd6727;
  --sk-warning-hover: rgba(205, 103, 39, 0.9);

  /* Header */
  --sk-header-bg: #1b365d;
  --sk-header-shadow: rgba(0, 0, 0, 0.06);
  --sk-brand-text: #fff;

  /* Top bar */
  --sk-topbar-bg: #f0f0f0;
  --sk-topbar-text: #3e3e3e;
  --sk-topbar-link-hover: #3c3c3c;
  --sk-topbar-search-text: #8a8a8a;
  --sk-topbar-rule: rgba(0, 0, 0, 0.08);

  /* Navigation & dropdowns */
  --sk-nav-bg: #1b365d;
  --sk-nav-hover: rgba(255, 255, 255, 0.8);
  --sk-dropdown-shadow-inset: #1b365d;
  --sk-dropdown-shadow: rgba(0, 0, 0, .1);
  --sk-dropdown-item-hover: #2a4a78;
  --sk-panel-border: #162c4d;

  /* Footer */
  --sk-footer: #14294a;
  --sk-footer-band: #33455f;
  --sk-footer-link-hover: #ddd;
  --sk-subfooter-bg: #fff;
  --sk-subfooter-text: #4c4c4c;
  --sk-subfooter-link: #666;

  /* Figure overlays */
  --sk-overlay: rgba(27, 54, 93, 0.7);
  --sk-overlay-alt: #1b365d;
  --sk-overlay-fade: rgba(27, 54, 93, 0);
  --sk-caption-tag-bg: rgba(27, 54, 93, .8);
  --sk-button-hover-tint: rgba(27, 54, 93, .9);

  /* Components */
  --sk-loader: #c8a34a;
  --sk-panel-primary-rule: #16294a;
  --sk-panel-footer-bg: #2c5490;
  --sk-calendar-link-hover: #1d2020;
  --sk-headline-selected-text: #ccc;
  --sk-social-icon-hover: rgba(46, 51, 51, .8);
  --sk-bullet-nav-shadow: rgba(46, 51, 51, 0.5);
  --sk-bullet-nav-active: rgba(46, 51, 51, 0.9);
  --sk-gotop-bg: rgba(64, 67, 67, 0.9);
}
#masthead .menu,
#masthead.menu,
#navbar-slide.menu {
  font-family: var(--hcdsb-font-ui);
  font-weight: 400;
  font-size: 15px;
}
#masthead .menu .dropdown-menu,
#masthead.menu .dropdown-menu,
#navbar-slide.menu .dropdown-menu {
  font-size: 15px;
}
.menu .navbar-brand {
  font-family: var(--hcdsb-font-heading);
  font-weight: 400;
  font-size: 24px;
  color: var(--sk-brand-text);
}
/* The row is at least 100px; a logo taller than that (Site Identity >
   Logo maximum height) makes it taller. theme.css centres the logo. */
.navbar-brand {
  padding: 0;
  min-height: 100px;
}
.logo-navbar .navbar-nav > li > a {
  padding-top: 38px;
  padding-bottom: 38px;
  line-height: 24px;
}
.logo-navbar .navbar-nav > li > a.active:before,
.logo-navbar .navbar-nav > li > a:hover:before,
.logo-navbar .navbar-nav > li.current-page-parent > a:before,
.logo-navbar .navbar-nav > li.current-menu-parent > a:before,
.logo-navbar .navbar-nav > li.current-page-ancestor > a:before,
.logo-navbar .navbar-nav > li.current-menu-ancestor > a:before {
  opacity: 1;
}
#masthead.navbar {
  min-height: 100px;
}
.navbar-toggler {
  margin-top: 42px;
  margin-bottom: 42px;
  background: none !important;
}
#masthead .dropdown-menu {
  min-width: 220px;
}
@media (min-width: 992px) {
  #masthead.navbar-scrolled {
    min-height: 90px;
  }
  /* A sticky header stays in the page flow, so shrinking it would pull the
     page up mid-scroll. The margin gives the difference back, on the same
     0.3s timing, so the content never moves. */
  #masthead.navbar-sticky {
    transition: background-color 0.3s, min-height 0.3s, box-shadow 0.3s, margin-bottom 0.3s;
  }
  /* The logo row's height before and after the shrink, worked out from the
     logo by hcdsb_logo_css(): at least 100px (90px scrolled), taller with a
     taller logo. Set outright rather than left to the content so that it,
     the logo and the margin below all animate on the same 0.3s curve, and
     the margin gives back exactly what the row loses at every frame. */
  #masthead .navbar-brand {
    height: var(--hcdsb-brand-h, 100px);
    min-height: 0;
  }
  #masthead.navbar-scrolled .navbar-brand {
    height: var(--hcdsb-brand-h-scrolled, 90px);
  }
  #masthead.navbar-sticky.navbar-scrolled {
    margin-bottom: calc(var(--hcdsb-brand-h, 100px) - var(--hcdsb-brand-h-scrolled, 90px));
  }
  /* Header > Logo height after scrolling. */
  #masthead.navbar-scrolled .navbar-brand img {
    height: min(var(--hcdsb-logo-cap), var(--hcdsb-logo-scrolled, 90px));
  }
  #masthead.navbar-scrolled .navbar-brand img.hcdsb-logo-sized {
    height: min(var(--hcdsb-logo-h), var(--hcdsb-logo-cap), var(--hcdsb-logo-scrolled, 90px));
  }
  #masthead.navbar-scrolled .logo-navbar .navbar-nav > li > a {
    padding-top: 33px;
    padding-bottom: 33px;
  }
  #masthead.navbar-scrolled .logo-navbar .navbar-text,
  #masthead.navbar-scrolled .logo-navbar .sidebar-widget {
    padding-top: 33px;
    padding-bottom: 33px;
  }
  .navbar-scrolled .navbar-toggler {
    margin-top: 37px;
    margin-bottom: 37px;
  }
  #masthead .logo-navbar .search-close {
    top: 0;
    height: 100px;
    width: 100px;
  }
  #masthead .logo-navbar .form-control {
    /* so that bottom border shows */
    height: 99px;
  }
  #masthead.navbar-scrolled .logo-navbar .menu-sidebar .search-close {
    top: 0;
    height: 90px;
    width: 90px;
  }
  #masthead.navbar-scrolled .logo-navbar .form-control {
    height: 90px;
  }
  .logo-navbar .navbar-text,
  .logo-navbar .sidebar-widget {
    line-height: 24px;
    padding-top: 38px;
    padding-bottom: 38px;
  }
  /* The Logo Bar is centred in the logo row by theme.css; padding sized
     for a 24px line would push a taller widget (a button) below centre. */
  #masthead .logo-navbar .logo-sidebar .sidebar-widget {
    padding-top: 0;
    padding-bottom: 0;
  }
}
#navbar-slide {
  width: 270px;
}
#navbar-slide .navbar-nav {
  max-height: 600px;
}
/* The drawer's own logo keeps a 100px box whatever the header's ceiling. */
#navbar-slide .navbar-brand {
  height: 100px;
  --hcdsb-logo-cap: min(var(--hcdsb-logo-max, 100px), 100px);
}
.slide-on #masthead,
.slide-on #content,
.slide-on #navbar-slide,
.slide-on .top-bar {
  transform : translateX(-270px);
}
.rtl.slide-on #masthead,
.rtl.slide-on #content,
.rtl.slide-on #navbar-slide,
.rtl.slide-on .top-bar {
  transform : translateX(270px);
}
@media (min-width: 992px) {
  .side-menu-left #content {
    padding-left: 270px;
  }
  .side-menu-left.rtl #content {
    padding-left: 0;
    padding-right: 270px;
  }
  .side-menu-right #content {
    padding-right: 270px;
  }
  .side-menu-right.rtl #content {
    padding-right: 0;
    padding-left: 270px;
  }
}
.go-top i {
  color: #fff;
}
.post-grid blockquote footer {
  border-top-color: rgba(0, 0, 0, .1);
}
.post-grid-overlay blockquote footer {
  color: #fff;
}
blockquote footer {
  font-family: var(--hcdsb-font-ui);
  color: #959494;
}
.dropdown-toggle.btn-primary.show {
  background-color: var(--sk-primary);
  color: #fff;
}
.btn-group .dropdown-menu {
  background-color: var(--sk-primary);
}
.btn-group .dropdown-menu > li > a {
  color: #fff;
  box-shadow: 0px -1px 0px var(--sk-panel-border);
}
.btn-group .dropdown-menu > li:first-child > a {
  box-shadow: none;
}
.btn-group .dropdown-menu > li > a:hover {
  background: var(--sk-dropdown-item-hover);
}
.menu {
  /* Bootstrap's navbar colours, for the states the rules below do not name
     (an open toggle, a link being pressed). The dropdown's are on
     .menu .dropdown-menu in section 4: Bootstrap sets those on the menu
     itself, so they have to be set there too. */
  --bs-navbar-color: #fff;
  --bs-navbar-hover-color: var(--sk-nav-hover);
  --bs-navbar-active-color: #fff;
  color: #fff;
  background: var(--sk-nav-bg);
}
.menu .navbar-text {
  color: #fff;
}
.menu .navbar-brand:hover {
  color: var(--sk-brand-text);
}
.menu a {
  color: #fff;
}
.menu a:before {
  height: 3px;
}
.menu .navbar-nav > li > a {
  color: #fff;
}
.menu .navbar-nav > li > a:hover,
.menu .navbar-nav > li > a:focus {
  color: var(--sk-nav-hover);
  background: none;
}
.menu .navbar-nav > li > a:hover:before,
.menu .navbar-nav > li > a:focus:before {
  opacity: 1;
  width: 100%;
  background-color: var(--sk-nav-hover);
}
.menu a .menu-icon {
  color: inherit;
}
.navbar-toggler .toggler-bar {
  background-color: #fff;
}
.navbar-toggler:hover {
  background: none;
}
.menu .navbar-nav > li > a.active,
.menu .navbar-nav > .current-menu-parent > a,
.menu .navbar-nav > .current-menu-ancestor > a,
.menu .navbar-nav > .current-menu-item > a,
.menu .navbar-nav > .current-menu-item > a:focus,
.menu .navbar-nav > .current-page-parent > a,
.menu .navbar-nav > li > a.active:focus,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show,
.menu .navbar-nav li.dropdown > .dropdown-toggle.active,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show.active {
  color: #fff;
}
.menu .navbar-nav > li > a.active:after,
.menu .navbar-nav > .current-menu-parent > a:after,
.menu .navbar-nav > .current-menu-ancestor > a:after,
.menu .navbar-nav > .current-menu-item > a:after,
.menu .navbar-nav > .current-menu-item > a:focus:after,
.menu .navbar-nav > .current-page-parent > a:after,
.menu .navbar-nav > li > a.active:focus:after,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show:after,
.menu .navbar-nav li.dropdown > .dropdown-toggle.active:after,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show.active:after {
  border-radius: 0px;
}
.menu .navbar-nav > li > a.active:hover,
.menu .navbar-nav > .current-menu-parent > a:hover,
.menu .navbar-nav > .current-menu-ancestor > a:hover,
.menu .navbar-nav > .current-menu-item > a:hover,
.menu .navbar-nav > .current-menu-item > a:focus:hover,
.menu .navbar-nav > .current-page-parent > a:hover,
.menu .navbar-nav > li > a.active:focus:hover,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show:hover,
.menu .navbar-nav li.dropdown > .dropdown-toggle.active:hover,
.menu .navbar-nav li.dropdown > .dropdown-toggle.show.active:hover {
  color: var(--sk-nav-hover);
}
.menu .navbar-nav > .disabled > a {
  opacity: 0.8;
}
.menu .dropdown-menu > li > a {
  color: #fff;
}
.menu .dropdown-menu > li > a .menu-icon {
  color: inherit;
}
.menu .dropdown-menu > li > a:hover,
.menu .dropdown-menu > li > a.active,
.menu .dropdown-menu > li > a.active:hover,
.menu .dropdown-menu > li > a.active:focus {
  color: #fff;
  background: transparent;
}
.menu .navbar-nav > li > .dropdown-menu:after,
.menu .navbar-nav > li > .dropdown-menu:before {
  display: none;
}
.menu .dropdown-submenu > a:after {
  border-left-color: #fff !important;
}
.menu .nav-highlight > a {
  color: var(--sk-nav-bg) !important;
}
.menu .nav-highlight > a:after {
  background: #fff;
}
.menu .nav-highlight > a:hover {
  color: var(--sk-nav-bg) !important;
}
.menu .nav-highlight > a:hover:after {
  background: var(--sk-nav-hover);
}
.menu .nav-highlight > a.active {
  color: var(--sk-nav-bg) !important;
}
.menu .nav-highlight > a.active:after {
  background: #fff;
}
.menu .nav-highlight > a.active:hover {
  color: var(--sk-nav-bg) !important;
}
.menu .nav-highlight > a.active:hover:after {
  background: var(--sk-nav-hover);
}
.menu .nav-highlight .menu-icon {
  color: var(--sk-nav-bg);
}
.menu .nav-highlight-ghost > a {
  color: #fff;
}
.menu .nav-highlight-ghost > a:after {
  border: 1px solid #fff;
}
.menu .nav-highlight-ghost > a:hover {
  color: var(--sk-nav-hover);
}
.menu .nav-highlight-ghost > a:hover:after {
  border: 1px solid var(--sk-nav-hover);
}
.menu .nav-highlight-ghost > a.active {
  color: #fff;
}
.menu .nav-highlight-ghost > a.active:after {
  border: 1px solid #fff;
}
.menu .nav-highlight-ghost > a.active:hover {
  color: var(--sk-nav-hover);
}
.menu .nav-highlight-ghost > a.active:hover:after {
  border: 1px solid var(--sk-nav-hover);
}
.search-trigger,
.search-trigger:hover {
  color: #fff;
}
.search-trigger:before {
  border-color: #fff;
  color: #fff;
}
.search-trigger:after {
  background: #fff;
}
.top-search.active .search-trigger:before {
  background: #fff;
}
.top-search.active .search-trigger:after {
  background: #fff;
}
.header-logo-center-menu-below .container-logo,
.header-logo-left-menu-below .container-logo,
.header-logo-right-menu-below .container-logo,
.header-logo-left-sidebar-right .container-logo {
  background: var(--sk-header-bg);
  box-shadow: 0px 1px 0px var(--sk-header-shadow);
}
.header-logo-center-menu-below .navbar-brand,
.header-logo-left-menu-below .navbar-brand,
.header-logo-right-menu-below .navbar-brand,
.header-logo-left-sidebar-right .navbar-brand {
  color: #fff;
}
.header-logo-center-menu-below .navbar-brand:hover,
.header-logo-left-menu-below .navbar-brand:hover,
.header-logo-right-menu-below .navbar-brand:hover,
.header-logo-left-sidebar-right .navbar-brand:hover {
  color: #fff;
  opacity: 0.9;
}
.header-logo-center-menu-below .logo-navbar,
.header-logo-left-menu-below .logo-navbar,
.header-logo-right-menu-below .logo-navbar,
.header-logo-left-sidebar-right .logo-navbar {
  color: #fff;
}
.header-logo-center-menu-below .logo-navbar a,
.header-logo-left-menu-below .logo-navbar a,
.header-logo-right-menu-below .logo-navbar a,
.header-logo-left-sidebar-right .logo-navbar a {
  color: #fff;
}
.header-logo-center-menu-below .logo-navbar .navbar-toggler .toggler-bar,
.header-logo-left-menu-below .logo-navbar .navbar-toggler .toggler-bar,
.header-logo-right-menu-below .logo-navbar .navbar-toggler .toggler-bar,
.header-logo-left-sidebar-right .logo-navbar .navbar-toggler .toggler-bar {
  background: #fff;
}
.header-logo-center-menu-below .logo-navbar .logo-sidebar .sidebar-widget,
.header-logo-left-menu-below .logo-navbar .logo-sidebar .sidebar-widget,
.header-logo-right-menu-below .logo-navbar .logo-sidebar .sidebar-widget,
.header-logo-left-sidebar-right .logo-navbar .logo-sidebar .sidebar-widget,
.header-logo-center-menu-below .logo-navbar .logo-sidebar .sidebar-widget i,
.header-logo-left-menu-below .logo-navbar .logo-sidebar .sidebar-widget i,
.header-logo-right-menu-below .logo-navbar .logo-sidebar .sidebar-widget i,
.header-logo-left-sidebar-right .logo-navbar .logo-sidebar .sidebar-widget i {
  color: #fff;
}
.header-logo-center-menu-below .logo-navbar .search-trigger,
.header-logo-left-menu-below .logo-navbar .search-trigger,
.header-logo-right-menu-below .logo-navbar .search-trigger,
.header-logo-left-sidebar-right .logo-navbar .search-trigger,
.header-logo-center-menu-below .logo-navbar .search-trigger:hover,
.header-logo-left-menu-below .logo-navbar .search-trigger:hover,
.header-logo-right-menu-below .logo-navbar .search-trigger:hover,
.header-logo-left-sidebar-right .logo-navbar .search-trigger:hover {
  color: #fff;
}
.header-logo-center-menu-below .logo-navbar .search-trigger:before,
.header-logo-left-menu-below .logo-navbar .search-trigger:before,
.header-logo-right-menu-below .logo-navbar .search-trigger:before,
.header-logo-left-sidebar-right .logo-navbar .search-trigger:before {
  border-color: #fff;
}
.header-logo-center-menu-below .logo-navbar .search-trigger:after,
.header-logo-left-menu-below .logo-navbar .search-trigger:after,
.header-logo-right-menu-below .logo-navbar .search-trigger:after,
.header-logo-left-sidebar-right .logo-navbar .search-trigger:after {
  background: #fff;
}
.header-logo-center-menu-below .logo-navbar .top-search.active .search-trigger:before,
.header-logo-left-menu-below .logo-navbar .top-search.active .search-trigger:before,
.header-logo-right-menu-below .logo-navbar .top-search.active .search-trigger:before,
.header-logo-left-sidebar-right .logo-navbar .top-search.active .search-trigger:before {
  background: #fff;
}
.header-logo-center-menu-below .logo-navbar .top-search.active .search-trigger:after,
.header-logo-left-menu-below .logo-navbar .top-search.active .search-trigger:after,
.header-logo-right-menu-below .logo-navbar .top-search.active .search-trigger:after,
.header-logo-left-sidebar-right .logo-navbar .top-search.active .search-trigger:after {
  background: #fff;
}
.menu .sidebar-widget {
  color: #fff;
}
.menu .sidebar-widget .sidebar-header {
  color: #fff;
}
.menu .sidebar-widget i {
  color: #fff;
}
.menu-item-object-hcdsb_mega_menu {
  color: #fff;
}
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:hover {
  color: #fff;
}
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li.current-menu-item > a {
  color: #fff;
}
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li > p {
  border-bottom-color: rgba(0, 0, 0, .055);
}
.menu-item-object-hcdsb_mega_menu .dropdown-menu > li:before {
  background: rgba(0, 0, 0, .055);
}
#navbar-slide .form-control {
  color: #fff;
}
@media (max-width: 991px) {
  .menu .navbar-collapse {
    box-shadow: inset 0 1px 0 rgba(0, 0, 0, .055);
  }
  .menu .dropdown-menu.show {
    background: var(--sk-nav-bg);
    border-radius: 0;
    box-shadow: none;
  }
  .menu .dropdown-menu.show > li > a,
  .menu .dropdown-menu.show .dropdown-menu > li > a {
    border-radius: 0;
  }
  .menu .dropdown-menu.show > li > a:hover,
  .menu .dropdown-menu.show > li > a:focus,
  .menu .dropdown-menu.show > li > a.active,
  .menu .dropdown-menu.show .dropdown-menu > li > a:hover,
  .menu .dropdown-menu.show .dropdown-menu > li > a:focus,
  .menu .dropdown-menu.show .dropdown-menu > li > a.active {
    color: #fff;
  }
  .dropdown-submenu > a:after {
    border-left-color: transparent !important;
    border-top-color: #fff !important;
  }
  .menu-item-object-hcdsb_mega_menu .dropdown-menu > li > ul > li > a:hover {
    color: #fff;
  }
  .menu-item-object-hcdsb_mega_menu .dropdown-menu > li:before {
    display: none;
  }
  .menu-sidebar {
    border-top: 1px solid rgba(255, 255, 255, .075);
  }
}
.top-search form {
  background-color: var(--sk-nav-bg);
}
.top-search input {
  background: none;
  color: #fff;
}
.top-search input:focus {
  box-shadow: none;
}
.top-search input::placeholder {
  color: #fff;
}
.top-bar .top-search form {
  background-color: var(--sk-topbar-bg);
}
.top-bar .top-search input {
  background: none;
  color: var(--sk-topbar-search-text);
}
.top-bar .top-search input:focus {
  box-shadow: none;
}
.top-bar .top-search input::placeholder {
  color: var(--sk-topbar-search-text);
}
.logo-sidebar .top-search form {
  background-color: var(--sk-header-bg);
}
.logo-sidebar .top-search input {
  background: none;
  color: #fff;
}
.logo-sidebar .top-search input:focus {
  box-shadow: none;
}
.logo-sidebar .top-search input::placeholder {
  color: #fff;
}
.top-bar {
  background: var(--sk-topbar-bg);
  color: var(--sk-topbar-search-text);
}
.top-bar a {
  color: var(--sk-topbar-text);
}
.top-bar a:hover {
  color: var(--sk-topbar-link-hover);
}
.top-bar i,
.top-bar li i,
.top-bar li a i {
  color: var(--sk-topbar-text);
}
.top-bar .sidebar-widget {
  border-color: var(--sk-topbar-rule);
}
.top-bar .widget_recent_entries li,
.top-bar .widget_recent_comments li,
.top-bar .widget_archive li,
.top-bar .widget_categories li,
.top-bar .widget_meta li,
.top-bar .widget_pages li,
.top-bar .widget_nav_menu li,
.top-bar .widget_rss li {
  border-color: var(--sk-topbar-rule);
}
.top-bar .search-trigger:before {
  border-color: var(--sk-topbar-search-text);
  color: var(--sk-topbar-search-text);
}
.top-bar .search-trigger:after {
  background: var(--sk-topbar-search-text);
}
.section-upper-footer {
  border-top: 1px solid rgba(0, 0, 0, .1);
}
#footer {
  background-color: var(--sk-footer);
  color: rgba(255, 255, 255, .6);
}
#footer h1,
#footer h2,
#footer h3,
#footer h4,
#footer h5,
#footer h6,
#footer strong {
  color: #fff;
}
#footer a {
  color: #fff;
}
#footer a:hover {
  color: var(--sk-footer-link-hover);
}
#footer i {
  color: inherit;
}
#footer small {
  color: rgba(255, 255, 255, .6);
}
#footer .widget_recent_entries small,
#footer .widget_recent_comments small,
#footer .widget_archive small,
#footer .widget_categories small,
#footer .widget_meta small,
#footer .widget_pages small,
#footer .widget_nav_menu small,
#footer .widget_rss small {
  color: rgba(255, 255, 255, .6);
}
#footer .widget_recent_entries li,
#footer .widget_recent_comments li,
#footer .widget_archive li,
#footer .widget_categories li,
#footer .widget_meta li,
#footer .widget_pages li,
#footer .widget_nav_menu li,
#footer .widget_rss li,
#footer .widget_recent_entries .sub-menu,
#footer .widget_recent_comments .sub-menu,
#footer .widget_archive .sub-menu,
#footer .widget_categories .sub-menu,
#footer .widget_meta .sub-menu,
#footer .widget_pages .sub-menu,
#footer .widget_nav_menu .sub-menu,
#footer .widget_rss .sub-menu {
  border-color: rgba(255, 255, 255, .1);
}
#footer .widget_tag_cloud ul a {
  box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, .6);
  color: rgba(255, 255, 255, .6);
}
#footer .widget_tag_cloud ul a:hover {
  box-shadow: 0px 0px 0px 1px #fff;
  color: #fff;
}
#footer .widget_calendar tbody a {
  background: #fff;
  color: var(--sk-footer);
}
#footer .widget_calendar tbody a:hover {
  background: #ededed;
  color: var(--sk-footer);
}
#footer .widget_calendar tfoot {
  background: rgba(255, 255, 255, .1);
}
#footer .widget_nav_menu .sub-menu li:before {
  color: rgba(255, 255, 255, .1);
}
#footer .subfooter {
  background-color: var(--sk-subfooter-bg);
  color: var(--sk-subfooter-text);
}
#footer .subfooter h1,
#footer .subfooter h2,
#footer .subfooter h3,
#footer .subfooter h4,
#footer .subfooter h5,
#footer .subfooter h6,
#footer .subfooter strong {
  color: var(--sk-subfooter-link);
}
#footer .subfooter a {
  color: var(--sk-subfooter-link);
}
#footer .subfooter a:hover {
  color: var(--sk-subfooter-link);
}
#footer .subfooter i {
  color: inherit;
}
#footer .subfooter small {
  color: var(--sk-subfooter-text);
}
#footer .subfooter .widget_recent_entries small,
#footer .subfooter .widget_recent_comments small,
#footer .subfooter .widget_archive small,
#footer .subfooter .widget_categories small,
#footer .subfooter .widget_meta small,
#footer .subfooter .widget_pages small,
#footer .subfooter .widget_nav_menu small,
#footer .subfooter .widget_rss small {
  color: #999;
}
#footer .subfooter .widget_recent_entries li,
#footer .subfooter .widget_recent_comments li,
#footer .subfooter .widget_archive li,
#footer .subfooter .widget_categories li,
#footer .subfooter .widget_meta li,
#footer .subfooter .widget_pages li,
#footer .subfooter .widget_nav_menu li,
#footer .subfooter .widget_rss li,
#footer .subfooter .widget_recent_entries .sub-menu,
#footer .subfooter .widget_recent_comments .sub-menu,
#footer .subfooter .widget_archive .sub-menu,
#footer .subfooter .widget_categories .sub-menu,
#footer .subfooter .widget_meta .sub-menu,
#footer .subfooter .widget_pages .sub-menu,
#footer .subfooter .widget_nav_menu .sub-menu,
#footer .subfooter .widget_rss .sub-menu {
  border-color: rgba(255, 255, 255, .1);
}
#footer .subfooter .widget_tag_cloud ul a {
  box-shadow: 0px 0px 0px 1px #999;
  color: #999;
}
#footer .subfooter .widget_tag_cloud ul a:hover {
  box-shadow: 0px 0px 0px 1px #666;
  color: #666;
}
#footer .subfooter .widget_calendar tbody a {
  background: #666;
  color: #fff;
}
#footer .subfooter .widget_calendar tbody a:hover {
  background: #545454;
  color: #fff;
}
#footer .subfooter .widget_calendar tfoot {
  background: rgba(255, 255, 255, .1);
}
#footer .subfooter .widget_nav_menu .sub-menu li:before {
  color: rgba(255, 255, 255, .1);
}
.text-light blockquote footer,
blockquote.text-light footer {
  color: #fff;
}

/* ==========================================================================
 * 11. SITE PALETTES
 * One block per site, keyed on a .site-<slug> body class.
 *
 * A fresh install renders with the board-navy fallback on :root (section 10)
 * until a block is added here. Nothing adds a .site-<slug> body class out of
 * the box: on a multisite network that comes from a blog-ID -> slug map in an
 * mu-plugin (the secondary network's hcdsb-site-body-class.php is the model),
 * keyed on blog ID because slugs can be renamed from wp-admin and IDs cannot.
 * A single-site install can simply override the tokens on :root instead.
 *
 * To brand a site, add a block here overriding only the tokens that differ
 * from :root, e.g.
 *
 *   .site-example {
 *     --sk-primary: #...;
 *     --sk-header-bg: #...;
 *     --sk-nav-bg: #...;
 *   }
 *
 * Appearance > Customize > Colours sets the header, menu, footer and
 * sub-footer backgrounds without a block here (inc/colors.php); a colour
 * chosen there outranks this section.
 *
 * Header/nav colours must hold white text at 4.5:1 or better; links
 * (--sk-accent) must clear 4.5:1 on both white and the #EFF2F6 archive ground.
 * ========================================================================== */
