/* ========== FLEX ========== */
.flex { display: flex; }
.inline-flex { display: inline-flex; }

/* Direction */
.flex-row { flex-direction: row; }
.flex-col { flex-direction: column; }

/* Wrap */
.flex-wrap { flex-wrap: wrap; }
.flex-nowrap { flex-wrap: nowrap; }

/* Justify (main axis) */
.justify-start   { justify-content: flex-start; }
.justify-center  { justify-content: center; }
.justify-end     { justify-content: flex-end; }
.justify-between { justify-content: space-between; }

/* Align items (cross axis) */
.items-start  { align-items: flex-start; }
.items-center { align-items: center; }
.items-end    { align-items: flex-end; }

/* Align self (per item) */
.self-start  { align-self: flex-start; }
.self-center { align-self: center; }
.self-end    { align-self: flex-end; }

/* Flex grow / shrink */
.flex-1 { flex: 1 1 0%; }
.flex-auto { flex: 1 1 auto; }
.flex-none { flex: none; }

/* ========== GRID ========== */
.grid { display: grid; }

.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }

.col-span-1 { grid-column: span 1 / span 1; }
.col-span-2 { grid-column: span 2 / span 2; }
.col-span-3 { grid-column: span 3 / span 3; }
.col-span-4 { grid-column: span 4 / span 4; }
.col-span-full { grid-column: 1 / -1; }

/* ========== GAP ========== */
.gap-0 { gap: 0; }
.gap-1 { gap: 0.25rem; }
.gap-2 { gap: 0.5rem; }
.gap-4 { gap: 1rem; }
.gap-6 { gap: 1.5rem; }

.gap-x-2 { column-gap: 0.5rem; }
.gap-x-4 { column-gap: 1rem; }

.gap-y-2 { row-gap: 0.5rem; }
.gap-y-4 { row-gap: 1rem; }

/* ========== ALIGNMENT ========== */
.items-start   { align-items: start; }
.items-center  { align-items: center; }
.items-end     { align-items: end; }

.justify-items-start  { justify-items: start; }
.justify-items-center { justify-items: center; }
.justify-items-end    { justify-items: end; }

.self-start  { align-self: start; }
.self-center { align-self: center; }
.self-end    { align-self: end; }

/* ========== SHADOWS ========== */
.shadow-none { box-shadow: none; }

.shadow-sm {
  box-shadow: 0 1px 2px rgba(0,0,0,0.05);
}

.shadow {
  box-shadow: 0 1px 3px rgba(0,0,0,0.1),
              0 1px 2px rgba(0,0,0,0.06);
}

.shadow-md {
  box-shadow: 0 4px 6px rgba(0,0,0,0.1),
              0 2px 4px rgba(0,0,0,0.06);
}

.shadow-lg {
  box-shadow: 0 10px 15px rgba(0,0,0,0.1),
              0 4px 6px rgba(0,0,0,0.05);
}

.shadow-soft {
  box-shadow:
    0 1px 2px rgba(0,0,0,0.03),
    0 8px 16px rgba(0,0,0,0.06);
}