/**
 * Hoqmail — Utilities
 *
 * A deliberately tiny set. This is not a utility framework: anything that
 * describes a component belongs in components.css. Only cross-cutting,
 * single-purpose helpers live here.
 */

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

.u-truncate {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Flex children need an explicit min-width before they will truncate. */
.u-min-0 {
    min-width: 0;
}

.u-row {
    display: flex;
    align-items: center;
}

.u-gap-2 { gap: var(--space-2); }
.u-grow { flex: 1 1 auto; }

.u-muted { color: var(--color-text-muted); }
.u-caption { font-size: var(--fs-caption); }

.u-mt-3 { margin-top: var(--space-3); }
.u-mt-4 { margin-top: var(--space-4); }
.u-mb-4 { margin-bottom: var(--space-4); }

/*
 * Responsive visibility.
 *
 * `revert` restores whatever display the element would have had, which is the
 * only correct way to un-hide: a fixed value such as `initial` resolves to
 * `inline` and would silently break every block or flex container it touched.
 */
.u-hide-below-md { display: none; }
.u-hide-from-md { display: revert; }

@media (min-width: 768px) {
    .u-hide-below-md { display: revert; }
    .u-hide-from-md { display: none; }
}
