/* Utilidades propias pequeñas y reutilizables. */
.bg-soft-primary { color: var(--bs-primary-text-emphasis) !important; background-color: var(--bs-primary-bg-subtle) !important; }
.bg-soft-secondary { color: var(--bs-secondary-text-emphasis) !important; background-color: var(--bs-secondary-bg-subtle) !important; }
.bg-soft-success { color: var(--bs-success-text-emphasis) !important; background-color: var(--bs-success-bg-subtle) !important; }
.bg-soft-danger { color: var(--bs-danger-text-emphasis) !important; background-color: var(--bs-danger-bg-subtle) !important; }
.bg-soft-warning { color: var(--bs-warning-text-emphasis) !important; background-color: var(--bs-warning-bg-subtle) !important; }
.bg-soft-info { color: var(--bs-info-text-emphasis) !important; background-color: var(--bs-info-bg-subtle) !important; }
.border-dashed { border-style: dashed !important; }

/* Status labels can wrap without separating the icon from the text. */
.status-badge { display: inline-flex; align-items: center; gap: .35em; max-width: 100%; white-space: normal; line-height: 1.35; text-align: start; vertical-align: middle; }
.status-badge > i { flex: 0 0 auto; font-size: 1.15em; }
.status-badge > span { overflow-wrap: normal; word-break: normal; }

/* Monetary meaning is always expressed from the business perspective. */
.financial-positive { color: var(--bs-success-text-emphasis) !important; }
.financial-negative { color: var(--bs-danger-text-emphasis) !important; }
.financial-neutral { color: var(--bs-secondary-text-emphasis) !important; }
/* Tickets remain legible on their fixed white paper surface in either theme. */
.pos-ticket .financial-positive { color: #146c43 !important; }
.pos-ticket .financial-negative { color: #b02a37 !important; }
.pos-ticket .financial-neutral { color: #565e64 !important; }
