/*
 * First-party grid -- Bootstrap 5.3's flex grid, restricted to the 60 grid classes
 * this site actually uses, with Bootstrap's exact selectors, breakpoints (sm 576,
 * md 768, lg 992, xl 1200, xxl 1400) and container max-widths (540 / 720 / 960 /
 * 1140 / 1320px).
 *
 * Part of the Bootstrap removal (PR 1 of 4). Bootstrap's CSS is still loaded and this
 * file is loaded after it; every declaration below restates Bootstrap's own, so the
 * cascade outcome is identical either way.
 *
 * The only deviation: Bootstrap's `--bs-gutter-x` / `--bs-gutter-y` mechanism is
 * reproduced under the first-party names `--gutter-x` / `--gutter-y` (same 1.5rem /
 * 0 defaults, same `calc()` expressions), so `.row > *` padding and `.row` negative
 * margins match Bootstrap exactly while owning no `--bs-*` name.
 *
 * The used set is computed by the same grep as utils/utilities.css -- see that file's
 * header -- and re-checked by core/tests/test_first_party_utilities.py.
 */

/* ---- containers -------------------------------------------------------- */

.container,
.container-xxl {
  --gutter-x: 1.5rem;
  --gutter-y: 0;
  width: 100%;
  padding-right: calc(var(--gutter-x) * 0.5);
  padding-left: calc(var(--gutter-x) * 0.5);
  margin-right: auto;
  margin-left: auto;
}

/* ---- row and columns --------------------------------------------------- */

.row {
  --gutter-x: 1.5rem;
  --gutter-y: 0;
  display: flex;
  flex-wrap: wrap;
  margin-top: calc(-1 * var(--gutter-y));
  margin-right: calc(-0.5 * var(--gutter-x));
  margin-left: calc(-0.5 * var(--gutter-x));
}

.row > * {
  flex-shrink: 0;
  width: 100%;
  max-width: 100%;
  padding-right: calc(var(--gutter-x) * 0.5);
  padding-left: calc(var(--gutter-x) * 0.5);
  margin-top: var(--gutter-y);
}

.col { flex: 1 0 0%; }
.col-2 {
  flex: 0 0 auto;
  width: 16.66666667%;
}
.col-3 {
  flex: 0 0 auto;
  width: 25%;
}
.col-4 {
  flex: 0 0 auto;
  width: 33.33333333%;
}
.col-5 {
  flex: 0 0 auto;
  width: 41.66666667%;
}
.col-6 {
  flex: 0 0 auto;
  width: 50%;
}
.col-7 {
  flex: 0 0 auto;
  width: 58.33333333%;
}
.col-8 {
  flex: 0 0 auto;
  width: 66.66666667%;
}
.col-9 {
  flex: 0 0 auto;
  width: 75%;
}
.col-10 {
  flex: 0 0 auto;
  width: 83.33333333%;
}
.col-12 {
  flex: 0 0 auto;
  width: 100%;
}
.col-auto {
  flex: 0 0 auto;
  width: auto;
}
.row-cols-1 > * {
  flex: 0 0 auto;
  width: 100%;
}
.row-cols-2 > * {
  flex: 0 0 auto;
  width: 50%;
}
.g-0 {
  --gutter-x: 0;
  --gutter-y: 0;
}
.g-2 {
  --gutter-x: 0.5rem;
  --gutter-y: 0.5rem;
}
.g-3 {
  --gutter-x: 1rem;
  --gutter-y: 1rem;
}
.g-4 {
  --gutter-x: 1.5rem;
  --gutter-y: 1.5rem;
}
.gx-0 {
  --gutter-x: 0;
}
.gx-2 {
  --gutter-x: 0.5rem;
}
.gx-4 {
  --gutter-x: 1.5rem;
}
.gy-2 {
  --gutter-y: 0.5rem;
}

/* ---- sm (576px and up) -------------------------------------------- */

