﻿/*
 * ============================================================================
 * Copyright (c) 2025 ATH SOLUTIONS (PTY) LTD. All rights reserved.
 * KwaZulu-Natal, Republic of South Africa.
 * ============================================================================
 *
 * @BEGIN Developer Log Header Block
 * @FILENAME: utilities.css
 * @TITLE: Wexford Lodge - Member Portal
 * @DESCRIPTION: Single-purpose utility classes for spacing, display, text alignment, visibility, overflow, and brand-specific colour utilities. No utility may contain more than one declaration. All values from tokens.css.
 * @AUTHOR: Ary van der Pijl
 * @COMPANY: ATH SOLUTIONS (PTY) LTD
 * @WEBSITE: https://www.ath.solutions/
 * @EMAIL: info@ath.solutions
 * @COPYRIGHT: All Rights Reserved
 * @LICENSE: ATH SOLUTIONS - PROPRIETARY SOFTWARE LICENCE AGREEMENT (https://www.ath.solutions/documents/ath_solutions_software_licence_agreement.pdf)
 *
 * BEGIN CHANGELOG
 * @IMPORTANT NOTICE: Developers working on these files MUST update and maintain the Developers Change Log, failure to do is not an option:
 * !==================================================================================================================================================================
 * VERSION 1.0.0.2
 * - File Modified | Ary van der Pijl | 2026/06/19 | STANDARDS-COMPLIANCE | Applied ATH Solutions 2026 coding standards. |
 * VERSION 1.0.0.1
 * + File Created, Ary van der Pijl, 2026/06/13
 * ==================================================================================================================================================================!
 * END CHANGELOG
 */

/* ─────────────────────────────────────────────────────────────────────────
   DISPLAY
───────────────────────────────────────────────────────────────────────── */

.u-block {
   display: block;
}

.u-inline {
   display: inline;
}

.u-inline-block {
   display: inline-block;
}

.u-flex {
   display: flex;
}

.u-inline-flex {
   display: inline-flex;
}

.u-grid {
   display: grid;
}

.u-hidden {
   display: none;
}

/* ─────────────────────────────────────────────────────────────────────────
   FLEX UTILITIES
───────────────────────────────────────────────────────────────────────── */

.u-flex-center {
   align-items: center;
   justify-content: center;
}

.u-flex-between {
   justify-content: space-between;
}

.u-flex-end {
   justify-content: flex-end;
}

.u-flex-col {
   flex-direction: column;
}

.u-flex-wrap {
   flex-wrap: wrap;
}

.u-flex-1 {
   flex: 1;
}

.u-flex-shrink-0 {
   flex-shrink: 0;
}

.u-items-center {
   align-items: center;
}

.u-items-start {
   align-items: flex-start;
}

.u-items-end {
   align-items: flex-end;
}

/* ─────────────────────────────────────────────────────────────────────────
   GAP
───────────────────────────────────────────────────────────────────────── */

.u-gap-1 {
   gap: var(--space-1);
}

.u-gap-2 {
   gap: var(--space-2);
}

.u-gap-3 {
   gap: var(--space-3);
}

.u-gap-4 {
   gap: var(--space-4);
}

.u-gap-6 {
   gap: var(--space-6);
}

.u-gap-8 {
   gap: var(--space-8);
}

/* ─────────────────────────────────────────────────────────────────────────
   MARGIN
───────────────────────────────────────────────────────────────────────── */

.u-m-0 {
   margin: 0;
}

.u-mt-0 {
   margin-top: 0;
}

.u-mt-2 {
   margin-top: var(--space-2);
}

.u-mt-4 {
   margin-top: var(--space-4);
}

.u-mt-6 {
   margin-top: var(--space-6);
}

.u-mt-8 {
   margin-top: var(--space-8);
}

.u-mb-0 {
   margin-bottom: 0;
}

.u-mb-2 {
   margin-bottom: var(--space-2);
}

.u-mb-4 {
   margin-bottom: var(--space-4);
}

.u-mb-6 {
   margin-bottom: var(--space-6);
}

.u-mb-8 {
   margin-bottom: var(--space-8);
}

.u-ms-auto {
   margin-left: auto;
}

.u-me-auto {
   margin-right: auto;
}

.u-mx-auto {
   margin-left: auto;
   margin-right: auto;
}

/* ─────────────────────────────────────────────────────────────────────────
   PADDING
───────────────────────────────────────────────────────────────────────── */

.u-p-0 {
   padding: 0;
}

.u-p-4 {
   padding: var(--space-4);
}

.u-p-6 {
   padding: var(--space-6);
}

.u-px-4 {
   padding-left: var(--space-4);
   padding-right: var(--space-4);
}

.u-px-6 {
   padding-left: var(--space-6);
   padding-right: var(--space-6);
}

.u-py-2 {
   padding-top: var(--space-2);
   padding-bottom: var(--space-2);
}

.u-py-4 {
   padding-top: var(--space-4);
   padding-bottom: var(--space-4);
}

/* ─────────────────────────────────────────────────────────────────────────
   WIDTH / HEIGHT
───────────────────────────────────────────────────────────────────────── */

.u-w-full {
   width: 100%;
}

.u-h-full {
   height: 100%;
}

.u-min-w-0 {
   min-width: 0;
}

/* ─────────────────────────────────────────────────────────────────────────
   TEXT ALIGNMENT
───────────────────────────────────────────────────────────────────────── */

