/* =============================================================
   FEUILLE DE STYLES D'IMPRESSION — chargée uniquement à l'impression
   (voir templates/base.html : <link rel="stylesheet" media="print" ...>),
   jamais à l'écran. Toutes les règles ci-dessous s'appliquent donc déjà
   "à l'impression" : pas besoin de les envelopper dans @media print.

   OBJECTIF : un seul endroit pour ajuster l'impression de toute
   l'application, avec un socle commun qui s'applique PARTOUT (taille de
   page, .app-card, .table, barres de présence...), complété par les
   ajustements propres au planning journalier / hebdomadaire (classe
   .planning-journalier, réutilisée par planning_journalier.html,
   mon_planning_type.html, planning_type_imprimable.html et les vues "Ma
   semaine"/"Mon mois" de l'espace employé — ces pages s'impriment donc
   TOUTES de la même façon).

   Les quelques pages au format différent (calendrier mensuel en paysage,
   récap comptable, modèles de planning...) gardent leur propre @page
   (orientation/marge) dans un petit <style> local à leur template : seule
   l'orientation/la taille de papier diffère, tout le reste (socle commun
   ci-dessous) s'applique déjà à elles.
   ============================================================= */

@page {
    size: A4 portrait;
    margin: 8mm;
}

html,
body {
    width: auto !important;
    min-width: auto !important;
}

/* diminue la taille de police pour que le planning tienne sur une page A4 */
html, body {
    background: white !important;
    color: #000 !important;
    font-size: 10px !important;
}

/* #app-vh-fix (style inline, base.html) et .page-root (chaque page) ont
   min-height: 100vh à l'écran, pour occuper toute la hauteur visible même
   quand le contenu est court. À l'impression, 100vh ne correspond pas à la
   hauteur imprimable réelle (elle ignore les marges de @page) : la boîte
   déborde donc toujours un peu de la première page, même de quelques
   millimètres — assez pour faire basculer TOUT ce qui suit (le pied de
   page commun, voir base.html) sur une page 2 par ailleurs vide, quelle
   que soit la longueur réelle du contenu. On neutralise ici ce
   remplissage, qui n'a de sens qu'à l'écran. */
.page-root,
#app-vh-fix {
    min-height: auto !important;
}

.app-navbar,
.app-footer,
.app-bottom-nav,
.header-fixe,
.btn,
.modal,
.btn-close,
.planning-journalier .btn,
.planning-journalier .btn-group,
.no-print {
    display: none !important;
}

.print-only {
    display: block !important;
}

/* overflow:hidden sert aux coins arrondis à l'écran, mais coupe le
   tableau à l'impression s'il dépasse la largeur du conteneur. */
.planning-semaine-wrapper {
    overflow: visible !important;
}

/* Carte générique (.app-card, utilisée par la quasi-totalité des pages) :
   - jamais coupée par un saut de page au milieu de son contenu ;
   - une vraie bordure CSS remplace le box-shadow d'écran, qui ne s'imprime
     pas de façon fiable (dépend du réglage "Graphiques d'arrière-plan" du
     pilote d'impression) — sans ça, une .app-card s'imprime sans aucun
     cadre visible. C'est cette règle, appliquée à TOUTE .app-card, qui
     garantit un rendu uniforme d'une page à l'autre. */
.app-card {
    page-break-inside: avoid !important;
    break-inside: avoid !important;
    box-shadow: none !important;
    border: 1px solid var(--app-border-color) !important;
}

.container-fluid,
.card,
table {
    width: 100% !important;
}
/* Fond de page */
.bg-light {
    --bs-bg-opacity: 0;
    background-color: white !important;
}

.planning-journalier {
    text-align: center !important;
}
/*Planning-journalier: carte d'un jour */
.planning-journalier .card {
    display: inline-block !important;
    float: none !important;
    width: auto !important;
    max-width: 100% !important;
    margin: auto !important;
    text-align: left !important;
    border: none;
    padding: 0.2rem 1rem !important;

}

.planning-journalier  .table-responsive-sm,
.planning-journalier .table {
    display: inline-table !important;
    margin-left: auto !important;
    margin-right: auto !important;
    border-style: solid;
}
.table-responsive  {
    border-style:none;
    border-color: rgb(48, 47, 47);
    border-width: 1px;
    /* Bootstrap donne à .table-responsive un overflow-x:auto : à
       l'impression, Chrome ne rend que la portion visible au moment du
       scroll (le reste est simplement coupé) au lieu de paginer/étaler
       le tableau. On repasse en visible pour que le tableau reprenne sa
       largeur naturelle et que @page (landscape) puisse le contenir. */
    overflow: visible !important;
}

.card {
    box-shadow: none !important;
    margin-bottom: 0.2rem !important;
}

.card-header {
    padding: 0.12rem 0.35rem !important;
    font-size: 1.1rem !important;
}

.table {
    border-collapse: collapse !important;
    font-size: 1.05rem !important;   /* ≈ 10.5px car html=10px en print */
    line-height: 1.1 !important;
}
/* tableau des presence*/

/* En-tête tableau */
table.app-table thead th {
    border-bottom: solid 1px var(--app-border-color) !important;
    font-weight: 500;
    background: rgb(255, 255, 255);
    color: #000000;
    vertical-align: middle;
    padding: 0.2rem 0.9rem;
}
.table th,
.table td {
    border: 1px solid var(--app-border-color) !important;
    padding: 0.12rem 0.2rem !important;
}

.case-horaire,
.case-repos {
    cursor: default !important;
}

