/* ============================================================================
   Impression « Résumé de contrat » — document client (façon Rapport 1).

   Stratégie : on N'IMPRIME PAS un fichier généré ; on imprime le DOM RÉEL de
   l'onglet « Résumé de contrat » via window.print(). Avantage : on conserve EXACTEMENT
   les couleurs/boîtes de l'écran et l'état d'éclatement courant (les sections dépliées
   à l'écran s'impriment dépliées, les autres restent repliées — c'est le DOM tel quel).

   Tout est gâché sur body.pm-print-resume : la classe n'est posée QUE le temps de
   l'impression déclenchée par le bouton (voir window.pmPrint dans App.razor). Ainsi un
   Ctrl+P depuis un autre onglet garde un comportement normal.

   Convention couleurs : on réutilise les tokens d'app.css (var(--accent), etc.). Aucune
   nouvelle dépendance, aucun moteur PDF serveur.
   ============================================================================ */

/* En-tête document : caché à l'écran, révélé seulement à l'impression. */
.print-doc-header { display: none; }

@media print {
    /* Orientation paysage : la grille du Résumé de contrat est large (10 colonnes). */
    @page {
        size: landscape;
        margin: 12mm 10mm 14mm;
    }

    /* Le mode est armé par le bouton (pmPrint) — sinon impression « brute » normale. */
    body.pm-print-resume {
        background: #fff !important;
    }

    /* ---- 1. Masquer tout le chrome de l'application ---- */
    body.pm-print-resume .appbar,
    body.pm-print-resume .footer,
    body.pm-print-resume .breadcrumbs,
    body.pm-print-resume .page-header,
    body.pm-print-resume .tabs,
    body.pm-print-resume .tab-toolbar,
    body.pm-print-resume .search-field,
    body.pm-print-resume .filter-bar,
    body.pm-print-resume #blazor-error-ui {
        display: none !important;
    }

    /* ---- 2. Libérer les conteneurs qui clipperaient l'impression à un écran ---- */
    body.pm-print-resume .app-shell { display: block !important; min-height: 0 !important; }
    body.pm-print-resume .app-main {
        max-width: none !important;
        width: 100% !important;
        margin: 0 !important;
        padding: 0 !important;
        overflow: visible !important;
    }
    body.pm-print-resume .page { padding: 0 !important; margin: 0 !important; }
    body.pm-print-resume .data-scroll,
    body.pm-print-resume .data-scroll.tall {
        max-height: none !important;
        overflow: visible !important;
        border: none !important;
        border-radius: 0 !important;
    }

    /* Forcer le rendu des fonds/couleurs (sinon le navigateur les supprime à l'impression). */
    body.pm-print-resume .suivi-resume,
    body.pm-print-resume .suivi-resume *,
    body.pm-print-resume .print-doc-header,
    body.pm-print-resume .print-doc-header * {
        -webkit-print-color-adjust: exact !important;
        print-color-adjust: exact !important;
    }

    /* ---- 3. En-tête document (logo + projet + date), façon Rapport 1 ---- */
    body.pm-print-resume .print-doc-header {
        display: flex !important;
        align-items: flex-end;
        justify-content: space-between;
        gap: 24px;
        padding: 0 2px 12px;
        margin-bottom: 14px;
        border-bottom: 2px solid var(--accent);
    }
    .print-doc-header .pdh-brand { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
    /* Logo officiel (wordmark « Construction Bertrand Dionne », recoloré en vert de marque). */
    .print-doc-header .pdh-logo { height: 32px; width: auto; max-width: 320px; display: block; }
    .print-doc-header .pdh-org { display: flex; align-items: baseline; gap: 12px; line-height: 1.2; }
    .print-doc-header .pdh-doc-type {
        font-size: 19px; font-weight: 700; letter-spacing: -0.01em; color: var(--accent);
    }
    .print-doc-header .pdh-rbq {
        font-size: 11px; font-weight: 600; letter-spacing: 0.03em; color: var(--text-secondary);
    }
    .print-doc-header .pdh-meta {
        display: grid; grid-template-columns: max-content max-content; gap: 3px 12px;
        margin: 0; font-size: 11px; text-align: right;
    }
    .print-doc-header .pdh-meta dt {
        color: var(--text-muted); font-weight: 600; text-transform: uppercase;
        letter-spacing: 0.04em; font-size: 9px; align-self: center; text-align: right;
    }
    .print-doc-header .pdh-meta dd { margin: 0; color: var(--text-primary); font-weight: 500; text-align: right; }

    /* ---- 4. Compacter la grille pour tenir en paysage (Lettre/A4) ---- */
    body.pm-print-resume .suivi-cards { min-width: 0 !important; }
    body.pm-print-resume .suivi-resume { min-width: 0 !important; }
    body.pm-print-resume .suivi-resume .suivi-grid {
        /* Colonnes resserrées : Code · Activité(1fr) · Budget · Engagé · Facturé · Ajust. ·
           Total · Écart · % · (fichier=0). Somme fixe ≈ 740 px ⇒ tient sur Lettre paysage. */
        grid-template-columns: 54px minmax(80px, 1fr) 92px 92px 92px 84px 92px 92px 50px 0 !important;
        gap: 6px !important;
        font-size: 10px !important;
    }
    body.pm-print-resume .suivi-chead {
        position: static !important;
        background: var(--bg-tertiary) !important;
        font-size: 9px !important;
    }
    body.pm-print-resume .sc-head { padding: 7px 9px !important; }
    body.pm-print-resume .sc-subrow { padding: 4px 9px !important; }
    body.pm-print-resume .sc-body { padding: 4px 9px 8px !important; }

    /* L'activité dépliée garde son bandeau vert (accent-soft) — déjà géré par .is-open ;
       on s'assure juste qu'il s'imprime (color-adjust ci-dessus). */

    /* ---- 5. Neutraliser les éléments interactifs (look « document ») ---- */
    /* Ajustement : l'input devient du texte simple aligné à droite. */
    body.pm-print-resume .sc-adjust .input {
        border: none !important;
        background: transparent !important;
        box-shadow: none !important;
        padding: 0 !important;
        -webkit-appearance: none !important;
        appearance: none !important;
        color: var(--text-primary) !important;
    }
    body.pm-print-resume .sc-adjust .input::-webkit-inner-spin-button,
    body.pm-print-resume .sc-adjust .input::-webkit-outer-spin-button { display: none !important; }

    /* Carets d'éclatement : on garde la place (alignement) mais on les cache. */
    body.pm-print-resume .expand-caret { visibility: hidden !important; }
    /* Boutons « déplier les commandes » et liens fichiers : retirés du document. */
    body.pm-print-resume .sc-cmd > *,
    body.pm-print-resume .sc-file { display: none !important; }

    /* ---- 6. Sauts de page : éviter de couper une carte d'activité ---- */
    body.pm-print-resume .suivi-card { break-inside: avoid; page-break-inside: avoid; }
    body.pm-print-resume .sc-order { break-inside: avoid; page-break-inside: avoid; }
    body.pm-print-resume .suivi-foot { break-inside: avoid; page-break-inside: avoid; }
}