.u-text-left {
   text-align: left;
}

.u-text-center {
   text-align: center;
}

.u-text-right {
   text-align: right;
}

/* ─────────────────────────────────────────────────────────────────────────
   TEXT COLOUR
───────────────────────────────────────────────────────────────────────── */

.u-text-primary {
   color: var(--color-text-primary);
}

.u-text-secondary {
   color: var(--color-text-secondary);
}

.u-text-muted {
   color: var(--color-text-muted);
}

.u-text-accent {
   color: var(--color-accent);
}

.u-text-navy {
   color: var(--color-primary);
}

.u-text-success {
   color: var(--color-success);
}

.u-text-warning {
   color: var(--color-warning);
}

.u-text-danger {
   color: var(--color-danger);
}

.u-text-white {
   color: #fff;
}

.u-text-inverse {
   color: var(--color-text-inverse);
}

/* ─────────────────────────────────────────────────────────────────────────
   FONT
───────────────────────────────────────────────────────────────────────── */

.u-font-display {
   font-family: var(--font-display);
}

.u-font-body {
   font-family: var(--font-body);
}

.u-font-mono {
   font-family: var(--font-mono);
}

.u-fw-normal {
   font-weight: var(--font-weight-normal);
}

.u-fw-medium {
   font-weight: var(--font-weight-medium);
}

.u-fw-semibold {
   font-weight: var(--font-weight-semibold);
}

.u-fw-bold {
   font-weight: var(--font-weight-bold);
}

.u-text-xs {
   font-size: var(--text-xs);
}

.u-text-sm {
   font-size: var(--text-sm);
}

.u-text-base {
   font-size: var(--text-base);
}

.u-text-lg {
   font-size: var(--text-lg);
}

.u-text-xl {
   font-size: var(--text-xl);
}

.u-uppercase {
   text-transform: uppercase;
}

.u-capitalize {
   text-transform: capitalize;
}

.u-truncate {
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
}

.u-no-wrap {
   white-space: nowrap;
}

/* ─────────────────────────────────────────────────────────────────────────
   BACKGROUND
───────────────────────────────────────────────────────────────────────── */

.u-bg-surface {
   background: var(--color-surface);
}

.u-bg-surface-2 {
   background: var(--color-surface-2);
}

.u-bg-primary {
   background: var(--color-primary);
}

.u-bg-accent {
   background: var(--color-accent);
}

.u-bg-navy-50 {
   background: var(--color-navy-50);
}

.u-bg-gold-50 {
   background: var(--color-gold-50);
}

/* ─────────────────────────────────────────────────────────────────────────
   BORDER
───────────────────────────────────────────────────────────────────────── */

.u-border {
   border: 1px solid var(--color-border);
}

.u-border-top {
   border-top: 1px solid var(--color-border);
}

.u-border-bottom {
   border-bottom: 1px solid var(--color-border);
}

.u-border-none {
   border: none;
}

.u-rounded {
   border-radius: var(--radius-md);
}

.u-rounded-lg {
   border-radius: var(--radius-lg);
}

.u-rounded-full {
   border-radius: var(--radius-full);
}

/* ─────────────────────────────────────────────────────────────────────────
   OVERFLOW
───────────────────────────────────────────────────────────────────────── */

.u-overflow-hidden {
   overflow: hidden;
}

.u-overflow-auto {
   overflow: auto;
}

.u-overflow-x-auto {
   overflow-x: auto;
}

.u-scroll-lock {
   overflow: hidden;
}

/* ─────────────────────────────────────────────────────────────────────────
   VISIBILITY / ACCESSIBILITY
───────────────────────────────────────────────────────────────────────── */

.u-invisible {
   visibility: hidden;
}

.u-visible {
   visibility: visible;
}

/* ─────────────────────────────────────────────────────────────────────────
   POINTER
───────────────────────────────────────────────────────────────────────── */

.u-cursor-pointer {
   cursor: pointer;
}

.u-cursor-default {
   cursor: default;
}

.u-no-pointer {
   pointer-events: none;
}

/* ─────────────────────────────────────────────────────────────────────────
   OPACITY
───────────────────────────────────────────────────────────────────────── */

.u-opacity-0 {
   opacity: 0;
}

.u-opacity-50 {
   opacity: 0.5;
}

.u-opacity-75 {
   opacity: 0.75;
}

.u-opacity-100 {
   opacity: 1;
}

/* ─────────────────────────────────────────────────────────────────────────
   SHADOW
───────────────────────────────────────────────────────────────────────── */

.u-shadow-sm {
   box-shadow: var(--shadow-sm);
}

.u-shadow-md {
   box-shadow: var(--shadow-md);
}

.u-shadow-lg {
   box-shadow: var(--shadow-lg);
}

/* ─────────────────────────────────────────────────────────────────────────
   DIVIDER
───────────────────────────────────────────────────────────────────────── */

.u-divider {
   height: 1px;
   background: var(--color-border);
   margin: var(--space-4) 0;
}

/* ─────────────────────────────────────────────────────────────────────────
   ROLE VISIBILITY (used with RBAC data attributes)
───────────────────────────────────────────────────────────────────────── */

.u-admin-only {
   display: none;
}

[data-user-role="super_admin"] .u-admin-only,
[data-user-role="worshipful_master"] .u-admin-only {
   display: revert;
}