/* ==========================
   DISPLAY UTILITIES
========================== */

.hide-mobile {
    display: table-cell;
}

.show-mobile {
    display: none;
}

@media screen and (max-width: 768px) {
    .hide-mobile {
        display: none !important;
    }

    .show-mobile {
        display: block;
    }
}

.hide-desktop {
    display: none;
}

@media screen and (max-width: 768px) {
    .hide-desktop {
        display: block;
    }
}

/* ==========================
   TEXT ALIGNMENT
========================== */

.text-left {
    text-align: left !important;
}

.text-center {
    text-align: center !important;
}

.text-right {
    text-align: right !important;
}

.text-justify {
    text-align: justify !important;
}

/* ==========================
   TEXT TRANSFORM
========================== */

.text-uppercase {
    text-transform: uppercase !important;
}

.text-lowercase {
    text-transform: lowercase !important;
}

.text-capitalize {
    text-transform: capitalize !important;
}

/* ==========================
   FONT WEIGHT
========================== */

.fw-light {
    font-weight: 300 !important;
}

.fw-normal {
    font-weight: 400 !important;
}

.fw-medium {
    font-weight: 500 !important;
}

.fw-semibold {
    font-weight: 600 !important;
}

.fw-bold {
    font-weight: 700 !important;
}

/* ==========================
   MARGIN UTILITIES
========================== */

.m-0 { margin: 0 !important; }
.mt-0 { margin-top: 0 !important; }
.mb-0 { margin-bottom: 0 !important; }
.ml-0 { margin-left: 0 !important; }
.mr-0 { margin-right: 0 !important; }

.m-1 { margin: 8px !important; }
.mt-1 { margin-top: 8px !important; }
.mb-1 { margin-bottom: 8px !important; }
.ml-1 { margin-left: 8px !important; }
.mr-1 { margin-right: 8px !important; }

.m-2 { margin: 16px !important; }
.mt-2 { margin-top: 16px !important; }
.mb-2 { margin-bottom: 16px !important; }
.ml-2 { margin-left: 16px !important; }
.mr-2 { margin-right: 16px !important; }

.m-3 { margin: 24px !important; }
.mt-3 { margin-top: 24px !important; }
.mb-3 { margin-bottom: 24px !important; }
.ml-3 { margin-left: 24px !important; }
.mr-3 { margin-right: 24px !important; }

.m-4 { margin: 32px !important; }
.mt-4 { margin-top: 32px !important; }
.mb-4 { margin-bottom: 32px !important; }
.ml-4 { margin-left: 32px !important; }
.mr-4 { margin-right: 32px !important; }

.mx-auto { 
    margin-left: auto !important; 
    margin-right: auto !important; 
}

/* ==========================
   PADDING UTILITIES
========================== */

.p-0 { padding: 0 !important; }
.pt-0 { padding-top: 0 !important; }
.pb-0 { padding-bottom: 0 !important; }
.pl-0 { padding-left: 0 !important; }
.pr-0 { padding-right: 0 !important; }

.p-1 { padding: 8px !important; }
.pt-1 { padding-top: 8px !important; }
.pb-1 { padding-bottom: 8px !important; }
.pl-1 { padding-left: 8px !important; }
.pr-1 { padding-right: 8px !important; }

.p-2 { padding: 16px !important; }
.pt-2 { padding-top: 16px !important; }
.pb-2 { padding-bottom: 16px !important; }
.pl-2 { padding-left: 16px !important; }
.pr-2 { padding-right: 16px !important; }

.p-3 { padding: 24px !important; }
.pt-3 { padding-top: 24px !important; }
.pb-3 { padding-bottom: 24px !important; }
.pl-3 { padding-left: 24px !important; }
.pr-3 { padding-right: 24px !important; }

.p-4 { padding: 32px !important; }
.pt-4 { padding-top: 32px !important; }
.pb-4 { padding-bottom: 32px !important; }
.pl-4 { padding-left: 32px !important; }
.pr-4 { padding-right: 32px !important; }

/* ==========================
   FLEX UTILITIES
========================== */

.d-flex {
    display: flex !important;
}

.d-inline-flex {
    display: inline-flex !important;
}

.d-block {
    display: block !important;
}

.d-inline-block {
    display: inline-block !important;
}

.d-none {
    display: none !important;
}

.flex-row {
    flex-direction: row !important;
}

.flex-column {
    flex-direction: column !important;
}

