@layer components {
  /* Header — responsive grid with named areas
  /* < 640px:    single column (brand stacked above center, both centered)
  /* 640-1023px: 2-row grid (brand spans rows; search + center in column 2)
  /* >= 1024px:  2-row grid, search swaps to brand column, herd name to center
  /* ======================================================================== */

  .header {
    --header-gap: 0.5ch;
    --btn-icon-size: 1rem;

    display: grid;
    grid-template-areas:
      "brand"
      "center";
    grid-template-columns: 1fr;
    justify-items: center;
    max-inline-size: 100dvw;
    padding-block: calc(var(--block-space-half) + env(safe-area-inset-top)) var(--block-space-half);
    padding-inline: var(--main-padding);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    background: oklch(var(--lch-canvas) / 0.85);
    inset-block-start: 0;
    margin-block-end: var(--block-space-half);
    position: sticky;
    z-index: var(--z-nav);

    &::after {
      background: linear-gradient(to bottom, oklch(var(--lch-ink-darkest) / 0.1), transparent);
      block-size: 4px;
      content: "";
      inset-block-end: 0;
      inset-inline: 0;
      pointer-events: none;
      position: absolute;
      translate: 0 100%;
    }

    &:has(dialog[open]) {
      z-index: var(--z-nav-open);
    }

    &:has(~ #main .card-columns) {
      inline-size: 100dvw;
      margin-inline: auto;
      max-inline-size: var(--main-width);
    }
  }

  /* Tablet: 2-row grid — search above title in center column
  /* ------------------------------------------------------------------------ */

  @media (min-width: 640px) {
    .header:not(.header--legacy) {
      grid-template-areas:
        "brand search end"
        "brand center end";
      grid-template-columns: auto 1fr auto;
      grid-template-rows: auto auto;
      justify-items: start;
      align-items: center;
      column-gap: var(--inline-space-double);
    }
  }

  /* Desktop: search swaps under logo, herd name moves to center column
  /* ------------------------------------------------------------------------ */

  @media (min-width: 1024px) {
    .header:not(.header--legacy) {
      grid-template-areas:
        "brand  herd   end"
        "search center end";
      grid-template-columns: var(--sidebar-width) 1fr auto;
      grid-template-rows: auto auto;
      padding-inline: 0;
      column-gap: 0;
    }
  }

  /* Brand — logo only
  /* ------------------------------------------------------------------------ */

  .header__brand {
    grid-area: brand;
    display: flex;
    flex-direction: column;
    align-items: center;

    nav {
      margin-inline: 0;
    }
  }

  @media (min-width: 640px) {
    .header:not(.header--legacy) .header__brand {
      align-items: start;
    }
  }

  @media (min-width: 1024px) {
    .header:not(.header--legacy) .header__brand {
      align-self: center;
      justify-self: stretch;
      padding-inline-start: var(--main-padding);
      padding-inline-end: var(--inline-space-double);
    }
  }

  .header__herd-name {
    grid-area: herd;
    display: none;
  }

  @media (min-width: 1024px) {
    .header__herd-name {
      color: inherit;
      display: flex;
      font-size: var(--text-medium);
      font-weight: 700;
      inline-size: 100%;
      padding-inline: var(--block-space);
    }
  }

  /* Center — page title (+ herd name above it on desktop)
  /* ------------------------------------------------------------------------ */

  .header__center {
    grid-area: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--block-space-half);
    min-inline-size: 0;
    inline-size: 100%;
  }

  @media (min-width: 1024px) {
    .header:not(.header--legacy) .header__center {
      padding-inline: var(--block-space);
    }
  }

  /* End — bell icon (tablet+ only)
  /* ------------------------------------------------------------------------ */

  .header__end {
    grid-area: end;
    display: none;
  }

  @media (min-width: 640px) {
    .header__end {
      align-items: center;
      display: flex;
      padding-inline-start: var(--inline-space);
    }
  }

  @media (min-width: 1024px) {
    .header:not(.header--legacy) .header__end {
      padding-inline-end: var(--main-padding);
    }
  }

  .header__bell {
    color: var(--color-ink-medium);
    font-size: var(--text-medium);
    opacity: 0.5;
  }

  /* Title
  /* ------------------------------------------------------------------------ */

  .header__title {
    color: inherit;
    font-size: var(--text-large);
    font-weight: 900;
    margin: 0 auto;
    min-inline-size: 0;
    text-align: center;
  }

  @media (min-width: 640px) {
    .header:not(.header--legacy) .header__title {
      margin: 0;
      text-align: center;
    }
  }

  @media (min-width: 1024px) {
    .header__title--dashboard {
      display: none;
    }
  }

  /* Skip navigation
  /* ------------------------------------------------------------------------ */

  .header__skip-navigation {
    --left-offset: -999em;

    inset-block-start: 4rem;
    inset-inline-start: var(--left-offset);
    position: absolute;
    white-space: nowrap;
    z-index: var(--z-popup);

    &:focus {
      --left-offset: var(--inline-space);
    }
  }

  /* Search in header — direct grid child (tablet+ only)
  /* ------------------------------------------------------------------------ */

  .header__search {
    grid-area: search;
    display: none;
  }

  @media (min-width: 640px) {
    .header__search {
      align-self: start;
      display: block;
      position: relative;
      inline-size: 100%;
      max-inline-size: 40ch;
    }
  }

  @media (min-width: 1024px) {
    .header:not(.header--legacy) .header__search {
      max-inline-size: none;
      padding-inline: var(--inline-space);
    }
  }

  /* Logo (used by nav__trigger in _menu.html.erb) — kept for compatibility
  /* ------------------------------------------------------------------------ */

  .header__logo {
    color: var(--color-ink);
    font-size: var(--text-medium);
    inline-size: auto;
    margin-block-start: 0.1em;

    span {
      background: var(--color-ink-lightest);
      block-size: auto;
      border-radius: 0.3125em;
      box-shadow:
        0 0 0 1px oklch(var(--lch-ink-darkest) / 0.1),
        0 0.1em 0.2em -0.1em oklch(var(--lch-ink-darkest) / 0.05),
        0 0.2em 0.4em -0.2em oklch(var(--lch-ink-darkest) / 0.05),
        0 0.3em 0.6em -0.3em oklch(var(--lch-ink-darkest) / 0.05)
      ;
      display: grid;
      height: 1.5em;
      inline-size: 1.5em;
      padding: 0.325em 0.275em 0.225em 0.275em;
      place-content: center;
      width: 1.5em;
    }

    svg {
      height: 100%;
      margin-inline-start: 0.4125em;
      margin-inline-end: 0.5375em;
      max-height: 0.8625em;
      overflow: visible;
      width: auto;
    }
  }

  /* Back button styling */
  .btn--back {
    align-items: center;
    display: flex;
    gap: 0.25rem;

    .icon {
      font-size: 1.25rem;
    }
  }

  /* Legacy header — preserves old grid for non-herd pages
  /* (admin, login, users, join_codes, account, herds/index, herds/new)
  /* ======================================================================== */

  .header--legacy {
    --header-btn-size: 2rem;
    --header-button-count: 0;
    --header-actions-width: calc((var(--header-btn-size) + var(--header-gap)) * var(--header-button-count));

    grid-template-columns: var(--header-actions-width) 1fr var(--header-actions-width);
    grid-template-areas:
      "menu menu menu"
      "actions-start title actions-end";

    /* Change the grid size depending on how many buttons are present */
    &:has(.header__actions > *:nth-child(1)) { --header-button-count: 1; }
    &:has(.header__actions > *:nth-child(2)) { --header-button-count: 2; }
    &:has(.header__actions > *:nth-child(3)) { --header-button-count: 3; }

    &:has(nav) {
      row-gap: 0;
    }

    nav {
      grid-area: menu;
      margin-inline: auto;
    }

    .header__title {
      grid-area: title;
    }
  }

  .header__actions {
    display: flex;
    font-size: var(--text-x-small);
    gap: var(--header-gap);
    inline-size: var(--header-actions-width);
  }

  .header__actions--start {
    grid-area: actions-start;
    margin-inline-end: auto;
  }

  .header__actions--end {
    grid-area: actions-end;
    justify-content: flex-end;
    margin-inline-start: auto;
  }

  /* Optional class to stack header actions on small screens (legacy)
  /* ------------------------------------------------------------------------ */

  .header--mobile-actions-stack {
    @media (max-width: 639px) {
      grid-template-areas:
        "actions-start menu actions-end"
        "title title title";

      .header__title {
        margin-block-start: 0.0rem;
      }
    }
  }
}
