/**
 * Utilities - BookConnect
 * Classes utilitaires pour des modifications rapides et des composants réutilisables
 */

/* ===== COULEURS DE FOND ===== */
.bg-primary { background-color: var(--color-primary); }
.bg-secondary { background-color: var(--color-secondary); }
.bg-accent { background-color: var(--color-accent); }
.bg-success { background-color: var(--color-success); }
.bg-warning { background-color: var(--color-warning); }
.bg-info { background-color: var(--color-info); }
.bg-light { background-color: var(--color-bg-secondary); }
.bg-dark { background-color: var(--color-bg-dark); }
.bg-white { background-color: var(--color-bg-primary); }
.bg-transparent { background-color: transparent; }

/* ===== COULEURS DE FOND PAR RÔLE ===== */
.bg-role-auteur { background-color: var(--color-role-auteur); }
.bg-role-editeur { background-color: var(--color-role-editeur); }
.bg-role-diffuseur { background-color: var(--color-role-diffuseur); }
.bg-role-libraire { background-color: var(--color-role-libraire); }
.bg-role-correcteur { background-color: var(--color-role-correcteur); }
.bg-role-traducteur { background-color: var(--color-role-traducteur); }
.bg-role-publicitaire { background-color: var(--color-role-publicitaire); }
.bg-role-designer { background-color: var(--color-role-designer); }
.bg-role-agent { background-color: var(--color-role-agent); }
.bg-role-lecteur { background-color: var(--color-role-lecteur); }

/* ===== COULEURS DE TEXTE PAR RÔLE ===== */
.text-role-auteur { color: var(--color-role-auteur); }
.text-role-editeur { color: var(--color-role-editeur); }
.text-role-diffuseur { color: var(--color-role-diffuseur); }
.text-role-libraire { color: var(--color-role-libraire); }
.text-role-correcteur { color: var(--color-role-correcteur); }
.text-role-traducteur { color: var(--color-role-traducteur); }
.text-role-publicitaire { color: var(--color-role-publicitaire); }
.text-role-designer { color: var(--color-role-designer); }
.text-role-agent { color: var(--color-role-agent); }
.text-role-lecteur { color: var(--color-role-lecteur); }

/* ===== ÉTATS VISUELS ===== */
.visible { visibility: visible; }
.invisible { visibility: hidden; }
.sr-only { /* Screen reader only - déjà défini dans reset.css */ }

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

/* ===== CURSEUR ===== */
.cursor-auto { cursor: auto; }
.cursor-default { cursor: default; }
.cursor-pointer { cursor: pointer; }
.cursor-wait { cursor: wait; }
.cursor-text { cursor: text; }
.cursor-move { cursor: move; }
.cursor-help { cursor: help; }
.cursor-not-allowed { cursor: not-allowed; }

/* ===== INTERACTIONS ===== */
.pointer-events-none { pointer-events: none; }
.pointer-events-auto { pointer-events: auto; }

.select-none { user-select: none; }
.select-text { user-select: text; }
.select-all { user-select: all; }
.select-auto { user-select: auto; }