.text-white-50 {
    color: #000 !important;
}

.table-dark {
    background-color: #000 !important;
    color: #fff !important;
}

.presence-bar-label {
    display: none !important;
}

.presence-bar-track {
    height: 1rem !important;
    margin: 0.1rem 0 !important;
    background-color: #e9ecef !important;
}

.presence-bar-segment {
    height: 0.7rem !important;
    background-image: none !important;
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
}

.presence-bar-segment.presence-bar-pharmacien {
    background-color: var(--app-color-pharmacien) !important;
}

.presence-bar-segment.presence-bar-preparateur {
    background-color: var(--app-color-preparateur) !important;
}

.presence-bar-segment.presence-bar-equipe {
    background-color: var(--app-color-equipe) !important;
}

.planning-journalier .jour-card {
    page-break-inside: avoid !important;
    break-inside: avoid !important;
    border: 1px solid var(--app-border-color);
}

/* Heures sup (plus) / heures en moins (moins) : ce liseré n'est
   accompagné d'aucun texte, contrairement au reste du planning
   (poste, motif d'absence...) qui porte toujours un libellé. Comme
   le bleu et le gris foncé utilisés ont un niveau de gris proche,
   on distingue les deux par le tracé (plein / pointillé) plutôt
   que par la seule couleur, pour rester lisible en N&B. */
.shift-has-plus,
.planning-journalier .shift-track-bg.shift-has-plus {
    border-left-width: 4px !important;
    border-left-style: solid !important;
}
.shift-has-moins,
.planning-journalier .shift-track-bg.shift-has-moins {
    border-right-width: 4px !important;
    border-right-style: dashed !important;
}

/* Affichage condensé à l'impression : Horaire / Poste / Durée sur une
   seule ligne (au lieu de 2), lignes plus basses, pour qu'une journée
   avec ~6 employés ou plus tienne sur une seule page A4. */
.planning-journalier .presence-cell {
    min-height: 1.3rem !important;
}

.planning-journalier .shift-block {
    min-height: 1.3rem !important;
    padding: 0.05rem 0.3rem !important;
    border-radius: 0px !important; /* on enleve les bords arrondis sur les barres de presence pour l'impression */
    background: none !important;
    border: none !important;
}

.planning-journalier .shift-track-bg {
    top: 0.1rem !important;
    bottom: 0.1rem !important;
    /* Le navigateur n'imprime pas les couleurs de fond par défaut
       ("Graphiques d'arrière-plan" désactivé dans la boîte de dialogue
       d'impression) : sans ces deux propriétés, la barre de présence
       apparaît vide (juste son contour), quel que soit le réglage —
       elles forcent l'impression de la couleur définie en CSS. */
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
    border-radius: 0px !important; /* on enleve les bords arrondis sur les barres de presence pour l'impression */
}

.planning-journalier .shift-track-content {
    min-height: 1.3rem !important;
    padding: 0.05rem 0.3rem !important;
    flex-direction: row !important;
    justify-content: center !important;
    align-items: center !important;
    gap: 0.35rem !important;
}

/* .shift-line2 (Poste + Durée) perd sa propre boîte flex : ses enfants
   rejoignent directement la ligne unique de .shift-track-content
   ci-dessus, au lieu de former une 2e ligne en dessous de l'horaire. */
.planning-journalier .shift-line2 {
    display: contents !important;
}

.planning-journalier .shift-poste {
    overflow: visible !important;
    white-space: nowrap !important;
}

/* Ligne de séparation légère entre les employés d'un même jour,
   uniquement à l'impression. On doit surcharger les DEUX côtés de
   la bordure partagée (border-top de la ligne du dessous ET
   border-bottom de la ligne du dessus), sinon le modèle de
   bordures fusionnées de Bootstrap (border-collapse) fait gagner
   la bordure noire générique dès que les largeurs sont égales. */
.planning-journalier .jour-card table tbody tr + tr td {
    border-top: 1px solid var(--app-divider-color) !important;
}
.planning-journalier .jour-card table tbody tr:not(:last-child) td {
    border-bottom: 0px solid  #ced4da !important; /* mis a zero pour ne pas le voir*/
}

.planning-journalier .card:not(.jour-card) {
    page-break-inside: auto !important;
    break-inside: auto !important;
}

.planning-journalier.hide-sunday .jour-dimanche {
    display: none !important;
}

#planning-semaine-table tbody tr,
#planning-semaine-table tbody tr td {
    page-break-inside: avoid !important;
    break-inside: avoid !important;
}

#planning-semaine-table:not(.show-sunday) .sunday-col {
    display: none !important;
}

/* Comme pour planning_journalier ci-dessus, on enleve les bords arrondis
   des blocs horaires à l'impression : sur .shift-block (utilisé ici en
   tant que bloc plein, pas simple barre de fond comme .shift-track-bg),
   l'indicateur heures sup/en moins passe à 4px et devient pointillé
   (cf. .shift-has-plus/.shift-has-moins ci-dessus) — combiné à un coin
   arrondi et à la hauteur de ligne condensée du print, ça produit un
   angle cassé/mal rendu au lieu d'un simple liseré. */
#planning-semaine-table .shift-block {
    border-radius: 0px !important;
    /* Comme pour .presence-bar-segment et .planning-journalier .shift-track-bg
       plus haut : sans ces deux propriétés, le fond coloré (pharmacien/
       préparateur/équipe) n'est pas imprimé, seul le contour reste visible. */
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
}
