/**
 * ENNU Practice Manager - Utility Classes
 *
 * Utility-first helper classes for rapid development
 * @version 1.0.0
 */

/* === LAYOUT === */

.pm-container {
    max-width: var(--pm-max-width-2xl);
    margin: 0 auto;
    padding: var(--pm-spacing-lg);
}

.pm-container--sm {
    max-width: var(--pm-max-width-sm);
}

.pm-container--md {
    max-width: var(--pm-max-width-md);
}

.pm-container--lg {
    max-width: var(--pm-max-width-lg);
}

.pm-container--xl {
    max-width: var(--pm-max-width-xl);
}

/* === GRID SYSTEM === */

.pm-grid {
    display: grid;
    gap: var(--pm-spacing-lg);
}

.pm-grid--2 {
    grid-template-columns: repeat(2, 1fr);
}

.pm-grid--3 {
    grid-template-columns: repeat(3, 1fr);
}

.pm-grid--4 {
    grid-template-columns: repeat(4, 1fr);
}

.pm-grid--auto-fit {
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}

.pm-grid--auto-fill {
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
}

.pm-grid--gap-sm {
    gap: var(--pm-spacing-sm);
}

.pm-grid--gap-md {
    gap: var(--pm-spacing-md);
}

.pm-grid--gap-xl {
    gap: var(--pm-spacing-xl);
}

/* === FLEXBOX === */

.pm-flex {
    display: flex;
}

.pm-flex--inline {
    display: inline-flex;
}

.pm-flex--col {
    flex-direction: column;
}

.pm-flex--wrap {
    flex-wrap: wrap;
}

.pm-flex--center {
    justify-content: center;
    align-items: center;
}

.pm-flex--between {
    justify-content: space-between;
}

.pm-flex--around {
    justify-content: space-around;
}

.pm-flex--start {
    justify-content: flex-start;
}

.pm-flex--end {
    justify-content: flex-end;
}

.pm-flex--items-start {
    align-items: flex-start;
}

.pm-flex--items-center {
    align-items: center;
}

.pm-flex--items-end {
    align-items: flex-end;
}

.pm-flex--gap-xs {
    gap: var(--pm-spacing-xs);
}

.pm-flex--gap-sm {
    gap: var(--pm-spacing-sm);
}

.pm-flex--gap-md {
    gap: var(--pm-spacing-md);
}

.pm-flex--gap-lg {
    gap: var(--pm-spacing-lg);
}

.pm-flex-1 {
    flex: 1;
}

.pm-flex-auto {
    flex: 0 0 auto;
}

/* === SPACING === */

/* Margin */
.pm-m-0 { margin: 0; }
.pm-m-xs { margin: var(--pm-spacing-xs); }
.pm-m-sm { margin: var(--pm-spacing-sm); }
.pm-m-md { margin: var(--pm-spacing-md); }
.pm-m-lg { margin: var(--pm-spacing-lg); }
.pm-m-xl { margin: var(--pm-spacing-xl); }

.pm-mt-0 { margin-top: 0; }
.pm-mt-xs { margin-top: var(--pm-spacing-xs); }
.pm-mt-sm { margin-top: var(--pm-spacing-sm); }
.pm-mt-md { margin-top: var(--pm-spacing-md); }
.pm-mt-lg { margin-top: var(--pm-spacing-lg); }
.pm-mt-xl { margin-top: var(--pm-spacing-xl); }
.pm-mt-2xl { margin-top: var(--pm-spacing-2xl); }

.pm-mb-0 { margin-bottom: 0; }
.pm-mb-xs { margin-bottom: var(--pm-spacing-xs); }
.pm-mb-sm { margin-bottom: var(--pm-spacing-sm); }
.pm-mb-md { margin-bottom: var(--pm-spacing-md); }
.pm-mb-lg { margin-bottom: var(--pm-spacing-lg); }
.pm-mb-xl { margin-bottom: var(--pm-spacing-xl); }
.pm-mb-2xl { margin-bottom: var(--pm-spacing-2xl); }

