/* 70-modules-terrain.css — Modules : interventions à domicile (planning, SMS), développement, étiquettes prix, prospection.
   Feuille 7/7 : l'ordre de chargement (lib/assets.php) est celui des numéros, il porte la cascade. */
  /* ===== Interventions à domicile ===== */
  /* Barre de navigation du planning (‹ jour ›). */
  .itv-plan-bar{display:flex;align-items:center;gap:8px;margin-bottom:12px;}
  .itv-plan-label{font-weight:800;font-size:14px;margin:0 4px;}
  /* Choix de la vue (jour → mois) et du technicien affiché. */
  .itv-plan-views{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:10px;}
  .itv-plan-views .catf{margin:0;}
  .itv-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle;}
  /* Semaine : colonnes-jours plus étroites. */
  .itv-grid.narrow .itv-col{flex:1 0 120px;min-width:120px;}
  .itv-dayh{text-transform:capitalize;font-weight:700;color:var(--grey-1);}
  .itv-dayh b{color:var(--ink);font-size:14px;}
  .itv-dayh.today b{color:#fff;background:var(--accent);border-radius:980px;padding:1px 7px;}
  /* Mois : grille de 6 semaines. */
  .itv-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;}
  .itv-mh{padding:8px 6px;font-size:11px;font-weight:700;color:var(--grey-2);text-transform:uppercase;text-align:center;border-bottom:1px solid var(--line);}
  .itv-mday{min-height:96px;padding:5px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);cursor:pointer;overflow:hidden;}
  .itv-mday:nth-child(7n){border-right:none;}
  @media(hover:hover){ .itv-mday:hover{background:var(--fill);} }
  .itv-mday.out{background:var(--fill);}
  .itv-mday.out .itv-mnum{color:var(--grey-2);}
  .itv-mnum{font-size:12px;font-weight:800;margin-bottom:3px;}
  .itv-mday.today .itv-mnum{display:inline-block;color:#fff;background:var(--accent);border-radius:980px;padding:0 7px;}
  .itv-mitem{font-size:11px;line-height:1.3;padding:2px 5px;margin-bottom:2px;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .itv-mmore{font-size:10.5px;color:var(--grey-1);font-weight:700;padding-left:4px;}
  @media(max-width:640px){ .itv-mday{min-height:64px;padding:3px;} .itv-mitem{font-size:9.5px;padding:1px 3px;} .itv-mitem b{display:none;} }
  /* Planning jour : colonnes par technicien, défilement horizontal sur téléphone. */
  .itv-plan-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);}
  /* --slot : hauteur d'un créneau de 30 min, posée par itv.js (28 px, 44 px au
     doigt). Tout le quadrillage en dépend, donc rien à régler à deux endroits. */
  .itv-grid{display:flex;min-width:max-content;--slot:28px;}
  /* La colonne des heures reste visible quand on fait défiler les techniciens
     latéralement : sans elle, on lit un rendez-vous sans savoir à quelle heure. */
  .itv-gutter{flex:0 0 52px;border-right:1px solid var(--line);position:sticky;left:0;z-index:4;background:var(--card);}
  .itv-col{flex:1 0 170px;min-width:170px;border-right:1px solid var(--line);}
  .itv-col:last-child{border-right:none;}
  .itv-col-h{padding:9px 10px;font-size:12px;font-weight:800;border-bottom:1px solid var(--line);background:var(--card);display:flex;align-items:center;gap:7px;white-space:nowrap;overflow:hidden;}
  .itv-col-h .asg-av{flex:0 0 auto;}
  /* Corps d'une colonne : lignes de 30 min dessinées en dégradé répété. */
  .itv-col-b{position:relative;background:repeating-linear-gradient(to bottom,transparent,transparent calc(var(--slot) - 1px),var(--line) calc(var(--slot) - 1px),var(--line) var(--slot));}
  .itv-hour{height:calc(var(--slot) * 2);font-size:10.5px;font-weight:700;color:var(--grey-2);text-align:right;padding:2px 7px 0 0;box-sizing:border-box;}
  .itv-slot{position:absolute;left:0;right:0;height:var(--slot);cursor:pointer;}
  /* Survol réservé à la souris ; au doigt, c'est l'appui qui donne le retour. */
  @media(hover:hover){ .itv-slot:hover{background:var(--accent-soft);opacity:.55;} }
  .itv-slot:active{background:var(--accent-soft);opacity:.7;}
  /* Bloc d'intervention (hauteur = durée) + marge de déplacement hachurée. */
  .itv-block{position:absolute;left:4px;right:4px;border-radius:9px;padding:4px 7px;font-size:11px;line-height:1.3;overflow:hidden;cursor:pointer;background:var(--accent-soft);border:1px solid var(--accent);color:var(--ink);z-index:2;box-sizing:border-box;}
  .itv-block b{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .itv-block .ib-sub{display:block;color:var(--grey-1);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .itv-block.st-terminee{background:#fff0d6;border-color:var(--amber);}
  .itv-block.st-cloturee{background:#eaf6ec;border-color:var(--green);}
  .itv-travel{position:absolute;left:4px;right:4px;border-radius:7px;z-index:1;pointer-events:none;background:repeating-linear-gradient(45deg,transparent,transparent 4px,rgba(128,128,128,.14) 4px,rgba(128,128,128,.14) 8px);}
  /* Conflits signalés à la planification (jamais bloquants). */
  .itv-conflict{margin-top:8px;background:#fff0d6;color:#9a6c10;border-radius:9px;padding:8px 11px;font-size:12px;font-weight:600;}
  /* File des SMS préparés dans le tiroir. */
  .iv-sms{border:1px solid var(--line);border-radius:10px;padding:8px 11px;margin-bottom:7px;font-size:12px;background:var(--fill);}
  .iv-sms .sm-h{display:flex;align-items:center;gap:7px;font-weight:700;margin-bottom:3px;}
  .iv-sms .sm-st{margin-left:auto;font-size:10.5px;font-weight:800;padding:1px 8px;border-radius:980px;background:var(--accent-soft);color:var(--accent-dk);}
  .iv-sms .sm-st.cancelled{background:var(--fill);color:var(--grey-2);text-decoration:line-through;}
  .iv-sms .sm-st.sent{background:#eaf6ec;color:var(--green);}
  .iv-sms .sm-st.delivered{background:#eaf6ec;color:var(--green);}
  .iv-sms .sm-st.failed{background:#fdeee6;color:#c0561f;}
  .iv-sms .sm-b{color:var(--grey-1);}
  /* Projection des interventions dans l'agenda partagé (lecture seule). */
  .ag-ev.t-itv{border-left-color:#0d9488;background:#e3f4f4;} .ag-ev.t-itv .ag-ev-t{color:#0b7a70;}
  .ag-mchip.t-itv{background:#e3f4f4;} .ag-mchip.t-itv .dot{background:#0d9488;}
  /* Catalogue des types : une ligne éditable par type. */
  .itv-type-row{display:grid;grid-template-columns:1fr 120px 110px 90px 110px;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line);}
  .itv-type-row:last-child{border-bottom:none;}
  @media(max-width:768px){ .itv-type-row{grid-template-columns:1fr 1fr;} }
  /* ---- Interventions sur téléphone ----------------------------------------
     Ce module est le seul qu'on utilise EN MOBILITÉ : le technicien lit sa
     tournée dans la voiture et rédige son compte rendu chez le client, debout,
     à une main. Les colonnes se resserrent pour en montrer deux à l'écran,
     et les blocs restent lisibles malgré la largeur. */
  @media(max-width:880px){
    .itv-col{flex:1 0 148px;min-width:148px;}
    .itv-block{font-size:12px;padding:5px 8px;}
    .itv-block b{font-size:12px;}
    .itv-block .ib-sub{font-size:11px;}
    .itv-plan-bar{flex-wrap:wrap;}
    .itv-plan-label{flex:1 0 100%;order:-1;margin:0 0 2px;}
    /* Le pied du tiroir peut porter 3 boutons : qu'ils passent à la ligne
       plutôt que de se comprimer en cibles intouchables. */
    .drw-f{flex-wrap:wrap;}
  }
  /* Commandes de tiroir au doigt : le ✕ qui retire une personne affectée mesure
     11 px de haut, le « Modifier » d'une note 19 px — on les vise mal debout chez
     un client. On les épaissit UNIQUEMENT sur écran tactile : au pointeur fin, le
     rendu ne change pas d'un pixel. Communes aux réparations, au SAV et aux
     commandes, qui se consultent aussi sur téléphone. */
  @media(pointer:coarse){
    .asg-x{padding:8px 10px;font-size:13px;}
    .asg-add{padding:9px 15px;}
    .ev-editbtn{padding:8px 10px;font-size:12px;opacity:.9;}
    /* Cases à cocher : le libellé entier bascule la case, mais il ne fait que
       18 px de haut — on l'aère pour en faire une vraie bande cliquable.
       « À signaler au client » se coche chez le client, souvent d'une main. */
    .chk{padding:7px 0;}
    .chk input{width:20px;height:20px;}
  }
  /* iOS Safari ZOOME toute la page dès qu'un champ fait moins de 16 px, et ne
     dézoome pas tout seul : on se retrouve à faire défiler latéralement pour
     lire ce qu'on tape. La règle est déjà appliquée à la recherche mobile
     (.gs-mhead input) — elle vaut pour tous les formulaires, à commencer par le
     compte rendu d'intervention, saisi sur le terrain. */
  @media(max-width:880px){
    .fld input,.fld select,.fld textarea{font-size:16px;}
  }

  /* --- Fenêtre de confirmation d'envoi de SMS (réparations, commandes) --- */
  .sms-to{font-weight:700;font-size:15px;letter-spacing:-.01em;}
  .sms-count{margin-top:6px;font-size:11.5px;color:var(--grey-1);font-weight:600;}
  /* Deux segments = deux SMS facturés. On le dit au moment où c'est corrigeable. */
  .sms-count.warn{color:var(--amber);}
  .sms-warn{margin-top:14px;padding:10px 12px;border-radius:12px;background:var(--fill);
            font-size:12.5px;font-weight:600;color:var(--grey-1);line-height:1.45;}

  /* --- Réglages → onglet SMS (gérant) --- */
  /* L'interrupteur existant (.toggle) employé comme vrai bouton : focus clavier compris. */
  button.toggle{border:none;padding:0;font:inherit;}
  button.toggle:focus-visible{outline:none;box-shadow:0 0 0 3.5px var(--accent-soft);}
  .sms-status{margin-top:12px;font-size:12.5px;color:var(--grey-1);font-weight:500;line-height:1.5;}
  .sms-status b{color:var(--ink);font-weight:700;}
  .sms-status.live b{color:var(--green);}
  .sms-tpl{padding:16px 0;border-top:1px solid var(--line);transition:opacity .15s;}
  .sms-tpl:first-child{padding-top:0;border-top:none;}
  .sms-tpl:last-child{padding-bottom:0;}
  .sms-tpl-h{display:flex;align-items:center;gap:12px;margin-bottom:10px;}
  .sms-tpl-t{flex:1;min-width:0;display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
  .sms-tpl-t b{font-size:14px;font-weight:700;color:var(--ink);margin-right:3px;}
  .sms-pill{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:980px;background:var(--fill);color:var(--grey-1);}
  .sms-pill.auto{background:var(--accent-soft);color:var(--accent-dk);}
  .sms-tpl textarea{width:100%;font:inherit;font-size:14px;line-height:1.45;color:var(--ink);padding:11px 13px;border:1px solid var(--line-2);border-radius:11px;background:var(--card);outline:none;resize:vertical;min-height:66px;transition:border-color .14s,box-shadow .14s;}
  .sms-tpl textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3.5px var(--accent-soft);}
  .sms-vars{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:8px;font-size:11.5px;color:var(--grey-1);font-weight:600;}
  .sms-var{font:inherit;font-size:11.5px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 8px;border-radius:7px;border:1px solid var(--line-2);background:var(--card);color:var(--ink);cursor:pointer;transition:border-color .13s;}
  .sms-var:hover{border-color:var(--accent);}
  .sms-prev{margin-top:10px;padding:9px 12px;border-radius:11px;background:var(--fill);font-size:12.5px;color:var(--grey-1);line-height:1.45;overflow-wrap:anywhere;}
  .sms-tpl-f{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
  .sms-tpl-f .sms-count{flex:1;}
  .sms-reset{margin-top:6px;font:inherit;font-size:11.5px;font-weight:600;color:var(--grey-1);background:none;border:none;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px;}
  .sms-reset:hover{color:var(--ink);}
  /* Type coupé : on garde le texte lisible et modifiable, mais on montre qu'il ne part pas. */
  .sms-tpl.is-off textarea,.sms-tpl.is-off .sms-prev,.sms-tpl.is-off .sms-vars,.sms-tpl.is-off .sms-tpl-f{opacity:.5;}
  /* Coupure générale : toutes les cartes de types s'estompent. */
  #sms-types.sms-off .set-card{opacity:.55;}
  .sms-savebar{position:sticky;bottom:16px;display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:12px 16px;border-radius:14px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);}
  .sms-dirty{font-size:12.5px;font-weight:600;color:var(--amber);}

  /* ===== Développement : prise d'informations au comptoir =====
     Le formulaire est volontairement maigre. Ces quelques règles servent
     seulement à donner au champ libre le poids qu'il a dans le métier (c'est
     LUI le brief), et à replier tout ce qui est facultatif. */

  /* Le texte du client et les photos côte à côte : les deux seules choses qui
     comptent, elles se valent — donc elles font exactement la même hauteur.
     La légende du champ libre occupe sa propre rangée (rangée 2, colonne 1) :
     laissée dans la même cellule, elle allongeait la ligne et la zone photo
     dépassait le bas de la zone de texte. Sous 880 px, tout s'empile, et la
     légende reste collée au champ qu'elle commente. */
  .dev-g{display:grid;grid-template-columns:1fr 250px;gap:7px 18px;align-items:stretch;}
  .dev-g .fld{grid-column:1;grid-row:1;display:flex;flex-direction:column;margin:0;}
  .dev-g .dev-ph{grid-column:2;grid-row:1;display:flex;flex-direction:column;}
  .dev-g .dev-hint{grid-column:1;grid-row:2;margin:0;}
  /* La zone de dépôt occupe toute la hauteur libre et centre son contenu ;
     quand des photos sont ajoutées, l'aperçu prend sa place sous elle. */
  .dev-g .drop{flex:1;display:flex;flex-direction:column;align-items:center;
               justify-content:center;cursor:pointer;}
  /* Tant qu'aucune photo n'est déposée, l'aperçu est vide : sans ceci sa marge
     haute de 10 px subsiste et la zone de dépôt s'arrête 10 px trop tôt. */
  .dev-g .photo-preview:empty{display:none;}
  @media(max-width:880px){
    .dev-g{grid-template-columns:1fr;}
    .dev-g .fld{grid-column:1;grid-row:1;}
    .dev-g .dev-hint{grid-column:1;grid-row:2;}
    .dev-g .dev-ph{grid-column:1;grid-row:3;margin-top:8px;}
    .dev-g .drop{flex:0 0 auto;}
  }
  /* Plus grand que les autres zones de texte : on invite à écrire, pas à résumer.
     Sélecteur volontairement aussi précis que `.fld textarea` (ligne ~418), qui
     impose min-height:66px et font-size:14px — une simple classe perdrait.
     flex:1 pour que le champ remplisse la cellule que sa hauteur minimale a créée. */
  .fld textarea.dev-libre{flex:1;min-height:190px;font-size:16px;line-height:1.6;}

  /* Bloc « Ajouter des précisions », replié par défaut. */
  .dev-more{display:flex;align-items:center;gap:9px;width:100%;background:none;border:none;
            font:inherit;font-size:14px;font-weight:700;color:var(--grey-1);cursor:pointer;
            padding:0;text-align:left;}
  .dev-more:hover{color:var(--ink);}
  .dev-more .ch{display:inline-block;transition:transform .2s;}
  .dev-more.open .ch{transform:rotate(90deg);}
  .dev-more .opt{font-weight:500;color:var(--grey-2);}
  .dev-more-b{display:none;padding-top:18px;}
  .dev-more-b.open{display:block;}

  /* Dans le tiroir : les mots du vendeur, en grand et en premier. */
  .dev-quote{background:var(--fill);border-radius:14px;padding:14px 16px;font-size:15px;
             line-height:1.6;white-space:pre-wrap;font-weight:500;}

  /* ===== ÉTIQUETTES PRIX (labels.js) — le gabarit mm de l'étiquette est dans views/labels.php ===== */
  #view-labels{padding-bottom:110px;}
  .lb-tabs{margin-bottom:14px;flex-wrap:wrap;}
  .lb-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:12px;}
  .lb-tools input{flex:1;min-width:200px;max-width:440px;padding:10px 14px;border:1px solid var(--line-2);border-radius:22px;font:inherit;background:var(--card);color:var(--ink);}
  .lb-card{max-width:none;padding:2px 18px;}
  .lb-row{display:flex;align-items:center;gap:14px;padding:12px 0;border-bottom:1px solid var(--line);}
  .lb-row:last-child{border-bottom:none;}
  .lb-row.on{background:linear-gradient(90deg,var(--accent-soft),transparent 70%);margin:0 -18px;padding-left:18px;padding-right:18px;}
  .lb-chk input{width:20px;height:20px;accent-color:var(--accent);cursor:pointer;}
  .lb-mini{width:calc(82mm * .42);height:calc(52mm * .42);overflow:hidden;flex:none;border-radius:3px;box-shadow:0 0 0 1px #000;background:#fff;}
  .lb-mini-in{width:82mm;height:52mm;transform:scale(.42);transform-origin:top left;}
  .lb-info{flex:1;min-width:0;}
  .lb-info b{font-size:14.5px;}
  .lb-sub{font-size:12px;color:var(--grey-1);margin-top:2px;overflow:hidden;text-overflow:ellipsis;}
  .lb-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;}
  .lb-tag{font-size:11px;font-weight:700;padding:2px 8px;border-radius:10px;background:var(--accent-soft);color:var(--accent-dk);}
  .lb-tag.grey{background:var(--fill);color:var(--grey-1);}
  .lb-tag.warn{background:#fff4dc;color:#a86b00;}
  .lb-tag.blue{background:#e7f0ff;color:#2257c9;}
  .lb-tag.red{background:#fdecea;color:#c0392b;}
  .lb-inputs{display:flex;gap:10px;flex:none;}
  .lb-inputs label{display:flex;flex-direction:column;font-size:11px;font-weight:700;color:var(--grey-2);text-transform:uppercase;letter-spacing:.03em;gap:3px;}
  .lb-inputs span{display:flex;align-items:center;gap:4px;font-size:13px;color:var(--grey-1);text-transform:none;letter-spacing:0;font-weight:600;}
  .lb-inputs input{width:66px;padding:7px 8px;border:1px solid var(--line-2);border-radius:8px;font:inherit;font-weight:700;color:var(--ink);background:var(--card);text-align:right;}
  .lb-price{font-weight:800;font-size:15px;flex:none;}
  .lb-acts{display:flex;gap:8px;flex:none;}
  .lb-bar{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:40;width:min(760px,calc(100vw - 32px));display:flex;align-items:center;gap:10px;
    background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px 14px 12px 18px;box-shadow:var(--shadow-lg);}
  .lb-bar.empty{display:none;}
  .lb-bar-sub{font-size:12.5px;color:var(--grey-1);}
  /* Tiroir « modifier » */
  .lbe-check{display:flex;gap:8px;align-items:center;font-weight:600;font-size:14px;margin:4px 0 14px;cursor:pointer;}
  .lbe-check input{width:auto;}
  .lbe-dim{opacity:.4;pointer-events:none;}
  .lb-prev{background:var(--fill);border-radius:14px;padding:16px;display:flex;justify-content:center;}
  .lb-prev .lbl{box-shadow:0 0 0 1px #000,0 4px 14px rgba(0,0,0,.12);}
  .lbe-size{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);font-size:14px;}
  .lbe-size b{flex:1;font-weight:600;}
  .lbe-warn{font-size:11.5px;color:#a86b00;font-weight:700;}
  .lbe-step{display:flex;align-items:center;border:1px solid var(--line-2);border-radius:20px;overflow:hidden;}
  .lbe-step button{width:36px;border:none;background:none;font:inherit;font-weight:800;color:var(--grey-1);padding:5px 0;cursor:pointer;}
  .lbe-step em{font-style:normal;font-weight:700;min-width:56px;text-align:center;border-left:1px solid var(--line-2);border-right:1px solid var(--line-2);padding:5px 0;}
  .lbe-auto{font:inherit;font-size:12px;font-weight:700;padding:4px 10px;border-radius:12px;border:1px solid var(--line-2);color:var(--grey-1);background:none;cursor:pointer;}
  .lbe-auto.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-dk);}
  /* Tiroir « aperçu avant impression » */
  .drw.lb-wide{width:min(1060px,96vw);}
  .lbp-wrap{display:flex;gap:26px;align-items:flex-start;}
  .lbp-side{width:250px;flex:none;}
  .lbp-slots{display:grid;grid-template-columns:1fr 1fr;gap:6px;width:150px;}
  .lbp-slots button{height:40px;border:2px solid var(--line-2);border-radius:6px;background:var(--card);font:inherit;font-weight:800;font-size:13px;color:var(--grey-1);cursor:pointer;}
  .lbp-slots .x{background:repeating-linear-gradient(-45deg,#eee 0 5px,#ddd 5px 10px);color:#999;text-decoration:line-through;}
  .lbp-slots .f{border-color:#000;color:#000;}
  .lbp-note{background:var(--fill);border-radius:12px;padding:11px 13px;font-size:13px;color:var(--grey-1);margin-top:14px;}
  .lbp-sheets{flex:1;display:flex;flex-wrap:wrap;gap:22px;min-width:0;}
  .lbp-pn{font-size:12px;font-weight:700;color:var(--grey-1);margin-bottom:6px;}
  .lbp-scale{width:calc(210mm * .5);height:calc(297mm * .5);overflow:hidden;box-shadow:0 2px 16px rgba(0,0,0,.16);}
  .lbp-scale .lb-sheet{transform:scale(.5);transform-origin:top left;}
  .lbp-scale .lb-slot[onclick]{cursor:pointer;}
  .lbp-scale .lb-slot[onclick]:hover{outline:3mm solid var(--accent);outline-offset:-3mm;}
  .lb-free,.lb-used{display:flex;align-items:center;justify-content:center;font:600 13pt Manrope,sans-serif;color:#b5b5b5;}
  .lb-free{background:repeating-linear-gradient(45deg,#fafafa 0 8px,#f2f2f2 8px 16px);}
  .lb-used{background:repeating-linear-gradient(-45deg,#eee 0 6px,#ddd 6px 12px);color:#999;}
  @media (max-width:760px){
    .lb-row{flex-wrap:wrap;gap:10px;}
    .lb-info{flex-basis:calc(100% - 190px);}
    .lb-inputs{margin-left:34px;}
    .lb-edit{margin-left:auto;}
    .lb-acts{width:100%;justify-content:flex-end;}
    .lb-bar{bottom:12px;padding:10px 12px;left:16px;transform:none;width:calc(100vw - 112px);}
    .lb-bar .lb-bar-sub{display:none;}
    .lb-bar #lb-go{padding-left:14px;padding-right:14px;}
    .lb-bar #lb-clear{display:none;}
    .lbp-wrap{flex-direction:column;}
    .lbp-side{width:100%;}
    .lbp-scale{width:calc(210mm * .4);height:calc(297mm * .4);}
    .lbp-scale .lb-sheet{transform:scale(.4);}
    .lb-prev{padding:10px;}
    .lb-prev .lbl{zoom:.86;}
  }
  .lb-tools .seg{margin:0;}
  .lb-tools input{height:44px;box-sizing:border-box;}

  /* ---- Prospection / CRM ----
     Pipeline à 7 colonnes (desktop large), 4 sur écran moyen, 2 sur mobile (règle
     commune aux boards). Listes « Aujourd'hui » et « Base », filtres, entonnoir. */
  @media(max-width:1180px) and (min-width:881px){ .board.c7{grid-template-columns:repeat(4,1fr);} }
  .pr-bar .catf{margin:0;}
  /* « Besoin contient… » : champ logé dans le menu Besoin (16 px : pas de zoom iOS). */
  #pl-need-q{width:100%;font-size:16px;padding:8px 12px;background-image:none;}
  .pr-head,.pr-row{grid-template-columns:1.5fr 1.1fr .9fr 118px 150px 120px;}
  .pr-late{color:#b23b00;font-weight:700;}
  .pr-today{color:var(--accent-dk);font-weight:700;}
  .ci-chip.late{background:#ffe9dd;color:#b23b00;}
  .pr-tel{font-weight:700;color:var(--accent-dk);text-decoration:none;white-space:nowrap;}
  .pr-gt{margin-top:22px;display:flex;align-items:center;gap:8px;}
  .pr-gt .lc{font-size:16px;}
  .pr-gn{color:var(--grey-2);font-weight:600;}
  .pr-ghint{font-size:12px;color:var(--grey-1);font-weight:500;margin:-6px 0 10px;}
  .pr-trow{display:grid;grid-template-columns:64px 1.6fr 1fr 118px auto;gap:14px;align-items:center;padding:13px 22px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--line);}
  .pr-trow:last-child{border-bottom:none;}
  .pr-trow:hover{background:var(--fill);}
  .pr-trow.late{box-shadow:inset 3px 0 0 #e0683a;}
  .pr-tref{color:var(--grey-2);font-weight:700;font-size:11.5px;}
  .pr-tmain b{margin-right:6px;}
  .pr-twhen{font-size:12.5px;}
  .pr-plan{display:grid;grid-template-columns:1fr 1.4fr 150px;gap:10px;}
  .pr-plan .fld{margin-bottom:0;}
  .pr-editbtn{margin-left:8px;vertical-align:middle;}
  .pr-dup{background:#fff0d6;border:1px solid #f5d58a;border-radius:12px;padding:11px 15px;font-size:12.5px;color:#7a5200;margin:-4px 0 14px;line-height:1.5;}
  .pr-dup a{color:#7a5200;text-decoration:underline;cursor:pointer;font-weight:600;}
  .pr-dup-l{margin-top:3px;}
  .pr-ev-k{font-weight:700;color:var(--accent-dk);margin-right:6px;}
  .pr-funnel{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px;}
  .pr-fstep{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;}
  .pr-fl{font-size:11.5px;font-weight:700;color:var(--grey-2);text-transform:uppercase;letter-spacing:.03em;}
  .pr-fn{font-size:28px;font-weight:800;letter-spacing:-.03em;margin:6px 0 8px;}
  .pr-fbar{height:6px;border-radius:980px;background:var(--fill);overflow:hidden;}
  .pr-fbar span{display:block;height:100%;border-radius:980px;}
  .pr-fsub{font-size:12px;font-weight:600;color:var(--grey-1);margin-top:8px;}
  @media(max-width:768px){
    .pr-head{display:none;}
    .pr-row{grid-template-columns:1fr;gap:3px;}
    .pr-trow{grid-template-columns:1fr auto;gap:6px 12px;}
    .pr-trow .pr-tref{grid-column:1/-1;}
    .pr-plan,.pr-funnel{grid-template-columns:1fr;}
    .pr-plan .fld{margin-bottom:10px;}
    .pr-plan .fld[style*="span 2"]{grid-column:auto;}
  }
