/* ===================== RESET ===================== */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html, body {
  font-family: var(--font-family, sans-serif);
  font-size: var(--font-size-theme, 16px);
  line-height: var(--line-height-theme, 1.5);
  color: var(--text-color, #000);
  background-color: var(--bg-color, #fff);
  /* scroll-behavior: smooth; */
}

img, picture, video, canvas, svg {
  display: inline-block;
  max-width: 100%;
  height: auto;
}

/* ===================== LISTS ===================== */
ul, ol {
  padding: 0;
  margin: 0;
  list-style: none;
}

ul.disc { list-style: disc inside; }

ol li::marker {
  font-size: var(--font-size-theme);
  font-weight: var(--font-weight-theme);
}

/* ===================== LINKS ===================== */
a { text-decoration: none; color: inherit; }

/* ===================== TYPOGRAPHY ===================== */
strong, .text-strong { font-weight: var(--font-weight-theme, 700); }

.text-uppercase { text-transform: uppercase; }
.text-capitalize { text-transform: capitalize; }
.text-center { text-align: center; }
.text-right { text-align: right; }

.text-primary { color: var(--primary-color); }
.text-secondary { color: var(--secondary-color); }
.text-white { color: var(--white-color, #fff); }
.text-black { color: var(--black-color, #000); }
.text-grey { color: var(--grey-color, #676767); }

/* ===================== CONTAINERS ===================== */
.container {
  width: 100%;
  padding: 0 var(--container-padding, 15px);
  margin: 0 auto;
}

@media (min-width: 576px) { .container { max-width: 540px; } }
@media (min-width: 768px) { .container { max-width: 720px; } }
@media (min-width: 992px) { .container { max-width: 960px; } }
@media (min-width: 1200px) { .container { max-width: 1200px; } }
/* @media (min-width: 1800px) { .container { max-width: 1485px; } } */

.container-fluid {
  width: 100%;
  padding: 0 var(--container-padding, 15px);
  margin: 0 auto;
}

/* Columns helper */
.columns-1 { --columns: 1; }
.columns-2 { --columns: 2; }
.columns-3 { --columns: 3; }
.columns-4 { --columns: 4; }
.columns-5 { --columns: 5; }
.columns-6 { --columns: 6; }
.columns-8 { --columns: 8; }

@media (max-width: 991px) {
  .columns-2 { --columns: 1; }
  .columns-3 { --columns: 2; }
  .columns-4 { --columns: 2; }
}

@media (max-width: 767px) {
  .columns-3 { --columns: 1; }
}

@media (max-width: 575px) {
  .columns-4 { --columns: 1; }
}

/* ===================== FLEX ===================== */
.d-flex {
  display: flex;
  flex-wrap: wrap;
  gap: var(--gap, 0px);
}

.d-flex > .item {
  width: calc(100% / var(--columns, 1) - (var(--gap, 0px) / var(--columns, 1)) * (var(--columns, 1) - 1));
}

/* ==== 2-col special layout ==== */
@media (min-width: 992px) {
  .d-flex.columns-2.large-left > .item:nth-of-type(1),
  .d-flex.columns-2.large-right > .item:nth-of-type(2) {
    width: calc(100% / 3 * 2 - var(--gap, 0px) / 3);
  }
  .d-flex.columns-2.large-left > .item:nth-of-type(2),
  .d-flex.columns-2.large-right > .item:nth-of-type(1) {
    width: calc(100% / 3 - var(--gap, 0px) / 3 * 2)
  }
}

/* Flex direction */
.flex-row-reverse { flex-direction: row-reverse; }
.flex-column { flex-direction: column; }

/* Justify */
.d-flex.justify-center { justify-content: center; }
.d-flex.justify-between { justify-content: space-between; }
.d-flex.justify-end { justify-content: flex-end; }

/* Align */
.d-flex.align-center { align-items: center; }
.d-flex.align-end { align-items: flex-end; }

/* ===================== GRID ===================== */
.d-grid {
  display: grid;
  grid-template-columns: repeat(var(--columns, 1), 1fr);
  gap: var(--gap, 0px);
}

/* ==== 2-col special layout ==== */
.d-grid.large-left { grid-template-columns: 2fr 1fr; }
.d-grid.large-right { grid-template-columns: 1fr 2fr; }

/* ===================== GRID DIRECTION / ALIGN ===================== */
.grid-row-reverse { grid-auto-flow: column dense; direction: rtl; }

.d-grid.justify-center { justify-items: center; }
.d-grid.justify-between { justify-content: space-between; justify-items: stretch; }
.d-grid.justify-end { justify-items: end; }

.d-grid.align-center { align-items: center; }
.d-grid.align-end { align-items: end; }

/* ===================== DISPLAY ===================== */
.d-none { display: none; }
.position-relative { position: relative; }

/* ===================== BACKGROUNDS ===================== */
.bg-primary { background-color: var(--primary-color); }
.bg-secondary { background-color: var(--secondary-color); }
.bg-white { background-color: var(--white-color, #fff); }
.bg-black { background-color: var(--black-color, #000); }

.bg-image {
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
}

.overlay { position: relative; }

.overlay::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: var(--overlay-bg, #000);
  opacity: var(--overlay-opacity, 0.3);
}

.overlay > * {
  position: relative;
  z-index: 1;
}

/* ===================== BUTTON ===================== */
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0 8px;
  cursor: pointer;
  border: none;
  padding: var(--button-padding, 0.5rem 1rem);
  background-color: var(--button-bg, var(--primary-color));
  color: var(--button-color, #fff);
  text-decoration: none;
  transition: all 0.3s ease;
}

/* ===================== SIZES ===================== */
/* Widths */
.w-50 { width: 50%; }
.w-100 { width: 100%; }

/* Heights */
.h-100 { height: 100%; }
.vh-100 { min-height: 100vh; }

/* Max-widths */
.mw-375 { max-width: 375px; }
.mw-545 { max-width: 545px; }
.mw-690 { max-width: 690px; }
.mw-930 { max-width: 930px; }

/* ===================== SPACING SCALE ===================== */
:root {
  --space-0: 0px;
  --space-5: 5px;
  --space-10: 10px;
  --space-15: 15px;
  --space-20: 20px;
  --space-25: 25px;
  --space-30: 30px;
  --space-40: 40px;
  --space-50: 50px;
  --space-60: 60px;
  --space-80: 80px;
  --space-100: 100px;
  --space-120: 120px;
  --space-150: 150px;
  --space-200: 200px;
}

/* ========== PADDING ========== */
.pt-0  { padding-top: var(--space-0); }
.pt-5  { padding-top: var(--space-5); }
.pt-10 { padding-top: var(--space-10); }
.pt-15 { padding-top: var(--space-15); }
.pt-20 { padding-top: var(--space-20); }
.pt-25 { padding-top: var(--space-25); }
.pt-30 { padding-top: var(--space-30); }
.pt-40 { padding-top: var(--space-40); }
.pt-50 { padding-top: var(--space-50); }
.pt-60 { padding-top: var(--space-60); }
.pt-80 { padding-top: var(--space-80); }
.pt-100{ padding-top: var(--space-100); }
.pt-120{ padding-top: var(--space-120); }
.pt-150{ padding-top: var(--space-150); }
.pt-200{ padding-top: var(--space-200); }

.pb-0  { padding-bottom: var(--space-0); }
.pb-5  { padding-bottom: var(--space-5); }
.pb-10 { padding-bottom: var(--space-10); }
.pb-15 { padding-bottom: var(--space-15); }
.pb-20 { padding-bottom: var(--space-20); }
.pb-25 { padding-bottom: var(--space-25); }
.pb-30 { padding-bottom: var(--space-30); }
.pb-40 { padding-bottom: var(--space-40); }
.pb-50 { padding-bottom: var(--space-50); }
.pb-60 { padding-bottom: var(--space-60); }
.pb-80 { padding-bottom: var(--space-80); }
.pb-100{ padding-bottom: var(--space-100); }
.pb-120{ padding-bottom: var(--space-120); }
.pb-150{ padding-bottom: var(--space-150); }
.pb-200{ padding-bottom: var(--space-200); }

.pl-0  { padding-left: var(--space-0); }
.pl-5  { padding-left: var(--space-5); }
.pl-10 { padding-left: var(--space-10); }
.pl-15 { padding-left: var(--space-15); }
.pl-20 { padding-left: var(--space-20); }
.pl-25 { padding-left: var(--space-25); }
.pl-30 { padding-left: var(--space-30); }
.pl-40 { padding-left: var(--space-40); }
.pl-50 { padding-left: var(--space-50); }
.pl-60 { padding-left: var(--space-60); }
.pl-80 { padding-left: var(--space-80); }
.pl-100{ padding-left: var(--space-100); }
.pl-120{ padding-left: var(--space-120); }
.pl-150{ padding-left: var(--space-150); }
.pl-200{ padding-left: var(--space-200); }

.pr-0  { padding-right: var(--space-0); }
.pr-5  { padding-right: var(--space-5); }
.pr-10 { padding-right: var(--space-10); }
.pr-15 { padding-right: var(--space-15); }
.pr-20 { padding-right: var(--space-20); }
.pr-25 { padding-right: var(--space-25); }
.pr-30 { padding-right: var(--space-30); }
.pr-40 { padding-right: var(--space-40); }
.pr-50 { padding-right: var(--space-50); }
.pr-60 { padding-right: var(--space-60); }
.pr-80 { padding-right: var(--space-80); }
.pr-100{ padding-right: var(--space-100); }
.pr-120{ padding-right: var(--space-120); }
.pr-150{ padding-right: var(--space-150); }
.pr-200{ padding-right: var(--space-200); }

/* ========== MARGIN ========== */
.mt-0  { margin-top: var(--space-0) !important; }
.mt-5  { margin-top: var(--space-5); }
.mt-10 { margin-top: var(--space-10); }
.mt-15 { margin-top: var(--space-15); }
.mt-20 { margin-top: var(--space-20); }
.mt-25 { margin-top: var(--space-25); }
.mt-30 { margin-top: var(--space-30); }
.mt-40 { margin-top: var(--space-40); }
.mt-50 { margin-top: var(--space-50); }
.mt-60 { margin-top: var(--space-60); }
.mt-80 { margin-top: var(--space-80); }
.mt-100{ margin-top: var(--space-100); }
.mt-120{ margin-top: var(--space-120); }
.mt-150{ margin-top: var(--space-150); }
.mt-200{ margin-top: var(--space-200); }

.mb-0  { margin-bottom: var(--space-0) !important; }
.mb-5  { margin-bottom: var(--space-5); }
.mb-10 { margin-bottom: var(--space-10); }
.mb-15 { margin-bottom: var(--space-15); }
.mb-20 { margin-bottom: var(--space-20); }
.mb-25 { margin-bottom: var(--space-25); }
.mb-30 { margin-bottom: var(--space-30); }
.mb-40 { margin-bottom: var(--space-40); }
.mb-50 { margin-bottom: var(--space-50); }
.mb-60 { margin-bottom: var(--space-60); }
.mb-80 { margin-bottom: var(--space-80); }
.mb-100{ margin-bottom: var(--space-100); }
.mb-120{ margin-bottom: var(--space-120); }
.mb-150{ margin-bottom: var(--space-150); }
.mb-200{ margin-bottom: var(--space-200); }

.ml-0  { margin-left: var(--space-0); }
.ml-5  { margin-left: var(--space-5); }
.ml-10 { margin-left: var(--space-10); }
.ml-15 { margin-left: var(--space-15); }
.ml-20 { margin-left: var(--space-20); }
.ml-25 { margin-left: var(--space-25); }
.ml-30 { margin-left: var(--space-30); }
.ml-40 { margin-left: var(--space-40); }
.ml-50 { margin-left: var(--space-50); }
.ml-60 { margin-left: var(--space-60); }
.ml-80 { margin-left: var(--space-80); }
.ml-100{ margin-left: var(--space-100); }
.ml-120{ margin-left: var(--space-120); }
.ml-150{ margin-left: var(--space-150); }
.ml-200{ margin-left: var(--space-200); }

.mr-0  { margin-right: var(--space-0); }
.mr-5  { margin-right: var(--space-5); }
.mr-10 { margin-right: var(--space-10); }
.mr-15 { margin-right: var(--space-15); }
.mr-20 { margin-right: var(--space-20); }
.mr-25 { margin-right: var(--space-25); }
.mr-30 { margin-right: var(--space-30); }
.mr-40 { margin-right: var(--space-40); }
.mr-50 { margin-right: var(--space-50); }
.mr-60 { margin-right: var(--space-60); }
.mr-80 { margin-right: var(--space-80); }
.mr-100{ margin-right: var(--space-100); }
.mr-120{ margin-right: var(--space-120); }
.mr-150{ margin-right: var(--space-150); }
.mr-200{ margin-right: var(--space-200); }

/* Gap helpers */
.gap-0 { --gap: var(--space-0); }
.gap-5 { --gap: var(--space-5); }
.gap-10 { --gap: var(--space-10); }
.gap-15 { --gap: var(--space-15); }
.gap-20 { --gap: var(--space-20); }
.gap-25 { --gap: var(--space-25); }
.gap-30 { --gap: var(--space-30); }
.gap-40 { --gap: var(--space-40); }
.gap-50 { --gap: var(--space-50); }
.gap-60 { --gap: var(--space-60); }
.gap-80 { --gap: var(--space-80); }
.gap-100 { --gap: var(--space-100); }
.gap-120 { --gap: var(--space-120); }
.gap-150 { --gap: var(--space-150); }
.gap-200 { --gap: var(--space-200); }