/* ===== ANIMATIONS ===== */
.animate-pulse {
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

.animate-bounce {
  animation: bounce 1s infinite;
}

@keyframes bounce {
  0%, 100% {
    transform: translateY(-25%);
    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
  }
  50% {
    transform: translateY(0);
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
  }
}

.animate-spin {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* ===== TRANSFORMATIONS ===== */
.transform-none { transform: none; }
.transform-center {
  transform: translate(-50%, -50%);
  position: absolute;
  top: 50%;
  left: 50%;
}

/* ===== OBJET FIT ===== */
.object-contain { object-fit: contain; }
.object-cover { object-fit: cover; }
.object-fill { object-fit: fill; }
.object-none { object-fit: none; }
.object-scale-down { object-fit: scale-down; }

/* ===== POSITION UTILITIES ===== */
.top-0 { top: 0; }
.top-50 { top: 50%; }
.top-100 { top: 100%; }
.bottom-0 { bottom: 0; }
.bottom-50 { bottom: 50%; }
.bottom-100 { bottom: 100%; }
.left-0 { left: 0; }
.left-50 { left: 50%; }
.left-100 { left: 100%; }
.right-0 { right: 0; }
.right-50 { right: 50%; }
.right-100 { right: 100%; }

.inset-0 { top: 0; right: 0; bottom: 0; left: 0; }

/* ===== Z-INDEX ===== */
.z-0 { z-index: 0; }
.z-10 { z-index: 10; }
.z-20 { z-index: 20; }
.z-30 { z-index: 30; }
.z-40 { z-index: 40; }
.z-50 { z-index: 50; }
.z-dropdown { z-index: var(--z-dropdown); }
.z-sticky { z-index: var(--z-sticky); }
.z-fixed { z-index: var(--z-fixed); }
.z-modal { z-index: var(--z-modal); }

/* ===== BREAKPOINTS RESPONSIVES ===== */
@media (max-width: 575.98px) {
  .d-sm-none { display: none !important; }
  .d-sm-inline { display: inline !important; }
  .d-sm-inline-block { display: inline-block !important; }
  .d-sm-block { display: block !important; }
  .d-sm-flex { display: flex !important; }
  .d-sm-inline-flex { display: inline-flex !important; }
  .d-sm-table { display: table !important; }
  .d-sm-table-cell { display: table-cell !important; }
}

@media (min-width: 576px) and (max-width: 767.98px) {
  .d-sm-none { display: none !important; }
  .d-sm-inline { display: inline !important; }
  .d-sm-inline-block { display: inline-block !important; }
  .d-sm-block { display: block !important; }
  .d-sm-flex { display: flex !important; }
  .d-sm-inline-flex { display: inline-flex !important; }
  .d-sm-table { display: table !important; }
  .d-sm-table-cell { display: table-cell !important; }
}

@media (max-width: 767.98px) {
  .d-md-none { display: none !important; }
  .d-md-inline { display: inline !important; }
  .d-md-inline-block { display: inline-block !important; }
  .d-md-block { display: block !important; }
  .d-md-flex { display: flex !important; }
  .d-md-inline-flex { display: inline-flex !important; }
  .d-md-table { display: table !important; }
  .d-md-table-cell { display: table-cell !important; }
}

@media (min-width: 768px) and (max-width: 991.98px) {
  .d-md-none { display: none !important; }
  .d-md-inline { display: inline !important; }
  .d-md-inline-block { display: inline-block !important; }
  .d-md-block { display: block !important; }
  .d-md-flex { display: flex !important; }
  .d-md-inline-flex { display: inline-flex !important; }
  .d-md-table { display: table !important; }
  .d-md-table-cell { display: table-cell !important; }
}

@media (max-width: 991.98px) {
  .d-lg-none { display: none !important; }
  .d-lg-inline { display: inline !important; }
  .d-lg-inline-block { display: inline-block !important; }
  .d-lg-block { display: block !important; }
  .d-lg-flex { display: flex !important; }
  .d-lg-inline-flex { display: inline-flex !important; }
  .d-lg-table { display: table !important; }
  .d-lg-table-cell { display: table-cell !important; }
}

@media (min-width: 992px) and (max-width: 1199.98px) {
  .d-lg-none { display: none !important; }
  .d-lg-inline { display: inline !important; }
  .d-lg-inline-block { display: inline-block !important; }
  .d-lg-block { display: block !important; }
  .d-lg-flex { display: flex !important; }
  .d-lg-inline-flex { display: inline-flex !important; }
  .d-lg-table { display: table !important; }
  .d-lg-table-cell { display: table-cell !important; }
}

@media (max-width: 1199.98px) {
  .d-xl-none { display: none !important; }
  .d-xl-inline { display: inline !important; }
  .d-xl-inline-block { display: inline-block !important; }
  .d-xl-block { display: block !important; }
  .d-xl-flex { display: flex !important; }
  .d-xl-inline-flex { display: inline-flex !important; }
  .d-xl-table { display: table !important; }
  .d-xl-table-cell { display: table-cell !important; }
}

/* ===== UTILITAIRES DE DÉbogage ===== */
.debug * {
  outline: 1px solid red;
}

.debug *:nth-child(odd) {
  outline-color: blue;
}

.debug *:nth-child(even) {
  outline-color: green;
}

/* ===== UTILITAIRES D'IMPRESSION ===== */
@media print {
  .d-print-none { display: none !important; }
  .d-print-inline { display: inline !important; }
  .d-print-inline-block { display: inline-block !important; }
  .d-print-block { display: block !important; }
  .d-print-table { display: table !important; }
  .d-print-table-row { display: table-row !important; }
  .d-print-table-cell { display: table-cell !important; }
}