@media (min-width: 576px) {
  .container {
      max-width: 540px;
    }

  .col-sm-4 {
    flex: 0 0 auto;
    width: 33.33333333%;
  }

  .col-sm-6 {
    flex: 0 0 auto;
    width: 50%;
  }

  .col-sm-12 {
    flex: 0 0 auto;
    width: 100%;
  }
}

/* ---- md (768px and up) -------------------------------------------- */

@media (min-width: 768px) {
  .container {
      max-width: 720px;
    }

  .col-md { flex: 1 0 0%; }

  .col-md-1 {
    flex: 0 0 auto;
    width: 8.33333333%;
  }

  .col-md-2 {
    flex: 0 0 auto;
    width: 16.66666667%;
  }

  .col-md-3 {
    flex: 0 0 auto;
    width: 25%;
  }

  .col-md-4 {
    flex: 0 0 auto;
    width: 33.33333333%;
  }

  .col-md-5 {
    flex: 0 0 auto;
    width: 41.66666667%;
  }

  .col-md-6 {
    flex: 0 0 auto;
    width: 50%;
  }

  .col-md-7 {
    flex: 0 0 auto;
    width: 58.33333333%;
  }

  .col-md-8 {
    flex: 0 0 auto;
    width: 66.66666667%;
  }

  .col-md-9 {
    flex: 0 0 auto;
    width: 75%;
  }

  .col-md-10 {
    flex: 0 0 auto;
    width: 83.33333333%;
  }

  .col-md-12 {
    flex: 0 0 auto;
    width: 100%;
  }

  .col-md-auto {
    flex: 0 0 auto;
    width: auto;
  }

  .row-cols-md-2 > * {
    flex: 0 0 auto;
    width: 50%;
  }

  .row-cols-md-3 > * {
    flex: 0 0 auto;
    width: 33.33333333%;
  }

  .g-md-3 {
    --gutter-x: 1rem;
    --gutter-y: 1rem;
  }

  .g-md-4 {
    --gutter-x: 1.5rem;
    --gutter-y: 1.5rem;
  }
}

/* ---- lg (992px and up) -------------------------------------------- */

@media (min-width: 992px) {
  .container {
      max-width: 960px;
    }

  .col-lg-2 {
    flex: 0 0 auto;
    width: 16.66666667%;
  }

  .col-lg-3 {
    flex: 0 0 auto;
    width: 25%;
  }

  .col-lg-4 {
    flex: 0 0 auto;
    width: 33.33333333%;
  }

  .col-lg-5 {
    flex: 0 0 auto;
    width: 41.66666667%;
  }

  .col-lg-6 {
    flex: 0 0 auto;
    width: 50%;
  }

  .col-lg-7 {
    flex: 0 0 auto;
    width: 58.33333333%;
  }

  .col-lg-8 {
    flex: 0 0 auto;
    width: 66.66666667%;
  }

  .col-lg-9 {
    flex: 0 0 auto;
    width: 75%;
  }

  .col-lg-10 {
    flex: 0 0 auto;
    width: 83.33333333%;
  }

  .col-lg-12 {
    flex: 0 0 auto;
    width: 100%;
  }

  .row-cols-lg-4 > * {
    flex: 0 0 auto;
    width: 25%;
  }

  .gx-lg-5 {
    --gutter-x: 3rem;
  }
}

/* ---- xl (1200px and up) -------------------------------------------- */

@media (min-width: 1200px) {
  .container {
      max-width: 1140px;
    }

  .col-xl-3 {
    flex: 0 0 auto;
    width: 25%;
  }

  .col-xl-9 {
    flex: 0 0 auto;
    width: 75%;
  }

  .row-cols-xl-4 > * {
    flex: 0 0 auto;
    width: 25%;
  }
}

/* ---- xxl (1400px and up) -------------------------------------------- */

@media (min-width: 1400px) {
  .container,
    .container-xxl {
      max-width: 1320px;
    }
}