.flex-wrap {
    flex-wrap: wrap !important;
}

.flex-nowrap {
    flex-wrap: nowrap !important;
}

.justify-start {
    justify-content: flex-start !important;
}

.justify-center {
    justify-content: center !important;
}

.justify-end {
    justify-content: flex-end !important;
}

.justify-between {
    justify-content: space-between !important;
}

.justify-around {
    justify-content: space-around !important;
}

.align-start {
    align-items: flex-start !important;
}

.align-center {
    align-items: center !important;
}

.align-end {
    align-items: flex-end !important;
}

.align-stretch {
    align-items: stretch !important;
}

.gap-1 { gap: 8px !important; }
.gap-2 { gap: 16px !important; }
.gap-3 { gap: 24px !important; }
.gap-4 { gap: 32px !important; }

/* ==========================
   WIDTH UTILITIES
========================== */

.w-25 { width: 25% !important; }
.w-50 { width: 50% !important; }
.w-75 { width: 75% !important; }
.w-100 { width: 100% !important; }
.w-auto { width: auto !important; }

.mw-100 { max-width: 100% !important; }

/* ==========================
   HEIGHT UTILITIES
========================== */

.h-25 { height: 25% !important; }
.h-50 { height: 50% !important; }
.h-75 { height: 75% !important; }
.h-100 { height: 100% !important; }
.h-auto { height: auto !important; }

.mh-100 { max-height: 100% !important; }

/* ==========================
   BORDER UTILITIES
========================== */

.border {
    border: 1px solid #e2e8f0 !important;
}

.border-top {
    border-top: 1px solid #e2e8f0 !important;
}

.border-bottom {
    border-bottom: 1px solid #e2e8f0 !important;
}

.border-left {
    border-left: 1px solid #e2e8f0 !important;
}

.border-right {
    border-right: 1px solid #e2e8f0 !important;
}

.border-0 {
    border: none !important;
}

.rounded {
    border-radius: var(--radius-md, 10px) !important;
}

.rounded-sm {
    border-radius: var(--radius-sm, 6px) !important;
}

.rounded-lg {
    border-radius: var(--radius-lg, 16px) !important;
}

.rounded-full {
    border-radius: 9999px !important;
}

/* ==========================
   SHADOW UTILITIES
========================== */

.shadow-none {
    box-shadow: none !important;
}

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

.shadow {
    box-shadow: var(--shadow-md, 0 4px 6px rgba(0, 0, 0, 0.1)) !important;
}

.shadow-lg {
    box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.1)) !important;
}

/* ==========================
   OVERFLOW UTILITIES
========================== */

.overflow-auto {
    overflow: auto !important;
}

.overflow-hidden {
    overflow: hidden !important;
}

.overflow-visible {
    overflow: visible !important;
}

.overflow-scroll {
    overflow: scroll !important;
}

/* ==========================
   POSITION UTILITIES
========================== */

.position-relative {
    position: relative !important;
}

.position-absolute {
    position: absolute !important;
}

.position-fixed {
    position: fixed !important;
}

.position-sticky {
    position: sticky !important;
}

/* ==========================
   COLOR UTILITIES
========================== */

.text-primary {
    color: var(--primary, #6366f1) !important;
}

.text-secondary {
    color: var(--text-secondary, #64748b) !important;
}

.text-success {
    color: #10b981 !important;
}

.text-danger {
    color: #ef4444 !important;
}

.text-warning {
    color: #f59e0b !important;
}

.text-info {
    color: #3b82f6 !important;
}

.text-muted {
    color: #94a3b8 !important;
}

/* ==========================
   CURSOR UTILITIES
========================== */

.cursor-pointer {
    cursor: pointer !important;
}

.cursor-not-allowed {
    cursor: not-allowed !important;
}

.cursor-default {
    cursor: default !important;
}

/* ==========================
   USER SELECT
========================== */

.select-none {
    user-select: none !important;
}

.select-all {
    user-select: all !important;
}

.select-auto {
    user-select: auto !important;
}

/* ==========================
   VISIBILITY
========================== */

.visible {
    visibility: visible !important;
}

.invisible {
    visibility: hidden !important;
}

.opacity-0 { opacity: 0 !important; }
.opacity-25 { opacity: 0.25 !important; }
.opacity-50 { opacity: 0.5 !important; }
.opacity-75 { opacity: 0.75 !important; }
.opacity-100 { opacity: 1 !important; }