.pm-ml-0 { margin-left: 0; }
.pm-ml-auto { margin-left: auto; }
.pm-ml-sm { margin-left: var(--pm-spacing-sm); }
.pm-ml-md { margin-left: var(--pm-spacing-md); }
.pm-ml-lg { margin-left: var(--pm-spacing-lg); }

.pm-mr-0 { margin-right: 0; }
.pm-mr-auto { margin-right: auto; }
.pm-mr-sm { margin-right: var(--pm-spacing-sm); }
.pm-mr-md { margin-right: var(--pm-spacing-md); }
.pm-mr-lg { margin-right: var(--pm-spacing-lg); }

/* Padding */
.pm-p-0 { padding: 0; }
.pm-p-xs { padding: var(--pm-spacing-xs); }
.pm-p-sm { padding: var(--pm-spacing-sm); }
.pm-p-md { padding: var(--pm-spacing-md); }
.pm-p-lg { padding: var(--pm-spacing-lg); }
.pm-p-xl { padding: var(--pm-spacing-xl); }

.pm-pt-0 { padding-top: 0; }
.pm-pt-xs { padding-top: var(--pm-spacing-xs); }
.pm-pt-sm { padding-top: var(--pm-spacing-sm); }
.pm-pt-md { padding-top: var(--pm-spacing-md); }
.pm-pt-lg { padding-top: var(--pm-spacing-lg); }

.pm-pb-0 { padding-bottom: 0; }
.pm-pb-xs { padding-bottom: var(--pm-spacing-xs); }
.pm-pb-sm { padding-bottom: var(--pm-spacing-sm); }
.pm-pb-md { padding-bottom: var(--pm-spacing-md); }
.pm-pb-lg { padding-bottom: var(--pm-spacing-lg); }

.pm-pl-0 { padding-left: 0; }
.pm-pl-sm { padding-left: var(--pm-spacing-sm); }
.pm-pl-md { padding-left: var(--pm-spacing-md); }
.pm-pl-lg { padding-left: var(--pm-spacing-lg); }

.pm-pr-0 { padding-right: 0; }
.pm-pr-sm { padding-right: var(--pm-spacing-sm); }
.pm-pr-md { padding-right: var(--pm-spacing-md); }
.pm-pr-lg { padding-right: var(--pm-spacing-lg); }

/* === TYPOGRAPHY === */

.pm-text-left { text-align: left; }
.pm-text-center { text-align: center; }
.pm-text-right { text-align: right; }
.pm-text-justify { text-align: justify; }

.pm-text-xs { font-size: var(--pm-font-size-xs); }
.pm-text-sm { font-size: var(--pm-font-size-sm); }
.pm-text-base { font-size: var(--pm-font-size-base); }
.pm-text-md { font-size: var(--pm-font-size-md); }
.pm-text-lg { font-size: var(--pm-font-size-lg); }
.pm-text-xl { font-size: var(--pm-font-size-xl); }
.pm-text-2xl { font-size: var(--pm-font-size-2xl); }

.pm-text-normal { font-weight: var(--pm-font-weight-normal); }
.pm-text-medium { font-weight: var(--pm-font-weight-medium); }
.pm-text-semibold { font-weight: var(--pm-font-weight-semibold); }
.pm-text-bold { font-weight: var(--pm-font-weight-bold); }

.pm-text-uppercase { text-transform: uppercase; }
.pm-text-lowercase { text-transform: lowercase; }
.pm-text-capitalize { text-transform: capitalize; }

.pm-text-primary { color: var(--pm-text-primary); }
.pm-text-secondary { color: var(--pm-text-secondary); }
.pm-text-muted { color: var(--pm-text-muted); }
.pm-text-inverse { color: var(--pm-text-inverse); }

.pm-text-success { color: var(--pm-success); }
.pm-text-warning { color: var(--pm-warning); }
.pm-text-error { color: var(--pm-error); }
.pm-text-info { color: var(--pm-info); }

