/* ---- DataTable3 — a self-contained, client-side table styled like the GoingNext Studio ---- */
/* Thème piloté par la CLASSE `body.dark` de l'app (comme DataForm/ViewRecord), PAS par
   `prefers-color-scheme` : sinon la table suit l'OS et ignore le bouton clair/sombre de l'app
   (cf. mémoire « dark mode is a class not OS »). Défaut = CLAIR (défaut de l'app) ; `body.dark` = sombre. */
.gn-dt3{
  --dt-bg:#f4f5fa; --dt-panel:#fff; --dt-panel2:#f8f9fd; --dt-elev:#fff;
  --dt-line:#e2e5f0; --dt-line2:#d3d7e6;
  --dt-ink:#191b26; --dt-ink-soft:#4c5064; --dt-muted:#7a7f95; --dt-faint:#a7abbe;
  --dt-accent:#5b5bf0; --dt-accent-soft:#ecebff; --dt-accent-line:#c9c8ff;
  --dt-ok:#1f9d6b; --dt-ok-soft:#e4f6ee; --dt-danger:#d6435f;
  --dt-radius:12px;
  color:var(--dt-ink);
  font:13.5px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;
}
body.dark .gn-dt3{
  --dt-bg:#0d0e15; --dt-panel:#14151e; --dt-panel2:#181a24; --dt-elev:#1d1f2b;
  --dt-line:#262838; --dt-line2:#323550;
  --dt-ink:#e8e9f2; --dt-ink-soft:#b7bacb; --dt-muted:#878aa0; --dt-faint:#5c6076;
  --dt-accent:#7c7cff; --dt-accent-soft:#211f3d; --dt-accent-line:#3b3a68;
  --dt-ok:#43c59e; --dt-ok-soft:#123027; --dt-danger:#f2708b;
}
.gn-dt3 *{box-sizing:border-box}
.gn-dt3 .dt3-shell{background:var(--dt-panel);border:1px solid var(--dt-line);border-radius:var(--dt-radius);overflow:hidden}
.gn-dt3 .dt3-ribbon{display:flex;align-items:center;gap:8px;padding:8px 14px;font-size:12px;color:var(--dt-accent);background:var(--dt-accent-soft);border-bottom:1px solid var(--dt-accent-line)}
.gn-dt3 .dt3-ribbon svg{width:14px;height:14px;flex:none}
/* toolbar */
.gn-dt3 .dt3-bar{display:flex;align-items:center;gap:10px;padding:11px 14px;flex-wrap:wrap}
.gn-dt3 .dt3-viewbar{display:flex;align-items:center;gap:7px;padding:7px 14px;border-top:1px solid var(--dt-line);border-bottom:1px solid var(--dt-line);background:var(--dt-panel2);flex-wrap:wrap}
/* Bandeau de CONTEXTE parent : liste scop\00e9e \00e0 un enregistrement (ex. « Adh\00e9rent : MANSOUR Yosra » + « Voir tous ») */
.gn-dt3 .dt3-ctxbar{display:flex;align-items:center;gap:9px;padding:8px 14px;border-top:1px solid var(--dt-line);background:color-mix(in srgb,var(--dt-accent,#4f46e5) 6%,var(--dt-panel2));color:var(--dt-ink-soft);flex-wrap:wrap;font-size:13px}
.gn-dt3 .dt3-ctxbar>svg{color:var(--dt-accent,#4f46e5);flex:none}
.gn-dt3 .dt3-ctxchips{display:inline-flex;gap:6px;flex-wrap:wrap;flex:1;min-width:0}
.gn-dt3 .dt3-ctxchip{display:inline-flex;align-items:center;gap:7px;padding:3px 11px;border-radius:999px;background:var(--dt-panel);border:1px solid var(--dt-line)}
.gn-dt3 .dt3-ctxk{color:var(--dt-ink-soft);font-size:12px}
.gn-dt3 .dt3-ctxchip b{color:var(--dt-ink);font-weight:600}
.gn-dt3 .dt3-ctxclear{flex:none;display:inline-flex;align-items:center;font-size:12.5px;font-weight:600;color:var(--dt-accent,#4f46e5);background:transparent;border:0;cursor:pointer;padding:5px 10px;border-radius:7px;transition:background .12s}
.gn-dt3 .dt3-ctxclear:hover{background:color-mix(in srgb,var(--dt-accent,#4f46e5) 13%,transparent)}
.gn-dt3 .dt3-vpill{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--dt-ink-soft);font:inherit;font-weight:500;font-size:12.5px;cursor:pointer;position:relative}
.gn-dt3 .dt3-vpill:hover{background:var(--dt-panel);border-color:var(--dt-line);color:var(--dt-ink)}
.gn-dt3 .dt3-vpill svg{width:15px;height:15px;flex:none;opacity:.85}
.gn-dt3 .dt3-vpill.on{background:var(--dt-accent-soft);border-color:var(--dt-accent-line);color:var(--dt-accent)}
.gn-dt3 .dt3-vpill.on svg{opacity:1}
.gn-dt3 .dt3-vpill.has{color:var(--dt-ink)}
.gn-dt3 .dt3-vpill b{font-size:14px;line-height:1}
.gn-dt3 .dt3-vpill .dt3-cav{display:inline-flex;margin-inline-start:1px;opacity:.55}
.gn-dt3 .dt3-vpill .dt3-cav svg{width:13px;height:13px}
.gn-dt3 .dt3-vpill .dt3-fcount{background:var(--dt-accent);color:#fff;font-size:10px;font-weight:700;min-width:16px;height:16px;padding:0 4px;border-radius:9px;display:inline-grid;place-items:center}
.gn-dt3 .dt3-vpsel{padding-block:0 0;padding-inline:10px 6px}
.gn-dt3 .dt3-vpsel select{border:0;background:transparent;color:inherit;font:inherit;font-weight:500;cursor:pointer;outline:none;max-width:150px}
.gn-dt3 .dt3-vpsel.has{background:var(--dt-accent-soft);border-color:var(--dt-accent-line);color:var(--dt-accent)}
.gn-dt3 .dt3-morepop{min-width:194px}
.gn-dt3 .dt3-rowmenu{position:relative;display:inline-flex}
.gn-dt3 .dt3-rowmenu>summary{list-style:none;cursor:pointer}
.gn-dt3 .dt3-rowmenu>summary::-webkit-details-marker{display:none}
.gn-dt3 .dt3-rowmenu[open]>summary{background:var(--dt-accent-soft);color:var(--dt-accent);border-radius:7px}
.gn-dt3 .dt3-rowpop{position:absolute;top:calc(100% + 4px);right:0;z-index:30;min-width:184px;background:var(--dt-elev);border:1px solid var(--dt-line2);border-radius:10px;box-shadow:0 12px 34px rgba(0,0,0,.35);padding:5px;text-align:start}
.gn-dt3 .dt3-rowpop .dt3-mi{text-decoration:none;color:var(--dt-ink);white-space:nowrap}
.gn-dt3 .dt3-rowpop .dt3-mi span{overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-cai{width:15px;height:15px;display:inline-flex;flex:none}
.gn-dt3 .dt3-chip.dt3-badge{border:1px solid;font-weight:600}
.gn-dt3 .dt3-cards-h{grid-template-columns:1fr !important}
.gn-dt3 .dt3-card-hz{flex-direction:row;align-items:center;gap:16px}
.gn-dt3 .dt3-card-hz .dt3-cardb{flex:1;display:flex;flex-wrap:wrap;gap:10px 18px}
.gn-dt3 .dt3-card-custom{padding:14px;position:relative}
.gn-dt3 .dt3-title{display:flex;align-items:center;gap:9px;font-weight:600;font-size:14px;letter-spacing:.2px}
.gn-dt3 .dt3-count{font:600 11px/1 system-ui;color:var(--dt-ink-soft);background:var(--dt-panel2);border:1px solid var(--dt-line);padding:4px 8px;border-radius:20px}
.gn-dt3 .dt3-sp{flex:1}
.gn-dt3 .dt3-search{display:flex;align-items:center;gap:7px;background:var(--dt-panel2);border:1px solid var(--dt-line);border-radius:9px;padding:6px 10px;min-width:200px}
.gn-dt3 .dt3-search:focus-within{border-color:var(--dt-accent);box-shadow:0 0 0 3px var(--dt-accent-soft)}
.gn-dt3 .dt3-search svg{width:15px;height:15px;color:var(--dt-muted);flex:none}
.gn-dt3 .dt3-search input{border:0;background:transparent;color:var(--dt-ink);font:inherit;outline:none;width:100%}
.gn-dt3 .dt3-search input::placeholder{color:var(--dt-faint)}
.gn-dt3 .dt3-btn{display:inline-flex;align-items:center;gap:7px;background:var(--dt-panel2);border:1px solid var(--dt-line);color:var(--dt-ink-soft);font:inherit;font-weight:500;padding:7px 11px;border-radius:9px;cursor:pointer;position:relative}
.gn-dt3 .dt3-btn:hover{border-color:var(--dt-line2);color:var(--dt-ink)}
.gn-dt3 .dt3-btn svg{width:15px;height:15px;flex:none}
.gn-dt3 .dt3-btn.on{border-color:var(--dt-accent-line);background:var(--dt-accent-soft);color:var(--dt-accent)}
/* columns dropdown */
.gn-dt3 .dt3-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:20;background:var(--dt-elev);border:1px solid var(--dt-line2);border-radius:10px;box-shadow:0 12px 34px rgba(0,0,0,.35);padding:7px;min-width:210px;max-height:320px;overflow:auto}
.gn-dt3 .dt3-viewbar .dt3-pop{left:0;right:auto}
.gn-dt3 .dt3-pop h5{margin:4px 8px 6px;font:600 10.5px/1 system-ui;letter-spacing:.7px;text-transform:uppercase;color:var(--dt-muted)}
.gn-dt3 .dt3-pop label{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:13px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-pop label:hover{background:var(--dt-panel2);color:var(--dt-ink)}
/* table */
.gn-dt3 .dt3-scroll{overflow-x:auto}
.gn-dt3 table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.gn-dt3 thead th{position:sticky;top:0;background:var(--dt-panel2);text-align:start;font:650 10.5px/1 system-ui;letter-spacing:.7px;text-transform:uppercase;color:var(--dt-muted);color:color-mix(in srgb,var(--dt-muted),var(--dt-ink) 40%);padding:12px 14px;border-bottom:1px solid color-mix(in srgb,var(--dt-line) 55%,transparent);white-space:nowrap;user-select:none}
/* Arabic/RTL headers: the 10.5px/1 line-height + UPPERCASE is tuned for Latin caps (no descenders) and clips
   Arabic glyphs. Give RTL headers real line-height and drop uppercase/letter-spacing (harmful to Arabic shaping). */
[dir="rtl"] .gn-dt3 thead th{line-height:1.7;letter-spacing:normal;text-transform:none}
.gn-dt3 thead th.sortable{cursor:pointer}
.gn-dt3 thead th.sortable:hover{color:var(--dt-ink-soft)}
.gn-dt3 thead th .dt3-sort{display:inline-flex;align-items:center;gap:5px}
.gn-dt3 thead th .dt3-arrow{width:11px;height:11px;opacity:.45}
.gn-dt3 thead th.sorted .dt3-arrow{opacity:1;color:var(--dt-accent)}
.gn-dt3 tbody td{padding:11px 14px;border-bottom:1px solid color-mix(in srgb,var(--dt-line) 55%,transparent);color:var(--dt-ink-soft);vertical-align:middle;max-width:340px}
.gn-dt3 tbody tr:hover td{background:var(--dt-panel2)}
.gn-dt3 tbody tr:last-child td{border-bottom:0}
.gn-dt3 tbody tr.sel td{background:var(--dt-accent-soft)}
.gn-dt3 td.trunc{max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-key{color:var(--dt-ink);font-weight:500}
.gn-dt3 .dt3-faint{color:var(--dt-faint)}
/* code technique + description lisible dans la colonne-titre (labelField) : description en avant, code en petit dessous */
.gn-dt3 .dt3-codepair{display:inline-flex;flex-direction:column;line-height:1.3;min-width:0;max-width:100%}
.gn-dt3 .dt3-codepair-main{color:var(--dt-ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-codepair-code{color:var(--dt-faint);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font:600 11px/1.5 system-ui;border:1px solid var(--dt-line2)}
.gn-dt3 .dt3-pill.t{color:var(--dt-ok);background:var(--dt-ok-soft);border-color:transparent}
.gn-dt3 .dt3-pill.f{color:var(--dt-muted);background:var(--dt-panel2)}
.gn-dt3 .dt3-num{color:var(--dt-ink);font-weight:500}
/* checkboxes */
.gn-dt3 .dt3-ck{width:16px;height:16px;border:1.5px solid var(--dt-line2);border-radius:5px;background:var(--dt-panel2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none;transition:.12s}
.gn-dt3 .dt3-ck.ck{background:var(--dt-accent);border-color:var(--dt-accent)}
.gn-dt3 .dt3-ck svg{width:11px;height:11px;color:#fff;opacity:0}
.gn-dt3 .dt3-ck.ck svg{opacity:1}
.gn-dt3 th.dt3-ckcell,.gn-dt3 td.dt3-ckcell{width:44px;padding-inline-start:14px;padding-inline-end:0}
/* row actions */
.gn-dt3 td.dt3-actions{text-align:end;white-space:nowrap;width:1%}
.gn-dt3 .dt3-ia{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:7px;color:var(--dt-muted);cursor:pointer;border:1px solid transparent}
.gn-dt3 .dt3-ia:hover{background:var(--dt-panel2);border-color:var(--dt-line);color:var(--dt-ink)}
.gn-dt3 .dt3-ia svg{width:15px;height:15px}
.gn-dt3 .dt3-ia.del:hover{color:var(--dt-danger)}
/* states */
.gn-dt3 .dt3-state{padding:56px 24px;text-align:center;color:var(--dt-muted)}
.gn-dt3 .dt3-state svg{width:34px;height:34px;opacity:.5;margin-bottom:10px}
.gn-dt3 .dt3-state b{color:var(--dt-ink-soft);display:block;font-size:14px;margin-bottom:4px}
.gn-dt3 .dt3-spin{width:26px;height:26px;border:3px solid var(--dt-line2);border-top-color:var(--dt-accent);border-radius:50%;animation:dt3spin .7s linear infinite;margin:0 auto 12px}
@keyframes dt3spin{to{transform:rotate(360deg)}}
.gn-dt3 .dt3-skel{height:13px;border-radius:6px;background:linear-gradient(90deg,var(--dt-panel2),var(--dt-elev),var(--dt-panel2));background-size:200% 100%;animation:dt3sh 1.2s ease-in-out infinite}
@keyframes dt3sh{0%{background-position:200% 0}100%{background-position:-200% 0}}
/* footer / pager */
.gn-dt3 .dt3-foot{display:flex;align-items:center;gap:12px;padding:11px 14px;border-top:1px solid var(--dt-line);flex-wrap:wrap;color:var(--dt-muted);font-size:12.5px}
/* « +N colonnes » : le style de base vit ICI (gn-design.css ne le pose que sous un système de design) ; sinon le bouton est nu et son icône s'étale */
.gn-dt3 .dt3-hidcols{display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:2px 8px;border:1px dashed var(--dt-line);border-radius:8px;background:transparent;color:var(--dt-muted);font:inherit;font-size:12px;cursor:pointer;white-space:nowrap}
.gn-dt3 .dt3-hidcols:hover{color:var(--dt-ink);border-color:currentColor}
.gn-dt3 .dt3-hidcols svg{width:13px;height:13px;flex:none}
.gn-dt3 .dt3-ctxbar>svg{width:15px;height:15px}
.gn-dt3 .dt3-foot select{background:var(--dt-panel2);border:1px solid var(--dt-line);color:var(--dt-ink-soft);border-radius:7px;padding:5px 8px;font:inherit}
.gn-dt3 .dt3-pager{display:flex;align-items:center;gap:4px;flex-wrap:wrap;min-width:0;max-width:100%}/* une rangée de pages ne déborde pas d'un téléphone : elle passe à la ligne (boutique S&P à 390 px, 23 oct. 2026) */
.gn-dt3 .dt3-pg{min-width:30px;height:30px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center;background:var(--dt-panel2);border:1px solid var(--dt-line);color:var(--dt-ink-soft);border-radius:8px;cursor:pointer;font:inherit}
.gn-dt3 .dt3-pg:hover:not(:disabled){border-color:var(--dt-line2);color:var(--dt-ink)}
.gn-dt3 .dt3-pg:disabled{opacity:.4;cursor:default}
.gn-dt3 .dt3-pg.cur{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-selinfo{color:var(--dt-accent)}
/* --- type-aware cells (Phase 1) --- */
.gn-dt3 .dt3-bchip{display:inline-flex;align-items:center;gap:5px;font:600 11px/1 system-ui;padding-block:3px 3px;padding-inline:6px 8px;border-radius:20px;border:1px solid var(--dt-line)}
.gn-dt3 .dt3-bchip .dt3-bi{width:13px;height:13px}
.gn-dt3 .dt3-bchip.y{color:var(--dt-ok);background:var(--dt-ok-soft);border-color:transparent}
.gn-dt3 .dt3-bchip.n{color:var(--dt-muted);background:var(--dt-panel2)}
.gn-dt3 .dt3-chip{display:inline-block;font:600 11.5px/1 system-ui;padding:4px 9px;border-radius:20px;color:hsl(var(--h) 70% 42%);background:hsl(var(--h) 70% 42% / .12);border:1px solid hsl(var(--h) 55% 50% / .28)}
body.dark .gn-dt3 .dt3-chip{color:hsl(var(--h) 78% 74%);background:hsl(var(--h) 60% 60% / .16);border-color:hsl(var(--h) 55% 60% / .30)}
.gn-dt3 .dt3-link{color:var(--dt-accent);text-decoration:none;border-bottom:1px solid transparent}
.gn-dt3 .dt3-link:hover{border-bottom-color:currentColor}
.gn-dt3 .dt3-rel{color:var(--dt-ink-soft)}
.gn-dt3 .dt3-thumb-w{display:inline-flex}
.gn-dt3 .dt3-thumb{width:34px;height:34px;object-fit:cover;border-radius:7px;border:1px solid var(--dt-line);background:var(--dt-panel2)}
.gn-dt3 .dt3-swatch{display:inline-flex;align-items:center;gap:6px;font-size:11.5px}
.gn-dt3 .dt3-swatch i{width:14px;height:14px;border-radius:4px;border:1px solid var(--dt-line2)}
.gn-dt3 td.dt3-c-num{text-align:end;font-variant-numeric:tabular-nums}
.gn-dt3 thead th.dt3-c-num,.gn-dt3 thead th.dt3-c-currency{text-align:end}
.gn-dt3 thead th.dt3-c-num .dt3-sort,.gn-dt3 thead th.dt3-c-currency .dt3-sort{flex-direction:row-reverse;gap:5px}
/* De droite à gauche, une colonne de nombres garde son bord DROIT : c'est là que commence la ligne, donc là qu'est son en-tête ;
   les valeurs s'y rangent et leurs décimales tombent l'une sous l'autre, comme de gauche à droite. (« end » y désigne le bord
   GAUCHE : les valeurs partaient de la gauche, loin de leur en-tête, décimales en escalier — vu le 9 octobre 2026.) */
[dir="rtl"] .gn-dt3 td.dt3-c-num,[dir="rtl"] .gn-dt3 td.dt3-c-currency{text-align:right}
[dir="rtl"] .gn-dt3 thead th.dt3-c-num,[dir="rtl"] .gn-dt3 thead th.dt3-c-currency{text-align:right}
[dir="rtl"] .gn-dt3 thead th.dt3-c-num .dt3-sort,[dir="rtl"] .gn-dt3 thead th.dt3-c-currency .dt3-sort{flex-direction:row;justify-content:flex-start}
.gn-dt3 td.dt3-c-image{width:1%}
.gn-dt3 .dt3-long{color:var(--dt-ink-soft)}
.gn-dt3 .dt3-prog{display:inline-flex;align-items:center;gap:7px;min-width:88px}
.gn-dt3 .dt3-prog-b{height:6px;flex:1;border-radius:4px;background:linear-gradient(90deg,var(--dt-accent),var(--dt-ok));min-width:8px}
.gn-dt3 .dt3-prog{position:relative;background:var(--dt-panel2);border-radius:4px;padding:0}
.gn-dt3 .dt3-prog em{font:600 10px/1 system-ui;color:var(--dt-muted);font-style:normal}
.gn-dt3 .dt3-spri{font:700 9px/1 var(--dt-mono,ui-monospace,monospace);color:var(--dt-accent);vertical-align:super;margin-inline-start:1px}
.gn-dt3 th.sortable{cursor:pointer;user-select:none}
.gn-dt3 td.editing{padding:0!important}
.gn-dt3 .dt3-ed{width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);color:var(--dt-ink);font:inherit;font-size:13px;padding:0 12px;outline:none}
/* Édition inline d'un champ BOOLEAN : toggle switch (au lieu d'un <select> Oui/Non) */
.gn-dt3 .dt3-btoggle-wrap{display:flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);padding:0 12px}
.gn-dt3 input.dt3-ed.dt3-btoggle{-webkit-appearance:none;appearance:none;width:38px;height:22px;min-height:0;flex:0 0 auto;border:1px solid var(--dt-line2);border-radius:999px;background:var(--dt-panel2);position:relative;cursor:pointer;padding:0;margin:0;outline:none;transition:background .15s ease,border-color .15s ease}
.gn-dt3 input.dt3-ed.dt3-btoggle::before{content:'';position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.3);transition:transform .15s ease}
.gn-dt3 input.dt3-ed.dt3-btoggle:checked{background:var(--dt-ok);border-color:var(--dt-ok)}
.gn-dt3 input.dt3-ed.dt3-btoggle:checked::before{transform:translateX(16px)}
.gn-dt3 input.dt3-ed.dt3-btoggle:focus-visible{box-shadow:0 0 0 2px var(--dt-accent-line,rgba(99,102,241,.35))}
.gn-dt3 .dt3-btoggle-txt{font:600 13px/1 system-ui;color:var(--dt-ink)}
.gn-dt3 td.dt3-edcell{cursor:text}.gn-dt3 td.dt3-edcell:hover{box-shadow:inset 0 0 0 1px var(--dt-accent);background:rgba(99,102,241,.05)}
.gn-dt3 td.editing{overflow:visible!important}
.gn-dt3 td.dt3-edok{animation:dt3edok .9s ease-out}.gn-dt3 td.dt3-ederr{animation:dt3ederr 1.5s ease-out}
@keyframes dt3edok{0%{background:rgba(34,197,94,.32)}100%{background:transparent}}
@keyframes dt3ederr{0%,55%{background:rgba(239,68,68,.28)}100%{background:transparent}}
.gn-dt3 .dt3-fkcombo{position:relative;width:100%;height:100%}
.gn-dt3 .dt3-fksearch{width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);color:var(--dt-ink);font:inherit;font-size:13px;padding:0 12px;outline:none}
.gn-dt3 .dt3-fkmenu{display:none}
.gn-dt3 .dt3-fkcombo.open .dt3-fkmenu{display:block;position:fixed;z-index:60;max-height:260px;overflow-y:auto;background:var(--dt-panel);border:1px solid var(--dt-line,#e5e7eb);border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.18);padding:4px}
.gn-dt3 .dt3-fkopt{padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--dt-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-fkopt.hi,.gn-dt3 .dt3-fkopt:hover{background:var(--dt-accent-line,rgba(99,102,241,.16))}
.gn-dt3 .dt3-fkempty{padding:8px 10px;font-size:12px;color:var(--dt-muted,#8a8f98)}
/* ---- SOTA inline editors : textarea, color, rating, range/progress, tags ---- */
.gn-dt3 textarea.dt3-ed.dt3-edta{min-height:40px;height:auto;line-height:1.45;padding:8px 12px;resize:vertical}
.gn-dt3 .dt3-colored{display:flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);padding:0 10px}
.gn-dt3 input.dt3-ed.dt3-edcolor{width:30px;height:24px;min-height:0;flex:0 0 auto;border:1px solid var(--dt-line2);border-radius:6px;padding:0;background:none;cursor:pointer}
.gn-dt3 .dt3-colorhex{flex:1 1 auto;min-width:0;border:0;background:none;color:var(--dt-ink);font:inherit;font-size:13px;outline:none;text-transform:uppercase}
.gn-dt3 .dt3-rateed{display:flex;align-items:center;gap:2px;width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);padding:0 10px;outline:none}
.gn-dt3 .dt3-star{font-size:20px;line-height:1;color:var(--dt-line2);cursor:pointer;transition:color .1s ease}
.gn-dt3 .dt3-star.on{color:#f5a623}
.gn-dt3 .dt3-rateclear{margin-inline-start:6px;color:var(--dt-muted,#8a8f98);cursor:pointer;font-size:15px;line-height:1}
.gn-dt3 .dt3-rateclear:hover{color:var(--dt-err,#e5484d)}
.gn-dt3 .dt3-rangeed{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;height:100%;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);padding:0 12px}
.gn-dt3 input.dt3-ed.dt3-edrange{flex:1 1 auto;min-height:0;border:0;padding:0;accent-color:var(--dt-accent);cursor:pointer}
.gn-dt3 .dt3-rangeval{flex:0 0 auto;font:600 12px/1 system-ui;color:var(--dt-ink);min-width:40px;text-align:end;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-tagsed{display:flex;flex-wrap:wrap;align-items:center;gap:5px;width:100%;box-sizing:border-box;min-height:40px;border:2px solid var(--dt-accent);background:var(--dt-panel);padding:5px 8px;cursor:text}
.gn-dt3 .dt3-tagchip{display:inline-flex;align-items:center;gap:4px;background:var(--dt-accent-soft);color:var(--dt-ink);border-radius:6px;padding:2px 6px;font-size:12px;line-height:1.4}
.gn-dt3 .dt3-tagx{cursor:pointer;color:var(--dt-muted,#8a8f98);font-style:normal;font-size:14px}
.gn-dt3 .dt3-tagx:hover{color:var(--dt-err,#e5484d)}
.gn-dt3 .dt3-taginput{flex:1 1 60px;min-width:60px;border:0;background:none;color:var(--dt-ink);font:inherit;font-size:13px;outline:none;padding:2px}
.gn-dt3 .dt3-btn.primary{color:#fff;background:var(--dt-accent);border-color:var(--dt-accent)}
.gn-dt3 tr.dt3-draft{background:var(--dt-accent-soft)}
.gn-dt3 tr.dt3-draft td{padding:5px 8px}
.gn-dt3 .dt3-ded{width:100%;box-sizing:border-box;height:30px;border:1px solid var(--dt-line2);border-radius:6px;background:var(--dt-panel);color:var(--dt-ink);font:inherit;font-size:12px;padding:0 8px;outline:none}
.gn-dt3 .dt3-ded:focus{border-color:var(--dt-accent)}
.gn-dt3 .dt3-ia.ok{color:var(--dt-ok)}
.gn-dt3 .dt3-root{outline:none}
.gn-dt3 td.active{outline:2px solid var(--dt-accent);outline-offset:-2px;position:relative;z-index:1}
.gn-dt3 td.inrange{background:var(--dt-accent-soft)}
.gn-dt3 .dt3-flash{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);background:var(--dt-elev);color:var(--dt-ink);border:1px solid var(--dt-line2);border-radius:20px;padding:6px 14px;font-size:12px;box-shadow:0 6px 20px rgba(0,0,0,.25);opacity:0;transition:opacity .15s;pointer-events:none;z-index:20}
.gn-dt3 .dt3-flash.on{opacity:1}
.gn-dt3 .dt3-ic{display:inline-grid;place-items:center;width:32px;height:32px;border:1px solid var(--dt-line);border-radius:8px;background:var(--dt-panel2);color:var(--dt-ink-soft);cursor:pointer}
.gn-dt3 .dt3-ic:hover:not(:disabled){border-color:var(--dt-accent);color:var(--dt-accent)}
.gn-dt3 .dt3-ic:disabled{opacity:.4;cursor:default}
.gn-dt3 .dt3-ic svg{width:16px;height:16px}
.gn-dt3 .dt3-btn.has{border-color:var(--dt-accent);color:var(--dt-accent)}
.gn-dt3 .dt3-fcount{display:inline-grid;place-items:center;min-width:16px;height:16px;padding:0 4px;margin-inline-start:2px;border-radius:8px;background:var(--dt-accent);color:#fff;font-size:10px;font-weight:700}
.gn-dt3 .dt3-filterwrap{position:relative;display:inline-flex}
.gn-dt3 .dt3-fpop{left:auto;right:0;min-width:300px;max-width:380px;max-height:70vh;overflow:auto;padding:12px;text-align:start;cursor:default}
.gn-dt3 .dt3-fhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.gn-dt3 .dt3-fpop h5{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-fpop h6{margin:8px 0 4px;font-size:11px;font-weight:600;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-fempty{margin:4px 0 8px;color:var(--dt-ink-soft);font-size:12px}
.gn-dt3 .dt3-conds{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.gn-dt3 .dt3-cond{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.gn-dt3 .dt3-fsel,.gn-dt3 .dt3-fval{height:28px;border:1px solid var(--dt-line);border-radius:6px;background:var(--dt-panel);color:var(--dt-ink);font-size:12px;padding:0 6px;min-width:0}
.gn-dt3 .dt3-fsel{max-width:120px}
.gn-dt3 .dt3-fval{flex:1;min-width:70px}
.gn-dt3 .dt3-fval.sm{flex:none;width:96px}
.gn-dt3 .dt3-fto{color:var(--dt-ink-soft);font-size:12px}
.gn-dt3 .dt3-fmulti{flex:1;font-size:12px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-fx{display:inline-grid;place-items:center;width:22px;height:22px;border:0;border-radius:5px;background:none;color:var(--dt-ink-soft);cursor:pointer}
.gn-dt3 .dt3-fx:hover{background:var(--dt-danger-soft,rgba(220,60,60,.14));color:var(--dt-danger,#d94b4b)}
.gn-dt3 .dt3-fx svg{width:13px;height:13px}
.gn-dt3 .dt3-addcond{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 10px;border:1px dashed var(--dt-line);border-radius:6px;background:none;color:var(--dt-ink-soft);cursor:pointer;font-size:12px}
.gn-dt3 .dt3-addcond:hover{border-color:var(--dt-accent);color:var(--dt-accent)}
.gn-dt3 .dt3-addcond svg{width:13px;height:13px}
.gn-dt3 .dt3-facets{margin-top:12px;border-top:1px solid var(--dt-line);padding-top:8px}
.gn-dt3 .dt3-facet{margin-bottom:8px}
.gn-dt3 .dt3-facetv{display:flex;flex-wrap:wrap;gap:4px}
.gn-dt3 .dt3-facetb{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 8px;border:1px solid var(--dt-line);border-radius:12px;background:var(--dt-panel2);color:var(--dt-ink);cursor:pointer;font-size:11px}
.gn-dt3 .dt3-facetb:hover{border-color:var(--dt-accent)}
.gn-dt3 .dt3-facetb.on{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-facetn{opacity:.7;font-variant-numeric:tabular-nums;font-size:10px}
.gn-dt3 .dt3-facetb.on .dt3-facetn{opacity:.85}
.gn-dt3 .dt3-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;border-bottom:1px solid var(--dt-line);background:var(--dt-panel2)}
.gn-dt3 .dt3-fchip{display:inline-flex;align-items:center;gap:2px;max-width:260px;padding-block:2px 2px;padding-inline:10px 2px;border:1px solid var(--dt-accent);border-radius:14px;background:var(--dt-accent-soft,rgba(91,91,240,.12));color:var(--dt-accent);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-clearf{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;border:1px solid var(--dt-line);border-radius:12px;background:none;color:var(--dt-ink-soft);cursor:pointer;font-size:12px}
.gn-dt3 .dt3-clearf:hover{border-color:var(--dt-accent);color:var(--dt-accent)}
.gn-dt3 .dt3-clearf svg{width:13px;height:13px}
.gn-dt3 .dt3-vpop{left:auto;right:0;min-width:250px;padding:10px;text-align:start;cursor:default}
.gn-dt3 .dt3-vpop h5{margin:2px 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-vlist{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}
.gn-dt3 .dt3-vrow{display:flex;align-items:center;gap:2px}
.gn-dt3 .dt3-vitem{flex:1;display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 8px;border:0;border-radius:6px;background:none;color:var(--dt-ink);cursor:pointer;font:inherit;font-size:12px;text-align:start}
.gn-dt3 .dt3-vitem span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-vitem svg{width:14px;height:14px;opacity:.6;flex:none}
.gn-dt3 .dt3-vitem:hover{background:var(--dt-panel2)}
.gn-dt3 .dt3-vitem.on{background:var(--dt-accent-soft,rgba(91,91,240,.12));color:var(--dt-accent)}
.gn-dt3 .dt3-vitem.on svg{opacity:1}
.gn-dt3 .dt3-vsave{display:flex;gap:6px;margin-bottom:10px}
.gn-dt3 .dt3-vsave input{flex:1;min-width:0;height:30px;border:1px solid var(--dt-line);border-radius:6px;background:var(--dt-panel);color:var(--dt-ink);font-size:12px;padding:0 8px}
.gn-dt3 .dt3-btn.sm,.gn-dt3 .dt3-clearf.sm{height:30px;padding:0 10px;font-size:12px}
.gn-dt3 .dt3-densrow{display:flex;gap:4px}
.gn-dt3 .dt3-densb{flex:1;height:28px;border:1px solid var(--dt-line);border-radius:6px;background:var(--dt-panel2);color:var(--dt-ink-soft);cursor:pointer;font-size:11px}
.gn-dt3 .dt3-densb:hover{border-color:var(--dt-accent)}
.gn-dt3 .dt3-densb.on{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-root[data-density=compact] tbody td{padding-top:5px;padding-bottom:5px}
.gn-dt3 .dt3-root[data-density=cozy] tbody td{padding-top:10px;padding-bottom:10px}
.gn-dt3 .dt3-root[data-density=comfortable] tbody td{padding-top:16px;padding-bottom:16px}
/* Phase 8 — view modes */
.gn-dt3 .dt3-modes{display:inline-flex;align-items:center;gap:2px;margin-inline-start:8px;padding:2px;border:1px solid var(--dt-line);border-radius:8px;background:var(--dt-panel2)}
.gn-dt3 .dt3-modeb{display:inline-grid;place-items:center;width:28px;height:26px;border:0;border-radius:6px;background:none;color:var(--dt-ink-soft);cursor:pointer}
.gn-dt3 .dt3-modeb svg{width:15px;height:15px}
.gn-dt3 .dt3-modeb:hover{color:var(--dt-ink)}
.gn-dt3 .dt3-modeb.on{background:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-modex{display:inline-flex;align-items:center;gap:4px;margin-inline-start:4px;color:var(--dt-ink-soft);font-size:12px}
.gn-dt3 .dt3-modex select,.gn-dt3 .dt3-calfield select{height:26px;border:1px solid var(--dt-line);border-radius:6px;background:var(--dt-panel);color:var(--dt-ink);font-size:12px;padding:0 4px}
.gn-dt3 .dt3-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;padding:14px}
.gn-dt3 .dt3-card{border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel);overflow:hidden;display:flex;flex-direction:column}
.gn-dt3 .dt3-card-h{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;font-weight:600;color:var(--dt-ink);border-bottom:1px solid var(--dt-line);background:var(--dt-panel2)}
.gn-dt3 .dt3-cardb{padding:10px 12px;display:flex;flex-direction:column;gap:7px}
.gn-dt3 .dt3-cardf{display:grid;grid-template-columns:38% 1fr;gap:8px;align-items:baseline;font-size:12px}
.gn-dt3 .dt3-cardf dt{color:var(--dt-ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}
.gn-dt3 .dt3-cardf dd{margin:0;color:var(--dt-ink);overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-cactions,.gn-dt3 .dt3-gcard .dt3-cactions{display:inline-flex;gap:2px}
.gn-dt3 .dt3-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;padding:14px}
.gn-dt3 .dt3-gcard{border:1px solid var(--dt-line);border-radius:10px;overflow:hidden;background:var(--dt-panel);position:relative}
.gn-dt3 .dt3-ghero{aspect-ratio:4/3;background:var(--dt-panel2);display:grid;place-items:center;overflow:hidden}
.gn-dt3 .dt3-ghero img{width:100%;height:100%;object-fit:cover}
.gn-dt3 .dt3-gph{opacity:.3}.gn-dt3 .dt3-gph svg{width:40px;height:40px}
.gn-dt3 .dt3-gcap{padding:8px 10px}
.gn-dt3 .dt3-gtitle{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-gsub{margin-top:3px;font-size:12px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-gcard .dt3-cactions{position:absolute;top:6px;right:6px;background:rgba(0,0,0,.45);border-radius:6px;padding:2px}
.gn-dt3 .dt3-gcard .dt3-cactions .dt3-ia{color:#fff}
.gn-dt3 .dt3-kanban{display:flex;gap:12px;padding:14px;overflow-x:auto;align-items:flex-start}
.gn-dt3 .dt3-kcol{flex:0 0 260px;background:var(--dt-panel2);border:1px solid var(--dt-line);border-radius:10px;max-height:100%}
.gn-dt3 .dt3-kcol-h{display:flex;align-items:center;justify-content:space-between;padding:9px 11px;border-bottom:1px solid var(--dt-line)}
.gn-dt3 .dt3-kcount{font-size:11px;color:var(--dt-ink-soft);font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-kcards{padding:8px;display:flex;flex-direction:column;gap:8px}
.gn-dt3 .dt3-kmore{display:block;width:100%;padding:7px 10px;border:1px dashed var(--dt-line);border-radius:8px;background:transparent;color:var(--dt-muted);font:inherit;font-size:12.5px;text-align:center;cursor:pointer}
.gn-dt3 .dt3-kmore:hover{color:var(--dt-ink);border-color:currentColor}
.gn-dt3 .dt3-kmore span{opacity:.75}
.gn-dt3 .dt3-kmore-busy{cursor:default}
.gn-dt3 .dt3-kskc{padding:12px;border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel)}
.gn-dt3 .dt3-kloading{position:relative}
.gn-dt3 .dt3-kcard{border:1px solid var(--dt-line);border-radius:8px;background:var(--dt-panel);padding:9px 10px;cursor:default}
.gn-dt3 .dt3-ktitle{font-weight:600;font-size:12px;margin-bottom:4px}
.gn-dt3 .dt3-kf{font-size:11px;color:var(--dt-ink-soft);margin-top:2px}
.gn-dt3 .dt3-cal{padding:14px}
.gn-dt3 .dt3-cal-h{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.gn-dt3 .dt3-cal-h b{font-size:14px;min-width:150px;text-align:center}
.gn-dt3 .dt3-calfield{margin-inline-start:auto;color:var(--dt-ink-soft);font-size:12px}
.gn-dt3 .dt3-calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--dt-line);border:1px solid var(--dt-line);border-radius:8px;overflow:hidden}
.gn-dt3 .dt3-calwd{background:var(--dt-panel2);padding:6px;text-align:center;font-size:11px;color:var(--dt-ink-soft);font-weight:600}
.gn-dt3 .dt3-caldc{background:var(--dt-panel);min-height:92px;padding:5px 6px;display:flex;flex-direction:column;gap:3px}
.gn-dt3 .dt3-caldc.empty{background:var(--dt-panel2)}
.gn-dt3 .dt3-caldn{font-size:11px;color:var(--dt-ink-soft);font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-calev{font-size:11px;background:var(--dt-accent-soft,rgba(91,91,240,.14));color:var(--dt-accent);border-radius:4px;padding:1px 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default}
.gn-dt3 .dt3-calmore{font-size:10px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-root tbody td{position:relative}
.gn-dt3 .dt3-fillh{position:absolute;right:-4px;bottom:-4px;width:9px;height:9px;background:var(--dt-accent);border:1.5px solid var(--dt-panel,#fff);border-radius:2px;cursor:crosshair;z-index:4;touch-action:none}
.gn-dt3 .dt3-fillh:hover{transform:scale(1.25)}
.gn-dt3 td.fillpreview{box-shadow:inset 0 0 0 1px var(--dt-accent);background:var(--dt-accent-soft,rgba(91,91,240,.10))}
.gn-dt3 .dt3-ckcell{white-space:nowrap}
.gn-dt3 .dt3-grip{display:inline-grid;place-items:center;width:16px;height:22px;vertical-align:middle;margin-inline-end:2px;color:var(--dt-ink-soft);cursor:grab;opacity:.45;touch-action:none}
.gn-dt3 tr:hover .dt3-grip{opacity:.9}
.gn-dt3 .dt3-grip:active{cursor:grabbing}
.gn-dt3 .dt3-grip svg{width:14px;height:14px;fill:currentColor}
.gn-dt3 tr.dt3-dragging{opacity:.45}
.gn-dt3 tr.dt3-dropbefore>td{box-shadow:inset 0 2px 0 0 var(--dt-accent)}
.gn-dt3 tr.dt3-dropafter>td{box-shadow:inset 0 -2px 0 0 var(--dt-accent)}
.gn-dt3 .dt3-datapop{left:auto;right:0;min-width:180px;padding:5px;text-align:start}
.gn-dt3 .dt3-mi{display:flex;align-items:center;gap:9px;width:100%;height:32px;padding:0 10px;border:0;border-radius:6px;background:none;color:var(--dt-ink);cursor:pointer;font:inherit;font-size:12px;text-align:start}
.gn-dt3 .dt3-mi:hover{background:var(--dt-panel2)}
.gn-dt3 a.dt3-mi{text-decoration:none;white-space:nowrap}
.gn-dt3 .dt3-mi-danger{color:var(--dt-danger)}
.gn-dt3 .dt3-mi svg{width:15px;height:15px;opacity:.7}
.gn-dt3 .dt3-midiv{height:1px;background:var(--dt-line);margin:5px 6px}
.gn-dt3 .dt3-modal{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.45);display:grid;place-items:center;padding:20px}
.gn-dt3 .dt3-modalbox{width:min(640px,94vw);max-height:88vh;overflow:auto;background:var(--dt-elev,var(--dt-panel));border:1px solid var(--dt-line2,var(--dt-line));border-radius:12px;box-shadow:0 24px 60px rgba(0,0,0,.4);padding:16px}
.gn-dt3 .dt3-modalh{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.gn-dt3 .dt3-modalh b{font-size:15px}
.gn-dt3 .dt3-implabel{display:block;font-size:12px;color:var(--dt-ink-soft);margin-bottom:5px}
.gn-dt3 .dt3-imptext{width:100%;min-height:90px;border:1px solid var(--dt-line);border-radius:8px;background:var(--dt-panel);color:var(--dt-ink);font:12px/1.5 ui-monospace,monospace;padding:8px;resize:vertical}
.gn-dt3 .dt3-impdrop{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;margin:2px 0 14px;padding:22px 14px;border:2px dashed var(--dt-line2,var(--dt-line));border-radius:var(--dt-radius,8px);background:var(--dt-panel2,var(--dt-panel));color:var(--dt-ink);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}
.gn-dt3 .dt3-impdrop svg{width:24px;height:24px;color:var(--dt-accent)}.gn-dt3 .dt3-impdrop b{font-size:14px}.gn-dt3 .dt3-impdrop span{font-size:12px;color:var(--dt-ink-soft)}.gn-dt3 .dt3-impdrop u{color:var(--dt-accent);text-underline-offset:2px}
.gn-dt3 .dt3-impdrop:hover{border-color:var(--dt-accent);background:var(--dt-accent-soft,var(--dt-panel2))}.gn-dt3 .dt3-impdrop:focus-within{outline:2px solid var(--dt-accent);outline-offset:2px}
.gn-dt3 .dt3-impfile{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.gn-dt3 .dt3-impdrop,.gn-dt3 .dt3-impdrop *{text-transform:none!important;letter-spacing:normal!important}
.gn-dt3 .dt3-imperr{margin-top:8px;padding:7px 10px;border-radius:7px;background:var(--dt-danger-soft,rgba(220,70,70,.13));color:var(--dt-danger,#d94b4b);font-size:12px}
.gn-dt3 .dt3-impmap{margin-top:12px}
.gn-dt3 .dt3-impmap h6{margin:0 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-impcols{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
.gn-dt3 .dt3-impcol{display:flex;flex-direction:column;gap:3px;min-width:0}
.gn-dt3 .dt3-imph{font-size:11px;color:var(--dt-ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-impcol .dt3-fsel{max-width:none;width:100%}
.gn-dt3 .dt3-impprev{margin-top:12px;overflow-x:auto;border:1px solid var(--dt-line);border-radius:8px}
.gn-dt3 .dt3-impprev table{border-collapse:collapse;width:100%;font-size:11px}
.gn-dt3 .dt3-impprev th,.gn-dt3 .dt3-impprev td{border:1px solid var(--dt-line);padding:4px 7px;text-align:start;white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-impprev th{background:var(--dt-panel2);font-weight:600}
.gn-dt3 .dt3-modalf{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.gn-dt3 .dt3-bulk{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--dt-line);background:var(--dt-accent-soft,rgba(91,91,240,.10))}
.gn-dt3 .dt3-bulkn{font-size:13px;color:var(--dt-ink)}
.gn-dt3 .dt3-bulkn b{color:var(--dt-accent);font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-btn.danger{background:var(--dt-danger,#d94b4b);border-color:var(--dt-danger,#d94b4b);color:#fff}
.gn-dt3 .dt3-btn.danger:hover{filter:brightness(1.06)}
.gn-dt3 .dt3-btn.ghost{background:none}
.gn-dt3 .dt3-tblctl{display:inline-flex;align-items:center;gap:6px;margin-inline-start:6px}
.gn-dt3 .dt3-tblctl .dt3-modeb{width:28px;height:26px;border:1px solid var(--dt-line);border-radius:7px;background:var(--dt-panel2)}
.gn-dt3 .dt3-tblctl .dt3-modeb b{font-size:13px}
.gn-dt3 .dt3-tblctl .dt3-modeb.on{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-grouplbl{display:inline-flex;align-items:center;gap:5px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-grouplbl svg{width:14px;height:14px}
.gn-dt3 .dt3-groupsel{height:28px;border:1px solid var(--dt-line);border-radius:7px;background:var(--dt-panel);color:var(--dt-ink);font-size:12px;padding:0 6px;max-width:150px}
.gn-dt3 tfoot .dt3-sumrow td{position:sticky;bottom:0;background:var(--dt-panel2);border-top:2px solid var(--dt-line);font-variant-numeric:tabular-nums;padding:0;vertical-align:middle}
.gn-dt3 .dt3-aggcell{user-select:none}
.gn-dt3 .dt3-aggbtn{display:flex;justify-content:flex-end;align-items:center;gap:8px;width:100%;min-height:38px;padding:5px 12px;margin:0;border:0;background:transparent;font:inherit;color:var(--dt-ink);cursor:pointer;border-radius:8px;transition:background .12s}
.gn-dt3 .dt3-c-text .dt3-aggbtn,.gn-dt3 .dt3-c-longtext .dt3-aggbtn,.gn-dt3 .dt3-c-enum .dt3-aggbtn,.gn-dt3 .dt3-c-bool .dt3-aggbtn,.gn-dt3 .dt3-c-date .dt3-aggbtn,.gn-dt3 .dt3-c-datetime .dt3-aggbtn{justify-content:flex-start}
.gn-dt3 .dt3-aggbtn:hover{background:rgba(120,120,140,.12)}
.gn-dt3 .dt3-aggbtn:focus-visible{outline:2px solid var(--dt-accent);outline-offset:-2px}
.gn-dt3 .dt3-aggstack{display:flex;flex-direction:column;gap:1px;align-items:flex-end;line-height:1.1}
.gn-dt3 .dt3-c-text .dt3-aggstack,.gn-dt3 .dt3-c-longtext .dt3-aggstack,.gn-dt3 .dt3-c-enum .dt3-aggstack,.gn-dt3 .dt3-c-bool .dt3-aggstack,.gn-dt3 .dt3-c-date .dt3-aggstack,.gn-dt3 .dt3-c-datetime .dt3-aggstack{align-items:flex-start}
.gn-dt3 .dt3-aggcap{font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-aggval{font-weight:700;font-size:13px;color:var(--dt-ink)}
.gn-dt3 .dt3-aggcaret{font-size:9px;color:var(--dt-ink-soft);opacity:.35;transition:opacity .12s,color .12s}
.gn-dt3 .dt3-aggbtn:hover .dt3-aggcaret{opacity:1;color:var(--dt-accent)}
.gn-dt3 .dt3-aggempty{justify-content:flex-start;gap:5px;opacity:.6}
.gn-dt3 .dt3-aggempty:hover{opacity:1}
.gn-dt3 .dt3-agg{display:inline-flex;justify-content:flex-end;align-items:center;gap:8px;width:100%;padding:5px 12px}
.gn-dt3 .dt3-aggnone{color:var(--dt-ink-soft);opacity:.35;display:block;text-align:center;padding:8px}
.gn-dt3.dt3-aggmenu-portal{position:fixed;top:0;left:0;width:0;height:0}
.gn-dt3 .dt3-aggmenu{position:fixed;z-index:2147483000;min-width:196px;max-width:280px;background:var(--dt-panel);border:1px solid var(--dt-line);border-radius:13px;box-shadow:0 14px 40px rgba(15,18,40,.20),0 3px 10px rgba(15,18,40,.10);padding:6px}
.gn-dt3 .dt3-aggmenu-h{padding:7px 11px 9px;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--dt-ink-soft);border-bottom:1px solid var(--dt-line);margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-aggmi{display:flex;align-items:center;gap:9px;width:100%;padding:9px 11px;border:0;background:transparent;font:inherit;font-size:13px;color:var(--dt-ink);cursor:pointer;border-radius:9px;text-align:start}
.gn-dt3 .dt3-aggmi:hover{background:rgba(120,120,140,.12)}
.gn-dt3 .dt3-aggmi.on{color:var(--dt-accent);font-weight:600}
.gn-dt3 .dt3-aggmi-ck{width:16px;height:16px;flex:0 0 16px;display:inline-flex;align-items:center;justify-content:center;color:var(--dt-accent)}
.gn-dt3 .dt3-aggmi-ck svg{width:15px;height:15px}
.gn-dt3 tr.dt3-grouprow td{background:var(--dt-panel2);border-top:1px solid var(--dt-line);font-weight:600;cursor:pointer;padding:8px 12px}
.gn-dt3 tr.dt3-grouprow:hover td{background:var(--dt-panel)}
.gn-dt3 .dt3-gcaret{display:inline-grid;place-items:center;width:16px;height:16px;vertical-align:middle;margin-inline-end:6px;transition:transform .12s}
.gn-dt3 .dt3-gcaret svg{width:13px;height:13px}
.gn-dt3 .dt3-gcaret.col{transform:rotate(-90deg)}
.gn-dt3 .dt3-glabel{color:var(--dt-ink)}
.gn-dt3 .dt3-gcount{margin-inline-start:8px;padding:1px 8px;border-radius:10px;background:var(--dt-line);color:var(--dt-ink-soft);font-size:11px;font-weight:600}
.gn-dt3 .dt3-gsubs{margin-inline-start:14px;font-weight:400;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-gsub{margin-inline-end:12px;font-size:11px}
.gn-dt3 .dt3-gsub .dt3-agg em{font-size:9px}
.gn-dt3 .dt3-chartctl{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--dt-line);background:var(--dt-panel2);flex-wrap:wrap}
.gn-dt3 .dt3-charttype select{font-weight:600}
.gn-dt3 .dt3-chartcap{display:inline-flex;align-items:center;gap:7px;color:var(--dt-accent);font-weight:600;font-size:13px}
.gn-dt3 .dt3-chartcap svg{width:16px;height:16px}
.gn-dt3 .dt3-groupsel.wide{max-width:180px}
.gn-dt3 .dt3-chart{padding:16px}
.gn-dt3 .dt3-charttitle{font-size:14px;font-weight:600;color:var(--dt-ink);margin-bottom:12px}
.gn-dt3 .dt3-kpis{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}
.gn-dt3 .dt3-kpi{min-width:110px;padding:10px 14px;border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel2)}
.gn-dt3 .dt3-kpin{display:block;font-size:22px;font-weight:700;color:var(--dt-ink);font-variant-numeric:tabular-nums;line-height:1.1}
.gn-dt3 .dt3-kpil{display:block;font-size:11px;color:var(--dt-ink-soft);margin-top:3px;text-transform:uppercase;letter-spacing:.03em}
.gn-dt3 .dt3-chartwrap{max-width:760px;border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel);padding:14px;overflow:auto;max-height:82vh}
.gn-dt3 .dt3-svg{display:block;max-width:100%}
.gn-dt3 .dt3-clab{fill:var(--dt-ink-soft);font-size:11px;font-family:inherit}
.gn-dt3 .dt3-cval{fill:var(--dt-ink);font-size:11px;font-weight:600;font-family:inherit;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-caxis{stroke:var(--dt-line);stroke-width:1}
.gn-dt3 .dt3-list{display:flex;flex-direction:column;padding:8px 12px;gap:1px}
.gn-dt3 .dt3-lrow{display:flex;align-items:center;gap:12px;padding:10px 8px;border-bottom:1px solid var(--dt-line)}
.gn-dt3 .dt3-lrow:hover{background:var(--dt-panel2)}
.gn-dt3 .dt3-lavatar{flex:none;width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-weight:700;font-size:14px;color:#fff;background:hsl(var(--h) 62% 52%)}
.gn-dt3 .dt3-lmain{flex:1;min-width:0}
.gn-dt3 .dt3-ltitle{font-weight:600;color:var(--dt-ink);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-lmetas{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:3px}
.gn-dt3 .dt3-lmeta{font-size:12px;color:var(--dt-ink)}
.gn-dt3 .dt3-lmeta em{font-style:normal;color:var(--dt-ink-soft);margin-inline-end:5px}
.gn-dt3 .dt3-lrow .dt3-cactions{flex:none}
.gn-dt3 .dt3-timeline{padding:14px 16px}
.gn-dt3 .dt3-tlgroup{margin-bottom:18px}
.gn-dt3 .dt3-tlmonth{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;color:var(--dt-ink);margin-bottom:8px;text-transform:uppercase;letter-spacing:.03em}
.gn-dt3 .dt3-tlitems{border-inline-start:2px solid var(--dt-line);margin-inline-start:8px;padding-inline-start:16px;display:flex;flex-direction:column;gap:2px}
.gn-dt3 .dt3-tlitem{position:relative;display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:8px}
.gn-dt3 .dt3-tlitem:hover{background:var(--dt-panel2)}
.gn-dt3 .dt3-tldot{position:absolute;left:-23px;width:9px;height:9px;border-radius:50%;background:var(--dt-accent);border:2px solid var(--dt-panel,#fff)}
.gn-dt3 .dt3-tldate{flex:none;width:26px;height:26px;border-radius:7px;display:grid;place-items:center;background:var(--dt-panel2);color:var(--dt-ink-soft);font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-tltitle{flex:1;font-size:13px;color:var(--dt-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 td.dt3-c-num,.gn-dt3 td.dt3-c-currency{position:relative}
.gn-dt3 .dt3-dbar{position:absolute;left:8px;bottom:4px;height:4px;border-radius:2px;background:var(--dt-accent);opacity:.42;z-index:0;pointer-events:none}
.gn-dt3 .dt3-dbar.neg{background:var(--dt-danger,#d94b4b)}
.gn-dt3 .dt3-num.dt3-neg,.gn-dt3 .dt3-neg{color:var(--dt-danger,#d94b4b)}
.gn-dt3 .dt3-num{position:relative;z-index:1}
.gn-dt3 .dt3-rating{white-space:nowrap;letter-spacing:1px}
.gn-dt3 .dt3-star{color:var(--dt-line2,var(--dt-line))}
.gn-dt3 .dt3-star.on{color:#f2b23e}
.gn-dt3 .dt3-tags{display:inline-flex;flex-wrap:wrap;gap:4px}
.gn-dt3 .dt3-tmore{font-size:11px;color:var(--dt-ink-soft);align-self:center}
.gn-dt3 .dt3-colrow{display:flex;align-items:center;gap:6px}
.gn-dt3 .dt3-colrow label{flex:1}
.gn-dt3 .dt3-dbarbtn{flex:none;display:inline-grid;place-items:center;width:22px;height:22px;border:1px solid var(--dt-line);border-radius:5px;background:var(--dt-panel2);color:var(--dt-ink-soft);cursor:pointer;font-size:11px;line-height:1}
.gn-dt3 .dt3-dbarbtn:hover{border-color:var(--dt-accent);color:var(--dt-accent)}
.gn-dt3 .dt3-dbarbtn.on{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-root[data-virtual="1"] .dt3-scroll{max-height:min(62vh,560px);overflow-y:auto;overflow-x:auto}
.gn-dt3 tr.dt3-vsp{background:none}
.gn-dt3 tr.dt3-vsp td{background:none}
.gn-dt3 .dt3-recgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:4px 0 4px}
.gn-dt3 .dt3-recf{display:flex;flex-direction:column;gap:4px;min-width:0}
.gn-dt3 .dt3-recf>span{font-size:11px;color:var(--dt-ink-soft);text-transform:uppercase;letter-spacing:.03em}
.gn-dt3 .dt3-recf input,.gn-dt3 .dt3-recf select,.gn-dt3 .dt3-recf textarea{height:34px;border:1px solid var(--dt-line);border-radius:7px;background:var(--dt-panel);color:var(--dt-ink);font:inherit;font-size:13px;padding:0 9px}
.gn-dt3 .dt3-recf textarea{height:auto;min-height:52px;padding:7px 9px;resize:vertical}
.gn-dt3 .dt3-recf input:disabled,.gn-dt3 .dt3-recf select:disabled,.gn-dt3 .dt3-recf textarea:disabled{opacity:.7;background:var(--dt-panel2)}
.gn-dt3 .dt3-foottop{border-top:0;border-bottom:1px solid var(--dt-line)}
.gn-dt3 .dt3-fpanel{border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel2);margin:10px 14px 0;padding:0;overflow:hidden}
.gn-dt3 .dt3-fphead{display:flex;align-items:center;gap:8px;padding:10px 13px;cursor:pointer;user-select:none}
.gn-dt3 .dt3-fphead:hover{background:var(--dt-panel)}
.gn-dt3 .dt3-fphead:focus-visible{outline:2px solid var(--dt-accent);outline-offset:-2px}
.gn-dt3 .dt3-fpcaret{display:inline-flex;color:var(--dt-muted);transition:transform .15s;transform:rotate(90deg)}
.gn-dt3 .dt3-fpcaret svg{width:14px;height:14px}
.gn-dt3 .dt3-fpanel.collapsed .dt3-fpcaret{transform:rotate(0deg)}
.gn-dt3 .dt3-fpicon{width:15px;height:15px;color:var(--dt-muted);flex:none}
.gn-dt3 .dt3-fptitle{font-weight:600;font-size:13px;color:var(--dt-ink)}
.gn-dt3 .dt3-fphead .dt3-fcount{background:var(--dt-accent);color:#fff;font-size:10px;font-weight:700;min-width:16px;height:16px;padding:0 4px;border-radius:9px;display:inline-grid;place-items:center}
.gn-dt3 .dt3-fpsp{flex:1}
.gn-dt3 .dt3-flink{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--dt-ink-soft);cursor:pointer;padding:4px 8px;border-radius:6px}
.gn-dt3 .dt3-flink svg{width:13px;height:13px}
.gn-dt3 .dt3-flink:hover{color:var(--dt-danger);background:var(--dt-panel)}
.gn-dt3 .dt3-fpbody{padding:6px 13px 13px;border-top:1px solid var(--dt-line)}
.gn-dt3 .dt3-fpanel.collapsed .dt3-fpbody{display:none}
.gn-dt3 .dt3-flabel{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--dt-muted);font-weight:600;margin:2px 0 6px}
.gn-dt3 .dt3-facet{margin-bottom:12px}
.gn-dt3 .dt3-fpanel .dt3-facets{border-top:1px solid var(--dt-line);margin-top:10px;padding-top:8px}
.gn-dt3 .dt3-fpanel .dt3-conds{margin-bottom:8px}
.gn-dt3 .dt3-fk{color:var(--dt-accent);text-decoration:none;cursor:default;border-bottom:1px dotted var(--dt-accent)}
.gn-dt3 .dt3-fk:hover{text-decoration:none;opacity:.85}
.gn-dt3 .dt3-kdrag .dt3-kcard{cursor:grab;touch-action:none;user-select:none}
.gn-dt3 .dt3-kdrag .dt3-kcard:active{cursor:grabbing}
.gn-dt3 .dt3-kcard.dt3-kdragging{opacity:.35;outline:1px dashed var(--dt-line2,var(--dt-line))}
.gn-dt3 .dt3-kcol{transition:background .12s,box-shadow .12s}
.gn-dt3 .dt3-kcol.dt3-kover{background:var(--dt-accent-soft,rgba(91,91,240,.10));box-shadow:inset 0 0 0 2px var(--dt-accent)}
.gn-dt3 .dt3-kcol.dt3-kover .dt3-kcards{min-height:44px}
/* l'en-tête ne rétrécit pas (flex:none) : sans borne, un titre ou un sous-titre long lui donnait la largeur de la barre ENTIÈRE, marge comprise,
   et ses points de suspension finissaient contre le cadre (largeur de téléphone). Il ne dépasse plus l'intérieur de la barre. */
.gn-dt3 .dt3-head{display:flex;align-items:center;gap:11px;flex:none;min-width:0;max-width:100%}
.gn-dt3 .dt3-ticon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:11px;background:var(--dt-accent-soft,rgba(91,91,240,.12));color:var(--dt-accent);font-size:21px;line-height:1}
.gn-dt3 .dt3-headtext{min-width:0;max-width:300px}
.gn-dt3 .dt3-head .dt3-title{display:block;font-weight:600;font-size:15px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-desc{font-size:12px;color:var(--dt-ink-soft);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-kdrag .dt3-kcard{cursor:grab;touch-action:none;user-select:none}
.gn-dt3 .dt3-kdrag .dt3-kcard:active{cursor:grabbing}
.gn-dt3 .dt3-kcard.dt3-kdragging{opacity:.35;outline:1px dashed var(--dt-line2,var(--dt-line))}
.gn-dt3 .dt3-kcol{transition:background .12s,box-shadow .12s}
.gn-dt3 .dt3-kcol.dt3-kover{background:var(--dt-accent-soft,rgba(91,91,240,.10));box-shadow:inset 0 0 0 2px var(--dt-accent)}
.gn-dt3 .dt3-kcol.dt3-kover .dt3-kcards{min-height:44px}
.dt3-kghost{position:fixed;z-index:99999;pointer-events:none;box-sizing:border-box;border:1px solid #5b5bf0;border-radius:8px;background:#fff;color:#14151e;box-shadow:0 14px 34px rgba(0,0,0,.32);padding:9px 10px;transform:rotate(2deg) scale(1.02);opacity:.96;font:13px system-ui,sans-serif}
.dt3-kghost .dt3-ktitle{font-weight:600;font-size:12px;margin-bottom:4px}
.dt3-kghost .dt3-kf{font-size:11px;color:#6b7280;margin-top:2px}
body.dark .dt3-kghost{background:#181a24;color:#e7e8ee;border-color:#7c7cff}
.gn-dt3 .dt3-charthint{font-weight:400;font-size:12px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-cgrid{stroke:var(--dt-line);stroke-width:1;stroke-dasharray:3 3;opacity:.6}
.gn-dt3 .dt3-cgridlab{fill:var(--dt-ink-soft);font-size:10px;font-family:inherit}
.gn-dt3 .dt3-cint{cursor:pointer}
.gn-dt3 .dt3-cint:hover .dt3-cval{fill:var(--dt-accent)}
.gn-dt3 .dt3-svg .dt3-cint,.gn-dt3 .dt3-svg .dt3-cslice{transition:opacity .13s ease}
.gn-dt3 .dt3-svg:hover .dt3-cint:not(:hover){opacity:.4}
.gn-dt3 .dt3-svg:hover .dt3-cslice:not(:hover){opacity:.45}
.gn-dt3 .dt3-cslice:hover{stroke-width:2.5}
@keyframes dt3-bargrow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes dt3-hbargrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes dt3-fadein{from{opacity:0}to{opacity:1}}
.gn-dt3 .dt3-vbar{transform-box:fill-box;transform-origin:bottom;animation:dt3-bargrow .5s cubic-bezier(.2,.75,.3,1) both}
.gn-dt3 .dt3-hbar{transform-box:fill-box;transform-origin:left;animation:dt3-hbargrow .5s cubic-bezier(.2,.75,.3,1) both}
.gn-dt3 .dt3-cslice{animation:dt3-fadein .5s ease both}
.gn-dt3 .dt3-cline{stroke-dasharray:1400;stroke-dashoffset:1400;animation:dt3-linedraw 1s ease forwards}
@keyframes dt3-linedraw{to{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.gn-dt3 .dt3-vbar,.gn-dt3 .dt3-hbar,.gn-dt3 .dt3-cslice,.gn-dt3 .dt3-cline{animation:none;stroke-dashoffset:0}}
.gn-dt3 .dt3-cdonuttot{fill:var(--dt-ink);font-size:20px;font-weight:700;font-family:inherit}
.gn-dt3 .dt3-clegend{display:flex;flex-wrap:wrap;gap:5px;margin-top:14px;max-width:760px}
.gn-dt3 .dt3-clegi{display:inline-flex;align-items:center;gap:7px;padding:4px 9px;border:1px solid var(--dt-line);border-radius:8px;background:var(--dt-panel);color:var(--dt-ink);cursor:pointer;font:inherit;font-size:12px}
.gn-dt3 .dt3-clegi.noint{cursor:default;opacity:.75}
.gn-dt3 .dt3-clegi:hover:not(.noint){border-color:var(--dt-accent);background:var(--dt-accent-soft,rgba(91,91,240,.08))}
.gn-dt3 .dt3-cleg-sw{width:11px;height:11px;border-radius:3px;flex:none}
.gn-dt3 .dt3-cleg-lab{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gn-dt3 .dt3-cleg-val{color:var(--dt-ink-soft);font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-insbtn.on{background:var(--dt-accent);border-color:var(--dt-accent);color:#fff}
.gn-dt3 .dt3-insbtn{border:1px solid var(--dt-line);border-radius:7px;width:28px;height:26px;background:var(--dt-panel2);color:var(--dt-ink-soft)}
.gn-dt3 .dt3-narr{display:flex;align-items:flex-start;gap:8px;margin-bottom:14px;padding:11px 13px;border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel2);font-size:13px;color:var(--dt-ink);line-height:1.5}
.gn-dt3 .dt3-narr svg{width:16px;height:16px;flex:none;margin-top:2px;color:var(--dt-accent)}
.gn-dt3 .dt3-narr b{color:var(--dt-ink)}
.gn-dt3 .dt3-inscards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.gn-dt3 .dt3-inscard{border:1px solid var(--dt-line);border-radius:12px;background:var(--dt-panel);padding:12px 14px;overflow:hidden}
.gn-dt3 .dt3-inscard-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:8px}
.gn-dt3 .dt3-inscard-h b{font-size:13px;color:var(--dt-ink)}
.gn-dt3 .dt3-inscard-h span{font-size:11px;color:var(--dt-ink-soft);text-transform:uppercase;letter-spacing:.03em}
.gn-dt3 .dt3-inscard .dt3-svg{max-height:220px}
.gn-dt3 .dt3-cpt{transition:opacity .12s}
.gn-dt3 .dt3-chartwrap svg:hover .dt3-cpt:not(:hover){opacity:.35}
.gn-dt3 .dt3-cpt:hover{stroke-width:2}
.gn-dt3 .dt3-anomlab{fill:var(--dt-danger,#d94b4b);font-size:13px;font-weight:800;font-family:inherit}
.gn-dt3 .dt3-anom{stroke:var(--dt-panel,#fff);stroke-width:1.5}
.gn-dt3 .dt3-hmv{fill:var(--dt-ink);font-size:10px;font-weight:600;font-family:inherit;pointer-events:none}
.gn-dt3 .dt3-kpispark{min-width:120px}
.gn-dt3 .dt3-kpitrend{display:block;color:var(--dt-accent);height:26px}
.gn-dt3 .dt3-spark{display:block;overflow:visible}
.gn-dt3 .dt3-inscard .dt3-svg{max-height:200px}
/* SOTA chart layout */
.gn-dt3 .dt3-chartbody{display:flex;flex-wrap:wrap;gap:20px;align-items:center;max-width:820px}
.gn-dt3 .dt3-chartbody .dt3-chartwrap{flex:1 1 380px;min-width:0;margin:0;padding:16px 18px;border:1px solid var(--dt-line);border-radius:14px;background:var(--dt-panel);box-shadow:0 1px 2px rgba(0,0,0,.03)}
.gn-dt3 .dt3-svg{display:block;width:100%;height:auto;max-height:340px;overflow:visible}
.gn-dt3 .dt3-chartbody .dt3-clegend{margin:0}
.gn-dt3 .dt3-chartbody:not(.dt3-side){flex-direction:column;align-items:stretch}
.gn-dt3 .dt3-chartbody:not(.dt3-side) .dt3-clegend{display:flex;flex-wrap:wrap;gap:6px;max-width:none;padding:0 2px}
.gn-dt3 .dt3-chartbody.dt3-side{align-items:center}
.gn-dt3 .dt3-chartbody.dt3-side .dt3-chartwrap{flex:1 1 320px;max-width:420px}
.gn-dt3 .dt3-chartbody.dt3-side .dt3-clegend{flex:0 1 240px;display:flex;flex-direction:column;gap:3px;max-height:320px;overflow:auto;align-self:center}
.gn-dt3 .dt3-chartbody.dt3-side .dt3-clegi{width:100%;justify-content:flex-start}
.gn-dt3 .dt3-chartbody.dt3-side .dt3-cleg-lab{flex:1;max-width:none}
.gn-dt3 .dt3-chartbody.dt3-side .dt3-cleg-val{margin-inline-start:auto;padding-inline-start:8px}
.gn-dt3 .dt3-cav{display:inline-flex;opacity:.55;margin-inline-start:1px}
.gn-dt3 .dt3-cav svg{width:13px;height:13px}
.gn-dt3 .dt3-caldc.out{background:var(--dt-panel2)}
.gn-dt3 .dt3-caldc.out .dt3-caldn{opacity:.4}
.gn-dt3 .dt3-caldc.today{box-shadow:inset 0 0 0 2px var(--dt-accent)}
.gn-dt3 .dt3-caldc.today .dt3-caldn{color:var(--dt-accent);font-weight:700}
.gn-dt3 .dt3-calev{background:hsl(var(--h) 70% 92%);color:hsl(var(--h) 55% 32%)}
body.dark .gn-dt3 .dt3-calev{background:hsl(var(--h) 45% 22%);color:hsl(var(--h) 70% 80%)}
.gn-dt3 .dt3-calundated{font-size:12px;color:var(--dt-ink-soft);margin-inline-end:10px}
.gn-dt3 .dt3-calmonth{min-width:150px;text-align:center}
.gn-dt3 .dt3-tlav{width:26px;height:26px;font-size:12px;border-radius:8px;flex:none}
.gn-dt3 .dt3-tldate{min-width:56px}
.gn-dt3 .dt3-modeb.disabled{opacity:.32;cursor:not-allowed;pointer-events:auto}
.gn-dt3 .dt3-modeb.disabled:hover{background:none;color:var(--dt-ink-soft)}

/* ============ Insights 2026 — interaction polish (additive, scoped to .gn-dt3) ============ */
.gn-dt3 .dt3-inscard{transition:border-color .16s ease, box-shadow .16s ease, transform .16s ease}
.gn-dt3 .dt3-inscard[data-drillfield]{cursor:pointer}
.gn-dt3 .dt3-inscard[data-drillfield]:hover{border-color:var(--dt-accent-line);box-shadow:0 6px 20px -8px rgba(91,91,240,.28);transform:translateY(-1px)}
.gn-dt3 .dt3-kpi{transition:border-color .16s ease, background .16s ease}
.gn-dt3 .dt3-kpi:first-child{border-color:var(--dt-accent-line);background:var(--dt-accent-soft)}
.gn-dt3 .dt3-kpi:first-child .dt3-kpin{color:var(--dt-accent)}

/* ============ Insights P1 — KPI deltas & context (additive, scoped) ============ */
.gn-dt3 .dt3-krow{display:flex;align-items:center;gap:7px;margin-top:6px}
.gn-dt3 .dt3-kdelta{font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-kdelta.up{color:#2e9e6b}
.gn-dt3 .dt3-kdelta.down{color:#d0544a}
.gn-dt3 .dt3-kdelta.flat{color:var(--dt-ink-soft)}
.gn-dt3 .dt3-kctx{font-size:11px;color:var(--dt-ink-soft);font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-kpi-hero{border-color:var(--dt-accent-line);background:var(--dt-accent-soft)}

/* ============ Insights P2 — cross-filter chips (additive, scoped) ============ */
.gn-dt3 .dt3-insfilters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.gn-dt3 .dt3-inschip{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:var(--dt-accent-ink,#095e5a);background:var(--dt-accent-soft);border:1px solid var(--dt-accent-line);border-radius:999px;padding-block:4px 4px;padding-inline:12px 6px}
.gn-dt3 .dt3-inschip button{border:0;background:var(--dt-panel);color:var(--dt-ink-soft);cursor:pointer;width:18px;height:18px;border-radius:50%;line-height:1;font-size:13px;display:grid;place-items:center}
.gn-dt3 .dt3-inschip button:hover{color:var(--dt-ink);background:var(--dt-line2,var(--dt-line))}

/* ============ Insights layout — full-width time-series hero + 2 cards/row (match design) ============ */
.gn-dt3 .dt3-inscards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.gn-dt3 .dt3-inscard-wide{grid-column:1 / -1}
.gn-dt3 .dt3-inscard{padding:16px 18px}
.gn-dt3 .dt3-inscard .dt3-svg{max-height:none}
@media(max-width:860px){.gn-dt3 .dt3-inscards{grid-template-columns:1fr}}

/* corrige la hauteur : la série pleine largeur ne doit pas exploser */
.gn-dt3 .dt3-inscard .dt3-svg{max-height:230px}
.gn-dt3 .dt3-inscard-wide .dt3-svg{max-height:280px}

/* KPI sparkline (records / day) */
.gn-dt3 .dt3-kpi{position:relative;overflow:hidden}
.gn-dt3 .dt3-kspark{position:absolute;right:12px;bottom:10px;opacity:.8;pointer-events:none}

/* sparkline en haut-droite (évite le chevauchement avec le delta en bas) */
.gn-dt3 .dt3-kspark{top:12px;bottom:auto}

/* lisibilité du texte des graphiques (SOTA) */
.gn-dt3 .dt3-clab{font-size:12.5px;fill:var(--dt-ink-soft)}
.gn-dt3 .dt3-cval{font-size:12.5px;font-weight:600;fill:var(--dt-ink)}
.gn-dt3 .dt3-charttitle{font-size:15px;font-weight:700}

/* cartes courtes : pas d'étirement (supprime l'espace mort) + série temporelle qui remplit */
.gn-dt3 .dt3-inscards{align-items:start}
.gn-dt3 .dt3-inscard-wide .dt3-svg{max-height:320px}

/* sélecteur d'échelle de temps (Day/Week/Month) */
.gn-dt3 .dt3-gransel{display:inline-flex;gap:2px;background:var(--dt-panel2);border:1px solid var(--dt-line);border-radius:8px;padding:2px}
.gn-dt3 .dt3-granb{border:0;background:transparent;color:var(--dt-ink-soft);font-size:11px;padding:3px 9px;border-radius:6px;cursor:pointer;font-family:inherit;text-transform:none;letter-spacing:0}
.gn-dt3 .dt3-granb.on{background:var(--dt-panel);color:var(--dt-ink);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.1)}
.gn-dt3 .dt3-granb:hover{color:var(--dt-ink)}

/* ===== FIX texte minuscule : le cap max-height écrasait les charts hauts (13 barres) → texte à ~6px. On rend à hauteur naturelle. ===== */
.gn-dt3 .dt3-inscard .dt3-svg{max-height:none !important}
.gn-dt3 .dt3-inscard-wide .dt3-svg{max-height:340px !important}
.gn-dt3 .dt3-clab{font-size:13px}
.gn-dt3 .dt3-cval{font-size:13px;font-weight:600}

/* titres d'axes (X/Y) */
.gn-dt3 .dt3-caxlab{fill:var(--dt-ink-soft);font-size:11.5px;font-weight:600;letter-spacing:.02em}

/* tooltip riche au survol (+ aria-label sur les éléments) */
.gn-dt3{position:relative}
.gn-dt3 .dt3-tip{position:absolute;z-index:60;pointer-events:none;background:var(--dt-ink);color:var(--dt-panel);font-size:12.5px;font-weight:500;padding:7px 11px;border-radius:9px;box-shadow:0 8px 24px -8px rgba(0,0,0,.45);white-space:nowrap;max-width:260px;line-height:1.35}
.gn-dt3 .dt3-tip .dt3-tipdot{opacity:.45;font-style:normal;margin:0 4px}

/* time-granularity: ONLY the over-time card refreshes (targeted datehist re-fetch) — dim it briefly while its datehist facet reloads, leaving every other insight card untouched */
.dt3-cardbusy{opacity:.5;transition:opacity .12s ease;pointer-events:none}

/* LEGIBILITY GUARANTEE (manual chart builder) — a chart SVG must NEVER be height-capped: capping a height-encoding
   viewBox (e.g. a horizontal-bar chart with many rows) squeezes the whole drawing and shrinks the text to a few px
   ("texte illisible", reported repeatedly). Instead the SVG keeps its natural aspect (text stays at its authored
   size) and the bounded .dt3-chartwrap above scrolls. Insight cards manage their own sizing and are unaffected. */
.gn-dt3 .dt3-chartwrap .dt3-svg{max-height:none}

/* Lot 1 — chart toolbar actions (compare / goal / CSV / SQL / pin) + SQL modal */
.gn-dt3 .dt3-txtb{font-size:11px;font-weight:600;padding:5px 9px;line-height:1}
.gn-dt3 .dt3-goalwrap{display:inline-flex;align-items:center}
.gn-dt3 .dt3-goalinput{width:76px;font:inherit;font-size:12px;padding:5px 8px;border:1px solid var(--dt-line,#e7eaf0);border-radius:8px;background:var(--dt-panel,#fff);color:inherit}
.gn-dt3 .dt3-goalinput::placeholder{color:var(--dt-ink-faint,#9aa2b1)}
.gn-dt3 .dt3-txtmodal{position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;background:rgba(18,22,35,.44)}
.gn-dt3 .dt3-txtmodal-in{max-width:640px;width:calc(100% - 44px);max-height:80vh;overflow:auto;background:var(--dt-panel,#fff);border:1px solid var(--dt-line,#e7eaf0);border-radius:12px;box-shadow:0 18px 50px -10px rgba(0,0,0,.5)}
.gn-dt3 .dt3-txtmodal-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--dt-line,#e7eaf0);font-size:14px}
.gn-dt3 .dt3-txtmodal pre{margin:0;padding:14px 16px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.62;white-space:pre;overflow-x:auto;color:var(--dt-ink,#191d26)}

/* Auto-insights — explain popover (clic sur un point de la série temporelle) */
.gn-dt3 .dt3-exmodal{max-width:360px}
.gn-dt3 .dt3-exbody{padding:12px 16px;display:flex;flex-direction:column;gap:9px}
.gn-dt3 .dt3-exrow{font-size:13px;color:var(--dt-ink-soft,#5c6675);display:flex;justify-content:space-between;gap:14px;align-items:baseline}
.gn-dt3 .dt3-exrow b{color:var(--dt-ink,#191d26);font-variant-numeric:tabular-nums;font-weight:600}
.gn-dt3 .dt3-exrow b.dt3-exup{color:#1f9d63} .gn-dt3 .dt3-exrow b.dt3-exdown{color:#d94f4f}

/* gn-bidi-num — en arabe, un nombre formaté (« 8 900,000 ») ou une date garde son ordre de lecture : sans cela les groupes
   de chiffres s'affichent à l'envers. Ces éléments sont toujours écrits en chiffres latins ; leur alignement ne change pas. */
[dir="rtl"] .gn-dt3 .dt3-num,[dir="rtl"] .gn-dt3 .dt3-rel,[dir="rtl"] .gn-dash-tile .dt3-kpibig{unicode-bidi:isolate;direction:ltr;display:inline-block}
/* ── Refonte de la barre (2026-10) : un bouton par geste fréquent, un menu ⋯ sans défilement, une seule taille d'icône ── */
.gn-dt3 .dt3-btn,.gn-dt3 .dt3-mi,.gn-dt3 .dt3-vitem{white-space:nowrap}
.gn-dt3 .dt3-mi svg,.gn-dt3 .dt3-ic svg,.gn-dt3 .dt3-vitem svg{flex:none;width:16px;height:16px}
.gn-dt3 .dt3-tb .dt3-tbl{overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-undob{color:var(--dt-accent)}
.gn-dt3 .dt3-search{position:relative}
.gn-dt3 .dt3-kbd{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border:1px solid var(--dt-line2,var(--dt-line));border-bottom-width:2px;border-radius:5px;background:var(--dt-panel);color:var(--dt-muted);font:600 10.5px/1 ui-monospace,SFMono-Regular,Menlo,monospace;flex:none}
.gn-dt3 .dt3-search .dt3-kbd{opacity:.85}
.gn-dt3 .dt3-search:focus-within .dt3-kbd,.gn-dt3 .dt3-search input:not(:placeholder-shown)+.dt3-kbd{display:none}
.gn-dt3 .dt3-mi .dt3-kbd{margin-inline-start:auto}
.gn-dt3 .dt3-pop.dt3-morepop{max-height:min(82vh,680px);min-width:300px;padding:6px}
.gn-dt3 .dt3-mih{padding:6px 8px 4px;font:600 10.5px/1.2 system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;color:var(--dt-muted)}
.gn-dt3 .dt3-mgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;padding:0 2px 2px}
.gn-dt3 .dt3-mi.dt3-mtile{flex-direction:column;justify-content:center;gap:5px;height:auto;min-height:56px;padding:8px 4px;font-size:11.5px;line-height:1.15;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid transparent}
.gn-dt3 .dt3-mi.dt3-mtile svg{width:18px;height:18px;opacity:.75}
.gn-dt3 .dt3-mi.dt3-mtile.on{background:var(--dt-accent-soft);border-color:var(--dt-accent-line);color:var(--dt-accent);font-weight:600}
.gn-dt3 .dt3-mi.dt3-mtile.on svg{opacity:1}
.gn-dt3 .dt3-densmenu{padding:0 4px 4px}
/* contour de focus VISIBLE sur tout ce qui se manipule au clavier (contraste AA sur clair comme sur sombre) */
.gn-dt3 .dt3-btn:focus-visible,.gn-dt3 .dt3-ic:focus-visible,.gn-dt3 .dt3-mi:focus-visible,.gn-dt3 .dt3-densb:focus-visible,.gn-dt3 .dt3-vitem:focus-visible,.gn-dt3 .dt3-fx:focus-visible,.gn-dt3 .dt3-vtab:focus-visible,.gn-dt3 .dt3-chip button:focus-visible,.gn-dt3 .dt3-expopt:focus-within,.gn-dt3 th.sortable:focus-visible,.gn-dt3 .dt3-hmenu:focus-visible{outline:2px solid var(--dt-accent);outline-offset:2px}
.gn-dt3 .dt3-mi:focus-visible{outline-offset:-2px}
/* fenêtre d'export */
.gn-dt3 .dt3-expbox{width:min(560px,94vw);padding:18px 18px 16px}
.gn-dt3 .dt3-expsec{border:0;margin:0 0 14px;padding:0;min-width:0}
.gn-dt3 .dt3-explg{display:block;padding:0;margin:0 0 7px;font:600 11px/1.2 system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;color:var(--dt-muted)}
.gn-dt3 .dt3-expgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.gn-dt3 .dt3-explist{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.gn-dt3 .dt3-explist2{grid-template-columns:repeat(2,minmax(0,1fr))}
.gn-dt3 .dt3-expopt{position:relative;display:flex;align-items:flex-start;gap:8px;padding:10px 11px;border:1px solid var(--dt-line);border-radius:10px;background:var(--dt-panel2);cursor:pointer;min-width:0}
.gn-dt3 .dt3-expgrid .dt3-expopt{flex-direction:column;align-items:flex-start}
.gn-dt3 .dt3-expopt:hover{border-color:var(--dt-line2)}
.gn-dt3 .dt3-expopt.on{border-color:var(--dt-accent);background:var(--dt-accent-soft);box-shadow:inset 0 0 0 1px var(--dt-accent)}
.gn-dt3 .dt3-expopt.dis{opacity:.45;cursor:not-allowed}
.gn-dt3 .dt3-expopt input{position:absolute;opacity:0;pointer-events:none}
.gn-dt3 .dt3-expic{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--dt-panel);color:var(--dt-accent)}
.gn-dt3 .dt3-expic svg{width:16px;height:16px}
.gn-dt3 .dt3-expot{display:flex;flex-direction:column;gap:3px;min-width:0}
.gn-dt3 .dt3-expot b{font-size:13px;font-weight:600;color:var(--dt-ink)}
.gn-dt3 .dt3-expot small{font-size:11.5px;line-height:1.3;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-expdecl .dt3-mi{border:1px solid var(--dt-line);margin-bottom:5px;height:36px}
.gn-dt3 .dt3-expst{flex:1;align-self:center;font-size:12.5px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-shareres{display:flex;flex-direction:column;gap:8px;padding:12px 16px;border-top:1px solid var(--dt-line,#e3e6ec)}
.gn-dt3 .dt3-shareres[hidden]{display:none}
.gn-dt3 .dt3-sharerow{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.gn-dt3 .dt3-shareu{flex:1;min-width:0;font:12.5px ui-monospace,Consolas,monospace;padding:7px 9px;border:1px solid var(--dt-line,#e3e6ec);border-radius:8px;background:var(--dt-bg-soft,#f6f7f9);color:inherit;direction:ltr}
.gn-dt3 a.dt3-btn{text-decoration:none;display:inline-flex;align-items:center}
.gn-dt3 .dt3-sharegone{margin:0;font-size:13px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-rsum{display:inline-flex;gap:12px;font-size:12.5px;font-variant-numeric:tabular-nums;padding:2px 10px;border-radius:99px;background:var(--dt-bg-soft,#f0f2f6)}
.gn-dt3 .dt3-rsum[hidden]{display:none}
.gn-dt3 .dt3-cf-red{--dt3-cf:#dc2626;--dt3-cfb:rgba(220,38,38,.16)}
.gn-dt3 .dt3-cf-orange{--dt3-cf:#ea580c;--dt3-cfb:rgba(234,88,12,.16)}
.gn-dt3 .dt3-cf-yellow{--dt3-cf:#ca8a04;--dt3-cfb:rgba(202,138,4,.18)}
.gn-dt3 .dt3-cf-green{--dt3-cf:#16a34a;--dt3-cfb:rgba(22,163,74,.16)}
.gn-dt3 .dt3-cf-blue{--dt3-cf:#2563eb;--dt3-cfb:rgba(37,99,235,.15)}
/* couleur conditionnelle : la règle du survol de ligne (tr:hover td) ne doit pas l’effacer — même poids + placée après */
.gn-dt3 tbody tr td.dt3-cf,.gn-dt3 tbody tr:hover td.dt3-cf,.gn-dt3 .dt3-cfsw{background:var(--dt3-cfb);box-shadow:inset 3px 0 0 var(--dt3-cf)}
[dir=rtl] .gn-dt3 tbody tr td.dt3-cf,[dir=rtl] .gn-dt3 tbody tr:hover td.dt3-cf,.gn-dt3[dir=rtl] tbody tr td.dt3-cf,.gn-dt3[dir=rtl] tbody tr:hover td.dt3-cf{box-shadow:inset -3px 0 0 var(--dt3-cf)}
.gn-dt3 .dt3-cfbox{width:min(520px,calc(100vw - 32px))}
.gn-dt3 .dt3-cfbody{padding:12px 16px 16px;display:flex;flex-direction:column;gap:12px}
.gn-dt3 .dt3-cflist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.gn-dt3 .dt3-cflist li{display:flex;align-items:center;gap:10px;font-size:13px}
.gn-dt3 .dt3-cfrl{flex:1}
.gn-dt3 .dt3-cfnone{margin:0;font-size:13px;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-cfadd{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.gn-dt3 .dt3-cfadd select,.gn-dt3 .dt3-cfadd input[type=text]{padding:6px 8px;border:1px solid var(--dt-line,#e3e6ec);border-radius:8px;background:var(--dt-bg,#fff);color:inherit;font:inherit;font-size:13px}
.gn-dt3 .dt3-cfadd input[type=text]{flex:1;min-width:110px}
.gn-dt3 .dt3-cfcols{display:inline-flex;gap:6px}
.gn-dt3 .dt3-cfsw{display:inline-block;width:20px;height:20px;border-radius:6px;cursor:pointer;position:relative}
.gn-dt3 .dt3-cfsw input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.gn-dt3 .dt3-cfsw:has(input:checked){outline:2px solid var(--dt-ink,#1d2433);outline-offset:2px}
.gn-dt3 .dt3-cfsw:has(input:focus-visible){outline:2px solid var(--dt-accent,#2563eb);outline-offset:2px}
.gn-dt3 .dt3-cfdot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--dt-accent,#2563eb);margin-inline-start:4px}
.gn-dt3 .dt3-rsum i{font-style:normal;color:var(--dt-ink-soft)}
.gn-dt3 .dt3-expst.busy::before{content:"";display:inline-block;width:12px;height:12px;margin-inline-end:7px;vertical-align:-1px;border:2px solid var(--dt-accent);border-inline-end-color:transparent;border-radius:50%;animation:dt3-spin .8s linear infinite}
@keyframes dt3-spin{to{transform:rotate(360deg)}}
@media (max-width:560px){.gn-dt3 .dt3-expgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.gn-dt3 .dt3-explist{grid-template-columns:1fr}}
.gn-dt3 .dt3-kbdbox{width:min(420px,94vw)}
.gn-dt3 .dt3-kbdt{width:100%;border-collapse:collapse;font-size:13px}
.gn-dt3 .dt3-kbdt td{padding:7px 4px;border-bottom:1px solid var(--dt-line);color:var(--dt-ink)}
.gn-dt3 .dt3-kbdt td:first-child{white-space:nowrap;width:1%;padding-inline-end:18px}
.gn-dt3 .dt3-kbdt .dt3-kbd{height:22px;min-width:22px;font-size:11.5px;color:var(--dt-ink-soft)}
/* barre de sélection : flottante en bas, au centre — elle ne pousse plus le tableau */
.gn-dt3 .dt3-bulk{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:59;display:flex;align-items:center;gap:8px;max-width:calc(100vw - 24px);padding:7px 8px 7px 8px;border:1px solid var(--dt-line2,var(--dt-line));border-radius:14px;background:var(--dt-elev,var(--dt-panel));box-shadow:0 14px 40px rgba(16,24,40,.28);flex-wrap:wrap;animation:dt3-bulkin .18s ease-out}
.gn-dt3 .dt3-bulkn{font-size:13px;font-weight:600;color:var(--dt-ink);padding-inline-end:4px;white-space:nowrap;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-bulksep{width:1px;align-self:stretch;margin:2px 2px;background:var(--dt-line)}
.gn-dt3 .dt3-bulk .dt3-bulkx{width:30px;height:30px;border-color:transparent;background:transparent}
.gn-dt3 .dt3-bulk .dt3-bulkmove{max-width:220px}
@keyframes dt3-bulkin{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}
@media (prefers-reduced-motion:reduce){.gn-dt3 .dt3-bulk{animation:none}}
/* barre étroite : les mots se replient, les icônes restent */
@media (max-width:1100px){.gn-dt3 .dt3-tb .dt3-tbl{display:none}.gn-dt3 .dt3-tb{padding:7px 9px}}
/* ── vues en onglets ── */
.gn-dt3 .dt3-vtabs{display:flex;align-items:center;gap:10px;padding:6px 14px 0;border-top:1px solid var(--dt-line);background:var(--dt-panel)}
.gn-dt3 .dt3-vtabsl{display:flex;align-items:flex-end;gap:2px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:thin}
.gn-dt3 .dt3-vtabsr{display:flex;align-items:center;gap:6px;flex:none;padding-bottom:5px}
.gn-dt3 .dt3-vtab{display:inline-flex;align-items:center;gap:6px;flex:none;max-width:240px;height:32px;padding:0 12px;border:0;border-bottom:2px solid transparent;background:none;color:var(--dt-ink-soft);font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.gn-dt3 .dt3-vtab:hover{color:var(--dt-ink);background:var(--dt-panel2)}
.gn-dt3 .dt3-vtab.on{color:var(--dt-accent);border-bottom-color:var(--dt-accent);font-weight:600}
.gn-dt3 .dt3-vtabl{overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-vtabn{flex:none;padding:0 7px;border-radius:9px;background:var(--dt-accent-soft);color:var(--dt-accent);font-size:11px;font-weight:600;line-height:18px;font-variant-numeric:tabular-nums}
.gn-dt3 .dt3-vdirty{flex:none;width:7px;height:7px;border-radius:50%;background:#b45309}
.gn-dt3 .dt3-vshic{display:inline-flex;color:var(--dt-muted)}
.gn-dt3 .dt3-vshic svg{width:13px;height:13px}
.gn-dt3 .dt3-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.gn-dt3 .dt3-msep{height:1px;margin:4px 6px;background:var(--dt-line)}
/* ── pastilles : libellé cliquable, « + Ajouter un filtre » ── */
.gn-dt3 .dt3-fchipl{border:0;background:none;color:inherit;font:inherit;padding:0;cursor:pointer;overflow:hidden;text-overflow:ellipsis}
.gn-dt3 .dt3-fchipl:hover{text-decoration:underline}
.gn-dt3 .dt3-fchip.dt3-addf{gap:4px;height:24px;padding-inline:8px 10px;border-style:dashed;background:none;cursor:pointer;font:inherit;font-size:12px}
.gn-dt3 .dt3-addf svg{width:13px;height:13px}
/* ── filtrer sur une valeur (entonnoir au survol de la cellule) ── */
.gn-dt3 td.trunc{position:relative}
.gn-dt3 .dt3-cellf{position:absolute;inset-inline-end:4px;top:50%;transform:translateY(-50%);display:none;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:1px solid var(--dt-line);border-radius:6px;background:var(--dt-elev);color:var(--dt-ink-soft);cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.gn-dt3 .dt3-cellf svg{width:12px;height:12px}
.gn-dt3 td:hover>.dt3-cellf,.gn-dt3 td.active>.dt3-cellf{display:inline-flex}
.gn-dt3 .dt3-cellf:hover{color:var(--dt-accent);border-color:var(--dt-accent)}
@media (hover:none){.gn-dt3 .dt3-cellf{display:none!important}}
/* ── colonnes : élargir (poignée de bord) et déplacer (glisser l'en-tête) ── */
.gn-dt3 th[data-colf]{position:relative}
.gn-dt3 .dt3-colrz{position:absolute;top:0;bottom:0;inset-inline-end:-4px;width:9px;cursor:col-resize;z-index:3;touch-action:none}
.gn-dt3 .dt3-colrz::after{content:"";position:absolute;top:25%;bottom:25%;inset-inline-start:4px;width:1px;background:var(--dt-line2);opacity:0;transition:opacity .12s}
.gn-dt3 th:hover>.dt3-colrz::after,.gn-dt3.dt3-resizing .dt3-colrz::after{opacity:1}
.gn-dt3 .dt3-colrz:hover::after{background:var(--dt-accent);width:2px;opacity:1}
.gn-dt3.dt3-resizing,.gn-dt3.dt3-resizing *{cursor:col-resize!important;user-select:none}
.gn-dt3 th.dt3-coldrag{opacity:.45}
.gn-dt3 th.dt3-dropbefore{box-shadow:inset 3px 0 0 var(--dt-accent)}
.gn-dt3 th.dt3-dropafter{box-shadow:inset -3px 0 0 var(--dt-accent)}
[dir=rtl] .gn-dt3 th.dt3-dropbefore,.gn-dt3[dir=rtl] th.dt3-dropbefore{box-shadow:inset -3px 0 0 var(--dt-accent)}
[dir=rtl] .gn-dt3 th.dt3-dropafter,.gn-dt3[dir=rtl] th.dt3-dropafter{box-shadow:inset 3px 0 0 var(--dt-accent)}
.gn-dt3 .dt3-mi.dt3-mtile>span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
