/* Repris de DSPA_agroforestry v1.8.0 (app/index.html, styles). Ne pas modifier la source. */
:root{
  --green:#1b7a3d; --green-d:#0f5128; --green-l:#e8f3ec;
  --panda:#000; --bg:#f5f7f6; --card:#fff; --ink:#1c2620; --muted:#6b7a70;
  --red:#c0392b; --orange:#e08a1e; --yellow:#caa915; --line:#e1e7e3;
}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,Segoe UI,Roboto,Arial,sans-serif;background:var(--bg);color:var(--ink)}
header{background:var(--green-d);color:#fff;padding:18px 24px;display:flex;align-items:center;gap:20px;flex-wrap:wrap}
header h1{font-size:18px;margin:0;font-weight:600}
#logo{height:64px;width:auto}
header .sub{font-size:12px;opacity:.85}
header .spacer{flex:1}
.badge{background:#fff2;padding:4px 10px;border-radius:20px;font-size:12px}
#drop{border:2px dashed #ffffff66;border-radius:10px;padding:6px 14px;font-size:12px;cursor:pointer;color:#fff}
#drop.l{background:#ffffff22}
nav{display:flex;gap:2px;background:var(--green);padding:0 12px;flex-wrap:wrap}
nav button{background:none;border:none;color:#ffffffcc;padding:11px 15px;cursor:pointer;font-size:13.5px;border-bottom:3px solid transparent}
nav button:hover{color:#fff;background:#ffffff14}
nav button.active{color:#fff;border-bottom-color:#fff;font-weight:600}
main{padding:20px;max-width:1280px;margin:0 auto}
.tab{display:none}.tab.active{display:block}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:12px;margin:14px 0}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.kpi .v{font-size:26px;font-weight:700;color:var(--green-d);overflow-wrap:anywhere;line-height:1.15}
.kpi .v.sm{font-size:16px}
.kpi .l{font-size:12px;color:var(--muted);margin-top:2px}
.kpi .s{font-size:11px;color:var(--muted);margin-top:4px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px;margin:14px 0}
.panel h3{margin:0 0 10px;font-size:15px;color:var(--green-d)}
.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:900px){.row{grid-template-columns:1fr}}
.chartbox{position:relative;height:300px}
table{border-collapse:collapse;width:100%;font-size:12.5px}
th,td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
th{background:var(--green-l);position:sticky;top:0;cursor:pointer;user-select:none}
tr:nth-child(even) td{background:#fafcfb}
.sev{font-weight:600;white-space:nowrap}
.sev.b{color:var(--red)} .sev.i{color:var(--orange)} .sev.m{color:var(--yellow)}
.pill{display:inline-block;padding:1px 8px;border-radius:20px;font-size:11px;background:var(--green-l);color:var(--green-d);margin:1px}
.btn{background:var(--green);color:#fff;border:none;border-radius:7px;padding:8px 13px;cursor:pointer;font-size:13px}
.btn:hover{background:var(--green-d)}
.btn.sec{background:#fff;color:var(--green-d);border:1px solid var(--green)}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
input[type=text],select{padding:7px 9px;border:1px solid var(--line);border-radius:7px;font-size:13px}
.tablewrap{max-height:560px;overflow:auto;border:1px solid var(--line);border-radius:8px}
.muted{color:var(--muted)}
.empty{text-align:center;padding:60px 20px;color:var(--muted)}
.empty h2{color:var(--green-d)}
.codefix{font-family:ui-monospace,Consolas,monospace;font-size:12px}
.del{color:var(--red);text-decoration:line-through}.ins{color:var(--green);font-weight:600}
.note{background:#fff8e6;border:1px solid #f0e0a8;border-radius:8px;padding:10px 12px;font-size:12.5px;margin:10px 0}
.intro{background:var(--green-l);border-left:4px solid var(--green);border-radius:6px;padding:9px 13px;font-size:13px;color:var(--ink);margin:6px 0 4px}
.intro b{color:var(--green-d)}
.pngbtn{position:absolute;top:2px;right:2px;z-index:1200;background:#ffffffe6;border:1px solid var(--line);border-radius:6px;font-size:11px;padding:2px 7px;cursor:pointer;color:var(--green-d)}
.pngbtn:hover{background:#fff;border-color:var(--green)}
#map{height:460px;border-radius:8px;border:1px solid var(--line)}
.legend{font-size:12px;display:flex;gap:14px;flex-wrap:wrap;margin-top:8px}
.legend span{display:flex;align-items:center;gap:5px}
.dot{width:12px;height:12px;border-radius:3px;display:inline-block}
.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.subtabs button{background:var(--green-l);border:1px solid var(--line);border-radius:20px;padding:5px 13px;font-size:12.5px;cursor:pointer}
.subtabs button.active{background:var(--green);color:#fff;border-color:var(--green)}
.filters{background:#fff;border-bottom:1px solid var(--line);padding:8px 20px;display:flex;gap:10px;align-items:center;flex-wrap:wrap;position:sticky;top:0;z-index:30;box-shadow:0 1px 4px #0001}
.filters label{font-size:11px;color:var(--muted);display:flex;flex-direction:column;gap:2px}
.filters select,.filters input{padding:5px 8px;font-size:12.5px;min-width:120px}
.filters .ftitle{font-weight:600;color:var(--green-d);font-size:12.5px}
.filters .active-f{color:var(--green-d);font-weight:600}
.fcount{font-size:12px;color:var(--muted);margin-left:auto}
#gsearch{width:300px;max-width:38vw;padding:7px 12px;border:none;border-radius:20px;font-size:13px}
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:5000;display:flex;align-items:flex-start;justify-content:center;padding:28px 14px;overflow:auto}
.ov-card{background:var(--bg);border-radius:12px;max-width:940px;width:100%;min-width:0;padding:18px 22px 26px;position:relative;z-index:5001;box-shadow:0 12px 44px #0006}
.ov-card.sheet{width:max-content;max-width:none;flex:0 0 auto}
/* le cadre se cale sur la feuille : sans cela, la note finale sur une seule
   ligne etirerait le cadre bien au-dela de la largeur d'une A4 */
.ov-card.sheet .note{max-width:210mm;margin-left:auto;margin-right:auto}
.ov-close{position:absolute;top:8px;right:12px;background:none;border:none;font-size:26px;cursor:pointer;color:var(--muted);line-height:1;z-index:6001}
.ov-card h2{color:var(--green-d);margin:2px 110px 10px 2px;font-size:19px}
.ov-print{position:absolute;top:10px;right:46px;background:var(--green);color:#fff;border:none;border-radius:7px;padding:6px 10px;cursor:pointer;font-size:12.5px;z-index:6001}
.synth-meta{font-size:12px;color:var(--muted);margin:-4px 2px 10px}
.synth-section{margin:12px 0}
.synth-section h3{color:var(--green-d);font-size:14px;margin:0 0 6px}
.synth-table{width:100%;table-layout:fixed}
.synth-table th:nth-child(1),.synth-table td:nth-child(1){width:12%}
.synth-table th:nth-child(2),.synth-table td:nth-child(2){width:24%}
.synth-table th:nth-child(3),.synth-table td:nth-child(3){width:12%}
.synth-table th:nth-child(4),.synth-table td:nth-child(4){width:10%}
.synth-table th:nth-child(5),.synth-table td:nth-child(5){width:22%}
.synth-table th:nth-child(6),.synth-table td:nth-child(6){width:20%}
.synth-table td{vertical-align:top;overflow-wrap:anywhere}
.synth-value{font-weight:700;color:var(--green-d)}
.pay-sheet{width:100%;border-collapse:collapse;margin:10px 0;font-size:12px;table-layout:fixed}
.pay-sheet th,.pay-sheet td{border:1px solid #b9c6bd;padding:5px 6px;text-align:left;overflow-wrap:anywhere;word-break:break-word}
.pay-sheet th{background:#eef4ef;color:var(--green-d);font-size:11.5px}
.pay-sheet .sign-cell{min-width:88px;height:26px}
.pay-sheet .pay-total td{font-weight:700;background:#f4f8f5}
/* Largeurs calees sur le A4 portrait, appliquees a l'ecran comme a l'impression
   pour que l'apercu corresponde au document imprime. N°, Surface, Ouv. et Trou.
   sont volontairement etroites : la place va aux noms, aux groupements et aux
   deux colonnes d'emargement. Total = 100 %. */
.pay-sheet th:nth-child(1),.pay-sheet td:nth-child(1){width:3.5%;text-align:right;padding-right:4px}
.pay-sheet th:nth-child(2),.pay-sheet td:nth-child(2){width:14%}
.pay-sheet th:nth-child(3),.pay-sheet td:nth-child(3){width:18%}
.pay-sheet th:nth-child(4),.pay-sheet td:nth-child(4){width:9%}
.pay-sheet th:nth-child(5),.pay-sheet td:nth-child(5){width:13%}
.pay-sheet th:nth-child(6),.pay-sheet td:nth-child(6){width:5%;text-align:right}
.pay-sheet th:nth-child(7),.pay-sheet td:nth-child(7){width:3.5%;text-align:center}
.pay-sheet th:nth-child(8),.pay-sheet td:nth-child(8){width:3.5%;text-align:center}
.pay-sheet th:nth-child(9),.pay-sheet td:nth-child(9){width:9.5%;text-align:right}
.pay-sheet td:nth-child(9){font-weight:700}
.pay-sheet th:nth-child(10),.pay-sheet td:nth-child(10){width:9%}
.pay-sheet th:nth-child(11),.pay-sheet td:nth-child(11){width:12%}
.pay-signatures{display:flex;gap:26px;flex-wrap:wrap;margin-top:16px;font-size:12.5px}
/* L'apercu montre de vraies feuilles A4 : ce qui est vu correspond a ce qui sort
   de l'imprimante, et le nombre de pages est maitrise plutot que subi. */
.a4-page{width:210mm;min-height:297mm;box-sizing:border-box;background:#fff;color:#1b2620;
  padding:12mm 10mm 16mm;margin:0 auto 18px;box-shadow:0 3px 14px rgba(0,0,0,.18);position:relative}
.sheet-screen{margin-top:30px}   /* place pour les boutons PDF et fermer */
.sheet-print{display:none}       /* version continue, uniquement a l'impression */
.a4-foot{position:absolute;left:10mm;right:10mm;bottom:7mm;display:flex;justify-content:space-between;
  gap:10px;font-size:9.5px;color:#6b7a70;border-top:1px solid #dde5e0;padding-top:2mm}
/* meme typographie a l'ecran qu'a l'impression : l'apercu est fidele */
.a4-page .pay-sheet{font-size:8.5px}
.a4-page .pay-sheet th,.a4-page .pay-sheet td{padding:2px 3px}
.a4-page .pay-sheet .sign-cell{height:20px}
.a4-page h2{font-size:15px;margin:0 0 6px}
.a4-page .synth-meta{font-size:9.5px;margin:0 0 8px}
.a4-page .intro{font-size:10px;padding:6px 9px}
.a4-page .pay-signatures{font-size:10px;margin-top:12px}
/* bloc de contexte : gris foncé, pour séparer l'explication des données */
.panel.context{background:#333d37;border-color:#333d37;color:#e6ede8}
.panel.context h3{color:#fff}
.panel.context .intro{background:transparent;border-left:none;border-radius:0;padding:0;margin:2px 0 12px;color:#e6ede8;font-size:13.5px;line-height:1.55}
/* gras et code lisibles sur fond sombre (héritaient du vert foncé) */
.panel.context b,.panel.context strong,.panel.context .intro b{color:#ffffff}
.panel.context code{color:#bfe6ce;background:rgba(255,255,255,.10);border-radius:4px;padding:1px 5px;text-transform:none;letter-spacing:0;font-size:12px}
.panel.context .hint{color:#c3d2c7}
.panel.context table{color:#e6ede8}
.panel.context th{background:rgba(255,255,255,.10);color:#fff;border-color:rgba(255,255,255,.22)}
.panel.context td{border-color:rgba(255,255,255,.18)}
/* neutralise le zébrage clair du thème, illisible sur fond sombre */
.panel.context tr:nth-child(even) td{background:rgba(255,255,255,.05)}
.panel.context .cycle-table td:first-child{color:#bfe6ce}
.panel.context .cycle-pay{background:rgba(143,199,164,.16)}
.panel.context .tablewrap{border-color:rgba(255,255,255,.22)}
/* information neutre : pas d'encadré, pour réserver le jaune aux alertes */
.hint{font-size:12.5px;color:var(--muted);line-height:1.5;margin:8px 0}
th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
th.sortable:hover{background:#e3ece5}
th.sortable .arrow{opacity:.35;font-size:10px;margin-left:3px}
th.sortable.on .arrow{opacity:1}
.motiv-sub{margin:18px 0 0}
.motiv-sub:first-of-type{margin-top:10px}
.motiv-sub h4{margin:0 0 6px;font-size:13.5px;color:var(--green-d);border-top:1px solid var(--line);padding-top:12px}
.motiv-sub:first-of-type h4{border-top:none;padding-top:0}
.cycle-table{width:100%;font-size:12.5px}
.cycle-table td:first-child{white-space:nowrap;font-weight:650;color:var(--green-d)}
.cycle-pay{background:#eef4ef}
@media print{
  @page{size:A4 portrait;margin:15mm}
  body{font-size:11px;background:#fff}
  header,nav,#filters,#tabs,#welcome,#gsearch,.ov-close,.ov-print,.toolbar{display:none!important}
  #overlay{position:static!important;display:block!important;background:#fff!important;padding:0!important;overflow:visible!important}
  .ov-card{box-shadow:none!important;max-width:100%!important;padding:0!important;border-radius:0!important}
  .ov-card h2{font-size:15px;margin:0 0 6px;color:#0f5128}
  .panel{box-shadow:none!important;border:1px solid #cbd5cd;padding:7px 10px;margin:7px 0;break-inside:avoid}
  .panel h3{font-size:12px;margin:0 0 5px}
  .cards{grid-template-columns:repeat(4,1fr);gap:6px;margin:6px 0}
  .kpi{padding:5px 8px}.kpi .v{font-size:14px}.kpi .v.sm{font-size:11px}.kpi .l{font-size:9.5px}.kpi .s{font-size:9px}
  table{font-size:9.5px}th,td{padding:3px 5px}
  .tablewrap{max-height:none!important;overflow:visible!important;border:none}
  .note{font-size:9.5px;background:#f7f7f7;border-color:#ddd}
  .synth-meta{font-size:9.5px}
  .synth-section{margin:7px 0;break-inside:auto}
  .synth-section h3{font-size:11px;margin-bottom:4px}
  .synth-table{font-size:8.5px}
  .synth-table thead{display:table-header-group}
  .synth-table tr{break-inside:avoid}
  /* L'apercu est decoupe en feuilles A4 de 297 mm : imprime tel quel, chacune
     depasse la zone imprimable et occupe deux feuilles. On imprime donc une
     version continue, paginee par le navigateur : marges normales, saut de page
     automatique, nombre de pages automatique. */
  .sheet-screen{display:none!important}
  .sheet-print{display:block!important}
  .pay-sheet{font-size:8.5px}
  .pay-sheet{width:100%;table-layout:fixed}
  .pay-sheet thead{display:table-header-group}   /* en-tetes repris sur chaque page A4 */
  .pay-sheet tr{break-inside:avoid}
  .pay-sheet .sign-cell{min-width:0;height:20px}
  .pay-sheet .sheet-meta th{background:#fff!important;color:#0f5128!important;font-size:8px;
    text-align:left;border-bottom:none;padding-bottom:1px}
  .pay-sheet td,.pay-sheet th{padding:2px 3px}
  .pay-signatures{margin-top:14px;font-size:10px;break-inside:avoid}
  .panel.context{background:#fff!important;color:#000!important;border:1px solid #cbd5cd!important}
  .panel.context h3,.panel.context .cycle-table td:first-child{color:#0f5128!important}
  .panel.context .intro{background:transparent!important;color:#000!important;padding:0!important}
  .panel.context b,.panel.context strong,.panel.context .intro b{color:#0f5128!important}
  .panel.context code{color:#0f5128!important;background:#eef4ef!important}
  .panel.context th{background:#eef4ef!important;color:#0f5128!important;border-color:#cbd5cd!important}
  .panel.context td{border-color:#cbd5cd!important}
  .panel.context .hint{color:#444!important}
  #ov-body svg{max-width:260px;height:auto}
  .panel,.kpi{break-inside:avoid}
}
.filecards{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin:18px auto;max-width:760px}
.filecard{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--green);border-radius:10px;padding:14px 16px;width:330px;text-align:left}
.filecard .fc-t{font-weight:600;color:var(--green-d);margin-bottom:5px}
.filecard .fc-d{font-size:12.5px;color:var(--muted);line-height:1.45}
.home-actions{margin:10px 0}
.demo-card{max-width:760px;margin:18px auto 8px;background:#f0f8f3;border:1px solid #b7d8c2;border-left:4px solid var(--green);border-radius:10px;padding:14px 16px;text-align:center}
.demo-card h3{margin:0 0 6px;color:var(--green-d);font-size:15px}
.demo-card p{margin:6px 0 10px;font-size:13px;color:var(--ink);line-height:1.45}
.demo-flag{background:#fff1f0;border:2px solid var(--red);border-radius:8px;padding:11px 13px;font-size:13px;font-weight:700;margin:0 0 12px;color:#a3261a}
.logic-diagram{display:block;max-width:100%;height:auto;border:1px solid var(--line);border-radius:8px;background:#fff;margin:8px 0}
.leaflet-pane.cultureBands-pane{mix-blend-mode:multiply}
.north-control{background:#fff;border:2px solid rgba(0,0,0,.2);border-radius:4px;width:38px;height:54px;text-align:center;color:#17231b;font:bold 13px/16px system-ui;padding-top:3px;box-sizing:border-box}
.north-control .arrow{display:block;font-size:28px;line-height:27px;color:var(--green-d)}
.doc-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.leaflet-tooltip.seed-count{background:transparent;border:0;box-shadow:none;color:#fff;font:bold 11px/1 system-ui;text-shadow:0 1px 2px #000;padding:0;pointer-events:none}
.seed-popup{max-height:260px;overflow:auto;min-width:230px}.seed-popup .seed-item{padding:7px 0;border-top:1px solid var(--line)}.seed-popup .seed-item:first-of-type{border-top:0}
.degraded-flag{background:#fff4dc;border:2px solid var(--orange);border-radius:8px;padding:11px 13px;font-size:13px;font-weight:600;margin:0 0 12px;color:#744408}
.import-warning{background:#fff4dc;border:2px solid var(--orange);border-radius:8px;padding:11px 13px;font-size:13px;margin:0 0 12px;color:#744408}
.limitations{margin-top:20px;background:#fff8df;border:1px solid #edd784;border-left:4px solid #d8a813;border-radius:8px;padding:10px 12px;color:#4b4328;font-size:12.5px}
.limitations h3{margin:0 0 5px;font-size:13px;color:#705c13}
.limitations ul{margin:4px 0 0;padding-left:18px}.limitations li{margin:3px 0}
.app-footer{max-width:1280px;margin:0 auto;padding:4px 20px 18px;color:var(--muted);font-size:11.5px;text-align:center}
.iki-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(235px,1fr));gap:12px;margin:14px 0}
.iki-card{background:#fff;border:1px solid var(--line);border-top:4px solid var(--green);border-radius:10px;padding:13px 15px}
.iki-card .code{font-size:10.5px;font-weight:700;color:var(--green);letter-spacing:.04em;text-transform:uppercase}
.iki-card .value{font-size:25px;font-weight:750;color:var(--green-d);line-height:1.15;margin:4px 0}
.iki-card .label{font-size:13px;font-weight:650}.iki-card .meta{font-size:11px;color:var(--muted);margin-top:5px;line-height:1.4}
.iki-card .target{font-size:11px;color:var(--orange);margin-top:7px;font-weight:600}
.iki-card .target-bar{height:5px;background:#e7ede9;border-radius:5px;margin-top:4px;overflow:hidden}.iki-card .target-bar span{display:block;height:100%;background:var(--green)}
body.landing header{padding:10px 22px;gap:14px}
body.landing #logo{height:48px}
body.landing header .sub{font-size:11px}
body.landing main{padding:10px 20px 4px}
body.landing .app-footer{padding:2px 20px 8px}
body.landing .empty{padding:10px 20px 0}
body.landing .empty h2{margin:0 0 4px;font-size:22px}
body.landing #welcome>.muted{max-width:820px;margin:4px auto 8px;line-height:1.35}
body.landing .filecards{gap:10px;margin:10px auto;max-width:820px}
body.landing .filecard{padding:10px 12px;width:360px}
body.landing .filecard .fc-t{margin-bottom:3px}
body.landing .filecard .fc-d{font-size:12px;line-height:1.35}
body.landing .home-actions{margin:8px 0}
body.landing .demo-card{margin:8px auto;padding:10px 12px;max-width:760px}
body.landing .demo-card h3{font-size:14px;margin-bottom:3px}
body.landing .demo-card p{margin:3px 0 8px;font-size:12px;line-height:1.35}
body.landing #welcome .note{max-width:820px!important;margin:7px auto!important;padding:8px 10px;font-size:12px;line-height:1.35}
@media (min-height:850px){
  body.landing{min-height:100vh;display:flex;flex-direction:column}
  body.landing main{flex:1;display:flex;align-items:stretch;padding:14px 20px 6px}
  body.landing .app-footer{padding:4px 20px 10px}
  body.landing .empty{flex:1;display:flex;flex-direction:column;justify-content:space-evenly;gap:clamp(8px,1.2vh,18px);padding:0 20px}
}