.pm-text-truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pm-line-clamp-2 {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.pm-line-clamp-3 {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* === BACKGROUNDS === */

.pm-bg-white { background-color: var(--pm-white); }
.pm-bg-gray-50 { background-color: var(--pm-gray-50); }
.pm-bg-gray-100 { background-color: var(--pm-gray-100); }
.pm-bg-primary { background-color: var(--pm-primary); }
.pm-bg-success { background-color: var(--pm-success-bg); }
.pm-bg-warning { background-color: var(--pm-warning-bg); }
.pm-bg-error { background-color: var(--pm-error-bg); }

/* === BORDERS === */

.pm-border { border: var(--pm-border-width) solid var(--pm-border-color); }
.pm-border-t { border-top: var(--pm-border-width) solid var(--pm-border-color); }
.pm-border-b { border-bottom: var(--pm-border-width) solid var(--pm-border-color); }
.pm-border-l { border-left: var(--pm-border-width) solid var(--pm-border-color); }
.pm-border-r { border-right: var(--pm-border-width) solid var(--pm-border-color); }

.pm-border-thick { border-width: var(--pm-border-width-thick); }

.pm-border-success { border-color: var(--pm-success); }
.pm-border-warning { border-color: var(--pm-warning); }
.pm-border-error { border-color: var(--pm-error); }

.pm-rounded { border-radius: var(--pm-border-radius-base); }
.pm-rounded-sm { border-radius: var(--pm-border-radius-sm); }
.pm-rounded-lg { border-radius: var(--pm-border-radius-lg); }
.pm-rounded-full { border-radius: var(--pm-border-radius-full); }

/* === SHADOWS === */

.pm-shadow { box-shadow: var(--pm-shadow-base); }
.pm-shadow-sm { box-shadow: var(--pm-shadow-sm); }
.pm-shadow-md { box-shadow: var(--pm-shadow-md); }
.pm-shadow-lg { box-shadow: var(--pm-shadow-lg); }
.pm-shadow-none { box-shadow: none; }

/* === DISPLAY === */

.pm-block { display: block; }
.pm-inline { display: inline; }
.pm-inline-block { display: inline-block; }
.pm-hidden { display: none; }

/* === POSITION === */

.pm-relative { position: relative; }
.pm-absolute { position: absolute; }
.pm-fixed { position: fixed; }
.pm-sticky { position: sticky; }

/* === OVERFLOW === */

.pm-overflow-auto { overflow: auto; }
.pm-overflow-hidden { overflow: hidden; }
.pm-overflow-scroll { overflow: scroll; }
.pm-overflow-x-auto { overflow-x: auto; }
.pm-overflow-y-auto { overflow-y: auto; }

/* === WIDTH & HEIGHT === */

.pm-w-full { width: 100%; }
.pm-w-auto { width: auto; }
.pm-w-1\/2 { width: 50%; }
.pm-w-1\/3 { width: 33.333%; }
.pm-w-2\/3 { width: 66.666%; }
.pm-w-1\/4 { width: 25%; }
.pm-w-3\/4 { width: 75%; }

.pm-h-full { height: 100%; }
.pm-h-auto { height: auto; }

.pm-max-w-full { max-width: 100%; }

/* === CURSOR === */

.pm-cursor-pointer { cursor: pointer; }
.pm-cursor-not-allowed { cursor: not-allowed; }
.pm-cursor-default { cursor: default; }

/* === OPACITY === */

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

/* === TRANSITIONS === */

.pm-transition {
    transition: all var(--pm-transition-base);
}

.pm-transition-fast {
    transition: all var(--pm-transition-fast);
}

.pm-transition-slow {
    transition: all var(--pm-transition-slow);
}

/* === MISC === */

.pm-clearfix::after {
    content: "";
    display: table;
    clear: both;
}

.pm-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
}

/* === RESPONSIVE UTILITIES === */

@media (max-width: 768px) {
    .pm-hidden-mobile {
        display: none !important;
    }

    .pm-grid--2,
    .pm-grid--3,
    .pm-grid--4 {
        grid-template-columns: 1fr;
    }

    .pm-flex--col-mobile {
        flex-direction: column;
    }
}

@media (min-width: 769px) {
    .pm-hidden-desktop {
        display: none !important;
    }
}

@media (max-width: 992px) {
    .pm-hidden-tablet {
        display: none !important;
    }
}