/* ============================================================================
   Opti — l'étude de potentiel imprimée / exportée en PDF.

   C'EST LE LIVRABLE. Un bureau d'architecture ne vend pas un écran : il vend un
   document daté, à l'en-tête de la firme, qu'un client lit et qu'un prêteur
   classe. Sans lui, quelqu'un retape tout dans Word et l'app redevient un
   brouillon.

   Stratégie reprise du kit : on imprime le DOM RÉEL via window.print(), pas un
   fichier généré. Aucun moteur PDF serveur, aucune licence, et ce qui s'imprime
   est exactement ce qu'on voit — y compris la carte et le schéma d'enveloppe.

   Contrairement au bloc ci-dessus, celui-ci n'est PAS gâché sur une classe de
   body : dans Opti la page « / » EST l'étude, donc un Ctrl+P direct doit déjà
   donner un document correct. C'est ce qu'attend quelqu'un qui découvre l'outil.
   ============================================================================ */

/* L'en-tête de document reste caché à l'écran ; il n'existe que sur papier. */
.rapport-entete { display: none; }

@media print {

    @page { margin: 14mm 12mm; }

    /* La coquille de l'app n'a rien à faire sur un document client. */
    .appbar,
    .footer,
    .footer-minimal,
    #blazor-error-ui,
    .form-actions,
    .rapport-masquer {
        display: none !important;
    }

    .app-shell { display: block !important; min-height: 0 !important; }
    .app-main { display: block !important; padding: 0 !important; overflow: visible !important; }
    .page { padding: 0 !important; margin: 0 !important; max-width: none !important; }

    .rapport-entete {
        display: block !important;
        border-bottom: 2px solid #111;
        padding-bottom: 8px;
        margin-bottom: 14px;
    }
    .rapport-titre { font-size: 17pt; font-weight: 700; margin: 0; }
    .rapport-adresse { font-size: 12pt; margin: 3px 0 0; }
    .rapport-meta { font-size: 8.5pt; color: #444; margin-top: 5px; }

    /* Les champs de saisie deviennent du TEXTE : sur papier, une bordure de
       formulaire dit « brouillon », pas « rapport ». La valeur reste lisible. */
    .input {
        border: none !important;
        background: none !important;
        padding: 0 !important;
        font-weight: 600 !important;
        color: #000 !important;
        -webkit-appearance: none;
        appearance: none;
    }
    .form-field label { color: #555 !important; }

    /* Les couleurs de gravité doivent SURVIVRE à l'impression : sans elles, un
       point bloquant se lit comme un point favorable. */
    .pt, .etiq, .bilan-item, .scenario, .kpi-card, .scenario-code, .cadre-cnb,
    .plaide::before, .proforma-verdict, .exemple-bandeau, .form-banner {
        -webkit-print-color-adjust: exact !important;
        print-color-adjust: exact !important;
    }

    /* Rien d'important ne doit être coupé en deux par un saut de page. */
    .card, .pt, .scenario, .kpi-card, .enveloppe, .carte, .cadre-cnb {
        break-inside: avoid;
        page-break-inside: avoid;
    }

    /* Le plaidoyer part au comité sur papier : c'est là qu'il sert le plus.
       L'avertissement du dépistage aussi — un encadré « Partie 3 » imprimé sans sa
       réserve se lit comme une analyse de code, ce qu'il n'est pas. */
    .scenario-plaidoyer, .plaide, .cadre-cnb-avis { display: block !important; }
    .cadre-cnb { border: 1px solid #ccc !important; }
    .section-title { break-after: avoid; page-break-after: avoid; }

    .card {
        border: 1px solid #ccc !important;
        box-shadow: none !important;
        margin-bottom: 12px !important;
    }

    /* La carte est un iframe : elle s'imprime mal et sa hauteur d'écran gâche
       une page. On la réduit plutôt que de la perdre. */
    .carte-cadre { height: 165px !important; }

    /* Les scénarios côte à côte, c'est tout l'intérêt de la page : on force
       trois colonnes plutôt que de laisser la grille se replier. */
    .scenarios { grid-template-columns: repeat(3, 1fr) !important; }
    .kpi-grid { grid-template-columns: repeat(3, 1fr) !important; }

    /* Une étude qui ne dit pas ce qu'elle n'est pas ne devrait pas circuler. */
    .rapport-pied {
        display: block !important;
        margin-top: 14px; padding-top: 8px;
        border-top: 1px solid #999;
        font-size: 8pt; color: #444;
    }
}

/* Le pied de page du rapport n'existe qu'à l'impression. */
.rapport-pied { display: none; }
