
/* Source centralisee: work/gestion_ferme_dev/public/assets/css/v7-core.css */
/** Gestion Ferme ERP 7.1 — design system et canevas universel. */
:root{
 --v7-green-950:#123c25;--v7-green-900:#174a2c;--v7-green-800:#1f6038;--v7-green-700:#287848;--v7-green-600:#338e57;
 --v7-green-100:#eaf5ed;--v7-green-50:#f5faf6;--v7-ink:#173226;--v7-muted:#64766d;--v7-line:#d9e6dc;--v7-line-strong:#bfd3c5;
 --v7-white:#fff;--v7-canvas:#f4f7f4;--v7-danger:#b42318;--v7-radius:12px;--v7-radius-sm:8px;
 --v7-shadow:0 1px 2px rgba(18,60,37,.04),0 8px 24px rgba(18,60,37,.05);--v7-sidebar:248px;--v7-control:40px;
 --v7-space-1:6px;--v7-space-2:10px;--v7-space-3:14px;--v7-space-4:18px;--v7-space-5:24px;--v7-space-6:32px;
}
*{box-sizing:border-box}html{background:var(--v7-canvas)}body.v7-app{margin:0;background:var(--v7-canvas);color:var(--v7-ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;line-height:1.45}
body.v7-app a{color:var(--v7-green-700)}
/* Barre supérieure et navigation */
body.v7-app .odoo-topbar{position:sticky;top:0;z-index:1000;min-height:64px;padding:8px 16px;display:grid;grid-template-columns:minmax(190px,auto) 40px minmax(0,1fr) auto;align-items:center;gap:12px;background:rgba(255,255,255,.96);border-bottom:1px solid var(--v7-line);box-shadow:0 1px 8px rgba(18,60,37,.06);backdrop-filter:blur(10px)}
body.v7-app .odoo-brand{display:flex;align-items:center;gap:10px;color:var(--v7-ink);text-decoration:none}body.v7-app .brand-logo{width:38px;height:38px;border-radius:10px;object-fit:cover}body.v7-app .odoo-brand strong{display:block;font-size:14px}body.v7-app .odoo-brand small{display:block;color:var(--v7-muted);font-size:11px}
body.v7-app .erp-menu-trigger{display:grid;place-items:center;width:40px;height:40px;border:1px solid var(--v7-line);border-radius:9px;background:#fff;color:var(--v7-green-900);font-size:18px;cursor:pointer}
body.v7-app .erp-page-context{min-width:0;justify-self:start;display:flex;align-items:center;gap:9px;padding:6px 10px;border:1px solid var(--v7-line);border-radius:9px;background:var(--v7-green-50)}body.v7-app .erp-page-context-icon{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;background:var(--v7-green-700);color:#fff}body.v7-app .erp-page-context-copy small{display:block;color:var(--v7-muted);font-size:8px;letter-spacing:.08em;text-transform:uppercase}body.v7-app .erp-page-context-copy strong{display:block;max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
body.v7-app .erp-main-menu{position:fixed;top:64px;bottom:0;left:0;z-index:900;width:var(--v7-sidebar);padding:12px;overflow-y:auto;background:#fff;border-right:1px solid var(--v7-line);box-shadow:8px 0 28px rgba(18,60,37,.06);transition:width .18s ease,transform .18s ease}
body.v7-app .erp-menu-group{margin:0 0 5px}body.v7-app .erp-menu-group-button{width:100%;min-height:42px;padding:9px 10px;display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:8px;border:0;border-radius:9px;background:transparent;color:var(--v7-ink);font-weight:650;text-align:left;cursor:pointer}body.v7-app .erp-menu-group-button:hover,body.v7-app .erp-menu-group.active>.erp-menu-group-button{background:var(--v7-green-100);color:var(--v7-green-900)}
body.v7-app .erp-menu-panel{position:static!important;width:auto!important;max-width:none!important;display:none;border:1px solid var(--v7-line)!important;border-radius:9px!important;box-shadow:none!important;transform:none!important}body.v7-app .erp-menu-group.erp-menu-panel-open>.erp-menu-panel{display:block!important}body.v7-app .erp-menu-panel a{display:flex;align-items:center;gap:8px;min-height:35px;padding:7px 9px;border-radius:7px;color:var(--v7-ink);text-decoration:none;font-size:12px}body.v7-app .erp-menu-panel a:hover{background:#fff;color:var(--v7-green-800)}
/* Contenu : un seul canevas, aucune règle d'ordre héritée. */
body.v7-app #main-content{width:auto!important;max-width:none!important;padding:22px 24px 48px!important;min-width:0;background:var(--v7-canvas)}
body.v7-app .v7-canvas{width:min(100%,1680px);margin:0 auto;display:flex;flex-direction:column;gap:var(--v7-space-4);min-width:0}
body.v7-app .v7-zone{display:flex;flex-direction:column;gap:var(--v7-space-4);min-width:0;margin:0!important;padding:0!important;position:static!important;transform:none!important}body.v7-app .v7-zone[hidden]{display:none!important}
body.v7-app .v7-page-header,body.v7-app .page-heading,body.v7-app .page-head,body.v7-app .ds-page-header{margin:0!important;padding:0 0 16px!important;display:flex!important;align-items:flex-start!important;justify-content:space-between!important;gap:20px!important;border:0!important;border-bottom:1px solid var(--v7-line)!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;min-width:0}body.v7-app .v7-page-header>div:first-child{min-width:0}body.v7-app .v7-page-header h1,body.v7-app .page-heading h1{margin:0 0 4px!important;color:var(--v7-green-900)!important;font-size:clamp(22px,2vw,30px)!important;line-height:1.15!important}body.v7-app .v7-page-header p,body.v7-app .page-heading p{margin:0!important;color:var(--v7-muted)!important;font-size:13px!important}body.v7-app .v7-page-header .form-actions,body.v7-app .page-heading .form-actions{margin:0!important;display:flex!important;flex-wrap:wrap!important;justify-content:flex-end!important;gap:8px!important}
/* Surfaces */
body.v7-app :is(.v7-surface,.panel,.card,.box,.content-card,.dashboard-card,.collapsible-panel,.ds-card){position:relative!important;inset:auto!important;float:none!important;transform:none!important;min-width:0!important;width:100%!important;max-width:none!important;margin:0!important;border:1px solid var(--v7-line)!important;border-radius:var(--v7-radius)!important;background:var(--v7-white)!important;box-shadow:var(--v7-shadow)!important;overflow:visible!important}
body.v7-app :is(.v7-surface,.panel,.card,.box,.content-card,.dashboard-card,.ds-card):not(.collapsible-panel){padding:18px!important}
body.v7-app .v7-surface-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-18px -18px 16px;padding:14px 18px;border-bottom:1px solid var(--v7-line);background:var(--v7-green-50);border-radius:var(--v7-radius) var(--v7-radius) 0 0}body.v7-app .v7-surface-head h2{margin:0;font-size:15px;color:var(--v7-green-900)}
body.v7-app .collapsible-panel-header{min-height:52px!important;margin:0!important;padding:10px 14px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;gap:12px!important;border:0!important;border-radius:var(--v7-radius)!important;background:var(--v7-green-50)!important}body.v7-app .collapsible-panel-header h2{margin:0!important;font-size:15px!important;color:var(--v7-green-900)!important}body.v7-app .collapsible-panel-body{padding:18px!important;border-top:1px solid var(--v7-line)!important}body.v7-app .collapsible-panel.is-collapsed .collapsible-panel-body{display:none!important}body.v7-app .panel-collapse-toggle{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--v7-line);border-radius:8px;background:#fff;color:var(--v7-green-800);cursor:pointer}
/* Formulaires */
body.v7-app .v7-form-grid,body.v7-app .form-grid,body.v7-app form.admin-form{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:14px 16px!important;align-items:end!important}body.v7-app .v7-filter-grid,body.v7-app form.toolbar{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr)) auto!important;gap:12px!important;align-items:end!important}body.v7-app label{display:flex;flex-direction:column;gap:5px;min-width:0;color:var(--v7-ink);font-size:12px;font-weight:650}body.v7-app label.full,body.v7-app .full,body.v7-app .form-actions{grid-column:1/-1}body.v7-app fieldset{min-width:0;margin:0;padding:14px 16px;border:1px solid var(--v7-line);border-radius:var(--v7-radius-sm);background:var(--v7-white)}
body.v7-app fieldset>legend{padding:0 6px;color:var(--v7-green-900);font-size:12px;font-weight:700}
/* Fieldset purement structurel : jamais de cadre navigateur autour d'une page ou d'un formulaire. */
body.v7-app fieldset.ui-fieldset-reset{width:100%;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}
body.v7-app :is(input:not([type="checkbox"]):not([type="radio"]),select,textarea){width:100%;min-width:0;min-height:var(--v7-control);padding:8px 10px;border:1px solid var(--v7-line-strong);border-radius:8px;background:#fff;color:var(--v7-ink);font:inherit;font-size:13px;outline:none;box-shadow:none}body.v7-app textarea{min-height:96px;resize:vertical}body.v7-app :is(input,select,textarea):focus{border-color:var(--v7-green-600);box-shadow:0 0 0 3px rgba(51,142,87,.12)}body.v7-app .form-actions{display:flex!important;flex-wrap:wrap!important;justify-content:flex-end!important;gap:8px!important;margin:2px 0 0!important}
body.v7-app :is(button,.button,.btn,input[type="submit"],a.button){min-height:38px;padding:8px 13px;border:1px solid transparent;border-radius:8px;background:var(--v7-green-700);color:#fff;font-weight:650;font-size:12px;line-height:1.2;text-decoration:none;cursor:pointer}body.v7-app :is(.button.secondary,.btn.secondary){border-color:var(--v7-line-strong);background:var(--v7-green-50);color:var(--v7-green-900)}body.v7-app :is(button,.button,.btn):hover{filter:brightness(.97)}
/* Indicateurs */
body.v7-app :is(.stats-grid,.kpi-grid,.dashboard-grid,.metrics-grid){display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:14px!important}body.v7-app :is(.stat-card,.stats-card,.kpi-card,.metric-card,.dashboard-stat-card){min-width:0!important;min-height:108px!important;padding:16px!important;border:1px solid var(--v7-line)!important;border-left:4px solid var(--v7-green-600)!important;border-radius:var(--v7-radius)!important;background:#fff!important;box-shadow:var(--v7-shadow)!important;overflow:hidden!important}body.v7-app :is(.stat-card,.stats-card,.kpi-card,.metric-card,.dashboard-stat-card)::before,body.v7-app :is(.stat-card,.stats-card,.kpi-card,.metric-card,.dashboard-stat-card)::after{content:none!important;display:none!important}
/* Tableaux */
body.v7-app .alert{margin:0!important}
/* L'ancien admin-layout ne dessine plus la page : ses enfants ont été extraits. */
body.v7-app :is(.admin-layout,.two-column-layout,.split-layout,.content-grid){display:contents!important}
body.v7-app #main-content *{min-width:0}body.v7-app #main-content>:not(script):not(style){float:none!important}
/* Menu réduit */
body.v7-app.v7-menu-collapsed{--v7-sidebar:72px}body.v7-app.v7-menu-collapsed .erp-menu-group-button{grid-template-columns:1fr}body.v7-app.v7-menu-collapsed .erp-menu-group-button>span:not(.erp-menu-icon),body.v7-app.v7-menu-collapsed .erp-menu-group-button>b,body.v7-app.v7-menu-collapsed .erp-menu-panel{display:none!important}
@media(max-width:1200px){body.v7-app .v7-form-grid,body.v7-app .form-grid,body.v7-app form.admin-form{grid-template-columns:repeat(3,minmax(0,1fr))!important}body.v7-app .v7-filter-grid,body.v7-app form.toolbar{grid-template-columns:repeat(3,minmax(0,1fr))!important}body.v7-app :is(.stats-grid,.kpi-grid,.dashboard-grid,.metrics-grid){grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:960px){body.v7-app .odoo-topbar{grid-template-columns:40px minmax(0,1fr) auto;padding:8px 10px}body.v7-app .odoo-brand-wrap{display:none}body.v7-app .erp-main-menu{transform:translateX(-102%);width:min(88vw,320px)}body.v7-app.erp-menu-mobile-open .erp-main-menu{transform:translateX(0)}body.v7-app #main-content{margin-left:0!important;padding:18px 14px 36px!important}body.v7-app .v7-page-header,body.v7-app .page-heading,body.v7-app .page-head,body.v7-app .ds-page-header{flex-direction:column!important}body.v7-app .v7-page-header .form-actions,body.v7-app .page-heading .form-actions{justify-content:flex-start!important}body.v7-app .v7-form-grid,body.v7-app .form-grid,body.v7-app form.admin-form,body.v7-app .v7-filter-grid,body.v7-app form.toolbar{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:620px){body.v7-app .erp-page-context-copy small{display:none}body.v7-app .erp-page-context-copy strong{max-width:48vw}body.v7-app #main-content{padding:14px 10px 28px!important}body.v7-app .v7-canvas,body.v7-app .v7-zone{gap:12px}body.v7-app .v7-form-grid,body.v7-app .form-grid,body.v7-app form.admin-form,body.v7-app .v7-filter-grid,body.v7-app form.toolbar,body.v7-app :is(.stats-grid,.kpi-grid,.dashboard-grid,.metrics-grid){grid-template-columns:1fr!important}body.v7-app :is(.v7-surface,.panel,.card,.box,.content-card,.dashboard-card,.ds-card):not(.collapsible-panel){padding:14px!important}body.v7-app .v7-surface-head{margin:-14px -14px 14px;padding:12px 14px}}

/* ========================================================================== */
/* V7.2 — écrans dédiés et navigation stable                                 */
/* ========================================================================== */
body.erp-public.v7-app{min-height:100vh;background:#f4f8f4!important}
body.erp-public.v7-app .odoo-topbar{position:relative!important;grid-template-columns:minmax(220px,1fr) auto!important;min-height:72px!important;padding:10px clamp(18px,4vw,54px)!important;background:linear-gradient(110deg,#154a2b,#2c7a45)!important;color:#fff!important}
body.erp-public.v7-app .odoo-brand-wrap{display:block!important}
body.erp-public.v7-app .odoo-brand{color:#fff!important}
body.erp-public.v7-app .language-switch{margin-left:auto}
body.erp-public.v7-app #main-content{margin:0!important;padding:0!important;max-width:none!important;width:100%!important}

.v7-auth-shell{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(420px,.9fr);min-height:calc(100vh - 72px);background:#f4f8f4}
.v7-auth-brand{display:grid;align-items:center;padding:clamp(42px,8vw,110px);background:linear-gradient(145deg,rgba(20,71,41,.98),rgba(41,123,69,.92));color:#fff;overflow:hidden;position:relative}
.v7-auth-brand::after{content:"";position:absolute;width:420px;height:420px;border-radius:50%;right:-170px;bottom:-210px;background:rgba(255,255,255,.07)}
.v7-auth-brand-inner{position:relative;z-index:1;max-width:650px}
.v7-auth-logo{width:72px;height:72px;object-fit:contain;padding:8px;border-radius:18px;background:#fff;box-shadow:0 12px 30px rgba(0,0,0,.16)}
.v7-auth-eyebrow{margin:24px 0 10px!important;text-transform:uppercase;letter-spacing:.11em;font-size:12px;font-weight:800;opacity:.78}
.v7-auth-brand h1{margin:0 0 18px!important;max-width:720px;color:#fff!important;font-size:clamp(34px,4vw,58px)!important;line-height:1.06!important}
.v7-auth-brand p:not(.v7-auth-eyebrow){max-width:620px;margin:0!important;font-size:17px;line-height:1.65;opacity:.86}
.v7-auth-features{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:34px}
.v7-auth-features span{padding:13px 15px;border:1px solid rgba(255,255,255,.18);border-radius:12px;background:rgba(255,255,255,.08);font-weight:650}
.v7-auth-panel{display:grid;place-items:center;padding:36px}
.v7-auth-card{width:min(100%,480px);padding:34px;border:1px solid #dbe7dd;border-radius:20px;background:#fff;box-shadow:0 20px 60px rgba(28,73,43,.12)}
.v7-auth-card-head h2{margin:0 0 8px!important;color:#174a2c!important;font-size:30px!important}
.v7-auth-card-head p{margin:0 0 26px!important;color:#68766c}
.v7-auth-form{display:grid!important;grid-template-columns:1fr!important;gap:18px!important}
.v7-auth-form label{display:grid!important;gap:7px!important;font-size:13px!important;font-weight:750!important}
.v7-auth-form input{min-height:46px!important;border-radius:10px!important}
.v7-auth-submit{width:100%;min-height:46px!important;margin-top:2px;font-size:14px!important}
.v7-auth-card-footer{display:flex;justify-content:space-between;gap:12px;margin-top:26px;padding-top:18px;border-top:1px solid #e5ece6;color:#829087;font-size:11px}

body.home-page.v7-app #main-content{padding-top:26px!important}
body.home-page.v7-app .v7-home{display:grid;gap:22px}
.v7-home-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:30px;border-radius:18px;background:linear-gradient(120deg,#174a2c,#2e8150);color:#fff;box-shadow:0 18px 40px rgba(23,74,44,.18)}
.v7-home-hero h1{margin:2px 0 8px!important;color:#fff!important;font-size:clamp(28px,3vw,42px)!important}
.v7-home-hero p{margin:0!important;opacity:.84;font-size:15px}
.v7-home-eyebrow{margin:0 0 6px!important;text-transform:uppercase;letter-spacing:.1em;font-size:11px!important;font-weight:800;opacity:.72}
.v7-home-date{padding:10px 13px;border:1px solid rgba(255,255,255,.2);border-radius:10px;background:rgba(255,255,255,.1);font-weight:750;white-space:nowrap}
.v7-home-section{padding:24px;border:1px solid var(--v7-line);border-radius:18px;background:#fff;box-shadow:var(--v7-shadow)}
.v7-home-section-head{display:flex;align-items:end;justify-content:space-between;margin-bottom:18px}
.v7-home-section-head h2{margin:0!important;color:var(--v7-green-900)!important;font-size:22px!important}
.v7-home-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.v7-home-card{display:grid;grid-template-rows:auto auto 1fr auto;gap:8px;min-height:190px;padding:20px;border:1px solid var(--v7-line);border-radius:14px;background:#fff;color:var(--v7-ink);text-decoration:none;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.v7-home-card:hover{transform:translateY(-3px);border-color:#a8cdb2;box-shadow:0 14px 30px rgba(28,73,43,.11)}
.v7-home-card-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:12px;background:var(--v7-green-100);color:var(--v7-green-900);font-weight:850;font-size:20px}
.v7-home-card strong{font-size:17px;color:var(--v7-green-900)}
.v7-home-card small{color:var(--v7-muted);line-height:1.5}
.v7-home-card b{color:var(--v7-green-700);font-size:12px}

/* Le menu n'est plus rabattu automatiquement par les anciennes classes. */
/* Ces règles ne concernent QUE l'affichage bureau : sur mobile, le menu    */
/* est un tiroir et le contenu occupe toute la largeur. On les enferme donc */
/* dans une media query desktop pour qu'elles ne cassent pas le mobile.     */
@media (min-width: 961px) {
  body.v7-app:not(.v7-menu-collapsed) .erp-main-menu{width:var(--v7-sidebar)!important}
  body.v7-app:not(.v7-menu-collapsed) #main-content{margin-left:var(--v7-sidebar)!important}
  body.v7-app:not(.v7-menu-collapsed) .erp-menu-group-button>span:not(.erp-menu-icon),body.v7-app:not(.v7-menu-collapsed) .erp-menu-group-button>b{display:inline!important}
  body.v7-app:not(.v7-menu-collapsed) .erp-menu-group-button{grid-template-columns:34px minmax(0,1fr) auto!important}
}

@media(max-width:1100px){.v7-home-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.v7-auth-shell{grid-template-columns:1fr 460px}.v7-auth-brand{padding:54px}}
@media(max-width:800px){.v7-auth-shell{grid-template-columns:1fr}.v7-auth-brand{display:none}.v7-auth-panel{min-height:calc(100vh - 72px);padding:22px}.v7-home-grid{grid-template-columns:1fr}.v7-home-hero{flex-direction:column}.v7-home-date{align-self:flex-start}}

/* ==========================================================================
   V7.3 — navigation latérale : correction structurelle
   --------------------------------------------------------------------------
   L'ancien menu réservait de l'espace avec padding-left sur le body, alors
   que le canevas V7 utilise déjà la marge de #main-content. Cette section
   neutralise définitivement ce double décalage et garantit que le menu reste
   visible sur toute la hauteur de l'écran.
   ========================================================================== */
@media (min-width: 961px) {
  body.v7-app.erp-authenticated {
    padding-left: 0 !important;
    overflow-x: hidden !important;
  }

  body.v7-app.erp-authenticated .odoo-topbar {
    padding-left: 16px !important;
    grid-template-columns: minmax(190px, auto) 40px minmax(0, 1fr) auto !important;
  }

  body.v7-app.erp-authenticated .odoo-brand-wrap {
    position: static !important;
    inset: auto !important;
    width: auto !important;
    min-width: 0 !important;
    height: auto !important;
    padding: 0 !important;
    background: transparent !important;
  }

  body.v7-app.erp-authenticated .odoo-brand {
    justify-content: flex-start !important;
  }

  body.v7-app.erp-authenticated .odoo-brand > span {
    display: block !important;
  }

  body.v7-app .erp-menu-trigger {
    display: grid !important;
  }

  body.v7-app .erp-main-menu {
    top: 64px !important;
    bottom: auto !important;
    left: 0 !important;
    width: var(--v7-sidebar) !important;
    height: calc(100dvh - 64px) !important;
    max-height: calc(100dvh - 64px) !important;
    padding: 12px 10px 28px !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    overscroll-behavior: contain !important;
    scrollbar-gutter: stable !important;
    transform: none !important;
  }

  body.v7-app #main-content {
    padding-left: 24px !important;
  }

  /* Le repli manuel V7 utilise une seule classe et ne dépend plus de V5. */
  body.v7-app.v72-menu-collapsed {
    --v7-sidebar: 72px;
  }

  body.v7-app.v72-menu-collapsed .erp-main-menu {
    width: 72px !important;
    padding-inline: 9px !important;
  }

  body.v7-app.v72-menu-collapsed #main-content {
    margin-left: 72px !important;
  }

  body.v7-app.v72-menu-collapsed .erp-menu-group-button {
    grid-template-columns: 1fr !important;
    justify-items: center !important;
    padding-inline: 6px !important;
  }

  body.v7-app.v72-menu-collapsed .erp-menu-group-button > span:not(.erp-menu-icon),
  body.v7-app.v72-menu-collapsed .erp-menu-group-button > b,
  body.v7-app.v72-menu-collapsed .erp-menu-panel {
    display: none !important;
  }
}

/* V7.4 — socle unique sans héritage visuel V5/V6. */
body.v7-app #main-content > *{max-width:1680px;margin-left:auto!important;margin-right:auto!important}
body.v7-app #main-content > .page-head,
body.v7-app #main-content > .page-heading,
body.v7-app #main-content > .ds-page-header{margin-bottom:18px!important}
body.v7-app #main-content > :not(.page-head):not(.page-heading):not(.ds-page-header)+*{margin-top:16px!important}
body.v7-app .grid{display:grid!important;gap:14px 16px!important;align-items:end!important}
body.v7-app .grid.two{grid-template-columns:repeat(2,minmax(0,1fr))!important}
body.v7-app .grid.three{grid-template-columns:repeat(3,minmax(0,1fr))!important}
body.v7-app .grid.four{grid-template-columns:repeat(4,minmax(0,1fr))!important}
body.v7-app .grid.five{grid-template-columns:repeat(5,minmax(0,1fr))!important}
body.v7-app .filters{margin:0!important}
body.v7-app .filter-actions{display:flex!important;align-items:end!important;justify-content:flex-end!important;gap:8px!important;flex-wrap:wrap!important}
body.v7-app .list-toolbar{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:16px!important;flex-wrap:wrap!important;margin:0!important;padding:12px 0!important}
body.v7-app .result-summary,body.v7-app .page-indicator{margin:0!important;color:var(--v7-muted)!important;font-size:12px!important}
body.v7-app .per-page-form{display:flex!important;align-items:center!important;gap:8px!important;margin:0!important}
body.v7-app .per-page-form label{display:inline!important}
body.v7-app .per-page-form select{width:auto!important;min-width:76px!important}
body.v7-app .bulk-sheet-validation{display:flex!important;justify-content:space-between!important;align-items:center!important;gap:14px!important;flex-wrap:wrap!important;padding:14px!important;border:1px solid var(--v7-line)!important;border-radius:10px!important;background:var(--v7-green-50)!important}
body.v7-app .bulk-sheet-validation .actions{display:flex!important;gap:8px!important;flex-wrap:wrap!important}
body.v7-app .filtered-totals-heading{display:flex!important;justify-content:space-between!important;align-items:end!important;gap:16px!important;flex-wrap:wrap!important;margin-bottom:14px!important}
body.v7-app .filtered-totals-heading h2{margin:0!important;font-size:18px!important}
body.v7-app .filtered-totals-heading p{margin:0!important;color:var(--v7-muted)!important}
body.v7-app .filtered-total-cards{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:14px!important}
body.v7-app .filtered-total-card{padding:16px!important;border:1px solid var(--v7-line)!important;border-radius:10px!important;background:#f8faf8!important}
body.v7-app .filtered-total-card span{display:block!important;color:var(--v7-muted)!important;font-size:12px!important;margin-bottom:6px!important}
body.v7-app .filtered-total-card strong{font-size:23px!important;color:var(--v7-green-950)!important}
body.v7-app .filtered-total-card small{display:block!important;margin-top:6px!important;color:var(--v7-muted)!important}
body.v7-app .alert{padding:12px 14px!important;border-radius:9px!important;border:1px solid var(--v7-line)!important;background:#fff!important}
body.v7-app .alert.error{border-color:#efc1bd!important;background:#fff5f4!important;color:#8f1d14!important}
body.v7-app .badge{display:inline-flex!important;align-items:center!important;min-height:25px!important;padding:3px 8px!important;border-radius:999px!important;background:var(--v7-green-100)!important;color:var(--v7-green-900)!important;font-size:11px!important;font-weight:700!important}
body.v7-app .sheet-actions{display:flex!important;gap:8px!important;align-items:center!important;flex-wrap:wrap!important}
body.v7-app .sheet-actions form{margin:0!important}
body.v7-app .link-danger{min-height:auto!important;padding:0!important;background:transparent!important;color:var(--v7-danger)!important;border:0!important}
body.v7-app .empty{text-align:center!important;color:var(--v7-muted)!important;padding:28px!important}
body.v7-app .panel.collapsible-panel{padding:0!important;overflow:hidden!important}
body.v7-app .collapsible-panel-body[hidden]{display:none!important}
body.v7-app .collapsible-panel-body>*:first-child{margin-top:0!important}
body.v7-app .collapsible-panel-body>*:last-child{margin-bottom:0!important}
body.v7-app .page-head>div:first-child{min-width:0!important}
body.v7-app .page-head .button{flex:0 0 auto!important}
/* Les en-têtes partagent les mêmes limites sur tablette et téléphone. */
@media (max-width: 960px) {
  body.v7-app :is(.v7-page-header,.page-heading,.page-head,.ds-page-header) > *,
  body.v7-app :is(.v7-page-header,.page-heading,.page-head,.ds-page-header) form {
    min-width: 0;
    max-width: 100%;
  }
  body.v7-app :is(.v7-page-header,.page-heading,.page-head,.ds-page-header) > :first-child {
    overflow-wrap: anywhere;
  }
}
@media(max-width:1100px){body.v7-app .grid.four,body.v7-app .grid.five{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:700px){body.v7-app .grid.two,body.v7-app .grid.three,body.v7-app .grid.four,body.v7-app .grid.five,body.v7-app .filtered-total-cards{grid-template-columns:1fr!important}body.v7-app .list-toolbar{align-items:stretch!important}body.v7-app .per-page-form{justify-content:space-between!important;width:100%!important}}

/* ========================================================================== */
/* V7.5 — uniformisation demandée de l'interface                              */
/* -------------------------------------------------------------------------- */
/* Ces règles sont volontairement centralisées dans le socle visuel commun :  */
/* chaque module bénéficie ainsi de la même présentation sans dupliquer le    */
/* style dans les pages PHP individuelles.                                    */
/* ========================================================================== */

/*
 * En-tête plus sobre : la zone « Page actuelle » n'est plus dessinée comme
 * un cartouche coloré. Elle reste présente pour conserver le repère de page et
 * l'accessibilité, mais s'intègre naturellement dans la barre supérieure.
 */
body.v7-app .erp-page-context {
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}
body.v7-app .erp-page-context-icon {
  display: none !important;
}
body.v7-app .erp-page-context-copy small {
  display: none !important;
}
body.v7-app .erp-page-context-copy strong {
  max-width: min(42vw, 520px) !important;
  color: var(--v7-muted) !important;
  font-size: 12px !important;
  font-weight: 650 !important;
}

/*
 * Navigation latérale plus discrète : fond blanc, séparateurs légers et état
 * actif signalé par un filet vertical plutôt que par un rectangle vert plein.
 */
body.v7-app .erp-main-menu {
  box-shadow: 4px 0 18px rgba(18, 60, 37, .035) !important;
}
body.v7-app .erp-menu-group-button {
  border-radius: 6px !important;
  color: #34483c !important;
}
body.v7-app .erp-menu-group-button:hover {
  background: #f5f7f5 !important;
  color: var(--v7-green-900) !important;
}
body.v7-app .erp-menu-group.active > .erp-menu-group-button {
  padding-left: 8px !important;
  border-left: 3px solid var(--v7-green-700) !important;
  background: #f7f9f7 !important;
  color: var(--v7-green-900) !important;
}
body.v7-app .erp-menu-panel {
  background: #fafbfa !important;
  border-color: #e7ece8 !important;
}

/*
 * Le contenu central suit réellement la largeur du menu. La transition rend
 * le repli fluide et width:calc(...) empêche la conservation d'une largeur
 * calculée pour le menu ouvert.
 */
@media (min-width: 961px) {
  body.v7-app #main-content {
    max-width: none !important;
  }

  body.v7-app.v72-menu-collapsed #main-content {
    width: calc(100% - 72px) !important;
  }
}

/*
 * Présentation universelle des tableaux, calquée sur la feuille de temps.
 * Les sélecteurs couvrent les conteneurs historiques afin que les anciens et
 * les nouveaux modules utilisent exactement le même langage visuel.
 */
body.v7-app :is(.table-wrap, .table-responsive, .data-table-wrapper, .v7-table-wrap) {
  width: 100% !important;
  max-width: 100% !important;
  overflow-x: auto !important;
  border: 1px solid var(--v7-line) !important;
  border-radius: 10px !important;
  background: #fff !important;
  box-shadow: none !important;
}
body.v7-app table {
  width: 100% !important;
  min-width: 720px !important;
  margin: 0 !important;
  border: 0 !important;
  border-collapse: collapse !important;
  border-spacing: 0 !important;
  background: #fff !important;
  color: var(--v7-ink) !important;
  font-size: 12px !important;
}
body.v7-app table thead th {
  position: static !important;
  padding: 11px 12px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--v7-line-strong) !important;
  background: var(--v7-green-100) !important;
  color: var(--v7-green-950) !important;
  font-weight: 750 !important;
  line-height: 1.25 !important;
  text-align: left !important;
  vertical-align: middle !important;
  white-space: nowrap !important;
}
body.v7-app table tbody td {
  padding: 10px 12px !important;
  border: 0 !important;
  border-bottom: 1px solid #e8eee9 !important;
  background: transparent !important;
  line-height: 1.35 !important;
  vertical-align: middle !important;
}
body.v7-app table tbody tr:last-child td {
  border-bottom: 0 !important;
}
body.v7-app table tbody tr:nth-child(even),
body.v7-app table tbody tr:nth-child(odd) {
  background: #fff !important;
}
body.v7-app table :is(th, td):first-child {
  padding-left: 14px !important;
}
body.v7-app table :is(th, td):last-child {
  padding-right: 14px !important;
}
body.v7-app table .sort-link {
  display: inline-flex !important;
  align-items: center !important;
  gap: 5px !important;
  color: inherit !important;
  font-weight: inherit !important;
  text-decoration: none !important;
}
body.v7-app table :is(.button, .btn, button) {
  min-height: 30px !important;
  padding: 5px 9px !important;
  font-size: 11px !important;
}

/* ========================================================================== */
/* V7.6 — correction complète : tableaux universels et menu réellement sobre  */
/* ========================================================================== */

/*
 * Le style générique des boutons de l'application s'appliquait aussi aux
 * boutons du menu. Cette règle finale neutralise explicitement ce conflit pour
 * tous les états du menu (normal, survol, actif et groupe ouvert).
 */
body.v7-app .erp-main-menu .erp-menu-group-button,
body.v7-app .erp-main-menu .erp-menu-group-button:hover,
body.v7-app .erp-main-menu .erp-menu-group-button:focus-visible,
body.v7-app .erp-main-menu .erp-menu-group.active > .erp-menu-group-button,
body.v7-app .erp-main-menu .erp-menu-group.erp-menu-panel-open > .erp-menu-group-button {
  background: transparent !important;
  color: #34413a !important;
  border: 0 !important;
  border-radius: 6px !important;
  box-shadow: none !important;
  filter: none !important;
}
body.v7-app .erp-main-menu .erp-menu-group-button:hover,
body.v7-app .erp-main-menu .erp-menu-group-button:focus-visible {
  background: #f2f4f2 !important;
  color: #202a24 !important;
}
body.v7-app .erp-main-menu .erp-menu-group.active > .erp-menu-group-button,
body.v7-app .erp-main-menu .erp-menu-group.erp-menu-panel-open > .erp-menu-group-button {
  background: #ecefed !important;
  color: #18211c !important;
  font-weight: 700 !important;
}
body.v7-app .erp-main-menu .erp-menu-group.active > .erp-menu-group-button::before {
  content: "";
  position: absolute;
  left: 0;
  width: 3px;
  height: 22px;
  border-radius: 0 3px 3px 0;
  background: #68726c;
}
body.v7-app .erp-main-menu .erp-menu-group-button {
  position: relative !important;
}
body.v7-app .erp-main-menu .erp-menu-panel {
  background: transparent !important;
  border-color: #e2e6e3 !important;
}
body.v7-app .erp-main-menu .erp-menu-panel a:hover,
body.v7-app .erp-main-menu .erp-menu-panel a:focus-visible {
  background: #f2f4f2 !important;
  color: #202a24 !important;
}

/*
 * Le tri automatique transforme les cellules d'en-tête en boutons. Sans cette
 * neutralisation, le style primaire vert des boutons formait de petits
 * rectangles verts dans certains tableaux.
 */


body.v7-app table thead .table-sort-indicator {
  opacity: .55 !important;
  color: inherit !important;
  font-size: 10px !important;
}

/* Toutes les variantes historiques de tableaux héritent du même cadre. */
body.v7-app :is(.panel, .card, .box, .content-card, .dashboard-card, .ds-card) > table {
  border: 1px solid var(--v7-line) !important;
  border-radius: 10px !important;
  overflow: hidden !important;
}
body.v7-app table thead tr,
body.v7-app table thead th {
  background: var(--v7-green-100) !important;
}
body.v7-app table tbody tr {
  background: #fff !important;
}
body.v7-app table tbody tr:hover {
  background: #f8fbf8 !important;
}


/* ========================================================================== */
/* V7.7 — adaptation du contenu au menu et déconnexion toujours accessible    */
/* ========================================================================== */

/*
 * Le canevas central occupe toute la largeur réellement disponible. L'ancien
 * plafond de 1680 px empêchait l'agrandissement visuel du contenu sur les grands
 * écrans lorsque la navigation passait de 248 px à 72 px.
 */
@media (min-width: 961px) {
  body.v7-app #main-content {
    width: calc(100vw - var(--v7-sidebar)) !important;
    margin-left: var(--v7-sidebar) !important;
    transition: margin-left .18s ease, width .18s ease !important;
  }

  body.v7-app #main-content > * {
    width: 100% !important;
    max-width: none !important;
  }
}

/*
 * Zone utilisateur explicite et compacte. Le lien de sortie comporte désormais
 * son libellé, et non plus uniquement un pictogramme difficile à repérer.
 */
body.v7-app .odoo-user-zone {
  justify-self: end !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 8px !important;
  min-width: 0 !important;
  white-space: nowrap !important;
}
body.v7-app .user-chip {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  min-width: 0 !important;
}
body.v7-app .user-chip .avatar {
  display: grid !important;
  place-items: center !important;
  width: 34px !important;
  height: 34px !important;
  flex: 0 0 34px !important;
  border-radius: 50% !important;
  background: var(--v7-green-100) !important;
  color: var(--v7-green-900) !important;
  font-weight: 800 !important;
}
body.v7-app .user-chip strong,
body.v7-app .user-chip small {
  display: block !important;
  max-width: 150px !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
body.v7-app .user-chip strong { font-size: 12px !important; }
body.v7-app .user-chip small { color: var(--v7-muted) !important; font-size: 10px !important; }
body.v7-app .logout-icon {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  min-height: 36px !important;
  padding: 7px 10px !important;
  border: 1px solid var(--v7-line-strong) !important;
  border-radius: 8px !important;
  background: #fff !important;
  color: var(--v7-danger) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  line-height: 1 !important;
  text-decoration: none !important;
}
body.v7-app .logout-icon:hover {
  border-color: #e6b8b3 !important;
  background: #fff7f6 !important;
  color: #8f1b12 !important;
  filter: none !important;
}
body.v7-app .language-switch {
  display: flex !important;
  align-items: center !important;
  gap: 3px !important;
}
body.v7-app .flag-button {
  display: grid !important;
  place-items: center !important;
  width: 30px !important;
  height: 30px !important;
  border-radius: 7px !important;
  text-decoration: none !important;
}

/* Sur les écrans intermédiaires, on conserve le bouton mais on masque le texte. */
@media (max-width: 1180px) and (min-width: 621px) {
  body.v7-app .user-chip > span:not(.avatar),
  body.v7-app .logout-icon-label {
    display: none !important;
  }
  body.v7-app .logout-icon {
    width: 36px !important;
    padding-inline: 0 !important;
  }
}

@media (max-width: 620px) {
  body.v7-app .user-chip,
  body.v7-app .language-switch {
    display: none !important;
  }
  body.v7-app .logout-icon-label {
    display: none !important;
  }
  body.v7-app .logout-icon {
    width: 36px !important;
    padding-inline: 0 !important;
  }
}

/* ========================================================================== */
/* V7.8 — barre supérieure universelle sur une seule ligne                    */
/* -------------------------------------------------------------------------- */
/* Le titre de la page, l'utilisateur, la déconnexion et les langues restent  */
/* alignés dans la même barre sur toutes les pages utilisant header.php.      */
/* ========================================================================== */
@media (min-width: 961px) {
  body.v7-app.erp-authenticated .odoo-topbar {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: 12px !important;
    width: 100% !important;
    height: 64px !important;
    min-height: 64px !important;
    padding: 8px 16px !important;
    overflow: visible !important;
  }

  body.v7-app.erp-authenticated .odoo-brand-wrap {
    flex: 0 0 auto !important;
  }

  body.v7-app.erp-authenticated .erp-menu-trigger {
    flex: 0 0 40px !important;
  }

  body.v7-app.erp-authenticated .erp-page-context {
    display: flex !important;
    flex: 1 1 auto !important;
    align-items: center !important;
    min-width: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
  }

  body.v7-app.erp-authenticated .erp-page-context-icon,
  body.v7-app.erp-authenticated .erp-page-context-copy small {
    display: none !important;
  }

  body.v7-app.erp-authenticated .erp-page-context-copy {
    min-width: 0 !important;
  }

  body.v7-app.erp-authenticated .erp-page-context-copy strong {
    display: block !important;
    max-width: none !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    color: var(--v7-green-950) !important;
    font-size: 13px !important;
    line-height: 1.2 !important;
  }

  body.v7-app.erp-authenticated .odoo-user-zone {
    position: static !important;
    inset: auto !important;
    flex: 0 0 auto !important;
    align-self: center !important;
    margin: 0 0 0 auto !important;
  }
}

/* Sur tablette, la barre reste également sur une seule ligne. */
@media (max-width: 960px) {
  body.v7-app.erp-authenticated .odoo-topbar {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: 8px !important;
  }

  body.v7-app.erp-authenticated .erp-menu-trigger {
    flex: 0 0 40px !important;
  }

  body.v7-app.erp-authenticated .erp-page-context {
    flex: 1 1 auto !important;
    min-width: 0 !important;
  }

  body.v7-app.erp-authenticated .odoo-user-zone {
    flex: 0 0 auto !important;
    margin-left: auto !important;
  }
}

/* ========================================================================== */
/* Correctif : voile (backdrop) du menu mobile.                               */
/* Sans cette règle, le bouton .erp-menu-backdrop s'affichait comme un carré  */
/* vert vide dans la barre. Masqué par défaut ; visible en plein écran        */
/* uniquement quand le menu mobile est ouvert.                                */
/* ========================================================================== */
body.v7-app .erp-menu-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 999;
  border: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  min-height: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  /* Le voile est un <button> : sans !important il héritait du fond vert    */
  /* global des boutons et s'affichait comme une grande barre verte.        */
  background: rgba(10, 25, 13, .48) !important;
  cursor: pointer;
}
body.v7-app.erp-menu-mobile-open .erp-menu-backdrop {
  display: block;
}

/* ========================================================================== */
/* Harmonisation du tri des tableaux.                                         */
/* Les symboles ↕ ↑ ↓ sont désormais identiques dans les trois systèmes de    */

/* de symboles est corrigé à la source ; ici on aligne seulement la géométrie */

/* un alignement vertical identique d'un tableau à l'autre.                   */
/* ========================================================================== */




/* ========================================================================== */
/* Variantes de badges de statut.                                             */
/* Le badge de base est vert ; sans ces variantes, tous les statuts           */
/* (validé, brouillon, annulé, verrouillé…) apparaissaient de la même         */
/* couleur, ce qui effaçait l'information. Palette sobre alignée sur le thème. */
/* ========================================================================== */
/* Succès / validé / terminé — vert */
body.v7-app .badge.success,
body.v7-app .badge.status-valide,
body.v7-app .badge.status-termine {
  background: #e3f4e8 !important;
  color: #1b6b39 !important;
}
/* Avertissement / en cours / en attente — ambre */
body.v7-app .badge.warning,
body.v7-app .badge.status-en_cours,
body.v7-app .badge.status-en-cours,
body.v7-app .badge.status-en_attente,
body.v7-app .badge.status-attente {
  background: #fdf1dc !important;
  color: #8a5a09 !important;
}
/* Danger / annulé / en retard — rouge */
body.v7-app .badge.danger,
body.v7-app .badge.status-annule,
body.v7-app .badge.status-en_retard,
body.v7-app .badge.status-retard {
  background: #fbe7e5 !important;
  color: #a3271c !important;
}
/* Neutre — gris doux */
body.v7-app .badge.neutral,
body.v7-app .badge.secondary {
  background: #eef1ef !important;
  color: #566a5e !important;
}
/* Verrouillé — gris ardoise avec petit cadenas déjà présent dans le texte */
body.v7-app .badge.locked,
body.v7-app .badge.locked-badge {
  background: #e9edf2 !important;
  color: #47535f !important;
}
/* Information — bleu discret */
body.v7-app .badge.info {
  background: #e4eef7 !important;
  color: #1e5a8a !important;
}

/* ========================================================================== */
/* Flèche déroulante uniforme sur les listes <select>.                        */
/* Sans cela, chaque navigateur affichait sa propre flèche (ou aucune),       */
/* d'où une incohérence visuelle entre les champs de sélection. On dessine    */
/* un chevron identique à celui des panneaux, aligné à droite.                */
/* ========================================================================== */
body.v7-app select {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  padding-right: 34px !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23287848' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5.5 7.5 10 12l4.5-4.5'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 10px center !important;
  background-size: 16px 16px !important;
}
/* Les listes multiples n'ont pas de flèche : on rétablit le rendu natif.     */
body.v7-app select[multiple],
body.v7-app select[size]:not([size="1"]) {
  background-image: none !important;
  padding-right: 10px !important;
}

/* ========================================================================== */
/* Tuiles d'indicateurs (KPI) — grille adaptative et mise en page interne.    */
/*                                                                            */
/* Avant : la grille était figée à 4 colonnes, donc une page à 5 tuiles       */
/* affichait « 4 + 1 » (une tuile seule et étirée), et une page à 1 ou 3      */
/* tuiles laissait de grands vides. De plus, le nombre et le libellé étaient  */
/* collés (« 28Équipements ») faute de mise en forme interne.                 */
/*                                                                            */
/* Après : les tuiles se répartissent automatiquement selon la largeur        */
/* disponible (une seule ligne si ça rentre, sinon retour à la ligne propre), */
/* et chaque tuile empile son nombre et son libellé avec un espacement clair. */
/* ========================================================================== */
body.v7-app :is(.stats-grid, .kpi-grid, .dashboard-grid, .metrics-grid) {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 14px !important;
}
/* Chaque tuile grandit pour partager la largeur, avec une base raisonnable :  */
/* tant que la ligne a la place, toutes les tuiles y tiennent et la remplissent */
/* entièrement ; au-delà, elles passent à la ligne suivante proprement.        */
body.v7-app :is(.stats-grid, .kpi-grid, .dashboard-grid, .metrics-grid) > * {
  flex: 1 1 200px !important;
  min-width: 0 !important;
}

/* Disposition interne : nombre et libellé chacun sur sa ligne, jamais collés. */
body.v7-app :is(.stat-card, .stats-card, .kpi-card, .metric-card, .dashboard-stat-card) {
  display: flex !important;
  flex-direction: column !important;
  justify-content: center !important;
  gap: 4px !important;
}
body.v7-app :is(.stat-card, .stats-card, .kpi-card, .metric-card, .dashboard-stat-card) > strong {
  order: 0 !important;
  font-size: 26px !important;
  font-weight: 800 !important;
  line-height: 1.1 !important;
  color: var(--v7-green-900) !important;
}
/* Le libellé passe toujours SOUS le nombre, quel que soit l'ordre du HTML.   */
body.v7-app :is(.stat-card, .stats-card, .kpi-card, .metric-card, .dashboard-stat-card) > span {
  order: 1 !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  color: var(--v7-muted) !important;
}

/* ========================================================================== */


/* d'où un affichage en texte brut avec libellés et valeurs collés. On donne  */
/* ici une mise en page en tuiles cohérente avec le reste de l'application :   */
/* un bandeau « conditions actuelles » + 4 tuiles, puis une grille de 7 jours.*/
/* ========================================================================== */

/* --- Bandeau des conditions actuelles ------------------------------------- */








/* --- Tuiles KPI des conditions actuelles ---------------------------------- */




/* Accents de couleur par mesure */





/* --- Grille des prévisions sur 7 jours ------------------------------------ */












/* --- Alertes de gestion --------------------------------------------------- */
body.v7-app .decision-alerts {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 10px !important;
  margin-top: 12px !important;
}
body.v7-app .decision-alert {
  flex: 1 1 260px !important;
  display: flex !important;
  gap: 10px !important;
  align-items: flex-start !important;
  min-width: 0 !important;
  padding: 12px 14px !important;
  border-radius: 10px !important;
  border-left: 4px solid #5b7c99 !important;
  background: #f3f7fa !important;
}
body.v7-app .decision-alert.warning { border-left-color: #c27a00 !important; background: #fdf1dc !important; }
body.v7-app .decision-alert.danger  { border-left-color: #a3271c !important; background: #fbe7e5 !important; }
body.v7-app .decision-alert.info    { border-left-color: #337ca0 !important; background: #e4eef7 !important; }
body.v7-app .decision-alert strong {
  flex: 0 0 auto !important;
  white-space: nowrap !important;
  color: var(--v7-green-900) !important;
}
body.v7-app .decision-alert span {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  line-height: 1.35 !important;
}

/* ========================================================================== */
/* Page « Administration » — cartes de modules.                               */
/* Les classes admin-* n'étaient plus stylées : les liens s'affichaient donc  */
/* collés en un seul bloc de texte (« Utilisateurs7 enregistrement(s)… »).    */
/* On rétablit une grille de cartes lisibles, chacune avec son titre et sa    */
/* description, dans le style des autres tuiles de l'application.             */
/* ========================================================================== */
body.v7-app .admin-module-block {
  margin: 0 !important;
}
body.v7-app .admin-module-heading {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  margin: 0 0 14px !important;
}
body.v7-app .admin-module-heading h2 {
  margin: 0 !important;
  font-size: 18px !important;
  color: var(--v7-green-900) !important;
}
body.v7-app .admin-module-heading > span {
  display: grid !important;
  place-items: center !important;
  width: 34px !important;
  height: 34px !important;
  border-radius: 9px !important;
  background: var(--v7-green-100) !important;
  font-size: 18px !important;
}

/* Grille de cartes : autant que la largeur le permet, puis retour à la ligne. */
body.v7-app .admin-grid {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
  margin: 0 !important;
}
body.v7-app .admin-card {
  flex: 1 1 260px !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 4px !important;
  min-width: 0 !important;
  padding: 14px 16px !important;
  border: 1px solid var(--v7-line) !important;
  border-left: 4px solid var(--v7-green-600) !important;
  border-radius: var(--v7-radius) !important;
  background: #fff !important;
  box-shadow: var(--v7-shadow) !important;
  color: var(--v7-ink) !important;
  text-decoration: none !important;
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease !important;
}
body.v7-app .admin-card:hover {
  transform: translateY(-3px) !important;
  border-color: #a8cdb2 !important;
  box-shadow: 0 10px 24px rgba(28, 73, 43, .12) !important;
}
body.v7-app .admin-card strong {
  font-size: 15px !important;
  font-weight: 700 !important;
  color: var(--v7-green-900) !important;
  line-height: 1.25 !important;
}
body.v7-app .admin-card span {
  color: var(--v7-muted) !important;
  font-size: 12px !important;
  line-height: 1.4 !important;
}

/* ========================================================================== */
/* Correctifs d'alignement hérités.                                           */
/* ========================================================================== */
/* Case à cocher + libellé sur la même ligne (le style global des <label> les */
/* empilait verticalement, plaçant la case au-dessus du texte).               */
body.v7-app label.check-row {
  flex-direction: row !important;
  align-items: center !important;
  gap: 8px !important;
  font-weight: 600 !important;
}
body.v7-app label.check-row input {
  width: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
}


body.v7-app .section-head {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
  margin: 0 0 14px !important;
}
body.v7-app .section-head h1,
body.v7-app .section-head h2,
body.v7-app .section-head h3 {
  margin: 0 !important;
  color: var(--v7-green-900) !important;
}

/* ========================================================================== */
/* Formulaire de filtre transformé en panneau repliable.                      */
/* Quand un <form> de filtre devient lui-même repliable (cas d'un filtre et   */
/* d'un tableau partageant le même panneau), il ne doit plus utiliser sa      */
/* disposition d'origine en barre horizontale (list-toolbar), sinon l'en-tête */
/* « Filtres » et les champs se retrouvent côte à côte au lieu d'être empilés.*/
/* On force donc l'empilement en-tête puis corps, et on neutralise le style   */
/* de barre horizontale hérité.                                               */
/* ========================================================================== */
body.v7-app form.collapsible-panel {
  display: block !important;
  padding: 0 !important;
  align-items: initial !important;
  justify-content: initial !important;
}
/* Quand ce formulaire repliable est imbriqué dans un panneau, il ne porte pas */
/* son propre cadre : il s'intègre au panneau parent (pas de double bordure).  */
body.v7-app .panel > form.collapsible-panel,
body.v7-app section.panel > form.collapsible-panel {
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  margin: 0 0 4px !important;
}
/* L'en-tête « Filtres » garde son fond vert clair et ses coins arrondis.      */
body.v7-app .panel > form.collapsible-panel > .collapsible-panel-header {
  border-radius: var(--v7-radius) !important;
}
body.v7-app form.collapsible-panel > .collapsible-panel-header,
body.v7-app form.collapsible-panel > .collapsible-panel-body {
  width: 100% !important;
}
/* À l'intérieur du corps, les blocs de filtres et le groupe d'actions        */
/* s'empilent proprement, chacun sur sa ligne.                                */
body.v7-app form.collapsible-panel > .collapsible-panel-body {
  display: flex !important;
  flex-direction: column !important;
  gap: 12px !important;
}
/* La rangée de champs de filtre s'organise en grille souple et lisible.      */
body.v7-app .list-filters {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) !important;
  gap: 12px !important;
  align-items: end !important;
  margin: 0 !important;
}
/* Les boutons du filtre (Rechercher / Réinitialiser) alignés à gauche,       */
/* sous les champs, plutôt que collés à droite.                               */
body.v7-app .list-filter-actions {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
  margin: 0 !important;
}

/* ========================================================================== */
/* Bouton d'ouverture/fermeture des panneaux (filtres et saisie).             */
/* Le style global des <button> le colorait en gros carré vert plein, peu     */
/* lisible. On le ramène à une simple flèche discrète, sans fond ni bordure,  */
/* qui pivote selon l'état ouvert/fermé.                                      */
/* ========================================================================== */
body.v7-app .panel-collapse-toggle,
body.v7-app button.panel-collapse-toggle {
  display: grid !important;
  place-items: center !important;
  width: 30px !important;
  height: 30px !important;
  min-height: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  box-shadow: none !important;
  color: var(--v7-green-800) !important;
  cursor: pointer !important;
}
body.v7-app .panel-collapse-toggle:hover,
body.v7-app .panel-collapse-toggle:focus-visible {
  background: rgba(40, 120, 72, .10) !important;
  color: var(--v7-green-900) !important;
  filter: none !important;
  outline: none !important;
}
/* La flèche elle-même : trait fin, taille lisible, animation de rotation.     */
body.v7-app .panel-collapse-toggle .panel-chevron {
  width: 18px !important;
  height: 18px !important;
  transition: transform .18s ease !important;
}
/* Panneau ouvert : flèche vers le haut ; replié : flèche vers le bas.         */
body.v7-app .collapsible-panel:not(.is-collapsed) .panel-collapse-toggle .panel-chevron {
  transform: rotate(180deg) !important;
}

/* ========================================================================== */


/* retrouvait isolée à droite, loin du nom de l'équipement, rendant la liste  */
/* illisible. On rétablit une grille de cartes cochables : case à gauche,     */
/* désignation et catégorie à droite.                                         */
/* ========================================================================== */


body.v7-app .field-help {
  margin: 0 0 12px !important;
  color: var(--v7-muted) !important;
  font-size: 13px !important;
}







/* Catégories empilées */





/* Grille des équipements : plusieurs cartes par ligne selon la largeur */


/* Chaque équipement = une carte cochable : case à GAUCHE, texte à droite */



/* La carte sélectionnée se distingue visuellement */






/* ========================================================================== */
/* Cases à cocher en ligne (généralisation).                                  */
/* Le style global des <label> les empile verticalement (flex column), ce qui */
/* plaçait la case au-dessus de son texte dans les listes de cases. On force  */
/* l'alignement horizontal pour toutes les variantes de libellés cochables.   */
/* ========================================================================== */
body.v7-app label.checkbox-label,
body.v7-app label.checkbox-line,
body.v7-app .checkbox-grid > label,
body.v7-app .checkbox-list > label {
  flex-direction: row !important;
  align-items: center !important;
  gap: 8px !important;
  font-weight: 600 !important;
}
body.v7-app label.checkbox-label input[type="checkbox"],
body.v7-app label.checkbox-line input[type="checkbox"],
body.v7-app .checkbox-grid > label input[type="checkbox"],
body.v7-app .checkbox-list > label input[type="checkbox"] {
  flex: 0 0 auto !important;
  width: 18px !important;
  height: 18px !important;
  min-height: 0 !important;
  margin: 0 !important;
}
/* Grille de cases : plusieurs colonnes selon la place. */
body.v7-app .checkbox-grid {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) !important;
  gap: 8px 14px !important;
  margin: 0 !important;
}

/* ========================================================================== */
/* Ajustements demandés : skip link, bouton menu, menu latéral.               */
/* ========================================================================== */

/* 1. Lien d'accessibilité « Aller au contenu » : masqué visuellement, mais    */
/*    toujours accessible au clavier (réapparaît uniquement au focus Tab).     */
body.v7-app .skip-link {
  position: absolute !important;
  left: -9999px !important;
  top: auto !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
}
body.v7-app .skip-link:focus {
  position: fixed !important;
  left: 12px !important;
  top: 12px !important;
  width: auto !important;
  height: auto !important;
  z-index: 2000 !important;
  padding: 8px 14px !important;
  border-radius: 8px !important;
  background: var(--v7-green-700) !important;
  color: #fff !important;
}

/* 2. Bouton d'ouverture du menu : uniquement l'icône ☰, sans fond ni cadre.   */
body.v7-app .erp-menu-trigger,
body.v7-app.erp-authenticated .erp-menu-trigger {
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  color: var(--v7-green-900) !important;
}
body.v7-app .erp-menu-trigger:hover,
body.v7-app .erp-menu-trigger:focus-visible {
  background: rgba(40, 120, 72, .10) !important;
  outline: none !important;
}

/* 3. Menu latéral plus compact et homogène.                                   */
/*    Interlignes réduits, police uniforme partout, catégories en gras.        */
body.v7-app .erp-menu-group {
  margin: 0 0 1px !important;
}
body.v7-app .erp-menu-group-button {
  min-height: 34px !important;
  padding: 6px 10px !important;
  gap: 8px !important;
  font-size: 13px !important;
  font-weight: 700 !important;   /* catégories en gras */
}
body.v7-app .erp-menu-icon {
  font-size: 14px !important;
}
/* Chevron des catégories un peu plus discret */
body.v7-app .erp-menu-group-button > b {
  font-size: 11px !important;
  opacity: .6 !important;
}
/* Sous-menus : même taille de police que les catégories, interligne serré.    */
body.v7-app .erp-menu-panel {
  margin: 1px 0 4px 30px !important;
  padding: 3px !important;
}
body.v7-app .erp-menu-panel a {
  min-height: 30px !important;
  padding: 5px 9px !important;
  font-size: 13px !important;      /* même taille que les catégories */
  font-weight: 500 !important;     /* les entrées ne sont pas en gras */
}
/* Titres de sections dans les méga-panneaux : gras, même police.              */
body.v7-app .erp-menu-section > strong,
body.v7-app .erp-menu-section-title {
  font-size: 13px !important;
  font-weight: 700 !important;
}

/* ========================================================================== */
/* 4. Page de connexion : n'afficher que la fenêtre de connexion.             */
/* Le panneau de présentation de gauche est masqué ; la carte est centrée.    */
/* ========================================================================== */
body.v7-app .v7-auth-shell {
  grid-template-columns: 1fr !important;
  place-items: center !important;
  min-height: 100vh !important;
  background: var(--v7-canvas) !important;
}
body.v7-app .v7-auth-brand {
  display: none !important;
}
body.v7-app .v7-auth-panel {
  width: 100% !important;
  max-width: 460px !important;
  padding: 24px !important;
}

/* ========================================================================== */
/* 5. Page d'accueil épurée : logo, nom de l'exploitation, date et heure.     */
/* ========================================================================== */
body.v7-app .v7-home-welcome {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 18px !important;
  min-height: calc(100vh - 140px) !important;
  text-align: center !important;
  padding: 40px 20px !important;
}
body.v7-app .v7-home-welcome-logo {
  width: min(420px, 80vw) !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: min(52vh, 520px) !important;
  object-fit: contain !important;
  object-position: center center !important;
  border-radius: 20px !important;
}
body.v7-app .v7-home-welcome-name {
  margin: 0 !important;
  color: var(--v7-green-900) !important;
  font-size: clamp(24px, 3vw, 38px) !important;
  font-weight: 800 !important;
  line-height: 1.15 !important;
}
body.v7-app .v7-home-welcome-clock {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  gap: 6px !important;
  margin-top: 10px !important;
}
body.v7-app .v7-home-welcome-time {
  font-size: clamp(40px, 6vw, 68px) !important;
  font-weight: 800 !important;
  line-height: 1 !important;
  color: var(--v7-green-800) !important;
  font-variant-numeric: tabular-nums !important;
  letter-spacing: 1px !important;
}
body.v7-app .v7-home-welcome-date {
  font-size: 16px !important;
  color: var(--v7-muted) !important;
  text-transform: capitalize !important;
}

/* ========================================================================== */
/* ADAPTATION SMARTPHONE (≤ 640 px).                                          */
/* L'application est conçue pour ordinateur ; ce bloc rend les écrans         */
/* utilisables confortablement sur téléphone : tableaux défilables, grilles   */
/* en une colonne, en-têtes empilés, éléments récents adaptés.                */
/* ========================================================================== */
@media (max-width: 640px) {

  /* — Empêche tout débordement horizontal de la page — */
  html, body.v7-app {
    overflow-x: hidden !important;
    max-width: 100% !important;
  }

  /* — En-tête : disposition simple en ligne (burger + titre + actions),   */
  /*   plus de grille à colonnes fixes qui débordait. —                     */
  body.v7-app .odoo-topbar {
    display: flex !important;
    grid-template-columns: none !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 8px !important;
    padding: 8px 12px !important;
    min-height: 56px !important;
    background: rgba(255, 255, 255, .98) !important;
    /* IMPORTANT : backdrop-filter crée un contexte qui « piège » les          */
    /* éléments position:fixed enfants (le menu). On le retire sur mobile      */
    /* pour que le tiroir du menu se positionne bien par rapport à l'écran.    */
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }
  body.v7-app .odoo-brand-wrap { display: none !important; }
  body.v7-app .erp-menu-trigger {
    display: grid !important;
    order: -1 !important;               /* burger tout à gauche */
    flex: 0 0 auto !important;
  }
  body.v7-app .odoo-topbar-actions,
  body.v7-app .odoo-topbar > :last-child {
    flex: 0 0 auto !important;
  }

  /* — Menu latéral : vrai tiroir hors écran, ne pousse plus la largeur. —  */
  /* Spécificité renforcée pour battre body.v7-app:not(.v7-menu-collapsed).   */
  body.v7-app:not(.v7-menu-collapsed) .erp-main-menu,
  body.v7-app.v7-menu-collapsed .erp-main-menu,
  body.v7-app .erp-main-menu {
    position: fixed !important;
    top: 56px !important;
    left: 0 !important;
    bottom: 0 !important;
    width: min(86vw, 320px) !important;
    max-width: 320px !important;
    height: auto !important;
    transform: translateX(-105%) !important;
    transition: transform .2s ease !important;
    z-index: 1200 !important;
    box-shadow: 0 12px 40px rgba(0, 0, 0, .25) !important;
  }
  body.v7-app.erp-menu-mobile-open .erp-main-menu {
    transform: translateX(0) !important;
  }

  /* — Le contenu ne réserve plus d'espace à gauche pour le menu. —         */
  /* Spécificité renforcée pour battre la règle desktop non-média            */
  /* body.v7-app:not(.v7-menu-collapsed) #main-content (margin-left:248px).   */
  body.v7-app:not(.v7-menu-collapsed) #main-content,
  body.v7-app.v7-menu-collapsed #main-content,
  body.v7-app #main-content {
    margin-left: 0 !important;
    padding-left: 10px !important;
    padding-right: 10px !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  /* Les enfants du contenu ne sont plus contraints/centrés avec marge auto. */
  body.v7-app #main-content > * {
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
  }

  /* — Mise en page générale — */
  body.v7-app :is(.v7-surface, .panel, .card, .content-card, .dashboard-card, .ds-card):not(.collapsible-panel) {
    padding: 12px !important;
    border-radius: 12px !important;
  }

  /* — En-têtes de page : titre et boutons empilés — */
  body.v7-app .page-heading,
  body.v7-app .page-head,
  body.v7-app .v7-page-header,
  body.v7-app .ds-page-header,
  body.v7-app .section-head {
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 10px !important;
  }
  body.v7-app .page-heading h1 { font-size: 22px !important; }
  body.v7-app .page-heading .form-actions,
  body.v7-app .page-heading a.button,
  body.v7-app .page-head > .actions,
  body.v7-app .page-head a.button {
    width: 100% !important;
    justify-content: center !important;
  }
  body.v7-app .page-head > .badge {
    align-self: flex-start !important;
  }

  /* — Tableaux : défilement horizontal fluide avec repère visuel — */
  body.v7-app .table-wrap,
  body.v7-app .table-responsive,
  body.v7-app .data-table-wrapper {
    -webkit-overflow-scrolling: touch !important;
    scrollbar-width: thin !important;
    /* Ombres latérales indiquant qu'on peut faire défiler */
    background:
      linear-gradient(90deg, #fff 30%, rgba(255,255,255,0)) left / 24px 100% no-repeat,
      linear-gradient(-90deg, #fff 30%, rgba(255,255,255,0)) right / 24px 100% no-repeat,
      radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.12), transparent) left / 12px 100% no-repeat,
      radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.12), transparent) right / 12px 100% no-repeat,
      #fff !important;
    background-attachment: local, local, scroll, scroll, local !important;
  }
  body.v7-app table { font-size: 12px !important; }
  body.v7-app table :is(th, td) { padding: 8px 10px !important; }

  /* — Formulaires et filtres : une seule colonne — */


  /* — Barre outils de liste (recherche + pagination) empilée — */

  body.v7-app .per-page-form {
    width: 100% !important;
    justify-content: space-between !important;
  }

  /* — Pagination : centrée et cliquable au doigt — */
  body.v7-app .pagination,
  body.v7-app .pager {
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 6px !important;
  }

  /* — Tuiles KPI / statistiques : une seule colonne, pleine largeur — */
  body.v7-app .stats-grid .stat-card,
  body.v7-app .kpi-grid > * {
    flex: 1 1 100% !important;
  }




  body.v7-app .decision-alert {
    flex: 1 1 100% !important;
  }




  /* — Page d'accueil : logo et horloge ajustés — */
  body.v7-app .v7-home-welcome {
    min-height: calc(100vh - 120px) !important;
    gap: 14px !important;
  }
  body.v7-app .v7-home-welcome-logo {
    width: min(280px, 84vw) !important;
    height: auto !important;
    max-height: 42vh !important;
  }
  body.v7-app .v7-home-welcome-name { font-size: 22px !important; }
  body.v7-app .v7-home-welcome-time { font-size: 44px !important; }

  /* — Page de connexion : carte pleine largeur, jamais de débordement. —   */
  body.v7-app .v7-auth-shell {
    display: block !important;
    grid-template-columns: none !important;
    min-height: 100vh !important;
    padding: 16px !important;
  }
  body.v7-app .v7-auth-brand { display: none !important; }
  body.v7-app .v7-auth-panel {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    padding: 16px !important;
    margin: 0 auto !important;
  }
  body.v7-app .v7-auth-card {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  /* — Boutons : cibles tactiles plus grandes — */
  body.v7-app :is(button, .button, .btn, a.button):not(.panel-collapse-toggle):not(.erp-menu-trigger) {
    min-height: 42px !important;
  }
}

/* Très petits écrans (≤ 380 px) : resserrer encore un peu. */
@media (max-width: 380px) {
  body.v7-app #main-content { padding: 10px 8px 28px !important; }
  body.v7-app .page-heading h1 { font-size: 20px !important; }
  body.v7-app table { font-size: 11px !important; }
  body.v7-app .v7-home-welcome-time { font-size: 38px !important; }
}

/* ========================================================================== */
/* Uniformisation de la police du menu.                                       */
/* Toutes les entrées du menu (catégories, titres de section, liens) ont      */
/* désormais la même famille et la même taille de police. On conserve le gras */
/* pour ce qui structure le menu : les catégories et les titres de section.   */
/* Les liens vers les pages restent en graisse normale.                       */
/* ========================================================================== */
body.v7-app .erp-main-menu,
body.v7-app .erp-main-menu .erp-menu-group-button,
body.v7-app .erp-main-menu .erp-menu-panel a,
body.v7-app .erp-main-menu .erp-menu-section h3,
body.v7-app .erp-main-menu .erp-menu-section > strong,
body.v7-app .erp-main-menu .erp-menu-section-title {
  font-family: inherit !important;
  font-size: 13px !important;
  line-height: 1.3 !important;
  letter-spacing: normal !important;
}


body.v7-app .erp-main-menu .erp-menu-group-button,
body.v7-app .erp-main-menu .erp-menu-section h3,
body.v7-app .erp-main-menu .erp-menu-section > strong,
body.v7-app .erp-main-menu .erp-menu-section-title {
  font-weight: 700 !important;
  text-transform: none !important;
  margin: 0 0 4px !important;
}

/* En graisse normale : les liens vers les pages. */
body.v7-app .erp-main-menu .erp-menu-panel a {
  font-weight: 500 !important;
}

/* L'icône de chevron des catégories reste discrète et à la même échelle. */
body.v7-app .erp-main-menu .erp-menu-group-button > b {
  font-size: 11px !important;
  font-weight: 400 !important;
}

/* ========================================================================== */
/* Page « Nouvelle feuille » (feuille de temps) : aérer les demi-journées.    */
/* Les cases « Matin travaillé » / « Après-midi travaillé » étaient collées   */
/* aux champs voisins. On ajoute de l'espace autour d'elles et entre les      */
/* blocs pour une meilleure lisibilité.                                       */
/* ========================================================================== */

/* Espace entre le bloc matin et le bloc après-midi. */
body.v7-app .half-day-grid {
  display: grid !important;
  gap: 22px !important;
  margin: 8px 0 !important;
}

/* Chaque demi-journée devient une carte légère avec de l'air intérieur. */
body.v7-app .half-day-card {
  padding: 16px 16px 14px !important;
  border: 1px solid var(--v7-line) !important;
  border-radius: 12px !important;
  background: var(--v7-green-50) !important;
}

/* La case à cocher « Matin/Après-midi travaillé » : bien détachée du reste. */
body.v7-app .half-day-card > .checkbox-label {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin: 0 0 14px !important;
  padding-bottom: 12px !important;
  border-bottom: 1px solid var(--v7-line) !important;
  font-size: 14px !important;
}
body.v7-app .half-day-card > .checkbox-label strong {
  font-weight: 700 !important;
}

/* Les champs heure début / fin : un peu d'espace au-dessus et entre eux. */
body.v7-app .half-day-times {
  gap: 16px !important;
  margin-top: 4px !important;
}

/* Le texte d'aide sous les champs : détaché, discret. */
body.v7-app .half-day-card > small {
  display: block !important;
  margin-top: 12px !important;
  color: var(--v7-muted) !important;
  line-height: 1.4 !important;
}


/* Sélecteur de langue explicite sur la page de connexion. */
body.v7-app.auth-page .v7-login-language {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
  margin: -6px 0 24px !important;
  padding-bottom: 18px !important;
  border-bottom: 1px solid var(--v7-line, #dbe7dd) !important;
}
body.v7-app.auth-page .v7-login-language-label {
  color: var(--v7-muted, #68766c) !important;
  font-size: 12px !important;
  font-weight: 800 !important;
  letter-spacing: .04em !important;
  text-transform: uppercase !important;
}
body.v7-app.auth-page .v7-login-language-options {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
body.v7-app.auth-page .v7-login-language-button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 7px !important;
  min-height: 38px !important;
  padding: 7px 11px !important;
  border: 1px solid var(--v7-line-strong, #cbd9ce) !important;
  border-radius: 9px !important;
  background: #fff !important;
  color: var(--v7-ink, #24352a) !important;
  font-size: 12px !important;
  font-weight: 750 !important;
  line-height: 1 !important;
  text-decoration: none !important;
}
body.v7-app.auth-page .v7-login-language-button:hover {
  border-color: var(--v7-primary, #2f7d4b) !important;
  background: #f4faf5 !important;
}
body.v7-app.auth-page .v7-login-language-button.active {
  border-color: var(--v7-primary, #2f7d4b) !important;
  background: #eaf5ec !important;
  color: var(--v7-primary-dark, #174a2c) !important;
  box-shadow: inset 0 0 0 1px var(--v7-primary, #2f7d4b) !important;
}
@media (max-width: 420px) {
  body.v7-app.auth-page .v7-login-language {
    align-items: stretch !important;
    flex-direction: column !important;
  }
  body.v7-app.auth-page .v7-login-language-options {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
  body.v7-app.auth-page .v7-login-language-button {
    width: 100% !important;
  }
}

/* Icônes d’interface uniformisées : menu principal et administration. */
.ui-icon{width:1.1rem;height:1.1rem;display:block;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
.erp-menu-icon,.erp-menu-panel a>span:first-child,.logout-icon-symbol,.admin-module-heading>span:first-child{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;line-height:1;color:inherit}
.erp-menu-icon .ui-icon{width:1.25rem;height:1.25rem}.erp-menu-panel a>span:first-child .ui-icon{width:1.0625rem;height:1.0625rem}
.admin-module-heading>span:first-child{border-radius:.45rem;background:rgba(46,125,50,.1);color:#256b2a}
.admin-card-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin-bottom:.45rem;border-radius:.55rem;background:rgba(46,125,50,.09);color:#256b2a}
.admin-card-icon .ui-icon{width:1.05rem;height:1.05rem}

/* Connexion : centrage réel dans l'espace visible sous l'en-tête public. */
body.v7-app.auth-page #main-content {
  display: flex !important;
  min-height: calc(100vh - 72px) !important;
  min-height: calc(100svh - 72px) !important;
}
body.v7-app.auth-page .v7-auth-shell {
  display: grid !important;
  place-items: center !important;
  width: 100% !important;
  min-height: 0 !important;
  padding: clamp(16px, 3vw, 32px) !important;
}
body.v7-app.auth-page .v7-auth-panel {
  display: grid !important;
  place-items: center !important;
  width: 100% !important;
  max-width: 460px !important;
  padding: 0 !important;
  margin: auto !important;
}
body.v7-app.auth-page .v7-auth-card {
  width: 100% !important;
  margin: 0 !important;
}

@media (max-width: 800px) {
  body.v7-app.auth-page #main-content {
    min-height: calc(100vh - 72px) !important;
    min-height: calc(100svh - 72px) !important;
  }
  body.v7-app.auth-page .v7-auth-shell {
    display: grid !important;
    place-items: center !important;
    padding: 16px !important;
  }
}


/* ========================================================================== */

/* Les anciennes règles mélangeaient grid et flex, sans largeur sur les       */
/* enfants. Cette variante garantit des tuiles régulières, lisibles et        */
/* responsives, qu'elles soient des liens (<a>) ou des cartes (<article>).     */
/* ========================================================================== */
body.v7-app .dashboard-kpis--tiles {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)) !important;
  gap: 14px !important;
  width: 100% !important;
  margin: 18px 0 22px !important;
  align-items: stretch !important;
}

body.v7-app .dashboard-kpis--tiles > .dashboard-kpi-card {
  display: flex !important;
  flex-direction: column !important;
  justify-content: center !important;
  align-items: flex-start !important;
  gap: 7px !important;
  min-width: 0 !important;
  min-height: 112px !important;
  width: auto !important;
  padding: 16px 18px !important;
  margin: 0 !important;
  color: inherit !important;
  text-decoration: none !important;
  background: #fff !important;
  border: 1px solid var(--v7-line) !important;
  border-left: 4px solid var(--v7-green-600) !important;
  border-radius: var(--v7-radius) !important;
  box-shadow: var(--v7-shadow) !important;
  overflow: hidden !important;
}

body.v7-app .dashboard-kpis--tiles > .dashboard-kpi-card > span {
  order: 0 !important;
  display: block !important;
  color: var(--v7-muted) !important;
  font-size: 13px !important;
  font-weight: 650 !important;
  line-height: 1.35 !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
}

body.v7-app .dashboard-kpis--tiles > .dashboard-kpi-card > strong {
  order: 1 !important;
  display: block !important;
  margin: 0 !important;
  color: var(--v7-green-900) !important;
  font-size: clamp(1.55rem, 2vw, 2rem) !important;
  font-weight: 800 !important;
  line-height: 1.05 !important;
  white-space: normal !important;
}

body.v7-app .dashboard-kpis--tiles > a.dashboard-kpi-card:hover {
  transform: translateY(-1px) !important;
  border-color: var(--v7-green-300) !important;
  box-shadow: 0 8px 20px rgba(24, 91, 48, .10) !important;
}



@media (max-width: 680px) {
  body.v7-app .dashboard-kpis--tiles {
    grid-template-columns: 1fr !important;
    gap: 12px !important;
  }
  body.v7-app .dashboard-kpis--tiles > .dashboard-kpi-card {
    min-height: 96px !important;
    padding: 14px 16px !important;
  }
}

/* =====================================================================
   Correctifs mise en page — Gestion du temps
   (analyse-temps.php, statistics.php)
   Ces pages utilisent un markup hérité (article/span/strong, .heatmap,
   .stats-tabs) qui n'était plus stylé par le thème v7. On restaure des
   tuiles et grilles cohérentes avec le reste de l'application.
   ===================================================================== */

/* --- Tuiles KPI (dashboard + statistiques) : une rangée de cartes --- */
body.v7-app .dashboard-kpis{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))!important;gap:12px!important;margin:0 0 18px!important}
body.v7-app .dashboard-kpis > article,
body.v7-app .stats-kpis > .stats-kpi{
  display:flex!important;flex-direction:column!important;gap:6px!important;
  min-width:0!important;padding:16px 18px!important;
  border:1px solid var(--v7-line)!important;border-left:4px solid var(--v7-green-600)!important;
  border-radius:var(--v7-radius)!important;background:#fff!important;box-shadow:var(--v7-shadow)!important}
body.v7-app .dashboard-kpis > article > span,
body.v7-app .stats-kpis > .stats-kpi > span{order:1;color:var(--v7-muted)!important;font-size:.8rem!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.03em!important}
body.v7-app .dashboard-kpis > article > strong,
body.v7-app .stats-kpis > .stats-kpi > strong{order:2;color:var(--v7-ink)!important;font-size:1.5rem!important;font-weight:700!important;line-height:1.1!important}
body.v7-app .stats-kpis{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))!important;gap:12px!important;margin:0 0 18px!important}

/* --- Onglets statistiques : barre d'onglets en tête de page --- */
body.v7-app .stats-tabs{display:flex!important;flex-wrap:wrap!important;gap:4px!important;margin:0 0 18px!important;padding:6px!important;border:1px solid var(--v7-line)!important;border-radius:var(--v7-radius)!important;background:var(--v7-green-50)!important}
body.v7-app .stats-tabs a{padding:8px 16px!important;border-radius:8px!important;color:var(--v7-green-900)!important;font-weight:600!important;font-size:.9rem!important;text-decoration:none!important;white-space:nowrap!important}
/* Les sections cibles s'arrêtent sous la topbar (64px) au clic sur un onglet */
body.page-statistics.v7-app [id]{scroll-margin-top:80px!important}
body.v7-app .stats-tabs a:hover{background:#fff!important}
body.v7-app .stats-tabs a.is-active,
body.v7-app .stats-tabs a[aria-current="true"]{background:var(--v7-green-700)!important;color:#fff!important;box-shadow:var(--v7-shadow)!important}

/* --- Grille des graphiques d'analyse-temps ---
   Une tuile large par ligne, deux au maximum sur très grand écran.
   On neutralise le flex 200px générique qui les serrait toutes sur une ligne. */
body.page-analyse-temps.v7-app .dashboard-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:16px!important}
body.page-analyse-temps.v7-app .dashboard-grid > .chart-card{flex:none!important;min-width:0!important;display:flex!important;flex-direction:column!important}
body.page-analyse-temps.v7-app .dashboard-grid > .chart-wide{grid-column:1 / -1!important}
@media(max-width:1000px){
  body.page-analyse-temps.v7-app .dashboard-grid{grid-template-columns:1fr!important}
  body.page-analyse-temps.v7-app .dashboard-grid > .chart-card{grid-column:1 / -1!important}
}
/* Zone de dessin des graphiques : hauteur maîtrisée pour éviter l'étirement */
body.v7-app .chart-box{position:relative!important;width:100%!important;height:300px!important;margin-top:12px!important}
body.v7-app .chart-box-tall{height:360px!important}
body.v7-app .chart-box-tasks{height:560px!important}
body.v7-app .chart-box > canvas{max-width:100%!important}

/* --- Carte thermique (analyse-temps) : grille de cellules colorées --- */
body.v7-app .heatmap{display:grid!important;grid-template-columns:repeat(auto-fill,minmax(84px,1fr))!important;gap:6px!important;margin:4px 0 14px!important}
body.v7-app .heat-cell{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:2px!important;aspect-ratio:1 / 1!important;padding:6px 4px!important;border-radius:8px!important;border:1px solid rgba(0,0,0,.05)!important;text-align:center!important}
body.v7-app .heat-cell span{font-size:.72rem!important;font-weight:600!important;opacity:.85!important}
body.v7-app .heat-cell strong{font-size:1rem!important;font-weight:700!important;line-height:1!important}
body.v7-app .heat-legend{display:flex!important;align-items:center!important;gap:6px!important;flex-wrap:wrap!important;color:var(--v7-muted)!important;font-size:.8rem!important}
body.v7-app .heat-legend i{display:inline-block!important;width:22px!important;height:14px!important;border-radius:3px!important;border:1px solid rgba(0,0,0,.06)!important}

/* --- Statistiques : mini-graphiques en barres, listes, sections --- */
/* Sections encadrées de la page statistiques */
body.v7-app .stats-section{display:block!important}
body.v7-app .stats-section-head{display:flex!important;align-items:flex-start!important;justify-content:space-between!important;gap:16px!important;margin-bottom:14px!important}
body.v7-app .stats-section-head h2{margin:0 0 4px!important}
body.v7-app .stats-section-head p{margin:0!important;color:var(--v7-muted)!important}
body.v7-app .stats-section-head > strong{font-size:1.4rem!important;font-weight:700!important;color:var(--v7-green-900)!important}

/* Mini-barres horizontales (répartition par jour, par statut, etc.) :
   label à gauche, barre extensible au centre, valeur à droite. */
body.v7-app .chart-list{display:flex!important;flex-direction:column!important;gap:9px!important}
body.v7-app .chart-row{display:grid!important;grid-template-columns:120px 1fr auto!important;align-items:center!important;gap:12px!important}
body.v7-app .chart-row > span{color:var(--v7-ink)!important;font-weight:600!important;font-size:.9rem!important;white-space:nowrap!important}
body.v7-app .chart-track{position:relative!important;height:14px!important;min-width:0!important;border-radius:999px!important;background:var(--v7-green-50)!important;border:1px solid var(--v7-line)!important;overflow:hidden!important}
body.v7-app .chart-track > i{display:block!important;height:100%!important;border-radius:inherit!important;background:var(--v7-green-600)!important}
body.v7-app .chart-row > strong{font-variant-numeric:tabular-nums!important;font-weight:700!important;color:var(--v7-ink)!important;white-space:nowrap!important;min-width:64px!important;text-align:right!important}

/* Liste compacte (projets sans activité) : plusieurs colonnes de puces */
body.v7-app .compact-list{list-style:none!important;margin:0!important;padding:0!important;display:grid!important;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))!important;gap:6px 18px!important}
body.v7-app .compact-list li{display:flex!important;gap:6px!important;padding:6px 10px!important;border:1px solid var(--v7-line)!important;border-radius:8px!important;background:#fff!important;font-size:.9rem!important}
body.v7-app .compact-list li strong{color:var(--v7-green-900)!important}

/* Graphiques à barres annuels (Top 10 projets / tâches) : hauteur maîtrisée
   pour que les 10 barres et leurs libellés ne se chevauchent pas. */
body.v7-app .annual-chart-canvas{position:relative!important;width:100%!important;height:380px!important;margin:6px 0 4px!important}
body.v7-app .annual-chart-canvas-tall{height:460px!important}
body.v7-app .annual-chart-canvas-tasks{height:640px!important}
body.v7-app .annual-chart-canvas > canvas{max-width:100%!important}

/* Bloc graphique annuel pleine largeur + mise en évidence des écarts anormaux */
body.v7-app .annual-chart-block{display:block!important;width:100%!important;margin:0 0 8px!important}
body.v7-app .annual-chart-wide{grid-column:1 / -1!important}
body.v7-app td.anomaly-value{color:var(--v7-danger,#c0392b)!important;font-weight:700!important}

/* --- Répartition des équipes (admin) --- */
body.v7-app .repartition-wrap{display:flex;flex-direction:column;gap:18px}
body.v7-app .repartition-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
body.v7-app .repartition-card{border:1px solid var(--v7-line);border-radius:10px;background:#fff;padding:12px 14px;display:flex;flex-direction:column;gap:8px}
body.v7-app .repartition-card.is-empty{background:#fff7f4;border-color:#f0c9bd}
body.v7-app .repartition-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--v7-line);padding-bottom:6px}
body.v7-app .repartition-card-head strong{color:var(--v7-ink);font-size:.98rem}
body.v7-app .repartition-count{min-width:26px;height:22px;padding:0 8px;border-radius:999px;background:var(--v7-green-700);color:#fff;font-size:.8rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center}
body.v7-app .repartition-card.is-empty .repartition-count{background:#c0603f}
body.v7-app .repartition-members{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}
body.v7-app .repartition-members li{font-size:.9rem;color:var(--v7-ink);padding:2px 0}
body.v7-app .repartition-empty-msg{margin:0;color:var(--v7-muted);font-size:.88rem;font-style:italic}

/* --- Répartition des équipes : responsables rattachés --- */
body.v7-app .repartition-users{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 4px}
body.v7-app .repartition-users-label{font-size:.78rem;color:var(--v7-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}
body.v7-app .repartition-user-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:999px;background:var(--v7-green-50);border:1px solid var(--v7-green-300,#bcd9c4);color:var(--v7-green-900);font-size:.8rem;font-weight:600}
body.v7-app .repartition-user-chip .ti{font-size:.85rem}

/* --- Récapitulatif des accès (admin) --- */
body.v7-app .recap-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:0 0 18px}
body.v7-app .recap-metric{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border:1px solid var(--v7-line);border-left:4px solid var(--v7-green-600);border-radius:10px;background:#fff}
body.v7-app .recap-metric span{color:var(--v7-muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;font-weight:700}
body.v7-app .recap-metric strong{color:var(--v7-ink);font-size:1.5rem;font-weight:700;line-height:1}
body.v7-app .recap-metric strong small{color:var(--v7-muted);font-size:.9rem;font-weight:600}
body.v7-app .recap-section{margin-bottom:18px}
body.v7-app .recap-section h2{margin:0 0 4px;font-size:1.2rem;color:var(--v7-green-900)}
body.v7-app .recap-hint{margin:0 0 14px;color:var(--v7-muted);font-size:.85rem}
body.v7-app .recap-table-wrap{overflow-x:auto}
body.v7-app .recap-table{width:100%;border-collapse:collapse;font-size:.88rem}
body.v7-app .recap-table thead th{position:sticky;top:0;text-align:left;background:var(--v7-green-50);color:var(--v7-green-900);font-weight:700;padding:9px 12px;border-bottom:2px solid var(--v7-line);white-space:nowrap}
body.v7-app .recap-table tbody td{padding:8px 12px;border-bottom:1px solid var(--v7-line);vertical-align:top}
body.v7-app .recap-table tbody tr:hover{background:var(--v7-green-50)}
body.v7-app .recap-table tr.is-inactive{opacity:.5}
body.v7-app .recap-chip{display:inline-block;margin:1px 3px 1px 0;padding:1px 8px;border-radius:999px;background:var(--v7-green-50);border:1px solid var(--v7-green-300,#bcd9c4);color:var(--v7-green-900);font-size:.78rem;font-weight:600}
body.v7-app .recap-module{display:inline-block;margin:1px 3px 1px 0;padding:1px 7px;border-radius:6px;background:#eef2f6;border:1px solid #dce3ea;color:#3a4a5a;font-size:.76rem;font-weight:600}
body.v7-app .recap-muted{color:var(--v7-muted);font-style:italic}
body.v7-app .recap-yes{color:var(--v7-green-700);font-weight:700}
body.v7-app .recap-no{color:#c0603f;font-weight:700}
body.v7-app .recap-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:20px;padding:0 7px;border-radius:999px;background:var(--v7-green-700);color:#fff;font-size:.76rem;font-weight:700}
body.v7-app .recap-count.is-zero{background:#c0603f}
body.v7-app .recap-role{display:inline-block;padding:1px 8px;border-radius:6px;font-size:.76rem;font-weight:700;background:#eef2f6;color:#3a4a5a}
body.v7-app .recap-role-admin{background:#f6e3e3;color:#a03030}
body.v7-app .recap-role-super_utilisateur{background:#e5edf9;color:#1d5fa5}
body.v7-app .recap-role-responsable{background:#e9f3de;color:#3b6d11}
body.v7-app .recap-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
body.v7-app .recap-card{border:1px solid var(--v7-line);border-radius:10px;background:#fff;padding:12px 14px}
body.v7-app .recap-card.is-inactive{opacity:.55}
body.v7-app .recap-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;border-bottom:1px solid var(--v7-line);padding-bottom:6px;margin-bottom:8px}
body.v7-app .recap-card-head strong{font-size:.98rem}
body.v7-app .recap-card-desc{margin:0 0 8px;color:var(--v7-muted);font-size:.82rem}
body.v7-app .recap-modules{display:flex;flex-wrap:wrap;gap:2px}

/* --- Récapitulatif des projets (admin) --- */
body.v7-app .recap-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 14px}
body.v7-app .recap-search{flex:1;min-width:200px;min-height:38px;padding:6px 12px;border:1px solid var(--v7-line-strong);border-radius:8px;background:#fff;font-size:.9rem}
body.v7-app .recap-search:focus{border-color:var(--v7-green-600);outline:none;box-shadow:0 0 0 3px rgba(51,142,87,.12)}
body.v7-app .recap-proj-list{display:flex;flex-direction:column;gap:6px}
body.v7-app .recap-proj{border:1px solid var(--v7-line);border-radius:10px;background:#fff;overflow:hidden}
body.v7-app .recap-proj.is-inactive{opacity:.55}
body.v7-app .recap-proj-head{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;background:none;border:0;cursor:pointer;text-align:left;font:inherit}
body.v7-app .recap-proj-head:hover{background:var(--v7-green-50)}
body.v7-app .recap-proj-caret{color:var(--v7-muted);font-size:.8rem;transition:transform .15s;flex:0 0 auto}
body.v7-app .recap-proj-head[aria-expanded="true"] .recap-proj-caret{transform:rotate(90deg)}
body.v7-app .recap-proj-code{font-weight:700;color:var(--v7-green-900);min-width:44px;flex:0 0 auto}
body.v7-app .recap-proj-name{font-weight:600;color:var(--v7-ink);flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.v7-app .recap-proj-meta{display:flex;flex-wrap:wrap;align-items:center;gap:5px;flex:0 0 auto;justify-content:flex-end}
body.v7-app .recap-proj-body{padding:2px 14px 14px 40px;border-top:1px solid var(--v7-line);background:#fbfdfa}
body.v7-app .recap-proj-groups{margin:10px 0;display:flex;flex-wrap:wrap;align-items:center;gap:5px}
body.v7-app .recap-proj-groups-label{font-size:.78rem;color:var(--v7-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}
body.v7-app .recap-chip.is-primary{background:var(--v7-green-700);color:#fff;border-color:var(--v7-green-700)}
body.v7-app .recap-mode{display:inline-block;padding:1px 8px;border-radius:6px;font-size:.74rem;font-weight:700;background:#eef2f6;color:#3a4a5a}
body.v7-app .recap-mode-projet{background:#e5edf9;color:#1d5fa5}
body.v7-app .recap-mode-taches{background:#f3ecdb;color:#8a6d1a}
body.v7-app .recap-tasks{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
body.v7-app .recap-task{display:inline-block;padding:2px 9px;border-radius:6px;background:#fff;border:1px solid var(--v7-line);font-size:.82rem;color:var(--v7-ink)}
body.v7-app .recap-task b{color:var(--v7-green-900)}
body.v7-app .recap-task.is-inactive{opacity:.5;text-decoration:line-through}
body.v7-app .recap-no-result{text-align:center;color:var(--v7-muted);font-style:italic;padding:20px}

/* Pleins et recharges d’énergie : grille de saisie alignée. */
body.v7-app form.energy-form {
  align-items: start !important;
}
body.v7-app form.energy-form > label,
body.v7-app form.energy-form > .energy-full-field {
  align-self: start;
  min-width: 0;
}
body.v7-app form.energy-form > label > :is(input, select, textarea) {
  margin-top: 0;
}
body.v7-app form.energy-form .energy-full-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding-top: 22px;
}
body.v7-app form.energy-form .energy-full-field label.check-row {
  min-height: var(--v7-control);
  padding: 0 2px;
}
body.v7-app form.energy-form .energy-full-field small,
body.v7-app form.energy-form label small {
  line-height: 1.35;
}
body.v7-app form.energy-form .energy-comment-field {
  grid-column: span 2;
}
body.v7-app form.energy-form .energy-comment-field textarea {
  min-height: 74px;
}
body.v7-app form.energy-form > .form-actions {
  margin-top: -2px !important;
}
@media (max-width: 1200px) {
  body.v7-app form.energy-form .energy-comment-field { grid-column: span 2; }
  body.v7-app form.energy-form .energy-full-field { padding-top: 0; }
}
@media (max-width: 960px) {
  body.v7-app form.energy-form .energy-comment-field { grid-column: 1 / -1; }
}
@media (max-width: 620px) {
  body.v7-app form.energy-form .energy-comment-field { grid-column: auto; }
  body.v7-app form.energy-form .energy-full-field { padding-top: 0; }
}
/* Boutons secondaires et actions sensibles partagés. */
body.v7-app :is(a.button.secondary,button.button.secondary,.btn.secondary) {
  border-color: var(--v7-line-strong) !important;
  background: var(--v7-green-50) !important;
  color: var(--v7-green-900) !important;
}
body.v7-app :is(.button-danger,.danger,button.danger,.btn.danger) {
  border-color: #d92d20 !important;
  background: var(--v7-danger) !important;
  color: #fff !important;
}

/* Les filtres applicatifs actuels sont centralisés dans filters.css. */

/* ========================================================================== */
/* Connexion — isolation stricte des formulaires d’authentification.           */
/* Le login conserve une grille à une colonne, indépendante des éditeurs CRUD. */
/* ========================================================================== */
body.v7-app.auth-page form.v7-auth-form {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 18px !important;
  width: 100% !important;
  align-items: stretch !important;
}
body.v7-app.auth-page form.v7-auth-form > label {
  grid-column: 1 / -1 !important;
  width: 100% !important;
  min-width: 0 !important;
}
body.v7-app.auth-page form.v7-auth-form :is(input[type="text"], input[type="password"], input:not([type])) {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: none !important;
}
body.v7-app.auth-page form.v7-auth-form > :is(button, .button, input[type="submit"]),
body.v7-app.auth-page form.v7-auth-form > .uniform-form-actions {
  grid-column: 1 / -1 !important;
  width: 100% !important;
}

/* Actions sensibles rendues en POST sans modifier l'apparence de la barre. */
.logout-form { margin: 0; padding: 0; display: inline-flex; }
.logout-form .logout-icon { font: inherit; cursor: pointer; }
.inline-action-form { display: inline-block; margin: 0; }

.link-button { border: 0; padding: 0; margin: 0; background: transparent; color: inherit; font: inherit; text-decoration: underline; cursor: pointer; }

/* ==========================================================================
   V7.51 — alignement des sous-menus
   Les icônes utilisent une colonne fixe afin que tous les libellés commencent
   au même axe, y compris lorsqu'un intitulé long passe sur deux lignes.
   ========================================================================== */
body.v7-app .erp-menu-panel a,
body.v7-app .nav-dropdown a,
body.v7-app .nav-dropdown-wide a {
  display: grid !important;
  grid-template-columns: 20px minmax(0, 1fr) !important;
  align-items: start !important;
  column-gap: 8px !important;
  min-width: 0 !important;
  line-height: 1.25 !important;
}

body.v7-app .erp-menu-panel a > :first-child,
body.v7-app .nav-dropdown a > :first-child,
body.v7-app .nav-dropdown-wide a > :first-child {
  width: 20px !important;
  min-width: 20px !important;
  max-width: 20px !important;
  justify-self: center !important;
  text-align: center !important;
  line-height: 1.25 !important;
}

body.v7-app .erp-menu-panel a > span:not(:first-child),
body.v7-app .nav-dropdown a > span:not(:first-child),
body.v7-app .nav-dropdown-wide a > span:not(:first-child) {
  min-width: 0 !important;
}

/* Si le texte est directement dans le lien (sans span dédié), la grille
   conserve malgré tout l'alignement grâce à la première colonne fixe. */
body.v7-app .erp-menu-panel a,
body.v7-app .nav-dropdown a,
body.v7-app .nav-dropdown-wide a {
  white-space: normal !important;
  overflow-wrap: break-word !important;
}

/* Un peu plus de largeur utile pour les sous-menus longs. */
body.v7-app .erp-sidebar .erp-menu-panel,
body.v7-app .erp-sidebar .nav-dropdown,
body.v7-app .erp-sidebar .nav-dropdown-wide {
  min-width: 0 !important;
}

/* Sur desktop, réduire légèrement le retrait interne pour gagner de la place
   sans déplacer visuellement le niveau hiérarchique. */
@media (min-width: 961px) {
  body.v7-app .erp-menu-panel a,
  body.v7-app .nav-dropdown a,
  body.v7-app .nav-dropdown-wide a {
    padding-left: 8px !important;
    padding-right: 8px !important;
  }
}

/* ========================================================================== */
/* V7.52 — rythme commun des filtres et des blocs de données                   */
/* ========================================================================== */
body.v7-app #main-content > :is(.page-heading,.page-head,.uniform-page-header) + :is(.panel,.card,.box,.kpi-grid,.stats-grid,.dashboard-grid,.hours-summary-filter-panel) {
  margin-top: var(--v7-space-3) !important;
}

body.v7-app #main-content > :is(.panel,.card,.box,.kpi-grid,.stats-grid,.dashboard-grid,.hours-summary-kpis,.collab-block) + :is(.panel,.card,.box,.kpi-grid,.stats-grid,.dashboard-grid,.hours-summary-kpis,.collab-block) {
  margin-top: var(--v7-space-3) !important;
}

body.v7-app :is(.panel,.card,.box) > :is(.table-wrap,.table-responsive,.data-table-wrapper) {
  margin-top: 12px !important;
}

body.v7-app :is(.panel,.card,.box) > :is(h1,h2,h3,.section-head) + :is(.table-wrap,.table-responsive,.data-table-wrapper) {
  margin-top: 12px !important;
}

/* Source centralisee: work/gestion_ferme_dev/public/assets/css/page-modules.css */
/* Centralisation automatique des anciens styles de page.
   Chaque bloc reste scope a sa page afin d eviter les effets de bord. */

/* source: absences.php */

/* Formulaire Nouvelle absence : 4 colonnes sur grand écran pour garder les périodes lisibles. */
body.page-absences.v7-app form.form-grid.absence-entry-form{
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 16px 18px !important;
    align-items: start !important;
}
body.page-absences.v7-app form.form-grid.absence-entry-form > label{
    align-self: start !important;
    margin: 0 !important;
}
body.page-absences.v7-app form.form-grid.absence-entry-form > .absence-full, body.page-absences.v7-app form.form-grid.absence-entry-form > .form-actions{
    grid-column: 1 / -1 !important;
}
body.page-absences.v7-app form.form-grid.absence-entry-form input, body.page-absences.v7-app form.form-grid.absence-entry-form select{
    min-height: 38px !important;
}
body.page-absences.v7-app form.form-grid.absence-entry-form textarea{
    min-height: 78px !important;
}
body.page-absences.v7-app form.form-grid.absence-entry-form > .form-actions{
    display: flex !important;
    justify-content: flex-end !important;
    gap: 8px !important;
    margin-top: 0 !important;
}
@media (max-width: 1100px) {
    body.page-absences.v7-app form.form-grid.absence-entry-form{
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 650px) {
    body.page-absences.v7-app form.form-grid.absence-entry-form{
        grid-template-columns: 1fr !important;
    }
}


/* source: absences.php */
body.page-absences .view-toggle{display:inline-flex}body.page-absences .view-toggle .btn{border-radius:0}body.page-absences .view-toggle .btn:first-child{border-radius:6px 0 0 6px}body.page-absences .view-toggle .btn:last-child{border-radius:0 6px 6px 0}body.page-absences .view-toggle .active{background:#2e7d32;color:#fff}body.page-absences .agenda-head{display:flex;align-items:center;gap:12px}body.page-absences .agenda-title{flex:1;text-align:center}body.page-absences .agenda-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}body.page-absences .agenda-dow{text-align:center;font-weight:600;color:#667085}body.page-absences .agenda-cell{min-height:105px;border:1px solid #e4e7ec;border-radius:8px;padding:4px;background:#fff;overflow:hidden}body.page-absences .agenda-out{background:#f9fafb;color:#98a2b3}body.page-absences .agenda-today{border-color:#2e7d32;box-shadow:inset 0 0 0 1px #2e7d32}body.page-absences .agenda-daynum{text-align:right;font-size:.78rem;font-weight:600}body.page-absences .agenda-op{display:block;margin-top:3px;padding:3px 5px;border-radius:5px;font-size:.72rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;background:#eef2f6;color:#344054}body.page-absences .absence-badge{padding:3px 7px;border-radius:999px;font-size:.8rem}body.page-absences .type-vacances{background:#dff3e4!important;color:#176b35!important}body.page-absences .type-conge{background:#e6efff!important;color:#2459a9!important}body.page-absences .type-maladie{background:#fff0c9!important;color:#8a5a00!important}body.page-absences .type-accident{background:#fde3e1!important;color:#9a261d!important}body.page-absences .type-autre{background:#eee!important;color:#555!important}@media(max-width:700px){body.page-absences .agenda-cell{min-height:72px}body.page-absences .agenda-op{font-size:.64rem}}

body.page-absences .absence-year-head{
    display:grid;
    grid-template-columns:auto 1fr auto;
    align-items:center;
    gap:12px;
    margin-bottom:12px;
    text-align:center;
}
body.page-absences .absence-year-head h2{margin:2px 0 0}
body.page-absences .absence-year-legend{
    display:flex;
    flex-wrap:wrap;
    justify-content:center;
    gap:8px 16px;
    margin-bottom:18px;
    color:#475467;
    font-size:.78rem;
}
body.page-absences .absence-year-legend span{display:inline-flex;align-items:center;gap:6px}
body.page-absences .absence-year-grid{
    display:grid;
    grid-template-columns:repeat(3,minmax(240px,1fr));
    gap:14px;
}
body.page-absences .absence-year-month{
    min-width:0;
    padding:12px;
    border:1px solid #e4e7ec;
    border-radius:10px;
    background:#fff;
}
body.page-absences .absence-year-month-title{
    display:block;
    margin-bottom:9px;
    color:#176b35;
    font-weight:700;
    text-align:center;
    text-decoration:none;
}
body.page-absences .absence-year-month-title:hover{text-decoration:underline}
body.page-absences .absence-year-weekdays,
body.page-absences .absence-year-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
body.page-absences .absence-year-weekdays{margin-bottom:4px;color:#667085;font-size:.66rem;font-weight:700;text-align:center}
body.page-absences .absence-year-day,
body.page-absences .absence-year-day-blank{min-height:32px}
body.page-absences .absence-year-day{
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    gap:2px;
    padding:2px;
    border:1px solid transparent;
    border-radius:6px;
    color:#344054;
    font-size:.72rem;
    line-height:1;
    text-decoration:none;
}
body.page-absences .absence-year-day:hover{border-color:#98c6a5;background:#f4faf5}
body.page-absences .absence-year-day.has-absence{background:#f5f7fa;font-weight:700}
body.page-absences .absence-year-day.is-today{border-color:#2e7d32;box-shadow:inset 0 0 0 1px #2e7d32}
body.page-absences .absence-year-markers{display:flex;align-items:center;justify-content:center;gap:2px;min-height:6px}
body.page-absences .absence-year-dot{
    display:inline-block;
    flex:0 0 6px;
    width:6px;
    height:6px;
    min-width:6px;
    padding:0;
    border-radius:50%;
}
body.page-absences .absence-year-dot.type-vacances{background:#238443!important}
body.page-absences .absence-year-dot.type-conge{background:#3676d2!important}
body.page-absences .absence-year-dot.type-maladie{background:#d08700!important}
body.page-absences .absence-year-dot.type-accident{background:#c63b32!important}
body.page-absences .absence-year-dot.type-autre{background:#667085!important}
body.page-absences .type-formation{background:#ede9fe;color:#5b21b6}
body.page-absences .absence-year-dot.type-formation{background:#7c3aed}
body.page-absences .absence-year-markers small{font-size:.54rem;font-weight:700}
@media(max-width:1050px){body.page-absences .absence-year-grid{grid-template-columns:repeat(2,minmax(240px,1fr))}}
@media(max-width:650px){body.page-absences .absence-year-grid{grid-template-columns:1fr}body.page-absences .absence-year-day{min-height:38px}}

/* source: maintenance.php */

        body.page-maintenance.application-maintenance-page{min-height:100vh;margin:0;display:grid;place-items:center;padding:24px;background:#f4f7f3;font-family:Arial,sans-serif;color:#243024}
        body.page-maintenance .application-maintenance-card{width:min(620px,100%);padding:38px;text-align:center;background:#fff;border:1px solid #d9e2d7;border-radius:16px;box-shadow:0 18px 50px rgba(30,60,35,.12)}
        body.page-maintenance .application-maintenance-icon{display:grid;place-items:center;width:72px;height:72px;margin:0 auto 20px;border-radius:50%;background:#fff3cd;font-size:34px}
        body.page-maintenance .application-maintenance-card h1{margin:0 0 12px;font-size:clamp(1.6rem,4vw,2.25rem)}
        body.page-maintenance .application-maintenance-card p{margin:0 auto 24px;max-width:510px;line-height:1.65;color:#526052}
        body.page-maintenance .application-maintenance-card .button{display:inline-flex;text-decoration:none}

/* V7.12 — primitives centrales remplaçant les styles inline de pages métier */
.ui-inline-form{display:inline}
.ui-inline-flex{display:flex;gap:5px;align-items:center}
.ui-field-compact{width:90px}
.ui-hidden-initial{display:none}
.ui-chart-frame{height:360px}
.ui-audit-pre{white-space:pre-wrap;max-width:520px}
.ui-warning-text{color:#b45309}
.ui-warning-icon{color:#b45309;cursor:help}
.ui-mt-20{margin-top:20px}
.ui-mb-16{margin-bottom:16px}
.erp-menu-direct-link{text-decoration:none}
.ui-mt-1{margin-top:1rem}.ui-mt-075{margin-top:.75rem}.ui-mb-12{margin-bottom:12px}.ui-list-compact{margin:6px 0 0;padding-left:18px}.ui-flex-gap-sm{display:flex;gap:.4rem;align-items:center}.ui-mt-04{margin-top:.4rem}.ui-flex-wrap-gap{gap:8px;flex-wrap:wrap}.ui-grid-span-3{grid-column:span 3}




/* Audit global — grille de filtres interne, indépendante du panneau repliable V7 */
body.v7-app form.audit-global-filters .audit-global-filter-grid {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 12px 14px !important;
    align-items: end !important;
    width: 100% !important;
    min-width: 0 !important;
}
body.v7-app form.audit-global-filters .audit-global-filter-grid > label {
    display: flex !important;
    flex-direction: column !important;
    gap: 6px !important;
    margin: 0 !important;
    min-width: 0 !important;
    width: auto !important;
}
body.v7-app form.audit-global-filters .audit-global-filter-grid > label > input,
body.v7-app form.audit-global-filters .audit-global-filter-grid > label > select {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
}
body.v7-app form.audit-global-filters .audit-global-filter-grid > .audit-filter-search {
    grid-column: span 2 !important;
}
body.v7-app form.audit-global-filters .audit-global-filter-grid > .audit-filter-actions {
    grid-column: 1 / -1 !important;
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: 8px !important;
    margin: 0 !important;
    width: 100% !important;
}
/* Après transformation par app.js, le wrapper créé doit laisser la grille occuper toute la largeur. */
body.v7-app form.audit-global-filters.collapsible-panel > .collapsible-panel-body > .audit-global-filter-grid {
    width: 100% !important;
    flex: 0 0 auto !important;
}
@media (max-width: 1200px) {
    body.v7-app form.audit-global-filters .audit-global-filter-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 700px) {
    body.v7-app form.audit-global-filters .audit-global-filter-grid {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    body.v7-app form.audit-global-filters .audit-global-filter-grid > .audit-filter-search,
    body.v7-app form.audit-global-filters .audit-global-filter-grid > .audit-filter-actions {
        grid-column: auto !important;
    }
}

/* Les filtres Statistiques courants sont définis dans reports.css. */

#timesheet-form .line-row { grid-template-columns: minmax(180px,1.2fr) minmax(180px,1.2fr) minmax(100px,.55fr) minmax(180px,1fr) auto; }

@media (max-width: 1100px) { #timesheet-form .line-row { grid-template-columns: minmax(180px,1.2fr) minmax(180px,1.2fr) minmax(100px,.55fr) minmax(180px,1fr) auto; } }
@media (max-width: 680px) { #timesheet-form .line-row { grid-template-columns: minmax(180px,1.2fr) minmax(180px,1.2fr) minmax(100px,.55fr) minmax(180px,1fr) auto; } }
























































/* Étiquette pastille + code, réutilisable dans les listes et sélecteurs. */











.input-uppercase {
  text-transform: uppercase;
}

/* Message d'information / avertissement générique (réutilisable). */
.notice {
  padding: 12px 14px;
  border-radius: 8px;
  margin-bottom: 16px;
  border-left: 4px solid var(--border-strong, #d3d1c7);
  background: var(--surface-1, #f7f6f2);
}
.notice-warning {
  border-left-color: var(--border-warning, #d89b20);
  background: var(--bg-warning, #fff8e6);
  color: var(--text-warning, #6b4e00);
}

/* Bouton-lien d'action positive (ex. « Valider » dans les listes d'actions). */
body.v7-app .link-action {
  min-height: auto !important;
  padding: 0 !important;
  background: transparent !important;
  color: var(--v7-primary, #2f7d4b) !important;
  border: 0 !important;
  font: inherit;
  cursor: pointer;
}
body.v7-app .link-action:hover {
  text-decoration: underline;
}






/* Ligne 1 */


/* Ligne 2 */



/* Ligne 3 : valeurs numériques compactes */




/* Ligne 4 et suivantes */























body.v7-app .pr-history-output + .pr-history-output {
  margin-top: 4px;
}













/* V7.26 — centralisation des régressions UI détectées par l'audit 2026-08-19. */
body.page-reinitialisation-donnees.v7-app .reset-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}
body.page-reinitialisation-donnees.v7-app .reset-title { margin-bottom: .25rem; }
body.page-reinitialisation-donnees.v7-app .reset-subtitle { margin: 0; }
body.page-reinitialisation-donnees.v7-app .reset-toolbar-actions { display: flex; gap: .5rem; }
body.page-reinitialisation-donnees.v7-app .reset-warning { margin-top: 1rem; }
body.page-reinitialisation-donnees.v7-app .reset-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: .75rem;
  margin-top: 1rem;
}
body.page-reinitialisation-donnees.v7-app .reset-card {
  position: relative;
  border: 1px solid var(--border-color, #d7e3da);
  border-radius: 10px;
  padding: 1rem;
  background: #fff;
  cursor: pointer;
}
body.page-reinitialisation-donnees.v7-app .reset-card:has(input:checked) { background: #f1f8f3; border-color: #9bc4a7; }
body.page-reinitialisation-donnees.v7-app .reset-check { display: flex; align-items: center; gap: .65rem; margin-bottom: .35rem; }
body.page-reinitialisation-donnees.v7-app .reset-check input { width: 18px; height: 18px; }
body.page-reinitialisation-donnees.v7-app .reset-card small { display: block; line-height: 1.35; color: #5d6d63; }
body.page-reinitialisation-donnees.v7-app .reset-badge {
  display: inline-block;
  margin-top: .6rem;
  padding: .15rem .45rem;
  border-radius: 999px;
  background: #e7f3e9;
  font-size: .78rem;
  font-weight: 700;
}
body.page-reinitialisation-donnees.v7-app .reset-confirm {
  margin-top: 1.25rem;
  padding-top: 1rem;
  border-top: 1px solid #dde7df;
  display: grid;
  grid-template-columns: minmax(260px, 420px) 1fr auto;
  align-items: end;
  gap: 1rem;
}
body.page-reinitialisation-donnees.v7-app .reset-confirm label { margin: 0; }
body.page-reinitialisation-donnees.v7-app .button.danger { background: #c6281a; color: #fff; border-color: #c6281a; }
@media (max-width: 1050px) {
  body.page-reinitialisation-donnees.v7-app .reset-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.page-reinitialisation-donnees.v7-app .reset-confirm { grid-template-columns: 1fr; }
}
@media (max-width: 650px) {
  body.page-reinitialisation-donnees.v7-app .reset-grid { grid-template-columns: 1fr; }
}



/* Récapitulatif journalier — filtres compacts sur plusieurs colonnes. */
body.v7-app form.recap-daily-filters {
  grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
}
body.v7-app form.recap-daily-filters .filter-actions {
  grid-column: 1 / -1 !important;
}
@media (max-width: 1200px) {
  body.v7-app form.recap-daily-filters {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 900px) {
  body.v7-app form.recap-daily-filters {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 620px) {
  body.v7-app form.recap-daily-filters {
    grid-template-columns: 1fr !important;
  }
}


/* V7.34.0 — Récap journalier : le moteur UI transforme automatiquement
   .uniform-filter-form en .collapsible-panel et déplace les champs dans
   .collapsible-panel-body. La grille doit donc être portée par ce corps. */
body.v7-app form.recap-daily-filters.collapsible-panel:not(.per-page-form)
  > .collapsible-panel-body {
  display: grid !important;
  grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
  gap: 12px 14px !important;
  align-items: end !important;
  width: 100% !important;
}

body.v7-app form.recap-daily-filters.collapsible-panel
  > .collapsible-panel-body > label {
  min-width: 0 !important;
  margin: 0 !important;
}

body.v7-app form.recap-daily-filters.collapsible-panel
  > .collapsible-panel-body > .filter-actions {
  grid-column: 1 / -1 !important;
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
  justify-content: flex-start !important;
}

@media (max-width: 1200px) {
  body.v7-app form.recap-daily-filters.collapsible-panel:not(.per-page-form)
    > .collapsible-panel-body {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 900px) {
  body.v7-app form.recap-daily-filters.collapsible-panel:not(.per-page-form)
    > .collapsible-panel-body {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 620px) {
  body.v7-app form.recap-daily-filters.collapsible-panel:not(.per-page-form)
    > .collapsible-panel-body {
    grid-template-columns: 1fr !important;
  }
}


/* Administration — Affectations projets — centralisé depuis includes/page-styles/admin__affectations-projets.php. */
/* Affectations projets : écran volontairement dense pour permettre une gestion
   rapide de dizaines de projets/collaborateurs sur un grand écran. */
.assignment-switch{
  display:flex;
  gap:8px;
  align-items:center;
  flex-wrap:wrap;
  margin:0 0 16px;
  padding:10px!important;
}
.assignment-switch .button{min-width:160px;justify-content:center}
.assignment-switch .button.active{box-shadow:inset 0 0 0 2px currentColor}

.assignment-layout{
  display:grid;
  grid-template-columns:minmax(250px,300px) minmax(0,1fr);
  gap:16px;
  align-items:start;
  width:100%;
}
.assignment-sidebar,
.assignment-main{padding:16px!important}
.assignment-sidebar{position:sticky;top:18px}
.assignment-sidebar h2,
.assignment-main h2{margin:0 0 10px}
.assignment-main>p.muted{margin:-4px 0 14px}

.assignment-sidebar input[type=search]{width:100%;margin:0 0 10px}
.assignment-targets{
  display:grid;
  gap:7px;
  max-height:calc(100vh - 330px);
  min-height:260px;
  overflow:auto;
  padding:2px 5px 2px 1px;
  scrollbar-gutter:stable;
}
.assignment-target{
  display:block;
  padding:10px 12px;
  border:1px solid var(--border-color,#d8dee8);
  border-radius:10px;
  text-decoration:none;
  color:inherit;
  background:var(--surface,#fff);
  transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;
}
.assignment-target:hover,
.assignment-target.active{border-color:var(--primary,#2563eb);box-shadow:0 0 0 1px var(--primary,#2563eb)}
.assignment-target.active{background:color-mix(in srgb,var(--primary,#2563eb) 7%,var(--surface,#fff))}
.assignment-target strong{display:block;line-height:1.25}
.assignment-target small{display:block;margin-top:3px;opacity:.68}

.assignment-main{overflow:hidden!important}
/* Le gestionnaire d’affectations reste un formulaire plein écran, hors grille CRUD. */
body.v7-app form#assignment-form{
  display:block!important;
  grid-template-columns:none!important;
  width:100%!important;
  max-width:none!important;
  min-width:0!important;
  margin:0!important;
  padding:0!important;
  align-items:initial!important;
}
body.v7-app form#assignment-form > .assignment-toolbar,
body.v7-app form#assignment-form > .assignment-grid,
body.v7-app form#assignment-form > .assignment-savebar{
  width:100%!important;
  max-width:none!important;
  grid-column:auto!important;
}

.assignment-toolbar{
  display:grid;
  grid-template-columns:minmax(240px,1fr) auto auto;
  gap:8px;
  align-items:center;
  margin:0 0 14px;
  padding:12px;
  border:1px solid var(--border-color,#d8dee8);
  border-radius:10px;
  background:var(--surface-soft,#f8fafc);
}
.assignment-toolbar-title{
  grid-column:1/-1;
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:center;
  flex-wrap:wrap;
}
.assignment-toolbar-title>span{font-size:12px}
.assignment-toolbar input[type=search]{width:100%;min-width:0;margin:0}
.assignment-toolbar .button{white-space:nowrap;min-height:38px}

/* La largeur de carte, et non un nombre fixe de colonnes, pilote la grille.
   Résultat : environ 7–9 colonnes sur un écran Full HD, puis adaptation fluide. */
.assignment-grid{
  display:grid!important;
  grid-template-columns:repeat(8,minmax(125px,1fr))!important;
  gap:9px!important;
  width:100%!important;
  max-width:none!important;
  margin:0!important;
  padding:0!important;
  align-items:stretch;
}
.assignment-grid>.assignment-option{
  min-width:0!important;
  width:auto!important;
  max-width:none!important;
  margin:0!important;
  box-sizing:border-box;
}
.assignment-option{
  display:grid;
  grid-template-columns:18px minmax(0,1fr);
  gap:8px;
  align-items:start;
  min-height:78px;
  padding:10px;
  border:1px solid var(--border-color,#d8dee8);
  border-radius:10px;
  cursor:pointer;
  background:var(--surface,#fff);
  overflow:hidden;
  transition:border-color .15s ease,box-shadow .15s ease,background .15s ease,transform .12s ease;
}
.assignment-option:hover{
  border-color:color-mix(in srgb,var(--primary,#2563eb) 55%,var(--border-color,#d8dee8));
  transform:translateY(-1px);
}
.assignment-option:has(input:checked){
  border-color:var(--primary,#2563eb);
  box-shadow:0 0 0 1px var(--primary,#2563eb);
  background:color-mix(in srgb,var(--primary,#2563eb) 5%,var(--surface,#fff));
}
.assignment-option input[type=checkbox]{
  width:16px;
  height:16px;
  margin:2px 0 0;
  flex:0 0 auto;
  cursor:pointer;
}
.assignment-option>span{min-width:0;overflow:hidden}
.assignment-option strong{
  display:block;
  font-size:12px;
  line-height:1.3;
  overflow-wrap:anywhere;
  word-break:normal;
}
.assignment-option small{
  display:block;
  margin-top:4px;
  font-size:10.5px;
  line-height:1.25;
  opacity:.72;
  overflow-wrap:anywhere;
}
.assignment-option[hidden],.assignment-target[hidden]{display:none!important}

.assignment-savebar{
  position:sticky;
  bottom:0;
  z-index:3;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
  margin-top:16px;
  padding:14px 0 2px;
  background:linear-gradient(to bottom,transparent,var(--surface,#fff) 24%);
  border-top:1px solid var(--border-color,#d8dee8);
}
.assignment-savebar strong{
  display:inline-flex;
  align-items:center;
  min-height:34px;
  padding:0 10px;
  border-radius:999px;
  background:var(--surface-soft,#f8fafc);
}
.assignment-savebar .button{min-width:220px}
.assignment-empty{padding:34px 24px;text-align:center;opacity:.7}

/* Très grands écrans : cartes un peu plus généreuses tout en gardant une grille dense. */
@media(min-width:1800px){
  .assignment-layout{grid-template-columns:minmax(260px,310px) minmax(0,1fr)}
  .assignment-grid{grid-template-columns:repeat(9,minmax(0,1fr))!important}
}
/* Portable / petit desktop : on garde une vraie grille sans imposer 2 ou 3 colonnes. */
@media(max-width:1200px){
  .assignment-layout{grid-template-columns:minmax(230px,270px) minmax(0,1fr)}
  .assignment-grid{grid-template-columns:repeat(6,minmax(0,1fr))!important}
  .assignment-toolbar{grid-template-columns:minmax(180px,1fr) auto auto}
}
@media(max-width:900px){
  .assignment-layout{grid-template-columns:1fr}
  .assignment-sidebar{position:static}
  .assignment-targets{max-height:300px;min-height:0}
  .assignment-toolbar{grid-template-columns:1fr 1fr}
  .assignment-toolbar input[type=search],.assignment-toolbar-title{grid-column:1/-1}
  .assignment-grid{grid-template-columns:repeat(4,minmax(0,1fr))!important}
}
@media(max-width:560px){
  .assignment-switch .button{width:100%;min-width:0}
  .assignment-toolbar{grid-template-columns:1fr}
  .assignment-toolbar .button{width:100%}
  .assignment-grid{grid-template-columns:1fr!important}
  .assignment-option{min-height:0}
  .assignment-savebar{position:static;align-items:stretch}
  .assignment-savebar strong{justify-content:center;width:100%}
  .assignment-savebar .button{width:100%;min-width:0}
}

/* Administration — Activité collaborateurs — centralisé depuis includes/page-scripts/activite-collaborateurs.php. */
.activity-chart-panel .section-head{margin-bottom:10px}
.activity-chart-panel .section-head h2{margin-bottom:4px}
.activity-chart-wrap{
  position:relative;
  width:100%;
  height:330px;
  min-height:260px;
}
@media(max-width:720px){
  .activity-chart-wrap{height:280px}
}

/* Vues de répartition projets/collaborateurs. */
.repartition-card-action{
  margin-top:auto;
  padding-top:4px;
}

/* Synthèse des heures collaborateurs --------------------------------------- */
body.hours-summary-page{
  --hs-accent:var(--v7-primary,#1f7a4d);
  --hs-accent-soft:color-mix(in srgb,var(--hs-accent) 9%,white);
  --hs-border:var(--v7-line,#d8e2dc);
  --hs-muted:var(--v7-muted,#66756c);
}
body.hours-summary-page .hours-summary-hero{
  display:flex;align-items:flex-end;justify-content:space-between;gap:24px;
  margin:0 0 18px;padding:4px 0 2px;
}
body.hours-summary-page .hours-summary-heading{margin:0}
body.hours-summary-page .hours-summary-eyebrow{
  display:block;margin-bottom:5px;color:var(--hs-accent);font-size:.74rem;
  font-weight:800;letter-spacing:.08em;text-transform:uppercase;
}
body.hours-summary-page .hours-summary-heading h1{margin:0;font-size:clamp(1.55rem,2.1vw,2.15rem);letter-spacing:-.025em}
body.hours-summary-page .hours-summary-heading p{margin:.35rem 0 0;color:var(--hs-muted);max-width:760px}
body.hours-summary-page .hours-summary-export-actions{display:flex;gap:8px;flex-wrap:wrap;margin:0}
body.hours-summary-page .hours-summary-export-actions .button{min-width:74px;text-align:center}

body.hours-summary-page .hours-summary-toolbar{
  display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:14px;
  padding:10px 12px!important;margin-bottom:12px;
}
body.hours-summary-page .hours-summary-view-switch,
body.hours-summary-page .hours-summary-month-switch{
  display:inline-flex;align-items:center;gap:3px;margin:0;padding:3px;
  border:1px solid var(--hs-border);border-radius:9px;background:var(--v7-soft,#f5f8f6);
}
body.hours-summary-page .hours-summary-segment,
body.hours-summary-page .hours-summary-subsegment{
  display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 14px;
  border-radius:6px;color:var(--v7-ink);font-size:.84rem;font-weight:700;text-decoration:none;
  white-space:nowrap;transition:background .15s ease,color .15s ease,box-shadow .15s ease;
}
body.hours-summary-page .hours-summary-subsegment{font-size:.78rem;padding:0 11px}
body.hours-summary-page :is(.hours-summary-segment,.hours-summary-subsegment):hover{background:var(--v7-white)}
body.hours-summary-page :is(.hours-summary-segment,.hours-summary-subsegment).is-active{
  background:var(--hs-accent);color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08);
}
body.hours-summary-page .hours-summary-period-nav{
  justify-self:end;display:grid;grid-template-columns:34px minmax(170px,1fr) 34px;
  align-items:center;gap:8px;min-width:min(100%,350px);
}
body.hours-summary-page .hours-summary-period-nav>div{text-align:center;line-height:1.2}
body.hours-summary-page .hours-summary-period-nav span{display:block;margin-bottom:2px;color:var(--hs-muted);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.045em}
body.hours-summary-page .hours-summary-period-nav strong{display:block;font-size:.95rem;text-transform:capitalize}
body.hours-summary-page .hours-summary-period-arrow{
  display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--hs-border);
  border-radius:7px;background:var(--v7-white);color:var(--hs-accent);font-size:1rem;font-weight:800;text-decoration:none;
}
body.hours-summary-page .hours-summary-period-arrow:hover{background:var(--hs-accent-soft)}

body.hours-summary-page .hours-summary-filter-panel{padding:0!important;overflow:hidden;margin-bottom:14px}
body.hours-summary-page .hours-summary-filter-panel>summary{
  cursor:pointer;list-style:none;padding:13px 16px;font-weight:800;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
}
body.hours-summary-page .hours-summary-filter-panel>summary::-webkit-details-marker{display:none}
body.hours-summary-page .hours-summary-filter-panel[open]>summary{border-bottom:1px solid var(--hs-border);background:var(--v7-soft,#f7f9f8)}
body.hours-summary-page .hours-summary-filter-summary{
  margin-left:auto;color:var(--hs-muted);font-size:.76rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
body.hours-summary-page .hours-summary-filter-panel .hours-summary-filters{
  display:grid!important;grid-template-columns:repeat(6,minmax(0,1fr))!important;
  gap:18px 20px!important;align-items:start!important;padding:20px!important;margin:0!important;
}
body.hours-summary-page .hours-summary-field-period,
body.hours-summary-page .hours-summary-field-status{grid-column:span 3}
body.hours-summary-page .hours-summary-field-companies,
body.hours-summary-page .hours-summary-field-teams,
body.hours-summary-page .hours-summary-field-exclusions{grid-column:span 2}
body.hours-summary-page .hours-summary-field{
  display:grid!important;grid-template-rows:auto 132px auto;gap:6px!important;min-width:0;margin:0!important;
  font-weight:700;
}
body.hours-summary-page .hours-summary-field:first-of-type,
body.hours-summary-page .hours-summary-field.hours-summary-compact-field{grid-template-rows:auto 42px auto}
body.hours-summary-page .hours-summary-field>span{font-size:.8rem}
body.hours-summary-page .hours-summary-field :is(input,select){width:100%!important;margin:0!important}
body.hours-summary-page .hours-summary-field select{height:132px!important;min-height:132px!important;padding:6px 8px}
body.hours-summary-page .hours-summary-field.hours-summary-compact-field select{height:42px!important;min-height:42px!important;padding:6px 8px}
body.hours-summary-page .hours-summary-field small{display:block;min-height:1.25em;margin:0;color:var(--hs-muted);font-size:.7rem;font-weight:500;line-height:1.35}
body.hours-summary-page .hours-summary-filters>.filter-actions{
  grid-column:1/-1!important;display:flex!important;gap:8px!important;align-items:center!important;
  padding-top:2px!important;margin:0!important;
}

body.hours-summary-page .hours-summary-kpis{
  display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:12px;margin:0 0 14px;
}
body.hours-summary-page .hours-summary-kpi{
  position:relative;overflow:hidden;display:flex;flex-direction:column;gap:3px;min-height:104px;padding:16px 18px!important;
}
body.hours-summary-page .hours-summary-kpi::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--hs-border);
}
body.hours-summary-page .hours-summary-kpi.is-primary::before{background:var(--hs-accent)}
body.hours-summary-page .hours-summary-kpi span{font-size:.76rem;color:var(--hs-muted);font-weight:750;text-transform:uppercase;letter-spacing:.035em}
body.hours-summary-page .hours-summary-kpi strong{font-size:1.45rem;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
body.hours-summary-page .hours-summary-kpi small{margin-top:auto;color:var(--hs-muted);font-size:.72rem}
body.hours-summary-page .hours-summary-kpi.is-primary{background:linear-gradient(135deg,var(--v7-white),var(--hs-accent-soft))}
body.hours-summary-page .hours-summary-kpi.is-primary strong{color:var(--hs-accent)}

body.hours-summary-page .hours-summary-data-card{padding:0!important;overflow:hidden}
body.hours-summary-page .hours-summary-data-head{
  display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 16px;border-bottom:1px solid var(--hs-border);
}
body.hours-summary-page .hours-summary-data-head h2{margin:0 0 2px;font-size:1rem}
body.hours-summary-page .hours-summary-data-head p{margin:0;color:var(--hs-muted);font-size:.76rem}
body.hours-summary-page .hours-summary-result-count{
  display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;background:var(--hs-accent-soft);
  color:var(--hs-accent);font-size:.72rem;font-weight:800;white-space:nowrap;
}
body.hours-summary-page .hours-summary-table-wrap{max-width:100%;overflow:auto;background:var(--v7-white)}
body.hours-summary-page .hours-summary-table{width:max-content;min-width:100%;border-collapse:separate;border-spacing:0}
body.hours-summary-page .hours-summary-table :is(th,td){
  white-space:nowrap;text-align:center;border-right:1px solid var(--hs-border);border-bottom:1px solid var(--hs-border);
  padding:9px 10px;font-size:.78rem;
}
body.hours-summary-page .hours-summary-table :is(th,td):last-child{border-right:0}
body.hours-summary-page .hours-summary-table thead th{
  position:sticky;top:0;z-index:3;background:var(--v7-soft,#f2f6f3);font-size:.74rem;font-weight:800;color:var(--v7-ink);
}
body.hours-summary-page .hours-summary-table thead th small{display:block;margin-top:2px;color:var(--hs-muted);font-size:.68rem;font-weight:600}
body.hours-summary-page .hours-summary-table tbody tr:hover td{background:color-mix(in srgb,var(--hs-accent) 4%,white)}
body.hours-summary-page .hours-summary-table .hours-summary-collaborator-col{
  position:sticky;left:0;z-index:2;text-align:left;min-width:225px;background:var(--v7-white);font-weight:700;
}
body.hours-summary-page .hours-summary-table thead .hours-summary-collaborator-col{z-index:5;background:var(--v7-soft,#f2f6f3)}
body.hours-summary-page .hours-summary-table .hours-summary-hours{font-variant-numeric:tabular-nums;min-width:72px}
body.hours-summary-page .hours-summary-table .hours-summary-hours.is-zero{color:color-mix(in srgb,var(--hs-muted) 65%,white)}
body.hours-summary-page .hours-summary-table .hours-summary-weekend{background:rgba(15,23,42,.025)}
body.hours-summary-page .hours-summary-table tbody tr:hover .hours-summary-collaborator-col{background:color-mix(in srgb,var(--hs-accent) 4%,white)}
body.hours-summary-page .hours-summary-table .hours-summary-total-col{
  position:sticky;right:0;z-index:2;background:var(--v7-soft,#f5f8f6);border-left:1px solid var(--hs-border);min-width:90px;font-weight:800;
}
body.hours-summary-page .hours-summary-table thead .hours-summary-total-col{z-index:5}
body.hours-summary-page .hours-summary-table .hours-summary-week-number-row th{
  top:0;background:color-mix(in srgb,var(--hs-accent) 8%,white)!important;color:var(--hs-accent);padding:7px 8px!important;
  font-weight:850!important;letter-spacing:.02em;
}
body.hours-summary-page .hours-summary-table .hours-summary-week-number-row+tr th{top:32px}
body.hours-summary-page .hours-summary-table tfoot .hours-summary-period-total-row>th,
body.hours-summary-page .hours-summary-table tfoot .hours-summary-period-total-row>td{
  background:color-mix(in srgb,var(--hs-accent) 11%,white)!important;color:var(--v7-ink);font-weight:850;border-bottom:0;
}
body.hours-summary-page .hours-summary-table tfoot th{position:sticky;left:0;z-index:4;text-align:left}
body.hours-summary-page .hours-summary-table tfoot .hours-summary-total-col{z-index:4;color:var(--hs-accent)}

@media(max-width:1250px){
  body.hours-summary-page .hours-summary-toolbar{grid-template-columns:auto 1fr}
  body.hours-summary-page .hours-summary-period-nav{grid-column:1/-1;justify-self:center}
  body.hours-summary-page .hours-summary-filter-panel .hours-summary-filters{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  body.hours-summary-page .hours-summary-field-period,
  body.hours-summary-page .hours-summary-field-status,
  body.hours-summary-page .hours-summary-field-companies,
  body.hours-summary-page .hours-summary-field-teams{grid-column:span 1}
  body.hours-summary-page .hours-summary-field-exclusions{grid-column:1/-1}
}
@media(max-width:760px){
  body.hours-summary-page .hours-summary-hero{align-items:flex-start;flex-direction:column}
  body.hours-summary-page .hours-summary-export-actions{width:100%}
  body.hours-summary-page .hours-summary-export-actions .button{flex:1}
  body.hours-summary-page .hours-summary-toolbar{grid-template-columns:1fr}
  body.hours-summary-page .hours-summary-view-switch,body.hours-summary-page .hours-summary-month-switch{width:100%;display:grid;grid-auto-flow:column;grid-auto-columns:1fr}
  body.hours-summary-page :is(.hours-summary-segment,.hours-summary-subsegment){padding-inline:8px}
  body.hours-summary-page .hours-summary-period-nav{grid-column:auto;width:100%;min-width:0}
  body.hours-summary-page .hours-summary-filter-summary{display:none}
  body.hours-summary-page .hours-summary-kpis{grid-template-columns:1fr}
  body.hours-summary-page .hours-summary-data-head{align-items:flex-start;flex-direction:column}
  body.hours-summary-page .hours-summary-table .hours-summary-collaborator-col{min-width:180px}
}
@media(max-width:620px){
  body.hours-summary-page .hours-summary-filter-panel .hours-summary-filters{grid-template-columns:1fr!important}
  body.hours-summary-page :is(.hours-summary-field-period,.hours-summary-field-status,.hours-summary-field-companies,.hours-summary-field-teams,.hours-summary-field-exclusions){grid-column:1/-1}
  body.hours-summary-page .hours-summary-field{grid-template-rows:auto 118px auto}
  body.hours-summary-page .hours-summary-field:first-of-type,body.hours-summary-page .hours-summary-field.hours-summary-compact-field{grid-template-rows:auto 42px auto}
  body.hours-summary-page .hours-summary-field select{height:118px!important;min-height:118px!important}
  body.hours-summary-page .hours-summary-filters>.filter-actions>*{flex:1;text-align:center}
}

/* Retards de saisie des heures -------------------------------------------- */
body.late-hours-page .late-hours-filters{
  grid-template-columns:repeat(6,minmax(0,1fr))!important;
}
body.late-hours-page .late-hours-field-delay,
body.late-hours-page .late-hours-field-status{grid-column:span 3}
body.late-hours-page .hours-summary-field-companies,
body.late-hours-page .hours-summary-field-teams{grid-column:span 3}
body.late-hours-page .late-hours-table{width:100%;min-width:900px}
body.late-hours-page .late-hours-table th:nth-child(2),
body.late-hours-page .late-hours-table td:nth-child(2){min-width:170px;text-align:left}
body.late-hours-page .late-hours-table th:nth-child(3),
body.late-hours-page .late-hours-table td:nth-child(3){min-width:190px;text-align:left}
body.late-hours-page .late-hours-table th:nth-child(4),
body.late-hours-page .late-hours-table td:nth-child(4){min-width:125px}
body.late-hours-page .late-hours-table th:nth-child(5),
body.late-hours-page .late-hours-table td:nth-child(5){min-width:125px}
body.late-hours-page .late-hours-badge{
  display:inline-flex;align-items:center;justify-content:center;min-width:88px;min-height:28px;
  padding:4px 9px;border-radius:999px;font-size:.72rem;font-weight:800;white-space:nowrap;
  background:var(--v7-soft,#f5f8f6);color:var(--v7-ink);
}
body.late-hours-page .late-hours-badge.is-low{background:#f3f7e9;color:#587019}
body.late-hours-page .late-hours-badge.is-medium{background:#fff4d8;color:#8a5a00}
body.late-hours-page .late-hours-badge.is-high{background:#fde8e8;color:#a22727}
body.late-hours-page .late-hours-badge.is-never{background:#f1e8fb;color:#6c2b8f}
body.late-hours-page .late-hours-empty{padding:28px!important;text-align:center!important;color:var(--hs-muted)}

/* Les cartes de données utilisent l'en-tête du tableau comme séparation :
   suppression du double trait qui apparaissait au-dessus des tableaux. */
body.hours-summary-page .hours-summary-data-head{border-bottom:0!important;padding-bottom:10px}
body.hours-summary-page .hours-summary-data-head + .hours-summary-table-wrap{border-top:0!important}

/* Activités par collaborateur : les six critères partagent la grille commune. */
body.page-activities .activities-filter-form .activities-quick-period{grid-column:1/-1!important}
body.page-activities .activities-filter-form .filter-actions{grid-column:1/-1!important}
body.page-activities .quick-period{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:2px}
body.page-activities .quick-period-label{font-size:.8rem;color:#6c6b64}
body.page-activities .button.tiny{padding:3px 10px;font-size:.78rem;line-height:1.4}
body.page-activities .day-nav{display:flex;align-items:center;justify-content:center;gap:16px;margin:18px 0 10px}
body.page-activities .day-nav .day-arrow{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;border:1px solid #cfd6cf;background:#fff;font-size:1.2rem;text-decoration:none;color:#2f5d43}
body.page-activities .day-nav .day-arrow.disabled{opacity:.35;pointer-events:none}
body.page-activities .day-nav .day-current{text-align:center;min-width:230px}
body.page-activities .day-nav .day-current .day-title{font-size:1.15rem;font-weight:700;color:#123;text-transform:capitalize}
body.page-activities .day-nav .day-current .day-meta{font-size:.8rem;color:#6c6b64}
body.page-activities .collab-block{margin:0 0 18px;border:1px solid #e3e6e1;border-radius:10px;overflow:hidden}
body.page-activities .collab-block .collab-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;background:#eef3ee}
body.page-activities .collab-block .collab-header .name{font-weight:700;color:#123}
body.page-activities .collab-block .collab-header .total{font-weight:700;color:#2f5d43;white-space:nowrap}
body.page-activities .collab-block table{width:100%;border-collapse:collapse;table-layout:fixed}
body.page-activities .collab-block th,body.page-activities .collab-block td{padding:7px 12px;border-top:1px solid #eef0ec;text-align:left;font-size:.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis}
body.page-activities .collab-block thead th{background:#f7f9f7;font-weight:600;color:#555;border-top:none}
body.page-activities .collab-block td.num,body.page-activities .collab-block th.num{text-align:right;white-space:nowrap}
body.page-activities .collab-block col.c-projet{width:22%}
body.page-activities .collab-block col.c-tache{width:30%}
body.page-activities .collab-block col.c-heures{width:10%}
body.page-activities .collab-block col.c-statut{width:12%}
body.page-activities .collab-block col.c-comment{width:18%}
body.page-activities .collab-block col.c-open{width:8%}
body.page-activities .day-empty{padding:24px;text-align:center;color:#8a8a82}
body.page-activities .period-total{margin:6px 0 2px;font-size:.85rem;color:#555}

/* Absences : période visible et filtres alignés avec le reste de l'application. */
body.page-absences .page-heading-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
body.page-absences .absence-period-label{display:inline-flex;align-items:center;min-height:38px;padding:0 12px;border:1px solid var(--v7-line);border-radius:8px;background:var(--v7-green-50);color:var(--v7-green-900);font-size:.78rem;font-weight:800;text-transform:capitalize}

/* Configuration des anomalies : sections lisibles au lieu d'une grille unique. */
body.anomaly-settings-page .anomaly-settings-layout{display:grid!important;grid-template-columns:minmax(0,2fr) minmax(280px,.8fr)!important;gap:14px!important;align-items:start}
body.anomaly-settings-page .anomaly-settings-layout > *{min-width:0}
body.anomaly-settings-page .anomaly-settings-form{display:grid!important;grid-template-columns:1fr!important;gap:14px!important;align-items:stretch!important}
body.anomaly-settings-page .anomaly-settings-section{display:grid;gap:12px;padding:16px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-green-50)}
body.anomaly-settings-page .anomaly-settings-section-head h2{margin:0;color:var(--v7-green-900);font-size:1rem}
body.anomaly-settings-page .anomaly-settings-section-head p{margin:3px 0 0;color:var(--v7-muted);font-size:.78rem}
body.anomaly-settings-page .anomaly-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;align-items:end}
body.anomaly-settings-page .anomaly-settings-grid.is-three{grid-template-columns:repeat(3,minmax(0,1fr))}
body.anomaly-settings-page .anomaly-setting-group{display:grid;gap:10px;align-self:stretch;padding:12px;border:1px solid var(--v7-line);border-radius:8px;background:#fff}
body.anomaly-settings-page .anomaly-setting-group h3{margin:0;font-size:.84rem;color:var(--v7-green-900)}
body.anomaly-settings-page .duration-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
body.anomaly-settings-page .anomaly-color-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
body.anomaly-settings-page .anomaly-color-grid.is-two{grid-template-columns:repeat(2,minmax(0,1fr))}
body.anomaly-settings-page input[type="color"]{height:40px;padding:4px!important}
body.anomaly-settings-page label.check-row{display:flex!important;flex-direction:row!important;align-items:center!important;gap:9px!important;min-height:40px;margin:0!important}
body.anomaly-settings-page label.check-row input{flex:0 0 auto;width:18px!important;height:18px!important;margin:0!important}
body.anomaly-settings-page .anomaly-settings-actions{justify-content:flex-end!important;margin:0!important}
body.anomaly-settings-page .anomaly-preview{position:sticky!important;top:82px!important}
body.anomaly-settings-page .anomaly-preview ul{display:grid;gap:8px;margin:12px 0;padding-left:20px}
body.anomaly-settings-page .anomaly-preview p{margin:12px 0 0;color:var(--v7-muted);font-size:.82rem}

@media(max-width:1100px){
  body.anomaly-settings-page .anomaly-settings-layout{grid-template-columns:1fr!important}
  body.anomaly-settings-page .anomaly-preview{position:static!important}
}
@media(max-width:760px){
  body.anomaly-settings-page .anomaly-settings-grid,
  body.anomaly-settings-page .anomaly-settings-grid.is-three,
  body.anomaly-settings-page .anomaly-color-grid{grid-template-columns:1fr!important}
}
@media(max-width:620px){
  body.page-absences .page-heading-actions{justify-content:flex-start}
}
@media(max-width:1100px){
  body.late-hours-page .late-hours-filters{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  body.late-hours-page .late-hours-field-delay,
  body.late-hours-page .late-hours-field-status,
  body.late-hours-page .hours-summary-field-companies,
  body.late-hours-page .hours-summary-field-teams{grid-column:span 1}
}
@media(max-width:620px){
  body.late-hours-page .late-hours-filters{grid-template-columns:1fr!important}
  body.late-hours-page .late-hours-field-delay,
  body.late-hours-page .late-hours-field-status,
  body.late-hours-page .hours-summary-field-companies,
  body.late-hours-page .hours-summary-field-teams{grid-column:1/-1}
}

/* Contrat collaborateur */
.contract-fields{border:1px solid var(--border,#d7e3d9);border-radius:10px;padding:14px 16px;margin:4px 0 14px}.contract-fields legend{font-weight:700;padding:0 6px}.contract-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;align-items:start}.contract-grid label{display:flex;flex-direction:column;gap:6px}.contract-grid small,.contract-preview small{color:var(--muted,#66756b)}.contract-preview{margin-top:12px;padding:10px 12px;background:#f2f8f3;border:1px solid #d7e7da;border-radius:8px}.contract-history{margin-top:18px}.contract-history h3{margin:0 0 10px}@media(max-width:1100px){.contract-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:700px){.contract-grid{grid-template-columns:1fr}}
.contract-month-filters{display:grid;grid-template-columns:minmax(220px,320px) minmax(220px,320px) auto;gap:14px;align-items:end}.contract-month-filters label{display:flex;flex-direction:column;gap:6px}.contract-month-filters .form-actions{margin:0}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:12px 0}.stat-card{padding:14px 16px;border:1px solid var(--border,#d7e3d9);border-radius:10px;background:#fff}.stat-card span{display:block;color:var(--muted,#66756b);font-size:.85rem;margin-bottom:4px}.stat-card strong{font-size:1.25rem}@media(max-width:800px){.contract-month-filters,.stats-grid{grid-template-columns:1fr}}

/* Horaire hebdomadaire détaillé des collaborateurs */
.contract-main-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.weekly-schedule-block{margin-top:14px;padding-top:14px;border-top:1px solid var(--border,#d7e3d9)}
.weekly-schedule-heading{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.weekly-schedule-heading span{color:var(--muted,#66756b);font-size:.92rem}
.weekly-schedule-grid{display:grid;grid-template-columns:repeat(7,minmax(88px,1fr));gap:10px}
.weekly-schedule-grid label{display:flex;flex-direction:column;gap:5px}
.weekly-schedule-grid label span{font-weight:600;font-size:.9rem}
.weekly-schedule-grid input{min-width:0;width:100%}
.weekly-schedule-summary{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-top:10px;padding:9px 11px;background:#f7faf7;border:1px solid var(--border,#d7e3d9);border-radius:8px}
.weekly-schedule-summary small{color:var(--muted,#66756b)}
@media(max-width:1100px){.weekly-schedule-grid{grid-template-columns:repeat(4,minmax(100px,1fr))}.contract-main-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.weekly-schedule-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.weekly-schedule-summary{align-items:flex-start;flex-direction:column}.contract-main-grid{grid-template-columns:1fr}}

/* Administration — récapitulatif des projets */
body.v7-app.page-recapitulatif-projets .recap-soc-group{margin:0 0 22px;border:1px solid var(--v7-line);border-radius:10px;overflow:hidden;background:#fff}
body.v7-app.page-recapitulatif-projets .recap-soc-band{display:flex;align-items:center;gap:10px;padding:9px 15px;background:var(--v7-green-700,#2f7a4f);color:#fff}
body.v7-app.page-recapitulatif-projets .recap-soc-icon{font-size:1rem;opacity:.9}
body.v7-app.page-recapitulatif-projets .recap-soc-name{font-weight:700;font-size:1.05rem}
body.v7-app.page-recapitulatif-projets .recap-soc-stats{margin-left:auto;font-size:.8rem;font-weight:600;opacity:.92}
body.v7-app.page-recapitulatif-projets .recap-soc-group .recap-proj{border:0!important;border-top:1px solid var(--v7-line)!important;border-radius:0!important;background:#fff!important}
body.v7-app.page-recapitulatif-projets .recap-soc-group .recap-proj:first-of-type{border-top:0!important}
body.v7-app.page-recapitulatif-projets .recap-soc-group .recap-proj-head{background:#fff!important}
body.v7-app.page-recapitulatif-projets .recap-soc-group .recap-proj-head:hover,
body.v7-app.page-recapitulatif-projets .recap-soc-group .recap-proj-head[aria-expanded="true"]{background:var(--v7-green-50,#eef6f0)!important}
body.v7-app.page-recapitulatif-projets .recap-shared{display:inline-block;padding:1px 9px;border-radius:999px;background:var(--v7-amber-50,#f6edd6);color:var(--v7-amber-900,#7a5a12);border:1px solid var(--v7-amber-300,#e3cf9a);font-size:.76rem;font-weight:700;white-space:nowrap}
body.v7-app.page-recapitulatif-projets .recap-soc-group.is-hidden{display:none}

/* Administration — filtre annuel des jours fériés */
body.page-jours-feries-vaud .holiday-year-filter{max-width:420px}

/* Contrôle des heures */
.controle-heures-page .period-nav{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.controle-heures-page .period-current{min-width:96px;text-align:center;font-size:15px}
.controle-heures-page .export-sep{display:inline-block;width:1px;height:20px;background:var(--v7-line,#d3d1c7);margin:0 4px}
.controle-heures-page .controle-filters{align-items:end}
.controle-heures-page .legend{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 12px}
.controle-heures-page .ch-filter-panel{padding:0!important;overflow:hidden}
.controle-heures-page .ch-filter-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:12px 16px;font-weight:500;user-select:none}
.controle-heures-page .ch-filter-summary::-webkit-details-marker{display:none}
.controle-heures-page .ch-filter-summary::before{content:"▸";display:inline-block;transition:transform .15s;color:#5f5e5a}
.controle-heures-page .ch-filter-panel[open] .ch-filter-summary::before{transform:rotate(90deg)}
.controle-heures-page .ch-filter-panel[open] .ch-filter-summary{border-bottom:1px solid var(--v7-line,#e0e4de);background:#f7f9f8}
.controle-heures-page .ch-filter-badge{font-size:11px;background:#e6f1fb;color:#0c447c;padding:1px 8px;border-radius:10px;font-weight:500}
.controle-heures-page .ch-filter-panel .controle-filters{padding:14px 16px}
.controle-heures-page .status-pill{display:inline-block;font-size:11px;line-height:1.4;padding:1px 8px;border-radius:10px;white-space:nowrap}
.controle-heures-page .status-info{background:#e3efff;color:#245a96}
.controle-heures-page .status-success{background:#e1f5ee;color:#0f6e56}
.controle-heures-page .status-danger{background:#fcebeb;color:#a32d2d}
.controle-heures-page .controle-grid-panel{padding:0}
body.v7-app .controle-heures-page .ch-table-wrap,
.controle-heures-page .ch-table-wrap{max-width:100%!important;width:100%!important;max-height:72vh!important;overflow:auto!important;background:#fff!important;-webkit-overflow-scrolling:touch;position:relative}
body.v7-app .controle-heures-page table.controle-grid,
.controle-heures-page table.controle-grid{width:max-content!important;min-width:100%!important;border-collapse:separate!important;border-spacing:0!important;font-size:12px!important;table-layout:auto!important}
body.v7-app .controle-heures-page table.controle-grid th,
body.v7-app .controle-heures-page table.controle-grid td,
.controle-heures-page table.controle-grid th,
.controle-heures-page table.controle-grid td{border-right:.5px solid #e0e4de!important;border-bottom:.5px solid #e0e4de!important;padding:4px 6px!important;text-align:center!important;vertical-align:top!important;white-space:normal!important;background-clip:padding-box}
.controle-heures-page table.controle-grid .col-day{min-width:104px!important;width:104px!important}
.controle-heures-page table.controle-grid .daynum{font-size:13px;font-weight:500}
body.v7-app .controle-heures-page table.controle-grid thead th,
.controle-heures-page table.controle-grid thead th{position:sticky!important;top:0!important;z-index:20!important;background:#e8f2ea!important;color:#123!important;font-weight:600!important;text-align:center!important;line-height:1.2;border-bottom:1px solid #b9d3c0!important}
body.v7-app .controle-heures-page table.controle-grid tfoot th,
.controle-heures-page table.controle-grid tfoot th{position:sticky!important;bottom:0!important;z-index:20!important;background:#f1efe8!important;font-weight:600!important;border-top:1px solid #cfccc2!important}
.controle-heures-page table.controle-grid .sticky-col{position:sticky!important;left:0!important;z-index:10!important;background:#fff!important;text-align:left!important;min-width:200px!important;max-width:230px;box-shadow:1px 0 0 #e0e4de}
.controle-heures-page table.controle-grid .col-total{position:sticky!important;right:0!important;z-index:10!important;min-width:78px!important;background:#e6f1fb!important;color:#0c447c!important;font-weight:600!important;box-shadow:-1px 0 0 #cdd9e6}
.controle-heures-page table.controle-grid thead .sticky-col,
.controle-heures-page table.controle-grid thead .col-total,
.controle-heures-page table.controle-grid tfoot .sticky-col,
.controle-heures-page table.controle-grid tfoot .col-total{z-index:30!important}
.controle-heures-page table.controle-grid thead .sticky-col{background:#e8f2ea!important}
.controle-heures-page table.controle-grid thead .col-total{background:#dbe9f6!important}
.controle-heures-page table.controle-grid tfoot .sticky-col,
.controle-heures-page table.controle-grid tfoot .col-total{background:#eef0e9!important}
.controle-heures-page table.controle-grid .is-weekend,
.controle-heures-page table.controle-grid thead th.is-weekend,
.controle-heures-page table.controle-grid tfoot th.is-weekend{background:#eceae2!important;color:#6c6b64!important}
.controle-heures-page table.controle-grid .is-empty{background:#fafafa!important}
.controle-heures-page table.controle-grid td.is-weekend.is-empty,
.controle-heures-page table.controle-grid td.is-weekend,
.controle-heures-page table.controle-grid th.is-weekend{background:#eceae2!important;color:#6c6b64!important}
.controle-heures-page table.controle-grid tbody tr:hover td{background:inherit!important}
.controle-heures-page .collab-row td{background:#fff!important}
.controle-heures-page .collab-head{display:flex;align-items:center;gap:6px}
.controle-heures-page .collab-head .avatar{width:24px;height:24px;border-radius:50%;background:#e6f1fb;color:#0c447c;display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:500;flex:0 0 auto}
.controle-heures-page .collab-head strong{font-weight:500}
.controle-heures-page .day-cell{display:flex;flex-direction:column;align-items:center;gap:2px}
.controle-heures-page .day-cell .cell-select{margin-bottom:2px}
.controle-heures-page .ranges{width:100%}
.controle-heures-page .range-line{display:flex;gap:2px;justify-content:center;margin:0!important}
.controle-heures-page .range-line input[type=time]{width:52px!important;font-size:10px!important;padding:1px 2px!important;height:22px!important;border:.5px solid #d3d1c7!important;border-radius:4px!important}
.controle-heures-page .range-line.muted{font-size:10px;color:#888780}
.controle-heures-page .day-total{font-weight:500;font-size:12px}
.controle-heures-page .day-balance{font-size:10px}
.controle-heures-page .day-balance.neg{color:#a32d2d}
.controle-heures-page .day-balance.pos{color:#0f6e56}
.controle-heures-page .lock-tag{font-size:11px}
.controle-heures-page .col-project{padding-left:10px!important;color:#5f5e5a!important;font-weight:400!important}
.controle-heures-page .project-row td{background:#fff!important}
.controle-heures-page .hours-input{width:56px!important;font-size:11px!important;text-align:center!important;padding:1px 2px!important;height:22px!important;border:.5px solid #d3d1c7!important;border-radius:4px!important}
.controle-heures-page .save-row td{padding:2px 4px!important;background:#fbfbf9!important}
.controle-heures-page .save-row td form{display:inline-flex!important;margin:0!important}
.controle-heures-page .btn-save-cell{border:.5px solid #0f6e56!important;background:#e1f5ee!important;color:#0f6e56!important;border-radius:4px!important;padding:0 6px!important;height:20px!important;cursor:pointer;font-size:11px!important}
.controle-heures-page .btn-save-cell:hover{background:#c9ede0!important}
.controle-heures-page .bulk-actions-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px}
.controle-heures-page .bulk-actions-bar .selected-count{font-size:13px;color:#5f5e5a}
.controle-heures-page .bulk-actions-bar .bulk-buttons{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.controle-heures-page .bulk-actions-bar .btn.success{background:#e1f5ee!important;border-color:#0f6e56!important;color:#0f6e56!important}
.controle-heures-page .bulk-actions-bar .btn.danger{background:#fcebeb!important;border-color:#a32d2d!important;color:#a32d2d!important}
.controle-heures-page .sheet-edit-form{display:none!important}
.controle-heures-page .small{font-size:11px}


/* v48 : édition de l'historique contractuel en pleine largeur. */
body.v7-app.page-admin-collaborators .contract-history-edit-form > .contract-fields {
  grid-column: 1 / -1 !important;
  width: 100% !important;
  max-width: none !important;
}
body.v7-app.page-admin-collaborators .contract-history-edit-form .contract-main-grid {
  grid-template-columns: repeat(4, minmax(180px, 1fr));
}
body.v7-app.page-admin-collaborators .contract-history-edit-form .weekly-schedule-grid {
  grid-template-columns: repeat(7, minmax(105px, 1fr));
}
body.v7-app.page-admin-collaborators .contract-none-history-warning {
  margin: 14px 0 0;
  padding: 10px 12px;
  border: 1px solid #e3cf9a;
  border-radius: 8px;
  background: #fff8e6;
  color: #694d0b;
  line-height: 1.45;
}
@media(max-width:1200px){
  body.v7-app.page-admin-collaborators .contract-history-edit-form .contract-main-grid {
    grid-template-columns: repeat(2, minmax(180px, 1fr));
  }
  body.v7-app.page-admin-collaborators .contract-history-edit-form .weekly-schedule-grid {
    grid-template-columns: repeat(4, minmax(120px, 1fr));
  }
}
@media(max-width:700px){
  body.v7-app.page-admin-collaborators .contract-history-edit-form .contract-main-grid,
  body.v7-app.page-admin-collaborators .contract-history-edit-form .weekly-schedule-grid {
    grid-template-columns: 1fr;
  }
}

/* Absences périodiques : champs alignés et jours accessibles au clavier. */
.absence-recurrence { min-width: 0; }
.absence-weekdays { display: flex; flex-wrap: wrap; gap: .75rem 1.25rem; }
.absence-recurrence .form-grid > .absence-full { grid-column: 1 / -1; }

.absence-type-entry-form > .absence-full { grid-column: 1 / -1; }
/* Source centralisee: work/gestion_ferme_dev/public/assets/css/environment-banner.css */
.environment-banner{
  --env-accent:#475569;
  display:flex;
  flex-wrap:wrap;
  min-width:0;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  min-height:48px;
  padding:7px clamp(14px,2.5vw,34px);
  color:#fff;
  background:linear-gradient(90deg,var(--env-accent),color-mix(in srgb,var(--env-accent) 76%,#111827));
  border-bottom:3px solid color-mix(in srgb,var(--env-accent) 62%,#000);
  box-shadow:0 2px 7px rgba(15,23,42,.18);
  position:relative;
  z-index:35;
}
.environment-banner.env-development{--env-accent:#d97706}
.environment-banner.env-test{--env-accent:#2563eb}
.environment-banner.env-staging{--env-accent:#7c3aed}
.environment-banner.env-production{--env-accent:#b42318}
.environment-banner-main{display:flex;align-items:center;gap:10px;white-space:nowrap;flex:0 0 auto}
.environment-badge{display:inline-flex;align-items:center;justify-content:center;min-width:58px;padding:5px 9px;border:1px solid rgba(255,255,255,.72);border-radius:7px;background:rgba(255,255,255,.16);font-size:.84rem;letter-spacing:.08em;box-shadow:inset 0 1px rgba(255,255,255,.18)}
.environment-label{font-size:.82rem;font-weight:800;letter-spacing:.06em}
.environment-context{display:flex;align-items:center;justify-content:flex-end;gap:10px 22px;min-width:0;flex-wrap:wrap;max-width:100%}
.environment-context>span{display:grid;line-height:1.12;min-width:0}
.environment-context small{font-size:.64rem;text-transform:uppercase;letter-spacing:.07em;opacity:.78}
.environment-context strong{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.84rem}
@media(max-width:900px){.environment-banner{align-items:flex-start;flex-direction:column;gap:7px}.environment-context{width:100%;justify-content:flex-start;gap:15px;flex-wrap:wrap}.environment-context>span{min-width:120px}}
@media(max-width:520px){.environment-label{display:none}.environment-context strong{max-width:150px}.environment-context>span:nth-child(3),.environment-context>span:nth-child(4){display:none}}
@media print{.environment-banner{display:none!important}}

/* Le bandeau suit la largeur réelle du menu, sans le recouvrir.
   La même variable pilote #main-content et les états ouvert / réduit du menu.
   Sur mobile le menu est un tiroir : aucune place permanente à lui réserver. */
body.v7-app.erp-authenticated > .environment-banner {
  margin-left: 0;
}
@media (min-width: 961px) {
  body.v7-app.erp-authenticated > .environment-banner {
    margin-left: var(--v7-sidebar);
    transition: margin-left .18s ease;
  }
}
@media (prefers-reduced-motion: reduce) {
  body.v7-app.erp-authenticated > .environment-banner { transition: none; }
}

/* Adaptateurs Laravel : le design reste celui du thème legacy centralisé. */
body.v7-app .actions,
body.v7-app .page-actions,
body.v7-app .page-heading-actions,
body.v7-app .section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
body.v7-app .section-head{margin-bottom:14px}
body.v7-app .section-head h2{margin:0}
body.v7-app .line-row{display:grid;gap:10px;align-items:end;margin:0 0 10px;padding:12px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-green-50)}
body.v7-app .checkbox-line{display:flex!important;flex-direction:row!important;align-items:center!important;gap:8px!important}
body.v7-app .checkbox-line input{width:auto!important;min-height:auto!important}
body.v7-app .readonly-status{display:flex;min-height:40px;flex-direction:column;justify-content:center;padding:7px 10px;border:1px solid var(--v7-line);border-radius:8px;background:var(--v7-green-50)}
body.v7-app .readonly-status span{font-size:11px;color:var(--v7-muted)}
body.v7-app .status-badge{display:inline-flex;align-items:center;padding:4px 9px;border-radius:999px;background:#eef2f6;color:#344054;font-size:11px;font-weight:750;white-space:nowrap}
body.v7-app .status-badge.validated{background:#dff3e4;color:#176b35}
/* Orange commun aux statuts Brouillon de tous les modules. */
body.v7-app .status-badge.draft,
body.v7-app .badge.status-brouillon,
.controle-heures-page .status-pill.status-warning{background:#fff0c9!important;color:#8a5a00!important}
body.v7-app .status-badge.submitted{background:#e3efff;color:#245a96}
body.v7-app .status-badge.danger,
body.v7-app .status-badge.refused{background:#fde3e1;color:#9a261d}
body.v7-app :is(.button.danger,.btn.danger){border-color:#d9a5a0;background:#fff5f4;color:var(--v7-danger)}
body.v7-app .big-number{margin:8px 0 0;color:var(--v7-green-900);font-size:clamp(28px,4vw,46px);font-weight:800}
body.v7-app .budget-ring{--progress:0;display:grid;place-items:center;width:148px;height:148px;margin:12px auto;border-radius:50%;background:radial-gradient(circle at center,#fff 0 52%,transparent 53%),conic-gradient(var(--v7-green-600) calc(var(--progress) * 1%),var(--v7-green-100) 0)}
body.v7-app .budget-ring strong{font-size:22px;color:var(--v7-green-900)}
body.v7-app .muted{color:var(--v7-muted)}
body.v7-app .text-danger{color:var(--v7-danger)!important}
body.v7-app .errors{margin:6px 0 0;padding-left:20px}
@media(max-width:900px){body.v7-app .line-row{grid-template-columns:1fr 1fr!important}}
@media(max-width:620px){body.v7-app .line-row{grid-template-columns:1fr!important}}

/* Laravel V8 — grille commune, plein écran utile et contrôles de largeur maîtrisée. */
body.v7-app #main-content.app-page{width:auto;max-width:none;display:grid;align-content:start;gap:18px;margin-left:var(--erp-sidebar-width,72px);padding:clamp(18px,2.2vw,34px);overflow-x:hidden}
body.v7-app #main-content.app-page>*{min-width:0;margin-top:0;margin-bottom:0}
body.v7-app .ui-page-heading{min-height:74px;margin:0;padding:0 0 14px;border-bottom:1px solid var(--v7-line)}
body.v7-app .ui-page-heading h1,
body.v7-app .page-head h1{margin:0;color:var(--v7-green-900);font-size:clamp(1.55rem,2.2vw,2.25rem);line-height:1.12}
body.v7-app .ui-page-heading p:not(.eyebrow),
body.v7-app .page-head p{max-width:900px;margin:7px 0 0;color:var(--v7-muted)}
body.v7-app .filter-panel{padding:0;overflow:hidden}
body.v7-app :is(.button,.btn,button:not(.erp-menu-group-button):not(.erp-menu-trigger):not(.erp-menu-backdrop):not(.logout-icon)){min-height:40px;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}
body.v7-app .ui-content-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:18px}
body.v7-app .ui-content-grid>.span-8{grid-column:span 8}
body.v7-app .ui-content-grid>.span-6{grid-column:span 6}
body.v7-app .ui-content-grid>.span-4{grid-column:span 4}
body.v7-app .table-wrap{width:100%;max-width:100%;overflow:auto}
body.v7-app table{width:100%}
body.v7-app .ui-bar-chart{display:grid;gap:10px;min-height:180px;align-content:center}
body.v7-app .ui-bar-chart-row{display:grid;grid-template-columns:minmax(130px,260px) minmax(120px,1fr) 90px;align-items:center;gap:12px}
body.v7-app .ui-bar-chart-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.86rem}
body.v7-app .ui-bar-chart-track{height:15px;overflow:hidden;border-radius:999px;background:#e8eee8;box-shadow:inset 0 0 0 1px rgba(28,85,50,.08)}
body.v7-app .ui-bar-chart-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--v7-green-600),#8bbd66);transition:width .35s ease}
body.v7-app .ui-bar-chart-row strong{text-align:right;font-size:.83rem;color:var(--v7-green-900);white-space:nowrap}
body.v7-app .ui-comparison-chart{display:grid;gap:12px;min-height:220px;align-content:start}
body.v7-app .ui-comparison-legend{display:flex;justify-content:flex-end;gap:16px;color:var(--v7-muted);font-size:.75rem;font-weight:700}
body.v7-app .ui-comparison-legend span::before{content:"";display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px;vertical-align:-1px}
body.v7-app .ui-comparison-legend .is-first::before{background:#a8cdb2}
body.v7-app .ui-comparison-legend .is-second::before{background:var(--v7-green-700)}
body.v7-app .ui-comparison-row{display:grid;grid-template-columns:minmax(130px,240px) minmax(180px,1fr);align-items:center;gap:12px}
body.v7-app .ui-comparison-row>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem}
body.v7-app .ui-comparison-bars{display:grid;gap:4px}
body.v7-app .ui-comparison-bars>span{display:grid;grid-template-columns:minmax(60px,1fr) 72px;align-items:center;gap:8px}
body.v7-app .ui-comparison-bars i{display:block;height:9px;border-radius:999px;background:#a8cdb2}
body.v7-app .ui-comparison-bars .is-second i{background:var(--v7-green-700)}
body.v7-app .ui-comparison-bars b{text-align:right;color:var(--v7-muted);font-size:.7rem;font-weight:700;white-space:nowrap}
body.v7-app .ui-multi-year-chart{display:grid;gap:14px;min-height:240px;align-content:start}
body.v7-app .ui-multi-year-legend{display:flex;justify-content:flex-end;gap:14px;color:var(--v7-muted);font-size:.75rem;font-weight:750}
body.v7-app .ui-multi-year-legend span::before{content:"";display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px;vertical-align:-1px}
body.v7-app .ui-multi-year-row{display:grid;grid-template-columns:minmax(150px,270px) minmax(240px,1fr);align-items:start;gap:14px}
body.v7-app .ui-multi-year-row>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;padding-top:3px}
body.v7-app .ui-multi-year-bars{display:grid;gap:4px}
body.v7-app .ui-multi-year-bars>span{display:grid;grid-template-columns:minmax(70px,1fr) 115px;align-items:center;gap:8px}
body.v7-app .ui-multi-year-bars i{display:block;height:8px;border-radius:999px}
body.v7-app .ui-multi-year-bars b{text-align:right;color:var(--v7-muted);font-size:.7rem;font-weight:700;white-space:nowrap}
body.v7-app .ui-multi-year-legend .series-1::before,body.v7-app .ui-multi-year-bars .series-1 i{background:#1f6b43}
body.v7-app .ui-multi-year-legend .series-2::before,body.v7-app .ui-multi-year-bars .series-2 i{background:#6da659}
body.v7-app .ui-multi-year-legend .series-3::before,body.v7-app .ui-multi-year-bars .series-3 i{background:#d6a23f}
body.v7-app .ui-multi-year-legend .series-4::before,body.v7-app .ui-multi-year-bars .series-4 i{background:#6386a8}
body.v7-app .annual-chart-grid{align-items:start;margin-bottom:18px}
body.v7-app .annual-chart-grid>article{min-width:0;padding:14px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-green-50)}
body.v7-app .annual-chart-grid h3{margin:0 0 4px;font-size:1rem}
body.v7-app .annual-chart-grid p{margin:0 0 14px;color:var(--v7-muted);font-size:.82rem}
body.v7-app .settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px}
body.v7-app .settings-card{padding:17px;border:1px solid var(--v7-line);border-radius:12px;background:#fff}
body.v7-app .settings-card h2{margin:0 0 12px;font-size:1.05rem}
body.v7-app .settings-card .form-grid{grid-template-columns:repeat(auto-fit,minmax(145px,1fr))}
body.v7-app .checkbox-card{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--v7-line);border-radius:9px;background:var(--v7-green-50)}
body.v7-app .checkbox-card input{width:auto;min-height:auto;margin-top:3px}
body.v7-app .assignment-layout{display:grid;grid-template-columns:minmax(230px,320px) minmax(0,1fr);gap:18px}
body.v7-app .assignment-option{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--v7-line);border-radius:8px}
body.v7-app .assignment-option input{width:auto;min-height:auto;margin-top:3px}
body.v7-app .danger-zone{border-color:#e3aaa6;background:#fff8f7}
body.v7-app .health-ok{color:#176b35}.health-warning{color:#9a5c00}.health-error{color:#9a261d}
@media(max-width:1100px){body.v7-app .ui-content-grid>.span-8,body.v7-app .ui-content-grid>.span-4{grid-column:span 12}}
@media(max-width:820px){body.v7-app #main-content.app-page{margin-left:0;padding:16px}body.v7-app .assignment-layout{grid-template-columns:1fr}body.v7-app .ui-content-grid>.span-6{grid-column:span 12}}
@media(max-width:620px){body.v7-app .ui-bar-chart-row{grid-template-columns:1fr 72px}body.v7-app .ui-bar-chart-track{grid-column:1/-1;grid-row:2}body.v7-app .ui-bar-chart-row strong{grid-column:2;grid-row:1}body.v7-app :is(.ui-comparison-row,.ui-multi-year-row){grid-template-columns:1fr}body.v7-app :is(.ui-comparison-legend,.ui-multi-year-legend){justify-content:flex-start;flex-wrap:wrap}}
.maintenance-public-page{min-height:100vh;display:grid;place-items:center;margin:0;padding:24px;background:radial-gradient(circle at top,#f3f7ef,#dce8dc);font-family:system-ui,sans-serif;color:#173a27}
.maintenance-public-card{width:min(620px,100%);padding:clamp(28px,6vw,56px);text-align:center;border:1px solid #c8d7c9;border-radius:18px;background:#fff;box-shadow:0 24px 70px rgba(25,68,40,.15)}
.maintenance-public-card h1{font-size:clamp(1.7rem,5vw,2.7rem)}
body.v7-app .audit-json{max-width:620px;max-height:280px;overflow:auto;padding:10px;border-radius:8px;background:#17221b;color:#e7f3e9;font-size:.75rem;white-space:pre-wrap}
body.v7-app .reset-confirmation{display:block;max-width:360px;margin:20px 0}
body.v7-app .editor-panel>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer;list-style:none}
body.v7-app .editor-panel>summary span{color:var(--v7-muted);font-size:.82rem}
body.v7-app .editor-panel[open]>summary{margin-bottom:18px;padding-bottom:12px;border-bottom:1px solid var(--v7-line)}
body.v7-app .collaborator-form-sections{display:grid;gap:16px}
body.v7-app .collaborator-form-sections fieldset{margin:0;padding:14px;border:1px solid var(--v7-line);border-radius:10px}
body.v7-app .collaborator-form-sections legend{padding:0 7px;color:var(--v7-green-900);font-weight:750}
body.v7-app .row-editor[open]{position:fixed;z-index:100;inset:70px 3vw 3vh;padding:20px;overflow:auto;border:1px solid var(--v7-line);border-radius:14px;background:#fff;box-shadow:0 20px 70px rgba(0,0,0,.25)}
body.v7-app .checkbox-fieldset{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:210px;margin:0;padding:8px 10px;border:1px solid var(--v7-line);border-radius:8px}
body.v7-app .checkbox-fieldset legend{padding:0 5px;font-size:.78rem;font-weight:700;color:var(--v7-muted)}
body.v7-app .checkbox-fieldset .check{display:flex!important;flex-direction:row!important;align-items:center!important;gap:5px!important;margin:0}
body.v7-app .checkbox-fieldset input{width:auto!important;min-height:auto!important}
body.v7-app .monthly-matrix{min-width:1120px;font-size:.8rem}
body.v7-app .monthly-matrix th:first-child,body.v7-app .monthly-matrix td:first-child{position:sticky;left:0;z-index:2;background:#fff;min-width:190px}
body.v7-app .monthly-matrix thead th:first-child,body.v7-app .monthly-matrix tfoot th:first-child{background:var(--v7-green-50)}
body.v7-app .monthly-matrix .num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}

/* Laravel V9 — parité fonctionnelle des écrans historiques de gestion du temps. */
body.v7-app .timesheet-totals{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
body.v7-app .timesheet-totals>div{display:grid;gap:4px;padding:12px;border:1px solid var(--v7-line);border-radius:9px;background:var(--v7-green-50)}
body.v7-app .timesheet-totals span{font-size:.75rem;color:var(--v7-muted);text-transform:uppercase;letter-spacing:.04em}
body.v7-app .timesheet-totals strong{font-size:1.15rem;color:var(--v7-green-900)}
body.v7-app .controle-edit-grid{min-width:1500px}
body.v7-app .controle-edit-grid .col-day{min-width:150px}
body.v7-app .control-time-pairs{display:grid;gap:4px;margin:3px 0}
body.v7-app .control-time-pairs>span{display:grid;grid-template-columns:auto minmax(56px,1fr) auto minmax(56px,1fr);align-items:center;gap:3px}
body.v7-app .control-time-pairs input{width:100%;min-width:0;min-height:30px;padding:3px;font-size:.72rem}
body.v7-app .control-time-pairs b{font-weight:400;color:var(--v7-muted)}
body.v7-app .control-time-pairs .control-half-toggle{display:inline-flex;flex-direction:row;align-items:center;gap:2px;white-space:nowrap;font-size:.65rem;font-weight:800}
body.v7-app .control-time-pairs .control-half-toggle input{width:14px;min-height:14px;height:14px;margin:0;padding:0}
body.v7-app .control-hours-input{width:72px!important;min-width:0!important;min-height:32px!important;padding:4px 6px!important;text-align:right;font-variant-numeric:tabular-nums}
body.v7-app .btn-save-cell.control-save{position:static;margin-left:4px;border:1px solid var(--v7-green-600);background:var(--v7-green-50);color:var(--v7-green-800);cursor:pointer}
body.v7-app .col-project small{display:block;margin-top:3px;color:var(--v7-muted);font-weight:400}

/* Administration des collaborateurs : filtres, fiches imbriquees et historiques. */
body.v7-app .admin-list-filters{display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:12px!important}
body.v7-app .admin-list-filters .filter-fields{display:grid;grid-template-columns:minmax(240px,2fr) repeat(5,minmax(120px,1fr));gap:12px;align-items:end}
body.v7-app .admin-list-filters .filter-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
body.v7-app .row-actions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;white-space:nowrap}
body.v7-app .row-actions>form{display:inline-flex!important}
body.v7-app .row-editor>summary{cursor:pointer;color:var(--v7-green-700);font-weight:750}
body.v7-app .row-editor[open]{position:fixed;inset:72px 24px 24px calc(var(--v7-sidebar) + 24px);z-index:850;overflow:auto;padding:18px;border:1px solid var(--v7-line-strong);border-radius:14px;background:#fff;box-shadow:0 24px 80px rgba(18,60,37,.24);white-space:normal}
body.v7-app .row-editor[open]>summary{display:flex;justify-content:flex-end;margin-bottom:12px}
body.v7-app .row-editor-content{display:grid;gap:18px}
body.v7-app .embedded-admin-section{display:grid;gap:12px;padding:16px;border:1px solid var(--v7-line);border-radius:var(--v7-radius);background:var(--v7-green-50)}
body.v7-app .embedded-admin-section .table-wrap{background:#fff!important}
body.v7-app .period-form{grid-template-columns:minmax(150px,1fr) minmax(150px,1fr) minmax(260px,2fr) auto!important}
body.v7-app .contract-schedule{display:flex;flex-wrap:wrap;gap:4px 8px;min-width:220px}
body.v7-app .contract-schedule span{display:inline-flex;padding:3px 6px;border-radius:6px;background:var(--v7-green-50);white-space:nowrap;font-size:11px}
body.v7-app .team-managers{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px;color:var(--v7-muted);font-size:12px}

@media(max-width:1200px){
  body.v7-app .admin-list-filters .filter-fields{grid-template-columns:repeat(3,minmax(0,1fr))}
  body.v7-app .period-form{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@media(max-width:960px){
  body.v7-app .row-editor[open]{inset:68px 14px 14px 14px}
  body.v7-app .admin-list-filters .filter-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:620px){
  body.v7-app .admin-list-filters .filter-fields,
  body.v7-app .period-form{grid-template-columns:1fr!important}
  body.v7-app .admin-list-filters .filter-actions{justify-content:flex-start}
}
body.v7-app [data-heat-level="0"]{background:#f2f4f3;color:#66736b}
body.v7-app [data-heat-level="1"]{background:#edf6ed;color:#173a27}
body.v7-app [data-heat-level="2"]{background:#dcefd8;color:#173a27}
body.v7-app [data-heat-level="3"]{background:#c5e3bd;color:#173a27}
body.v7-app [data-heat-level="4"]{background:#9dcc91;color:#173a27}
body.v7-app [data-heat-level="5"]{background:#72b06b;color:#fff}
body.v7-app [data-heat-level="6"]{background:#4b9253;color:#fff}
body.v7-app [data-heat-level="7"]{background:#2f7745;color:#fff}
body.v7-app [data-heat-level="8"]{background:#1c5d38;color:#fff}
body.v7-app .weekly-workload-table{min-width:900px}
body.v7-app .alert.error ul{margin:8px 0 0;padding-left:20px;max-height:260px;overflow:auto}

/* Laravel V10 — filtres compacts, export transversal et mise en page legacy. */
body.v7-app .erp-page-context{display:flex;align-items:center;justify-content:space-between;gap:12px}
body.v7-app .erp-page-export-actions{display:inline-flex;align-items:center;gap:5px}
body.v7-app .erp-quick-export{display:inline-flex;align-items:center;gap:5px;min-height:28px!important;padding:5px 9px;border:1px solid rgba(255,255,255,.32);border-radius:6px;background:transparent;color:inherit;text-decoration:none;font:inherit;font-size:12px;font-weight:750;white-space:nowrap;cursor:pointer}
body.v7-app .erp-quick-export:hover{background:rgba(255,255,255,.12)}
body.v7-app .controle-heures-page .controle-grid-panel{overflow:visible!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}
body.v7-app .controle-heures-page .control-hours-input{background:#fffef5!important;border:1px solid #b9cbbd!important;border-radius:6px!important;color:#173a27;font-weight:750}
body.v7-app .controle-heures-page .control-hours-input:focus{outline:2px solid rgba(47,125,74,.25);border-color:#2f7d4a!important}
body.v7-app .controle-heures-page .control-save{width:28px;height:28px;min-height:28px!important;padding:0!important;border-radius:50%!important}
body.v7-app.page-activities .day-nav{padding:10px 14px;border:1px solid var(--v7-line);border-radius:12px;background:var(--v7-green-50)}
body.v7-app.page-activities .day-nav .day-arrow:not(.disabled){border-color:var(--v7-green-600);box-shadow:0 3px 9px rgba(28,85,50,.12)}
body.v7-app .advanced-export-form{display:grid!important;gap:16px;padding:18px}
body.v7-app .advanced-export-form .export-primary-filters{display:flex!important;align-items:flex-end;gap:12px;flex-wrap:wrap}
body.v7-app .advanced-export-form .export-primary-filters>label{flex:0 1 175px;min-width:145px!important;max-width:210px!important;width:100%}
body.v7-app .advanced-export-form .export-primary-filters>.field-dataset{flex-basis:270px;max-width:360px!important}
body.v7-app .advanced-export-form .export-primary-filters>.field-search{flex:1 1 240px;max-width:420px!important}
body.v7-app .advanced-export-form .export-primary-filters>:is(.field-date,.field-compact){flex-basis:145px;max-width:175px!important}
body.v7-app .advanced-export-form :is(input:not([type="checkbox"]),select:not([multiple])){width:100%;min-height:40px}
body.v7-app .export-filter-details{border:1px solid var(--v7-line);border-radius:10px;background:#fff}
body.v7-app .export-filter-details>summary{cursor:pointer;padding:11px 14px;background:var(--v7-green-50);color:var(--v7-green-900);font-weight:800}
body.v7-app .export-multi-filters{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start!important;gap:12px!important;padding:14px}
body.v7-app .export-multi-filters>label{min-width:0!important;max-width:none!important;width:100%}
body.v7-app .export-multi-filters select[multiple]{width:100%;min-height:118px;padding:5px}
body.v7-app .filter-hint{margin:0;padding:0 14px 12px;color:var(--v7-muted);font-size:.78rem}
body.v7-app .export-grouping-options{display:flex;align-items:center;gap:9px 14px;flex-wrap:wrap;margin:0;padding:13px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-green-50)}
body.v7-app .export-grouping-options legend{padding:0 6px;color:var(--v7-green-900);font-weight:800}
body.v7-app .export-grouping-options .check{display:inline-flex!important;flex-direction:row!important;align-items:center;gap:6px;margin:0;white-space:nowrap}
body.v7-app .export-grouping-options input{width:auto!important;min-height:auto!important}
body.v7-app .export-columns{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;margin:0;padding:13px;border:1px solid var(--v7-line);border-radius:10px}
body.v7-app .export-columns legend{padding:0 6px;color:var(--v7-green-900);font-weight:800}
body.v7-app .export-columns .check{display:inline-flex!important;flex-direction:row!important;align-items:center;gap:5px;margin:0;white-space:nowrap}
body.v7-app .export-columns input{width:auto!important;min-height:auto!important}
body.v7-app .export-footer-controls{display:flex!important;align-items:flex-end!important;gap:12px!important;flex-wrap:wrap!important}
body.v7-app .export-footer-controls>label{flex:0 1 190px!important;min-width:150px!important;max-width:220px!important}
body.v7-app .export-footer-controls .filter-actions{margin-left:auto!important}
body.v7-app .export-preview{padding:0;overflow:hidden}
body.v7-app .export-preview>.section-head{padding:15px 18px;border-bottom:1px solid var(--v7-line);background:var(--v7-green-50)}
body.v7-app .export-preview table{font-size:.8rem;white-space:nowrap}
body.v7-app .export-preview td{max-width:320px;overflow:hidden;text-overflow:ellipsis}
body.v7-app .export-preview .export-total-row td{border-top:2px solid var(--v7-green-600);background:var(--v7-green-50);color:var(--v7-green-900);font-weight:850}
@media(max-width:1100px){body.v7-app .export-multi-filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){body.v7-app .advanced-export-form .export-primary-filters>label{flex:1 1 calc(50% - 6px);max-width:none!important}body.v7-app .export-multi-filters{grid-template-columns:1fr}body.v7-app .export-footer-controls>*{flex:1 1 100%!important;max-width:none!important}body.v7-app .erp-quick-export{display:none}}
@media(max-width:480px){body.v7-app .advanced-export-form .export-primary-filters>label{flex-basis:100%}}
@media print{
  @page{size:landscape;margin:10mm}
  body.v7-app{background:#fff!important;color:#111!important}
  body.v7-app :is(.odoo-topbar,.environment-banner,.erp-menu-backdrop,.skip-link,.filter-panel,.hours-summary-filter-panel,.ch-filter-panel,.advanced-export-form,.pagination,.actions,.page-heading-actions,.bulk-actions-bar,.bulk-sheet-validation){display:none!important}
  body.v7-app #main-content.app-page{display:block!important;width:100%!important;margin:0!important;padding:0!important;overflow:visible!important}
  body.v7-app #main-content.app-page>*{margin:0 0 8mm!important;break-inside:auto}
  body.v7-app :is(.panel,.card){border:1px solid #bbb!important;box-shadow:none!important;background:#fff!important}
  body.v7-app .table-wrap,body.v7-app .ch-table-wrap{max-height:none!important;overflow:visible!important}
  body.v7-app table{width:100%!important;min-width:0!important;font-size:8pt!important}
  body.v7-app tr{break-inside:avoid}
  body.v7-app a{color:#111!important;text-decoration:none!important}
}

/* Le composant de filtres courant vit désormais dans resources/frontend/css/filters.css. */

/* Les formulaires CRUD courants vivent désormais dans editors.css. */

body.v7-app .erp-main-menu .erp-menu-panel a.active,
body.v7-app .erp-main-menu .erp-menu-panel a[aria-current="page"]{background:#e7efe9!important;color:var(--v7-green-900)!important;font-weight:800!important}
body.v7-app .controle-heures-page table.controle-grid .col-day,
body.v7-app .controle-heures-page table.controle-edit-grid .col-day{width:200px!important;min-width:200px!important}
body.v7-app .controle-heures-page .control-time-pairs{width:100%;gap:5px}
body.v7-app .controle-heures-page .control-time-pairs>span{grid-template-columns:20px 72px 8px 72px;justify-content:center;gap:4px}
body.v7-app .controle-heures-page .control-time-pairs input[type="time"]{width:72px!important;min-width:72px!important;padding:3px 2px!important;font-size:.72rem!important;font-variant-numeric:tabular-nums}
body.v7-app.page-activities .activity-day-group{padding:14px!important;overflow:hidden!important}
body.v7-app.page-activities .activity-day-group .section-head{min-height:38px;margin:0;padding:0 0 10px}
body.v7-app.page-activities .activity-lines-table{width:100%!important;min-width:900px!important;table-layout:fixed!important}
body.v7-app.page-activities .activity-lines-table .activity-col-project{width:25%}
body.v7-app.page-activities .activity-lines-table .activity-col-task{width:30%}
body.v7-app.page-activities .activity-lines-table .activity-col-hours{width:9%}
body.v7-app.page-activities .activity-lines-table .activity-col-status{width:10%}
body.v7-app.page-activities .activity-lines-table .activity-col-comment{width:18%}
body.v7-app.page-activities .activity-lines-table .activity-col-action{width:8%}
body.v7-app.page-activities .activity-lines-table :is(th,td){text-align:left!important;vertical-align:middle!important}
body.v7-app.page-activities .activity-lines-table td{overflow:hidden;text-overflow:ellipsis}
body.v7-app .contract-hourly-rule{margin:12px 0 0;padding:10px 12px;border-left:4px solid var(--v7-green-600);border-radius:7px;background:var(--v7-green-50);color:var(--v7-green-900);font-size:.78rem;font-weight:700}

/* Laravel V15 — rythme vertical unique et pagination réellement accolée. */
body.v7-app #main-content{--v7-entity-gap:var(--v7-space-4)}
body.v7-app:not(.report-spacing) #main-content > :not(.page-head):not(.page-heading) + *:not(.table-pager){margin-top:var(--v7-entity-gap)!important}
body.v7-app:not(.report-spacing) #main-content > :is(.table-frame,.table-wrap,.table-responsive,.data-table-wrapper,.v7-table-wrap,.ch-table-wrap) + .table-pager{margin-top:-1px!important}
body.v7-app:not(.report-spacing) #main-content > .table-pager + *{margin-top:var(--v7-entity-gap)!important}
body.v7-app :is(.stats-dashboard-grid,.ui-content-grid,.budget-chart-grid,.budget-comparison-grid){gap:var(--v7-entity-gap,18px)!important}
body.v7-app:not(.report-spacing) :is(.stats-section,.analysis-section,.activity-day-group,.recap-section) + :is(.stats-section,.analysis-section,.activity-day-group,.recap-section){margin-top:var(--v7-entity-gap,18px)!important}

/* Laravel V17 — première colonne du contrôle des heures entièrement à gauche. */
body.v7-app .controle-heures-page table.controle-grid :is(th,td):first-child{padding-left:10px!important;text-align:left!important}
body.v7-app .controle-heures-page table.controle-grid .collab-head{justify-content:flex-start!important;text-align:left!important}
body.v7-app .controle-heures-page table.controle-grid .col-project small{display:block!important;margin:2px 0 0!important;text-align:left!important}

/* Laravel V18 — les trois indicateurs de budget restent sur une seule ligne. */
body.v7-app.page-budgets-heures .budget-chart-grid{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;align-items:stretch!important;gap:var(--v7-entity-gap,18px)!important}
body.v7-app.page-budgets-heures .budget-chart-grid>article{height:100%!important;min-height:220px!important;margin:0!important}
@media(max-width:820px){body.v7-app.page-budgets-heures .budget-chart-grid{grid-template-columns:1fr!important}}

/* ==========================================================================
   Formulaires d’édition CRUD
   Source unique des composants <x-editor-panel>, .entity-form et grilles
   internes. Les priorités explicites restantes compensent uniquement des
   règles historiques globales encore présentes dans core.css/compatibility.css.
   ========================================================================== */

body.v7-app .entity-editor {
  min-width: 0;
}
body.v7-app .entity-editor.panel {
  padding: 0 !important;
  overflow: hidden !important;
}
body.v7-app .entity-editor-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 48px;
  padding: 12px 16px;
  cursor: pointer;
  list-style: none;
  color: var(--v7-green-900);
  background: var(--v7-green-50);
  font-size: 13px;
  font-weight: 800;
}
body.v7-app .entity-editor-summary::-webkit-details-marker { display: none; }
body.v7-app .entity-editor-title::before {
  display: inline-block;
  width: 1em;
  margin-right: 7px;
  content: "\203A";
  transition: transform .16s ease;
}
body.v7-app .entity-editor[open] > .entity-editor-summary {
  border-bottom: 1px solid var(--v7-line);
}
body.v7-app .entity-editor[open] > .entity-editor-summary .entity-editor-title::before {
  transform: rotate(90deg);
}
body.v7-app .entity-editor-description {
  color: var(--v7-muted);
  font-size: 12px;
  font-weight: 550;
  text-align: right;
}
body.v7-app .entity-editor-body { padding: 16px; }

/* La grille 12 colonnes reste prioritaire pour reproduire le contrat actuel. */
body.v7-app .entity-form {
  display: grid !important;
  grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
  gap: 14px 16px !important;
  align-items: end !important;
}
body.v7-app .entity-form > :is(label,fieldset) {
  grid-column: span 3;
  width: 100%;
  min-width: 0;
  margin: 0;
}
body.v7-app .entity-form > .field-short { grid-column: span 2; }
body.v7-app .entity-form > :is(.field-wide,.field-description) { grid-column: span 6; }
body.v7-app .entity-form > :is(.field-full,.checkbox-fieldset,.form-actions) { grid-column: 1 / -1; }
body.v7-app .entity-form textarea { min-height: 76px; }

/* Feuille de temps : sections espacées et statut sur une seule ligne. */
body.v7-app.page-timesheet #timesheet-form > fieldset.ui-fieldset-reset {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--v7-space-4, 18px);
  min-width: 0;
}
body.v7-app.page-timesheet #timesheet-form .readonly-status {
  flex-direction: row;
  align-items: center;
  justify-content: flex-start;
  align-self: end;
  gap: 8px;
  min-height: var(--v7-control, 40px);
  padding: 6px 10px;
}
body.v7-app.page-timesheet #timesheet-form .readonly-status > strong {
  display: flex;
  align-items: center;
}

body.v7-app .entity-form :is(.check,.checkbox-card) {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: flex-start;
  gap: 7px !important;
  min-height: var(--v7-control);
}
body.v7-app .entity-form :is(.check,.checkbox-card) input {
  flex: 0 0 auto;
  width: auto;
  min-height: auto;
  margin: 0;
}
body.v7-app .entity-form > .form-actions {
  align-items: center;
  padding-top: 14px;
  border-top: 1px solid var(--v7-line);
}

/* Édition en ligne ouverte dans une fenêtre interne. */
body.v7-app .entity-row-editor > .entity-editor-summary {
  min-height: auto;
  padding: 0;
  color: var(--v7-green-700);
  background: transparent;
}
body.v7-app .entity-row-editor > .entity-editor-summary .entity-editor-title::before { display: none; }
body.v7-app .entity-row-editor[open] {
  position: fixed;
  z-index: 900;
  inset: 72px 24px 24px calc(var(--v7-sidebar) + 24px);
  overflow: auto;
  padding: 0;
  border: 1px solid var(--v7-line-strong);
  border-radius: 14px;
  background: #fff;
  box-shadow: 0 24px 80px rgba(18,60,37,.24);
  white-space: normal;
}
body.v7-app .entity-row-editor[open] > .entity-editor-summary {
  position: sticky;
  z-index: 2;
  top: 0;
  min-height: 48px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--v7-line);
  background: var(--v7-green-50);
}
body.v7-app .entity-row-editor[open] > .entity-editor-summary .entity-editor-title::after {
  margin-left: 9px;
  color: var(--v7-muted);
  content: "\2014 fermer";
  font-size: 11px;
  font-weight: 600;
}

body.v7-app .form-section-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 14px 16px;
  align-items: end;
}
body.v7-app .form-section-grid > label { grid-column: span 3; }
body.v7-app .form-section-grid > .field-short { grid-column: span 2; }
body.v7-app .form-section-grid > .field-wide { grid-column: span 6; }
body.v7-app .form-section-grid > .field-full { grid-column: 1 / -1; }
body.v7-app .entity-inline-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 7px;
  white-space: nowrap;
}
body.v7-app .entity-inline-actions > form { display: inline-flex; margin: 0; }

/* Les retours d’enregistrement restent dans le flux près de l’action utilisée. */
body.v7-app .alert.success[data-action-feedback] {
  color: var(--v7-green-900);
  box-shadow: inset 4px 0 0 var(--v7-green-600), var(--v7-shadow);
}
body.v7-app .action-feedback-inline {
  position: static;
  grid-column: 1 / -1;
  flex: 1 1 100%;
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  max-width: 100%;
  max-height: min(45vh, 24rem);
  margin: 0 0 12px;
  overflow: auto;
  overflow-wrap: anywhere;
  white-space: normal;
  scroll-margin-top: 96px;
}
body.v7-app .action-feedback-floating {
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 1100;
  box-sizing: border-box;
  width: 560px;
  min-width: 0;
  max-width: min(560px, calc(100vw - 32px));
  max-height: min(45vh, 24rem);
  overflow: auto;
  overflow-wrap: anywhere;
  overscroll-behavior: contain;
  white-space: normal;
  box-shadow: var(--v7-shadow);
}
body.v7-app .action-feedback-inline[hidden],
body.v7-app .action-feedback-floating[hidden] { display: none; }
body.v7-app .alert.action-feedback-inline .errors,
body.v7-app .alert.action-feedback-floating .errors {
  max-height: none;
  overflow: visible;
}
body.v7-app .action-feedback-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}
body.v7-app .action-feedback-header > :first-child { min-width: 0; }
body.v7-app .action-feedback-dismiss {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 30px;
  min-width: 30px;
  height: 30px;
  min-height: 30px;
  padding: 3px;
  border: 1px solid currentColor;
  border-radius: 6px;
  background: transparent;
  color: inherit;
  line-height: 1;
}
body.v7-app .action-feedback-inline > .action-feedback-dismiss,
body.v7-app .action-feedback-floating > .action-feedback-dismiss {
  float: right;
  margin: -4px -6px 4px 12px;
}
body.v7-app #main-content .action-error-field {
  /* Les champs du contrôle des heures imposent déjà une bordure prioritaire. */
  border-color: var(--v7-danger) !important;
  outline: 2px solid var(--v7-danger);
  outline-offset: 2px;
  scroll-margin-top: 96px;
  scroll-margin-bottom: 24px;
}
body.v7-app .action-error-link {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}
body.v7-app .action-feedback-inline:focus-visible,
body.v7-app .action-feedback-floating:focus-visible,
body.v7-app .action-error-link:focus-visible,
body.v7-app .action-feedback-dismiss:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}
@media print {
  body.v7-app .action-feedback-floating { display: none; }
}

body.v7-app .menu-order-list { display: grid; gap: 8px; margin: 12px 0 0; padding: 0; list-style: none; }
body.v7-app .menu-order-item {
  display: grid;
  grid-template-columns: 2rem minmax(0, 1fr) auto;
  gap: 12px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--v7-line);
  border-radius: var(--v7-radius-sm);
}
body.v7-app .menu-order-position { color: var(--v7-muted); text-align: center; font-variant-numeric: tabular-nums; }
body.v7-app .menu-order-label { min-width: 0; font-weight: 700; overflow-wrap: anywhere; }
body.v7-app .menu-order-controls { display: flex; gap: 8px; }
body.v7-app .menu-order-status { min-height: 1.5em; margin: 0; }

@media (max-width: 1200px) {
  body.v7-app .entity-form > :is(label,fieldset),
  body.v7-app .form-section-grid > label { grid-column: span 4; }
  body.v7-app .entity-form > :is(.field-wide,.field-description),
  body.v7-app .form-section-grid > .field-wide { grid-column: span 8; }
}
@media (max-width: 960px) {
  body.v7-app .entity-form > :is(label,fieldset,.field-wide,.field-description),
  body.v7-app .form-section-grid > :is(label,.field-wide) { grid-column: span 6; }
  body.v7-app .entity-row-editor[open] { inset: 68px 14px 14px; }
}
@media (max-width: 620px) {
  body.v7-app .menu-order-item { grid-template-columns: 2rem minmax(0, 1fr); }
  body.v7-app .menu-order-controls { grid-column: 1 / -1; justify-content: flex-end; }
  body.v7-app .menu-order-controls > button { flex: 1 1 0; min-height: 44px; }
  body.v7-app .entity-editor-summary {
    align-items: flex-start;
    flex-direction: column;
  }
  body.v7-app .entity-editor-description {
    padding-left: 23px;
    text-align: left;
  }
  body.v7-app .entity-form > :is(label,fieldset,.field-wide,.field-description),
  body.v7-app .form-section-grid > :is(label,.field-wide) { grid-column: 1 / -1; }
  body.v7-app .entity-form > .form-actions {
    align-items: stretch;
    flex-direction: column-reverse;
  }
  body.v7-app .entity-form > .form-actions > * {
    width: 100%;
    text-align: center;
  }
}
/* ========================================================================== */
/* Filtres applicatifs                                                        */
/* Source unique du composant Blade <x-filter-bar>.                           */
/* Les anciennes couches V7.10/V7.17/V11 ont été retirées en v64.            */
/* ========================================================================== */

/* Le composant est un <details class="panel uniform-filter-panel">. La règle
   générique .panel du thème impose padding/overflow en !important ; seules ces
   deux propriétés ont donc encore besoin d'une priorité explicite ici. */
body.v7-app details.uniform-filter-panel {
  padding: 0 !important;
  overflow: hidden !important;
}

body.v7-app .uniform-filter-summary {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  min-height: 50px;
  margin: 0;
  padding: 10px 14px;
  border: 0;
  border-radius: var(--v7-radius);
  background: var(--v7-green-50);
  color: var(--v7-green-900);
  cursor: pointer;
  list-style: none;
}
body.v7-app .uniform-filter-summary::-webkit-details-marker { display: none; }
body.v7-app .uniform-filter-summary::marker { content: ""; }
body.v7-app .uniform-filter-heading {
  margin: 0;
  color: var(--v7-green-900);
  font-size: 15px;
  font-weight: 800;
  line-height: 1.25;
}
body.v7-app .uniform-filter-state {
  min-width: 0;
  overflow: hidden;
  color: var(--v7-muted);
  font-size: 12px;
  font-weight: 600;
  text-align: right;
  text-overflow: ellipsis;
  white-space: nowrap;
}
body.v7-app .uniform-filter-summary::after {
  content: "";
  width: 9px;
  height: 9px;
  margin: 0 4px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg) translateY(-2px);
  transition: transform .18s ease;
}
body.v7-app details.uniform-filter-panel[open] > .uniform-filter-summary {
  border-bottom: 1px solid var(--v7-line);
  border-radius: var(--v7-radius) var(--v7-radius) 0 0;
}
body.v7-app details.uniform-filter-panel[open] > .uniform-filter-summary::after {
  transform: rotate(225deg) translate(-2px, -2px);
}

body.v7-app .uniform-filter-body { padding: 14px 16px 16px; }
body.v7-app .uniform-filter-fields {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 12px 14px;
  width: 100%;
  margin: 0;
}
body.v7-app .uniform-filter-grid {
  display: flex;
  flex: 1 1 680px;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 12px 14px;
  min-width: 0;
}
body.v7-app .uniform-filter-grid > label {
  flex: 0 1 220px;
  width: auto;
  min-width: 155px !important;
  max-width: 280px;
  margin: 0;
}
body.v7-app .uniform-filter-grid > label.field-short,
body.v7-app .uniform-filter-grid > label:has(input[type="date"]),
body.v7-app .uniform-filter-grid > label:has(input[type="month"]),
body.v7-app .uniform-filter-grid > label:has(input[type="time"]),
body.v7-app .uniform-filter-grid > label:has(input[type="number"]) {
  flex-basis: 165px;
  max-width: 190px;
}
body.v7-app .uniform-filter-grid > label.field-wide,
body.v7-app .uniform-filter-grid > label:has(input[type="search"]),
body.v7-app .uniform-filter-grid > label:has(select[multiple]) {
  flex-basis: 285px;
  max-width: 380px;
}
body.v7-app .uniform-filter-fields :is(input:not([type="checkbox"]):not([type="radio"]), select:not([multiple])) {
  width: 100%;
  min-height: 40px;
}
body.v7-app .uniform-filter-fields select[multiple] {
  width: 100%;
  min-height: 112px;
  padding: 5px 7px;
}
body.v7-app .uniform-filter-fields label > small {
  min-height: 0;
  color: var(--v7-muted);
  font-size: 11px;
  line-height: 1.3;
}
body.v7-app .uniform-filter-fields > .uniform-filter-actions {
  flex: 0 0 auto;
  align-self: flex-end;
  margin: 0 0 1px auto;
  padding: 0;
  /* .filter-actions historique est encore !important dans core.css ;
     ce composant utilise sa classe dédiée pour rester isolé. */
  align-items: center !important;
  justify-content: flex-start !important;
}
body.v7-app .export-builder-panel > .uniform-filter-body { padding: 0; }

/* Absences : les critères et les actions partagent une ligne sur grand écran. */
body.v7-app .absence-filter-form .uniform-filter-fields {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
}
body.v7-app .absence-filter-form .uniform-filter-grid {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
}
body.v7-app.page-absences .absence-filter-form .uniform-filter-grid > label {
  min-width: 0 !important;
  max-width: none;
}
@media (max-width: 1399px) {
  body.v7-app .absence-filter-form .uniform-filter-fields {
    grid-template-columns: minmax(0, 1fr);
  }
  body.v7-app .absence-filter-form .uniform-filter-grid {
    grid-auto-flow: row;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 600px) {
  body.v7-app .absence-filter-form .uniform-filter-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Synthèse et balance : mêmes lignes pour les libellés et le haut des champs,
   même quand un champ contient une liste multiple ou une aide sur deux lignes. */
body.v7-app .report-aligned-filters .uniform-filter-fields {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  align-items: start;
  gap: 16px;
}
body.v7-app .report-aligned-filters .uniform-filter-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(155px, 1fr));
  align-items: start;
  gap: 16px 20px;
}
body.v7-app .report-aligned-filters .uniform-filter-grid > label {
  display: grid;
  grid-template-rows: minmax(2.6em, auto) auto auto;
  align-content: start;
  gap: 6px;
  width: 100%;
  max-width: none;
}
body.v7-app .report-aligned-filters .report-filter-label {
  display: flex;
  align-items: flex-end;
  line-height: 1.3;
}
body.v7-app .report-aligned-filters .uniform-filter-grid :is(input:not([type="hidden"]), select:not([multiple])) {
  height: 42px;
}
body.v7-app .report-aligned-filters .uniform-filter-grid select[multiple] {
  height: 152px;
}
body.v7-app .report-aligned-filters .uniform-filter-fields > .uniform-filter-actions {
  justify-self: end;
  margin: 0;
}
@media (max-width: 1199px) {
  body.v7-app .report-aligned-filters .uniform-filter-grid {
    grid-template-columns: repeat(2, minmax(155px, 1fr));
  }
}
@media (max-width: 600px) {
  body.v7-app .report-aligned-filters .uniform-filter-grid {
    grid-template-columns: minmax(155px, 1fr);
  }
}

@media (max-width: 760px) {
  body.v7-app .uniform-filter-summary {
    grid-template-columns: minmax(0, 1fr) auto;
  }
  body.v7-app .uniform-filter-state { display: none; }
  body.v7-app .uniform-filter-grid { flex-basis: 100%; }
  body.v7-app .uniform-filter-grid > label {
    flex: 1 1 calc(50% - 7px);
    max-width: none;
  }
}
@media (max-width: 520px) {
  body.v7-app .uniform-filter-grid > label,
  body.v7-app .uniform-filter-fields > .uniform-filter-actions {
    flex-basis: 100%;
    width: 100%;
    max-width: none;
  }
  body.v7-app .uniform-filter-fields > .uniform-filter-actions > * { flex: 1 1 auto !important; }
}
@media print {
  body.v7-app .uniform-filter-panel { display: none !important; }
}
/*
 * Tableaux de données et pagination.
 *
 * Ce module remplace les couches historiques V14/V16. Les anciens noms de
 * conteneurs restent pris en charge afin que les vues puissent être migrées
 * progressivement sans changer leur rendu.
 */
body.v7-app table :is(th,td),
body.v7-app table :is(.numeric,.num,.text-right){text-align:left}
body.v7-app :is(.table-frame,.table-wrap,.table-responsive,.data-table-wrapper,.v7-table-wrap,.ch-table-wrap){width:100%;max-width:100%;margin:0;padding:0;overflow:auto!important;border:1px solid var(--v7-line-strong)!important;border-radius:10px;background:#fff!important;box-shadow:none}
body.v7-app #main-content table{margin:0;border:0;border-radius:0;background:#fff}
body.v7-app #main-content table thead tr,
body.v7-app #main-content table thead th{color:#fff!important;background:var(--v7-green-700)!important;border-color:var(--v7-green-800)!important;font-weight:800!important;vertical-align:middle}
body.v7-app #main-content table thead th:first-child{border-top-left-radius:9px}
body.v7-app #main-content table thead th:last-child{border-top-right-radius:9px}
body.v7-app #main-content table thead th.is-sortable{padding:0!important}
body.v7-app .table-sort-button{display:flex!important;align-items:center;justify-content:space-between!important;gap:8px!important;width:100%;min-height:38px;margin:0;padding:9px 12px;border:0!important;border-radius:0!important;background:transparent!important;color:inherit;font:inherit!important;font-weight:inherit;text-align:left;box-shadow:none;filter:none;cursor:pointer}
body.v7-app .table-sort-button:hover,
body.v7-app .table-sort-button:focus-visible{background:rgba(255,255,255,.12);outline:none}
body.v7-app .table-sort-indicator{flex:0 0 auto;opacity:.62;color:inherit;font-size:11px}
body.v7-app th[aria-sort="ascending"] .table-sort-indicator,
body.v7-app th[aria-sort="descending"] .table-sort-indicator{opacity:1;font-weight:900}
body.v7-app table .sort-link::after{margin-left:6px;content:"↕";opacity:.7;font-size:10px}
body.v7-app .table-page-hidden{display:none}
body.v7-app .table-pager{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;gap:14px;width:100%;min-width:0;margin:-1px 0 0;padding:8px 12px;overflow-x:auto;border:1px solid var(--v7-line-strong);border-radius:0 0 10px 10px;background:var(--v7-green-50);white-space:nowrap}
body.v7-app :is(.table-frame,.table-wrap,.table-responsive,.data-table-wrapper,.v7-table-wrap,.ch-table-wrap):has(+.table-pager){border-radius:10px 10px 0 0}
body.v7-app:not(.report-spacing) #main-content > :is(.table-frame,.table-wrap,.table-responsive,.data-table-wrapper,.v7-table-wrap,.ch-table-wrap) + .table-pager,
body.v7-app :is(.panel,.card,.box,.content-card,.dashboard-card,.ds-card) > :is(.table-frame,.table-wrap,.table-responsive,.data-table-wrapper,.v7-table-wrap,.ch-table-wrap) + .table-pager{margin-top:-1px}
body.v7-app .table-pager:last-child{margin-bottom:0}
body.v7-app .table-pager-summary{flex:1 1 auto;min-width:max-content!important;margin:0;color:var(--v7-muted);font-size:12px;font-weight:650}
body.v7-app .table-page-size{display:inline-flex;flex:0 0 auto;flex-direction:row;align-items:center;gap:7px;margin:0;color:var(--v7-green-900);font-size:12px;font-weight:750;white-space:nowrap}
body.v7-app .table-page-size select{width:72px;min-width:72px!important;height:34px;min-height:34px!important;padding:4px 24px 4px 8px!important}
body.v7-app .table-pagination{display:flex;flex:0 0 auto;flex-flow:row nowrap;align-items:center;justify-content:flex-end;gap:5px;margin:0;white-space:nowrap}
body.v7-app .table-pagination .pagination-link{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;margin:0;padding:4px 9px;border:1px solid var(--v7-line-strong)!important;border-radius:5px!important;color:var(--v7-green-800);background:#fff;font:inherit;font-weight:800;text-decoration:none;cursor:pointer}
body.v7-app .table-pagination .pagination-link:hover:not(.disabled){color:#fff;background:var(--v7-green-700)}
body.v7-app .table-pagination .pagination-link.disabled,
body.v7-app .table-pagination .pagination-link:disabled{opacity:.42!important;cursor:not-allowed}
body.v7-app .table-pagination :is(.page-indicator,.table-page-indicator){min-width:92px!important;color:var(--v7-green-900)!important;font-size:12px;font-weight:750;text-align:center;white-space:nowrap}

body.v7-app .table-shell{width:100%;max-width:100%;margin:0;overflow:hidden;border:1px solid var(--v7-line-strong);border-radius:10px;background:#fff;box-shadow:none}
body.v7-app .table-shell>.table-frame{margin:0;border:0!important;border-radius:0}
body.v7-app .table-shell>.table-pager{margin:0;border:0;border-top:1px solid var(--v7-line-strong);border-radius:0;box-shadow:none}

@media print{
  body.v7-app .table-pager{display:none}
  body.v7-app .table-page-hidden{display:table-row}
}

/* Pagination historique encore utilisée par quelques vues sans table-pager. */
body.v7-app .pagination{display:flex!important;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;margin:16px 0 6px}
body.v7-app .pagination-link{display:inline-grid;place-items:center;min-width:34px!important;height:34px;padding:0 9px;border:1px solid var(--v7-line);border-radius:8px;background:#fff;color:var(--v7-green-800)!important;text-decoration:none}
body.v7-app .pagination-link.active{background:var(--v7-green-700);color:#fff!important;border-color:var(--v7-green-700)}
body.v7-app .pagination-link.disabled{opacity:.45;pointer-events:none}
/* Laravel V28 — synthèses hiérarchiques collaborateurs / projets / tâches. */
.page-export-center .export-summary-table .summary-hours {
  text-align: right !important;
  white-space: nowrap;
  width: 160px;
  font-variant-numeric: tabular-nums;
}
.page-export-center .export-summary-table .export-collaborator-total > :is(th, td) {
  background: #edf5ef !important;
  border-top: 2px solid #cadccd;
  padding-top: 13px;
  padding-bottom: 13px;
}
.page-export-center .export-collaborator-total small {
  display: block;
  font-weight: 400;
  margin-top: 3px;
}
.page-export-center .export-summary-table .export-summary-detail > td:first-child {
  padding-left: 32px !important;
}
.page-export-center .export-summary-table .export-total-row > :is(th, td) {
  background: #e0eee3 !important;
  border-top: 2px solid #9fbea7;
  font-weight: 700;
}

/* v33 : matrice annuelle, noms à gauche et douze mois toujours présents. */
body.v7-app .collaborator-monthly-matrix table{min-width:1180px!important;width:100%!important;font-variant-numeric:tabular-nums}
body.v7-app .collaborator-monthly-matrix table :is(th,td){white-space:nowrap!important}
body.v7-app .collaborator-monthly-matrix table :is(th,td):not(:first-child){text-align:right!important;min-width:72px}
body.v7-app .collaborator-monthly-matrix table th:first-child{position:sticky;left:0;z-index:1;min-width:205px;max-width:340px;white-space:normal!important;text-align:left!important;box-shadow:1px 0 0 var(--v7-line-strong)}
body.v7-app .collaborator-monthly-matrix tbody th{background:#fff!important;color:var(--v7-green-900)!important;font-weight:650}
body.v7-app .collaborator-monthly-matrix thead th:first-child{z-index:3}
body.v7-app .collaborator-monthly-matrix tfoot th{background:var(--v7-green-50)!important;color:var(--v7-green-900)!important;font-weight:850;border-top:2px solid var(--v7-green-600)!important}
body.v7-app .collaborator-monthly-matrix table .monthly-total{border-left:2px solid var(--v7-green-600)!important;font-weight:850}
body.v7-app .collaborator-monthly-matrix :is(tbody,tfoot) .monthly-total{background:var(--v7-green-50)!important;color:var(--v7-green-900)!important}

/* Affectations multi-équipes : cartes lisibles et action d’enregistrement au-dessus de la liste. */
body.v7-app form#assignment-form .assignment-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 190px), 1fr)) !important;
}
body.v7-app form#assignment-form .assignment-savebar-top {
    position: static;
    margin: 0 0 12px;
    border: 1px solid var(--v7-line);
}
body.v7-app form#assignment-form .assignment-savebar-top > div {
    display: grid; gap: 5px; min-width: 0;
}
body.v7-app form#assignment-form .assignment-savebar-top small { font-size: 12px; }
body.v7-app form#assignment-form .assignment-option:has(input:disabled) { opacity: .65; }
body.v7-app form#assignment-form .assignment-option small { overflow-wrap: anywhere; }
@media (max-width: 600px) {
    body.v7-app form#assignment-form .assignment-grid { grid-template-columns: 1fr !important; }
}


/* Statistiques — grille dédiée au composant <x-filter-bar>. */
body.page-statistics.v7-app .statistics-filters .uniform-filter-fields {
  display: block;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-grid {
  display: grid;
  width: 100%;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px 20px;
  align-items: start;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-grid > label {
  display: grid;
  grid-template-rows: minmax(2.6em, auto) 42px auto;
  grid-column: auto;
  align-content: start;
  align-items: stretch;
  gap: 6px;
  width: 100%;
  min-width: 0;
  max-width: none;
  margin: 0;
}
body.page-statistics.v7-app .statistics-filters .stats-filter-label {
  display: flex;
  align-items: flex-end;
  min-width: 0;
  line-height: 1.3;
  font-weight: 600;
  overflow-wrap: anywhere;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-grid :is(select,input) {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  height: 42px;
  min-height: 42px !important;
  margin: 0;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-grid small {
  display: block;
  margin: 0;
  font-weight: 400;
  line-height: 1.3;
  overflow-wrap: anywhere;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-actions {
  flex-wrap: wrap;
  gap: 10px !important;
  margin-top: 18px;
  padding-top: 0;
  /* Le composant général aligne les actions à gauche ; Statistiques à droite. */
  justify-content: flex-end !important;
}
body.page-statistics.v7-app .statistics-filters .uniform-filter-actions :is(button,.button) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-width: 140px;
  min-height: 42px !important;
  margin: 0;
}
body.page-statistics.v7-app .stats-collaborator-team { display: block; margin-top: 3px; }
@media (max-width: 1199px) {
  body.page-statistics.v7-app .statistics-filters .uniform-filter-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 640px) {
  body.page-statistics.v7-app .statistics-filters .uniform-filter-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 14px;
  }
  body.page-statistics.v7-app .statistics-filters .uniform-filter-grid > label {
    grid-template-rows: auto 42px auto;
  }
  body.page-statistics.v7-app .statistics-filters .uniform-filter-actions :is(button,.button) {
    flex: 1 1 140px;
    width: 100% !important;
  }
}

/* v37 — séparer les graphiques de leur tableau détaillé dans Statistiques.
   Le JavaScript remplace .table-wrap par .table-shell (tableau + pagination) :
   la marge porte donc sur le cadre extérieur, jamais sur le pied du tableau. */
body.v7-app.page-statistics .stats-section {
  --stats-chart-table-gap: var(--v7-space-5, 24px);
}
body.v7-app.page-statistics .stats-section
  > :is(.ui-bar-chart, .ui-multi-year-chart, .annual-chart-grid)
  + :is(.table-wrap, .table-frame, .table-shell) {
  margin-top: var(--stats-chart-table-gap) !important;
}
/* La grille annuelle avait sa propre marge : un seul espacement, sans cumul. */
body.v7-app.page-statistics .stats-section > .annual-chart-grid {
  margin-bottom: 0 !important;
}
@media print {
  body.v7-app.page-statistics .stats-section {
    --stats-chart-table-gap: 12px;
  }
}

/* v38 — titre et cinq raccourcis d'Export personnalisé sur la même ligne.
   Le descriptif occupe une ligne séparée, sans réserver la moitié de l'en-tête.
   Sélecteurs limités à cette page ; aucun changement aux liens ni aux exports. */
body.v7-app.page-export-center .export-center-page > .page-heading {
  --export-header-gap: 20px;
  display: grid !important;
  grid-template-columns: max-content minmax(0, 1fr);
  align-items: center !important;
  gap: 8px var(--export-header-gap) !important;
}
/* Le div du composant partagé reste dans le DOM ; seuls ses enfants sont
   placés dans la grille. Les autres en-têtes conservent leur mise en page. */
body.v7-app.page-export-center .export-center-page > .page-heading > div:first-child {
  display: contents;
}
body.v7-app.page-export-center .export-center-page > .page-heading > div:first-child > h1 {
  grid-column: 1;
  grid-row: 1;
  margin: 0 !important;
  white-space: nowrap;
}
body.v7-app.page-export-center .export-center-page > .page-heading > div:first-child > p {
  grid-column: 1 / -1;
  grid-row: 2;
  max-width: none;
}
body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions {
  grid-column: 2;
  grid-row: 1;
  display: grid !important;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  grid-auto-rows: 1fr;
  align-items: stretch !important;
  gap: 8px !important;
  width: 100%;
  min-width: 0;
  margin: 0 !important;
}
body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions > .button {
  display: flex !important;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-width: 0;
  min-height: 44px !important;
  height: 100%;
  margin: 0 !important;
  padding: 8px 10px !important;
  font-size: 12px !important;
  line-height: 1.35;
  text-align: center;
  white-space: normal !important;
  overflow-wrap: anywhere;
}
/* À largeur réduite (y compris avec le zoom navigateur), les raccourcis
   passent sous le texte plutôt que de déborder ou masquer leur libellé. */
@media (max-width: 1259px) {
  body.v7-app.page-export-center .export-center-page > .page-heading {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 10px !important;
  }
  body.v7-app.page-export-center .export-center-page > .page-heading > div:first-child > h1 {
    white-space: normal;
  }
  body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions {
    grid-column: 1;
    grid-row: 3;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (max-width: 680px) {
  body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 420px) {
  body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* Ne pas réafficher les actions masquées par la feuille d'impression commune. */
@media print {
  body.v7-app.page-export-center .export-center-page > .page-heading {
    grid-template-columns: minmax(0, 1fr);
  }
  body.v7-app.page-export-center .export-center-page > .page-heading > .page-heading-actions {
    display: none !important;
  }
}

/* v40 — report rhythm. Gaps are between independent blocks, never inside a table/pager. */
body.v7-app.report-spacing {
  --report-section-gap: 24px;
  --report-content-gap: 16px;
}
body.v7-app.report-spacing #main-content.app-page {
  gap: var(--report-section-gap) !important;
}
/* Older rules added margins on top of the main grid gap. Use just one gap. */
body.v7-app.report-spacing #main-content.app-page > :not(.table-pager) {
  margin-top: 0 !important;
  margin-bottom: 0 !important;
}

body.v7-app.report-spacing #main-content.app-page
  > :is(.table-frame, .table-wrap, .table-responsive) + .table-pager {
  margin-top: calc(-1 * var(--report-section-gap) - 1px) !important;
}
body.v7-app.report-spacing :is(.stats-dashboard-grid, .dashboard-detail-grid, .budget-chart-grid, .budget-comparison-grid) {
  gap: var(--report-section-gap) !important;
  align-items: start;
}
body.v7-app.page-statistics .stats-dashboard-grid {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
body.v7-app.report-spacing .stats-dashboard-grid > .stats-section {
  margin: 0 !important;
  min-width: 0;
}
body.v7-app.report-spacing :is(.stats-section-head, .analysis-section > .section-head) {
  flex-wrap: wrap !important;
  align-items: flex-start !important;
  gap: 12px !important;
  margin: 0 0 var(--report-content-gap) !important;
}
body.v7-app.report-spacing :is(.stats-section-head, .analysis-section > .section-head) > div {
  flex: 1 1 auto;
  min-width: 0;
}
body.v7-app.report-spacing :is(.stats-section-head, .analysis-section > .section-head) p {
  margin: 6px 0 0 !important;
  color: var(--v7-muted);
  line-height: 1.55;
}
body.v7-app.report-spacing :is(.stats-section, .analysis-section)
  > :is(.ui-bar-chart, .ui-multi-year-chart, .annual-chart-grid)
  + :is(.table-wrap, .table-frame, .table-shell) {
  margin-top: var(--report-section-gap) !important;
}
body.v7-app.report-spacing :is(.panel, .report-subsection)
  > :is(.table-wrap, .table-frame, .table-shell)
  + :is(.table-wrap, .table-frame, .table-shell, .report-subsection) {
  margin-top: var(--report-section-gap) !important;
}
body.v7-app.report-spacing .panel > :is(h2, h3, p, .section-head)
  + :is(.table-wrap, .table-frame, .table-shell) {
  margin-top: var(--report-content-gap) !important;
}
body.v7-app.report-spacing :is(.workload-legend, .heat-legend, .report-technical-link) {
  margin-top: var(--report-content-gap) !important;
}
body.v7-app.report-spacing .annual-chart-grid { margin-bottom: 0 !important; }
body.v7-app.report-spacing .annual-chart-grid > article { padding: 16px; }
body.v7-app .report-measure-note {
  padding: 14px 16px;
  border-left: 4px solid var(--v7-green-600);
  background: var(--v7-green-50);
  border-radius: 8px;
  color: var(--v7-green-950);
  line-height: 1.6;
}
body.v7-app .report-analysis-links > p { margin: 8px 0 16px; }
body.v7-app .report-display-panel .section-head { align-items: flex-start; gap: 12px; }
body.v7-app .report-display-panel .section-head > div { flex: 1 1 auto; }
body.v7-app .report-display-panel p { margin: 6px 0 0; line-height: 1.55; }
body.v7-app .report-display-count {
  display: inline-flex; flex: 0 1 auto; padding: 7px 11px;
  border-radius: 6px; background: var(--v7-green-50); color: var(--v7-green-900);
  font-size: .83rem; font-weight: 750; white-space: normal;
}
body.v7-app .report-display-settings {
  border: 1px solid var(--v7-line); border-radius: 8px;
  margin-top: 16px; padding: 0; overflow: hidden;
}
body.v7-app .report-display-settings > summary {
  display: list-item; padding: 13px 16px; cursor: pointer;
  color: var(--v7-green-950); font-weight: 750; background: var(--v7-green-50);
}
body.v7-app .report-display-settings-body { padding: 16px; }
body.v7-app .report-panel-choices {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px;
  border: 0; margin: 0; padding: 0; min-width: 0;
}
body.v7-app .report-panel-choices legend { margin: 0 0 12px; padding: 0; font-weight: 700; }
body.v7-app .report-panel-choices > label {
  display: flex !important; flex-direction: row !important; align-items: flex-start !important;
  gap: 9px !important; min-width: 0; margin: 0 !important; padding: 10px;
  border: 1px solid var(--v7-line); border-radius: 6px; cursor: pointer;
  font-size: .82rem !important; font-weight: 600; background: #fff;
  line-height: 1.4;
}
body.v7-app .report-panel-choices input[type="checkbox"] {
  flex: 0 0 auto !important; width: 18px !important; height: 18px !important;
  min-height: 0 !important; margin: 1px 0 0 !important; padding: 0 !important;
}
body.v7-app .report-panel-choices label:has(input:checked) { border-color: var(--v7-green-600); background: var(--v7-green-50); }
body.v7-app .report-display-actions { display: flex; flex-wrap: wrap; gap: 10px; margin: 16px 0 12px; }
body.v7-app .report-display-actions .button { white-space: normal !important; }
body.v7-app .report-quick-nav { margin-top: 20px; }
body.v7-app .report-quick-nav h3 { margin: 0 0 12px; }
body.v7-app .report-quick-links { display: flex; flex-wrap: wrap; gap: 8px; }
body.v7-app .report-quick-links a {
  display: inline-flex; align-items: center; min-height: 36px; padding: 7px 12px;
  border: 1px solid var(--v7-line-strong); border-radius: 6px;
  color: var(--v7-green-900); background: var(--v7-green-50); font-size: .8rem;
  font-weight: 650; text-decoration: none; line-height: 1.4;
}
body.v7-app .report-quick-links a.is-panel-hidden { background: #fff; border-style: dashed; }
body.v7-app .report-quick-links a:is(:hover, .is-active) { color: #fff; background: var(--v7-green-700); }
body.v7-app .report-back-link { flex: 0 1 auto; padding: 4px 0; font-size: .8rem; white-space: normal; }
body.v7-app .report-empty-selection { margin-top: 18px !important; padding: 12px; border: 1px dashed var(--v7-line-strong); border-radius: 6px; }
body.v7-app .report-duplicate-panel > .section-head { margin-bottom: 16px; }
body.v7-app .report-duplicate-panel > .table-shell { margin-top: 16px !important; }
body.v7-app.page-statistics #main-content :is([data-stat-panel], #statistics-display) { scroll-margin-top: 100px !important; }
body.v7-app.page-statistics .stats-dashboard-grid.has-one-panel { grid-template-columns: minmax(0, 1fr); }
/* Explicit !important because the legacy theme overrides the native hidden attribute. */
body.v7-app.page-statistics #main-content :is([data-stat-panel], [data-stat-grid], [data-display-settings], [data-stat-empty])[hidden] {
  display: none !important;
}
body.v7-app .report-display-panel :is(a, button, input, summary):focus-visible,
body.v7-app .report-back-link:focus-visible {
  outline: 3px solid var(--v7-green-600); outline-offset: 3px;
}
@media (max-width: 1100px) {
  body.v7-app .report-panel-choices { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  body.v7-app.page-statistics .stats-dashboard-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
@media (max-width: 620px) {
  body.v7-app.report-spacing { --report-section-gap: 18px; }
  body.v7-app .report-panel-choices { grid-template-columns: minmax(0, 1fr); }
  body.v7-app .report-display-settings-body { padding: 12px; }
  body.v7-app .report-display-actions .button { flex: 1 1 140px; }
}
@media print {
  body.v7-app.report-spacing { --report-section-gap: 6mm; --report-content-gap: 4mm; }
  body.v7-app.report-spacing #main-content.app-page > :not(.table-pager) { margin-bottom: 6mm !important; }
  body.v7-app.report-spacing .panel { break-inside: auto; }
  body.v7-app.report-spacing :is(.stats-dashboard-grid, .dashboard-detail-grid) { grid-template-columns: 1fr; }
  body.v7-app .report-display-panel :is(.report-display-settings, .report-quick-nav, noscript),
  body.v7-app .report-back-link { display: none !important; }
}

/* Espaces de travail : les tableaux et leur pagination restent un bloc. */
body.v7-app .workspace-navigation {
  display:flex; flex-wrap:wrap; align-items:center; gap:12px 24px;
  min-width:0; padding:14px 18px; border:1px solid var(--v7-border,#d5e5db);
  border-radius:12px; background:var(--v7-surface,#fff);
}
body.v7-app .workspace-navigation-title {font-size:14px; color:#176b3a}
body.v7-app .workspace-navigation-links {display:flex; flex-wrap:wrap; gap:8px; min-width:0}
body.v7-app .workspace-tab {
  display:inline-flex; align-items:center; justify-content:center;
  padding:9px 14px; min-height:40px; border:1px solid #c4d9ce; border-radius:7px;
  color:#164f38; background:#f4f9f6; text-decoration:none; font-weight:600;
  text-align:center; white-space:normal; overflow-wrap:anywhere;
}
body.v7-app .workspace-tab.active {background:#237747; border-color:#237747; color:#fff}
body.v7-app .workspace-tab:focus-visible {outline:3px solid #376ef1; outline-offset:3px}
body.v7-app table.monthly-matrix :is(th,td):nth-child(2) {text-align:left!important; min-width:145px!important}
body.v7-app .workspace-navigation + * {margin-top:0}
@media(max-width:620px){
  body.v7-app .workspace-navigation {align-items:stretch; flex-direction:column; padding:12px; gap:10px}
  body.v7-app .workspace-navigation-links {display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); width:100%}
  body.v7-app .workspace-tab {padding:8px; font-size:12px; min-width:0}
}
@media print {body.v7-app .workspace-navigation {display:none!important}}

/* Préférences personnelles en base : états lisibles sans décaler les choix. */
body.v7-app.page-statistics .report-display-savebar {
  display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; gap:12px;
}
body.v7-app.page-statistics [data-stat-save] {min-width:150px; min-height:42px; white-space:normal;}
body.v7-app.page-statistics [data-stat-save][hidden] {display:none!important;}
body.v7-app.page-statistics [data-stat-save]:disabled,
body.v7-app.page-statistics [data-stat-restore]:disabled {opacity:.65; cursor:default;}
body.v7-app.page-statistics .report-display-save-status {
  margin:0 0 16px!important; padding:10px 12px; border:1px solid #d1e4d9; border-radius:8px;
  background:#f3f8f5; line-height:1.5; overflow-wrap:anywhere;
}
body.v7-app.page-statistics .report-display-save-status[data-state="pending"] {
  border-color:#dfc583; background:#fff8e9; color:#714c04;
}
body.v7-app.page-statistics .report-display-save-status[data-state="error"] {
  border-color:#dab8b7; background:#fff2f1; color:#862626;
}
@media(max-width:640px) {
  body.v7-app.page-statistics .report-display-savebar {width:100%; justify-content:space-between;}
}
@media print {
  body.v7-app.page-statistics .report-display-savebar [data-stat-save],
  body.v7-app.page-statistics .report-display-save-status {display:none!important;}
}

/* Le projet d’une tâche est lisible en entier (code et nom).
   Le défilement reste dans le cadre du tableau sur les petits écrans. */
body.v7-app table.admin-tasks-table td.task-project-cell {
  width: 34%;
  min-width: 180px !important;
  max-width: 420px;
  white-space: normal !important;
  overflow-wrap: anywhere;
}

/* Espace Système et import partiel MySQL : sections séparées, formulaires alignés. */
.system-workspace { display: grid; gap: 24px; min-width: 0; }
.system-workspace > .panel { margin: 0; min-width: 0; }
.system-workspace .panel > h2 { margin: 0 0 16px; }
.system-workspace .admin-grid { margin-top: 16px; }
/* Le cadre créé par app.js emporte tableau + pagination : espacer seulement l’extérieur. */
body.v7-app .system-workspace .panel > :is(.table-wrap, .table-shell) { margin-top: 20px !important; }
body.v7-app .system-workspace .table-shell > .table-wrap { margin-top: 0 !important; }
.partial-import-form { display: grid; grid-template-columns: minmax(260px, 2fr) repeat(2, minmax(150px, 1fr)); gap: 18px; align-items: start; }
.partial-import-form label { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.partial-import-form input { min-height: 42px; width: 100%; min-width: 0; box-sizing: border-box; }
.partial-import-form input[type=file] { max-width: 100%; }
.partial-import-form small { font-weight: normal; line-height: 1.5; }
.partial-import-actions { grid-column: 1 / -1; display: flex; justify-content: flex-end; margin: 0 0 12px; }
.partial-import-heading { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; }
.partial-import-heading h2 { margin: 0 0 8px; }
.partial-import-heading p { overflow-wrap: anywhere; }
.partial-import-summary { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; margin: 20px 0; }
.partial-import-summary > div { padding: 14px; border: 1px solid #dce5df; border-radius: 10px; background: #f7faf8; }
.partial-import-summary dt { font-size: .88rem; line-height: 1.5; }
.partial-import-summary dd { font-weight: 700; font-size: 1.3rem; margin: 8px 0 0; }
.partial-import-table th:last-child, .partial-import-table td:last-child { white-space: normal; min-width: 240px; max-width: 440px; overflow-wrap: anywhere; }
.partial-import-confirm { border-top: 1px solid #dce5df; margin-top: 24px; padding-top: 20px; }
body.v7-app .partial-import-confirm .check { display: flex !important; flex-direction: row !important; align-items: flex-start !important; gap: 10px; line-height: 1.6; white-space: normal; }
body.v7-app .partial-import-confirm .check input { width: 16px !important; min-height: 16px !important; height: 16px; margin-top: .35em; flex: 0 0 auto; }
.partial-import-cancel { margin: 16px 0; }
@media (max-width: 1100px) { .partial-import-form { grid-template-columns: repeat(2,minmax(0,1fr)); } .partial-import-file { grid-column: 1 / -1; } .partial-import-summary { grid-template-columns: repeat(3,minmax(0,1fr)); } }
@media (max-width: 640px) { .system-workspace { gap: 18px; } .partial-import-form { grid-template-columns: minmax(0,1fr); } .partial-import-summary { grid-template-columns: repeat(2,minmax(0,1fr)); } .partial-import-heading .button, .partial-import-actions .button { width: 100%; text-align: center; } }

@media (max-width: 640px) { body.v7-app.page-system-import .erp-page-export-actions { display: none !important; } }


/* Balance des heures : critères regroupés, sans colonnes vides entre les dates. */
body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-fields {
  gap: 12px;
}
body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-grid {
  grid-template-columns: repeat(2, minmax(0, 180px)) minmax(0, 220px) minmax(0, 320px);
  gap: 12px 14px;
}
body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-grid > label {
  grid-template-rows: minmax(1.3em, auto) auto;
  min-width: 0 !important;
  max-width: none;
}
body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-grid select[multiple] {
  height: 112px;
}
@media (max-width: 1199px) {
  body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 600px) {
  body.v7-app.page-balance-heures .balance-filter-panel .uniform-filter-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Balance des heures : équipe sous le nom et valeurs horaires insécables. */
body.v7-app.page-balance-heures .balance-collaborator {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  min-width: 0;
  line-height: 1.2;
}
body.v7-app.page-balance-heures .balance-collaborator > strong {
  white-space: nowrap;
}
body.v7-app.page-balance-heures .balance-collaborator-team {
  display: block;
  font-size: 11px;
  font-weight: 500;
  line-height: 1.2;
  white-space: nowrap;
}
body.v7-app.page-balance-heures .balance-hours-table {
  /* Occupe toute la zone disponible. Si l’écran est plus étroit, la table
     conserve une largeur lisible et le conteneur fournit le défilement. */
  width: 100% !important;
  min-width: 1660px !important;
  table-layout: auto !important;
}
body.v7-app.page-balance-heures .balance-vacation-table {
  width: 100% !important;
  min-width: 100% !important;
  table-layout: auto !important;
}
body.v7-app.page-balance-heures .balance-hours-table :is(th, td) {
  white-space: nowrap !important;
}
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):first-child {
  min-width: 220px !important;
}
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(2) {
  min-width: 135px !important;
}
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(n+3) {
  min-width: 96px !important;
  font-variant-numeric: tabular-nums;
}
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(14),
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(15),
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(16) {
  min-width: 112px !important;
}

/* Balance des heures — alignement numérique cohérent et ligne TOTAL aérée. */
body.v7-app.page-balance-heures .balance-hours-table :is(th, td):nth-child(n+3) {
  text-align: right !important;
}
body.v7-app.page-balance-heures .balance-hours-table thead th:nth-child(n+3) .table-sort-button {
  justify-content: flex-end !important;
  text-align: right !important;
}
body.v7-app.page-balance-heures .balance-hours-table tfoot th {
  padding-top: 10px !important;
  padding-bottom: 16px !important;
  vertical-align: middle !important;
}
body.v7-app.page-balance-heures .balance-hours-table tfoot th:first-child {
  text-align: left !important;
}

body.v7-app.page-balance-heures .balance-vacation-table :is(th, td):nth-child(n+2) {
  text-align: right !important;
  font-variant-numeric: tabular-nums;
  white-space: nowrap !important;
}
body.v7-app.page-balance-heures .balance-vacation-table thead th:nth-child(n+2) .table-sort-button {
  justify-content: flex-end !important;
  text-align: right !important;
}
body.v7-app.page-balance-heures .balance-vacation-table tfoot th {
  padding-top: 10px !important;
  padding-bottom: 16px !important;
  vertical-align: middle !important;
}
body.v7-app.page-balance-heures .balance-vacation-table tfoot th:first-child {
  text-align: left !important;
}
/* Le module reprend les composants et la cascade du design existant. */
.forage-full { grid-column: 1 / -1; }
.forage-fieldset { min-width: 0; padding: 1rem; }
[data-forage-lines] input { min-width: 7rem; }
[data-recipe-lines] select { min-width: 12rem; }
[data-forage-context-status][data-error="1"] { color: var(--danger, #a31b1b); }

/* Identité sur une ligne ; remarques sur la ligne suivante. */
body.v7-app [data-forage-recipe] .forage-recipe-fields {
  display: grid;
  grid-template-columns: minmax(160px, 1.4fr) 100px repeat(2, 145px) minmax(200px, 1.8fr);
  align-items: start;
  gap: 14px 16px;
}
body.v7-app [data-forage-recipe] .forage-recipe-fields > label {
  min-width: 0;
  margin: 0;
}
body.v7-app [data-forage-recipe] .forage-recipe-fields > label > :is(input, select) {
  width: 100%;
  min-height: 40px;
  height: 40px;
}
@media (max-width: 1199px) {
  body.v7-app [data-forage-recipe] .forage-recipe-fields { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  body.v7-app [data-forage-recipe] .forage-recipe-fields { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 520px) {
  body.v7-app [data-forage-recipe] .forage-recipe-fields { grid-template-columns: minmax(0, 1fr); }
}

/* Même ligne de totaux que la synthèse des heures des collaborateurs. */
body.v7-app .forage-table tfoot :is(th, td) {
  padding: 9px 10px !important;
  border-top: 0;
  border-right: 1px solid var(--v7-line);
  border-bottom: 0;
  background: #e6f0eb;
  background: color-mix(in srgb, var(--v7-primary, #1f7a4d) 11%, white) !important;
  color: var(--v7-ink);
  font-size: .78rem;
  font-weight: 850;
  line-height: 1.45;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
body.v7-app .forage-table tfoot :is(th, td):first-child { padding-left: 14px !important; }
body.v7-app .forage-table tfoot :is(th, td):last-child { padding-right: 14px !important; border-right: 0; }
body.v7-app .forage-table tfoot th { text-align: left; }
body.v7-app .forage-table tfoot td { text-align: center; }
body.v7-app .forage-table .forage-number {
  text-align: center !important;
  font-variant-numeric: tabular-nums;
}
body.v7-app .forage-table .forage-number .table-sort-button {
  justify-content: center !important;
  text-align: center !important;
}
body.v7-app .forage-period {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 8px;
}
body.v7-app .forage-period-dates { font-size: .9em; font-weight: 400; }
body.v7-app :is(.forage-recipe-summary, .forage-efficiency-summary) .filtered-total-cards {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
@media (max-width: 1100px) {
  body.v7-app :is(.forage-recipe-summary, .forage-efficiency-summary) .filtered-total-cards {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 700px) {
  body.v7-app :is(.forage-recipe-summary, .forage-efficiency-summary) .filtered-total-cards { grid-template-columns: 1fr !important; }
}

body.v7-app .forage-efficiency-summary .filtered-total-card {
  min-width: 0;
}
body.v7-app .forage-efficiency-summary .filtered-total-card strong {
  overflow-wrap: anywhere;
}
body.v7-app .forage-efficiency-history .forage-history-missing td {
  color: var(--v7-muted);
}
body.v7-app .forage-efficiency-save .form-actions {
  margin-top: 12px;
}

/* Deux lignes distinctes : mélange, lait et exclusions ; puis suppléments. */
body.v7-app .forage-efficiency-calculation.report-aligned-filters .uniform-filter-grid {
  grid-template-columns: minmax(0, 1fr);
}
body.v7-app .forage-efficiency-calculation .forage-efficiency-row {
  display: grid;
  align-items: end;
  gap: 16px 20px;
  min-width: 0;
}
body.v7-app .forage-efficiency-calculation .forage-efficiency-day-fields {
  grid-template-columns: minmax(0, 2fr) repeat(2, minmax(0, 1fr));
}
body.v7-app .forage-efficiency-calculation .forage-efficiency-supplement-fields {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
body.v7-app .forage-efficiency-calculation .forage-efficiency-row > label {
  display: grid;
  grid-template-rows: minmax(2.6em, auto) auto auto;
  align-content: start;
  gap: 6px;
  width: 100%;
  min-width: 0 !important;
  max-width: none;
  margin: 0;
}
@media (max-width: 900px) {
  body.v7-app .forage-efficiency-calculation .forage-efficiency-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  body.v7-app .forage-efficiency-calculation .forage-efficiency-mix-field { grid-column: 1 / -1; }
}
@media (max-width: 600px) {
  body.v7-app .forage-efficiency-calculation .forage-efficiency-row {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Les filtres du fourrage occupent une seule ligne sur écran large. */
body.v7-app .forage-compact-filters .uniform-filter-fields { display: block; }
body.v7-app .forage-compact-filters .uniform-filter-grid {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  align-items: end;
}
body.v7-app .forage-compact-filters .uniform-filter-grid > label {
  width: 100%;
  min-width: 0 !important;
  max-width: none;
}
body.v7-app .forage-compact-filters .uniform-filter-actions { margin-top: 12px; }
@media (max-width: 1199px) {
  body.v7-app .forage-compact-filters .uniform-filter-grid {
    grid-auto-flow: row;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (max-width: 760px) {
  body.v7-app .forage-compact-filters .uniform-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 520px) {
  body.v7-app .forage-compact-filters .uniform-filter-grid { grid-template-columns: minmax(0, 1fr); }
}

/* Même composant de colonnes que le centre d'export, en grille compacte. */
body.v7-app.page-forage-export .export-columns {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr));
  align-items: start;
}
body.v7-app.page-forage-export .export-columns .check {
  min-width: 0;
  white-space: normal;
  align-items: flex-start;
}
body.v7-app.page-forage-export .export-columns .check input {
  flex: 0 0 auto;
  margin-top: .2em;
}

/* Actions de catalogue et de recette regroupées dans la dernière colonne, à droite. */
body.v7-app .forage-catalog-table { width: 100%; }
body.v7-app .forage-table .forage-catalog-action-cell {
  width: 1%;
  text-align: right !important; /* Compense l’alignement historique des en-têtes. */
  white-space: nowrap;
}
body.v7-app .forage-table .forage-catalog-actions {
  display: inline-flex;
  flex-wrap: nowrap;
  justify-content: flex-end;
}
body.v7-app .forage-table .forage-catalog-actions > * { flex: 0 0 auto; }
body.v7-app .forage-catalog-remarks {
  white-space: pre-line;
  overflow-wrap: anywhere;
}

/* Rangées compactes et contrôles alignés dans la fiche d'un aliment. */
body.v7-app #forage-catalog-editor .forage-feed-form {
  align-items: start !important;
  row-gap: 8px !important;
}
body.v7-app .forage-feed-form > label:not(.forage-full) {
  display: grid;
  grid-template-rows: minmax(2.6em, auto) 40px;
  align-content: start;
}
body.v7-app .forage-feed-form .forage-field-label {
  display: flex;
  align-items: flex-end;
  line-height: 1.3;
}
body.v7-app .forage-feed-form > label > :is(input, select) {
  height: 40px;
  min-height: 40px;
}

/* Champs du mélange : même ligne de libellés et même hauteur de contrôles. */
body.v7-app [data-forage-mix] .forage-mix-fields {
  align-items: start !important;
  row-gap: 8px !important;
}
body.v7-app .forage-mix-fields > label:not(.forage-full) {
  display: grid;
  grid-template-rows: minmax(2.6em, auto) 40px;
  align-content: start;
}
body.v7-app .forage-mix-field-label {
  display: flex;
  align-items: flex-end;
  min-height: 2.6em;
  line-height: 1.3;
}
body.v7-app .forage-mix-fields > label > :is(input, select) {
  height: 40px !important;
  min-height: 40px !important;
}
body.v7-app .forage-mix-fields .forage-coefficient-actions {
  grid-column: auto !important;
  justify-content: flex-start !important;
  align-self: start;
  margin: 0 !important;
  padding-top: 0;
  font-size: 12px;
}
body.v7-app .forage-coefficient-actions button { height: 40px; min-height: 40px; }

/* Sur trois colonnes, le bouton partage la rangée des champs Base et Coefficient. */
@media (min-width: 961px) and (max-width: 1200px) {
  body.v7-app .forage-mix-fields .forage-coefficient-actions {
    padding-top: calc(2.6em + 5px);
  }
}

/* Espacement des tableaux, des totaux et des boutons de préparation. */
body.v7-app [data-forage-recipe] > [data-add-recipe-line] {
  margin-top: var(--v7-space-4, 18px);
}
body.v7-app [data-forage-recipe] > .form-actions,
body.v7-app [data-forage-mix] > .forage-fieldset > .form-actions {
  margin-top: var(--v7-space-4, 18px) !important;
}
body.v7-app [data-forage-mix] .forage-mix-ingredients-wrap + .filtered-totals {
  margin-top: var(--v7-space-4, 18px) !important;
}
body.v7-app [data-forage-mix] [data-mix-cumulative] { font-weight: 700; }

/* Historique chargé à la demande, dans les mêmes tableaux que les statistiques. */
body.v7-app button.forage-yield-history-link {
  display: inline;
  min-height: 0;
  height: auto;
  padding: 0;
  border: 0;
  background: none;
  color: var(--v7-primary, #1f7a4d);
  font: inherit;
  text-decoration: underline;
  text-underline-offset: .15em;
  cursor: pointer;
}
body.v7-app button.forage-yield-history-link:hover { text-decoration-thickness: 2px; }
body.v7-app button.forage-yield-history-link:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
body.v7-app dialog.forage-yield-history {
  box-sizing: border-box;
  width: min(960px, calc(100vw - 32px));
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  padding: 20px;
  border: 1px solid var(--v7-line, #d9e2dd);
  border-radius: 12px;
  background: white;
  color: var(--v7-ink, #17251d);
  box-shadow: 0 20px 70px rgb(0 0 0 / 25%);
  overflow: auto;
}
body.v7-app dialog.forage-yield-history::backdrop { background: rgb(0 0 0 / 45%); }
body.v7-app .forage-yield-history-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}
body.v7-app .forage-yield-history-header h2 { margin: 0; overflow-wrap: anywhere; }
body.v7-app .forage-yield-history-header button { flex: 0 0 auto; }
body.v7-app .forage-yield-history-note { display: block; white-space: normal; }
body.v7-app [data-forage-yield-history-status][data-error="1"] { color: var(--danger, #a31b1b); }
body.v7-app .forage-yield-history-pager { flex-wrap: wrap; }
@media (max-width: 520px) {
  body.v7-app dialog.forage-yield-history { padding: 12px; }
  body.v7-app .forage-yield-history-header h2 { font-size: 1.1rem; }
  body.v7-app .forage-yield-history-pager .table-pagination { width: 100%; justify-content: center; }
}

/* Lecture du mélange : mêmes panneaux, quantités lisibles sans tableau sur téléphone. */
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) #main-content { min-width: 0; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.page-heading, .page-heading > div, .forage-mix-read-context, .forage-mix-read-summary, .forage-mix-read-notes, .forage-mix-read-food) {
  min-width: 0;
  overflow-wrap: anywhere;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .page-heading-actions { flex-wrap: wrap; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-label {
  margin: 0 0 4px;
  color: var(--v7-muted);
  font-size: .8rem;
  font-weight: 650;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-context h2 { margin: 0; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-recipe {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 8px;
  margin: 10px 0 0;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-recipe > span, .forage-mix-read-preparer > span) {
  color: var(--v7-muted);
  font-size: .85rem;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-meta {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 12px;
  margin: 16px 0 0;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-meta > div, .forage-mix-read-summary dl > div) { min-width: 0; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-meta dt, .forage-mix-read-summary dt) {
  margin-bottom: 4px;
  color: var(--v7-muted);
  font-size: .8rem;
  font-weight: 650;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-meta dd, .forage-mix-read-summary dd) {
  margin: 0;
  font-weight: 750;
  font-variant-numeric: tabular-nums;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-lock {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  margin: 14px 0 0;
  font-size: .85rem;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-summary dl {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  margin: 0;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-total {
  grid-column: 1 / -1;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--v7-line);
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-total dd, .forage-mix-read-quantity) {
  color: var(--v7-green-800);
  font-size: clamp(1.35rem, 6vw, 1.8rem);
  font-weight: 850;
  line-height: 1.25;
  font-variant-numeric: tabular-nums;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-total dd > span, .forage-mix-read-quantity > span) {
  font-size: .7em;
  font-weight: 650;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-ingredients > h2 { margin: 20px 0 12px; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-cards {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
  min-width: 0;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-cards > .panel { margin: 0 !important; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-food h3 { margin: 0 0 12px; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-quantity { margin: 0 0 12px; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-reference {
  margin: 0;
  color: var(--v7-muted);
  font-size: .85rem;
  line-height: 1.5;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-notes { margin-top: 20px; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-notes h2 { margin: 0 0 12px; }
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-remarks {
  margin: 0;
  white-space: pre-line;
  overflow-wrap: anywhere;
}
body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-preparer {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 8px;
  margin: 16px 0 0;
  padding-top: 12px;
  border-top: 1px solid var(--v7-line);
}
@media (min-width: 700px) {
  body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .forage-mix-read-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media print {
  body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) .page-heading-actions { display: none !important; }
  body.v7-app:is(.page-forage-mix-show, .page-forage-recipe-show) :is(.forage-mix-read-context, .forage-mix-read-summary, .forage-mix-read-food, .forage-mix-read-notes) { break-inside: avoid; }
}

/* Le même formulaire et les mêmes quantités deviennent des cartes sur téléphone. */
@media (max-width: 700px) {
  body.v7-app.page-forage-mix-form :is(#main-content, [data-forage-mix], .forage-fieldset, .forage-mix-fields) {
    min-width: 0 !important;
    max-width: 100%;
  }
  body.v7-app.page-forage-mix-form .forage-fieldset { padding: 12px; }
  body.v7-app.page-forage-mix-form .forage-mix-fields {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 14px !important;
  }
  body.v7-app.page-forage-mix-form .forage-mix-fields > label:not(.forage-full) {
    grid-template-rows: auto minmax(44px, auto) auto;
  }
  body.v7-app.page-forage-mix-form .forage-mix-field-label {
    min-height: 0;
    overflow-wrap: anywhere;
  }
  body.v7-app.page-forage-mix-form .forage-mix-fields > label > :is(input, select) {
    width: 100%;
    max-width: 100%;
    min-width: 0 !important;
    height: 44px !important;
    min-height: 44px !important;
    font-size: 16px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-fields textarea {
    min-width: 0;
    max-width: 100%;
    min-height: 96px !important;
    font-size: 16px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-fields .forage-coefficient-actions {
    grid-column: 1 / -1 !important;
    padding-top: 0;
  }
  body.v7-app.page-forage-mix-form [data-forage-mix] .form-actions {
    align-items: stretch;
    flex-direction: column;
  }
  body.v7-app.page-forage-mix-form [data-forage-mix] .form-actions :is(button, .button) {
    width: 100%;
    max-width: 100%;
    min-height: 44px !important;
    height: auto;
    white-space: normal;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-wrap {
    width: 100%;
    min-width: 0 !important;
    max-width: 100%;
    overflow: visible !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table {
    position: relative;
    display: block;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100%;
    table-layout: auto;
    border: 0;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table thead {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table :is(tbody, tfoot) {
    display: grid;
    width: 100%;
    min-width: 0;
    gap: 12px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody tr {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 4px;
    width: 100%;
    min-width: 0;
    padding: 12px;
    border: 1px solid var(--v7-line);
    border-radius: var(--v7-radius-sm);
    background: var(--v7-white);
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody td {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    min-width: 0 !important;
    max-width: 100%;
    padding: 4px 0 !important;
    border: 0 !important;
    background: transparent !important;
    white-space: normal !important;
    overflow-wrap: anywhere;
    text-align: right !important;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table td[data-label]::before {
    content: attr(data-label);
    flex: 0 1 65%;
    color: var(--v7-muted);
    font-size: .8rem;
    font-weight: 650;
    line-height: 1.4;
    text-align: left;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody td[data-mix-name] {
    display: block;
    order: -1;
    margin-bottom: 4px;
    padding: 0 0 8px !important;
    border-bottom: 1px solid var(--v7-line) !important;
    font-size: 1rem;
    font-weight: 750;
    text-align: left !important;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody td[data-mix-name]::before { display: none; }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody .mix-order-controls {
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table .mix-order-controls::before {
    flex: 1 1 auto;
    margin-right: auto;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table .mix-order-controls button {
    flex: 0 0 auto;
    min-width: 44px;
    min-height: 44px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tbody td[data-mix-quantity-cell] {
    align-items: stretch;
    flex-direction: column;
    gap: 6px;
    margin-top: 4px;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table [data-mix-quantity] {
    width: 100%;
    max-width: 100%;
    min-width: 0 !important;
    height: 44px;
    min-height: 44px;
    font-size: 16px;
    text-align: right;
    font-variant-numeric: tabular-nums;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tfoot { margin-top: 12px; }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tfoot tr {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    min-width: 0;
    overflow: hidden;
    border: 1px solid var(--v7-line);
    border-radius: var(--v7-radius-sm);
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tfoot :is(th, td) {
    min-width: 0 !important;
    border-right: 0;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  body.v7-app.page-forage-mix-form .forage-mix-ingredients-table tfoot td {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    text-align: right !important;
  }
  body.v7-app.page-forage-mix-form [data-forage-mix] .filtered-total-cards {
    grid-template-columns: minmax(0, 1fr) !important;
  }
  body.v7-app.page-forage-mix-form [data-forage-mix] .filtered-total-card { min-width: 0; }
  body.v7-app.page-forage-mix-form [data-forage-mix] :is(p, .filtered-total-card strong) { overflow-wrap: anywhere; }
}

/* Poignées de classement : les champs de saisie restent utilisables. */
body.v7-app :is(.recipe-order-controls, .mix-order-controls) { white-space: nowrap; }
body.v7-app :is(.recipe-order-controls, .mix-order-controls) > span { display: inline-block; min-width: 1.5em; font-variant-numeric: tabular-nums; }
body.v7-app .mix-order-controls > [data-mix-order-position] { margin-inline-end: 8px; }
body.v7-app .recipe-order-handle { cursor: grab; touch-action: none; }
body.v7-app .recipe-order-handle:active { cursor: grabbing; }
body.v7-app .recipe-line-dragging { opacity: .65; outline: 2px solid var(--v7-primary, #1f7a4d); outline-offset: -2px; }
body.v7-app :is(.recipe-order-controls, .mix-order-controls) button:focus-visible { outline: 2px solid var(--v7-primary, #1f7a4d); outline-offset: 2px; }
/* Présentation commune des cartes statistiques et graphiques SVG, avec la typographie compacte du thème. */
body.v7-app .forage-chart-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
  align-items: start;
  margin-top: 20px;
}
body.v7-app .forage-chart-card {
  --chart-accent: #2c8159;
  --chart-soft: #edf6f0;
  --v7-radius: 16px;
  --v7-shadow: 0 2px 3px rgba(18, 60, 37, .025), 0 10px 26px rgba(18, 60, 37, .045);
  min-width: 0;
  margin: 0;
}
body.v7-app .forage-chart-card[data-forage-chart="cost"] { --chart-accent: #9c661c; --chart-soft: #fbf5e9; }
body.v7-app .forage-chart-card[data-forage-chart="efficiency"] { --chart-accent: #267b88; --chart-soft: #edf6f7; }
/* Le thème impose les tailles du titre de page en !important. */
body.v7-app:is(.page-forage-charts, .page-irrigation-statistics, .page-meter-statistics, .page-equipment-statistics) .page-heading h1 { font-size: 22px !important; }
body.v7-app:is(.page-forage-charts, .page-irrigation-statistics, .page-meter-statistics, .page-equipment-statistics) .page-heading p { font-size: 12px !important; }
body.v7-app :is(.statistics-kpis, .irrigation-kpis) { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 18px; }
body.v7-app :is(.statistics-kpis, .irrigation-kpis) article { padding: 14px 16px; border: 1px solid var(--v7-line); border-radius: 10px; background: #fff; min-width: 0; }
body.v7-app :is(.statistics-kpis, .irrigation-kpis) article > span { color: var(--v7-muted); font-size: 11px; }
body.v7-app :is(.statistics-kpis, .irrigation-kpis) strong { display: block; margin-top: 6px; font-size: 21px; font-weight: 750; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
body.v7-app :is(.statistics-kpis, .irrigation-kpis) strong > small { font-size: 11px; font-weight: 600; color: var(--v7-muted); }
body.v7-app .forage-chart-context { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
body.v7-app .forage-chart-context-period {
  padding: 7px 11px;
  border: 1px solid #d9e6dc;
  border-radius: 8px;
  background: #fff;
  color: var(--v7-green-900);
  font-size: 12px;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
}
body.v7-app .forage-chart-context p { margin: 0; color: var(--v7-muted); font-size: 12px; }
body.v7-app .forage-chart-header { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
body.v7-app .forage-chart-header > div { flex: 1 1 auto; }
body.v7-app .forage-chart-icon {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  flex: 0 0 40px;
  border: 1px solid var(--chart-soft);
  border-radius: 11px;
  background: var(--chart-soft);
  color: var(--chart-accent);
}
body.v7-app .forage-chart-icon svg { width: 23px; height: 23px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
body.v7-app .forage-chart-eyebrow { margin: 0 0 3px; color: var(--chart-accent); font-size: 10px; font-weight: 650; letter-spacing: .04em; }
body.v7-app .forage-chart-card h2 { margin: 0; color: var(--v7-ink); font-size: 16px; font-weight: 750; line-height: 1.35; }
body.v7-app .forage-chart-unit { padding: 6px 9px; border: 1px solid #e4eae5; border-radius: 7px; color: var(--v7-muted); font-size: 11px; text-align: right; }
body.v7-app .forage-chart-card > p,
body.v7-app .forage-chart-caption { margin: 8px 0 14px; color: var(--v7-muted); font-size: 12px; line-height: 1.5; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) label { font-size: 11px; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) :is(input, select, summary) { font-size: 12px; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) .uniform-filter-heading { font-size: 13px; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) .uniform-filter-state { font-size: 11px; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) .uniform-filter-fields { display: block; }
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) .uniform-filter-grid {
  display: grid;
  width: 100%;
  align-items: end;
}
/* Le minimum de largeur des filtres est lui aussi imposé par le thème. */
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls).uniform-filter-panel .uniform-filter-grid > label {
  width: 100%;
  min-width: 0 !important;
  max-width: none;
}
body.v7-app :is(.forage-chart-filters, .forage-chart-composition-controls) .uniform-filter-actions { margin-top: 14px; }
body.v7-app .forage-chart-filters .uniform-filter-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
body.v7-app .forage-chart-composition-controls { --v7-radius: 10px; margin: 16px 0; }
body.v7-app .forage-chart-composition-controls .uniform-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
body.v7-app .forage-chart-composition-controls [hidden],
body.v7-app .forage-chart-card [hidden] { display: none !important; }
body.v7-app .forage-chart-selection {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px 12px;
  margin: 16px 0 6px;
  padding: 10px 12px;
  border-radius: 8px;
  background: #f5f8f6;
  font-size: 12px;
}
body.v7-app .forage-chart-selection span { color: var(--v7-muted); font-size: 11px; }
body.v7-app .forage-chart-selection strong { font-weight: 650; overflow-wrap: anywhere; }
body.v7-app .forage-chart-composition-layout { display: grid; grid-template-columns: minmax(240px, 340px) minmax(0, 1fr); gap: 20px 28px; align-items: center; }
body.v7-app .forage-chart-visual { width: 100%; margin: 16px 0 8px; border: 1px solid #edf1ed; border-radius: 10px; background: #fcfdfc; }
body.v7-app .forage-chart-svg { display: block; width: 100%; height: 320px; overflow: visible; }
body.v7-app .forage-chart-svg-bars { height: auto; }
body.v7-app .forage-chart-composition-layout .forage-chart-visual { margin: 8px 0; border: 0; background: transparent; }
body.v7-app .forage-chart-svg-pie { width: 340px; max-width: 100%; height: 300px; margin: 0 auto; }
body.v7-app .forage-chart-donut-hole { fill: #fff; pointer-events: none; }
body.v7-app :is(.forage-chart-donut-label, .forage-chart-donut-total, .forage-chart-donut-unit) { font-family: inherit; pointer-events: none; }
body.v7-app .forage-chart-donut-label { fill: var(--v7-muted); font-size: 11px; }
body.v7-app .forage-chart-donut-total { fill: var(--v7-ink); font-size: 20px; font-weight: 750; font-variant-numeric: tabular-nums; }
body.v7-app .forage-chart-donut-unit { fill: var(--v7-muted); font-size: 11px; }
body.v7-app .forage-chart-axis-value,
body.v7-app .forage-chart-axis-title {
  font-family: inherit;
  fill: #65766d;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
body.v7-app .forage-chart-axis-title { font-weight: 600; }
body.v7-app .forage-chart-gridline { stroke: #e4ece6; stroke-width: 1; stroke-dasharray: 3 5; }
body.v7-app .forage-chart-axis { stroke: #cbd9cf; stroke-width: 1; }
body.v7-app .forage-chart-cursor { stroke: #94ada0; stroke-width: 1; stroke-dasharray: 4 4; pointer-events: none; }
body.v7-app .forage-chart-line { fill: none; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
body.v7-app .forage-chart-marker { stroke: white; stroke-width: 1.5; }
body.v7-app .forage-chart-hit-area { fill: transparent; stroke: none; }
body.v7-app .forage-chart-point,
body.v7-app .forage-pie-sector { cursor: pointer; outline: none; }
body.v7-app .forage-chart-point:is(:focus, .is-selected) .forage-chart-marker { stroke: #173226; stroke-width: 2.5; }
body.v7-app .forage-pie-sector > :is(path, circle) { stroke: white; stroke-width: 2.5; }
body.v7-app .forage-pie-sector:is(:focus, .is-selected) > :is(path, circle) { stroke: #173226; stroke-width: 3.5; }
body.v7-app .forage-chart-svg .is-hidden { display: none; }
body.v7-app .forage-chart-legend { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 12px; }
body.v7-app .forage-chart-swatch { width: 28px; height: 18px; flex: 0 0 28px; }
body.v7-app button.forage-chart-legend-button {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  max-width: 100%;
  padding: 8px 11px;
  border: 1px solid #e1e9e3;
  border-radius: 8px;
  background: #fff;
  color: var(--v7-ink);
  font-size: 12px;
  text-align: left;
}
body.v7-app .forage-chart-legend-button span { overflow-wrap: anywhere; }
body.v7-app .forage-chart-legend-button[aria-pressed="false"] { opacity: .68; }
body.v7-app .forage-chart-legend-button[aria-pressed="true"] { border-color: #94b8a2; background: #f5faf7; }
body.v7-app .forage-chart-legend-button:focus-visible { outline: 3px solid var(--chart-accent); outline-offset: 2px; }
body.v7-app .forage-chart-composition-legend { display: grid; grid-template-columns: minmax(0, 1fr); gap: 6px; }
body.v7-app .forage-chart-composition-legend .forage-chart-legend-button {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr) auto;
  gap: 2px 10px;
  width: 100%;
  padding: 10px 12px;
  opacity: 1;
}
body.v7-app .forage-chart-composition-legend .forage-chart-swatch { grid-row: span 2; align-self: center; }
body.v7-app .forage-chart-legend-name { font-weight: 650; }
body.v7-app .forage-chart-legend-proportion { font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
body.v7-app .forage-chart-legend-quantity { grid-column: 2 / -1; color: var(--v7-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
body.v7-app .forage-chart-card > .forage-chart-detail {
  min-height: 3.5em;
  margin: 12px 0 16px;
  padding: 11px 13px;
  border: 1px solid var(--chart-soft);
  border-left: 3px solid var(--chart-accent);
  border-radius: 0 8px 8px 0;
  background: var(--chart-soft);
  color: var(--v7-ink);
  overflow-wrap: anywhere;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  line-height: 1.5;
}
body.v7-app .forage-chart-period-result { display: inline-flex; gap: 20px; align-items: center; flex-wrap: wrap; margin: 2px 0 4px; padding: 10px 13px; border: 1px solid #d5e8eb; border-radius: 9px; background: var(--chart-soft); }
body.v7-app .forage-chart-period-result > span { color: #47616a; font-size: 11px; }
body.v7-app .forage-chart-period-result strong { color: #216773; font-size: 17px; font-weight: 750; font-variant-numeric: tabular-nums; }
body.v7-app .forage-chart-period-result small { font-size: 11px; font-weight: 600; }
body.v7-app :is(.forage-chart-method, .forage-chart-data) { border-top: 1px solid #e9eee9; font-size: 12px; }
body.v7-app .forage-chart-method { margin-top: 16px; }
body.v7-app .forage-chart-data { margin-top: 3px; }
body.v7-app :is(.forage-chart-method, .forage-chart-data) > summary { cursor: pointer; padding: 11px 0; font-weight: 650; }
body.v7-app .forage-chart-method > summary { color: var(--v7-muted); font-size: 11px; }
body.v7-app .forage-chart-data > summary { color: var(--chart-accent); }
body.v7-app :is(.forage-chart-method, .forage-chart-data) > summary:focus-visible { outline: 2px solid var(--chart-accent); outline-offset: 2px; border-radius: 4px; }
body.v7-app .forage-chart-method p { margin: 0 0 10px; color: var(--v7-muted); font-size: 12px; line-height: 1.55; }
body.v7-app .forage-chart-data > .table-wrap { margin-top: 4px; }
body.v7-app .forage-chart-data td > small { display: block; margin-top: 5px; white-space: normal; }
@media (max-width: 1100px) {
  body.v7-app .forage-chart-filters .uniform-filter-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  body.v7-app .forage-chart-filters .uniform-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 800px) {
  body.v7-app :is(.statistics-kpis, .irrigation-kpis) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 700px) {
  body.v7-app .forage-chart-composition-layout { grid-template-columns: minmax(0, 1fr); gap: 0; }
  body.v7-app .forage-chart-header { flex-wrap: wrap; gap: 10px; }
  body.v7-app .forage-chart-unit { margin-left: 52px; text-align: left; }
}
@media (max-width: 550px) {
  body.v7-app .forage-chart-filters .uniform-filter-grid,
  body.v7-app .forage-chart-composition-controls .uniform-filter-grid { grid-template-columns: minmax(0, 1fr); }
  body.v7-app .forage-chart-period-result { width: 100%; justify-content: space-between; gap: 10px; }
}

/* Module Animaux : composants métier sur les couleurs et dimensions du thème commun. */
body.v7-app.page-animals form.animal-import-form { align-items:start!important; }
body.v7-app.page-animals form.animal-herd-catalog-form { grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr) minmax(0,1.3fr) minmax(0,1fr) minmax(0,1.8fr)!important; align-items:start!important; }
body.v7-app.page-animals form.animal-type-catalog-form { grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr) minmax(0,1fr) minmax(0,1.8fr)!important; align-items:start!important; }
body.v7-app.page-animals :is(.animal-herd-catalog-form,.animal-type-catalog-form) textarea[name="remarks"] { min-height:var(--v7-control); height:var(--v7-control); }
@media(max-width:1200px) {
 body.v7-app.page-animals form:is(.animal-herd-catalog-form,.animal-type-catalog-form) { grid-template-columns:repeat(2,minmax(0,1fr))!important; }
 body.v7-app.page-animals .animal-herd-catalog-form > label:last-of-type { grid-column:1/-1; }
}
@media(max-width:620px) {
 body.v7-app.page-animals form:is(.animal-herd-catalog-form,.animal-type-catalog-form) { grid-template-columns:1fr!important; }
}
body.v7-app.page-animals .animal-eyebrow { margin:0 0 5px; color:var(--v7-muted); font-size:11px; line-height:1.5; letter-spacing:1.3px; font-weight:750; text-transform:uppercase; }
body.v7-app.page-animals .animal-nav { display:flex; justify-content:space-between; gap:14px; padding:6px; border:1px solid var(--v7-line); border-radius:var(--v7-radius); background:var(--v7-green-50); position:relative; min-width:0; }
body.v7-app.page-animals .animal-nav-tabs { display:flex; gap:4px; overflow-x:auto; scrollbar-width:thin; min-width:0; }
body.v7-app.page-animals .animal-nav-tabs>a { flex-shrink:0; padding:8px 12px; border-radius:var(--v7-radius-sm); color:var(--v7-green-900); text-decoration:none; font-size:13px; font-weight:650; }
body.v7-app.page-animals .animal-nav-tabs>a[aria-current] { background:var(--v7-green-700); color:var(--v7-white); }
body.v7-app.page-animals .animal-nav-tabs>a:not([aria-current]):hover { background:var(--v7-green-100); color:var(--v7-green-900); }
body.v7-app.page-animals .animal-nav-more { align-self:center; flex-shrink:0; position:relative; font-size:12px; }
body.v7-app.page-animals .animal-nav-more summary { cursor:pointer; list-style:none; padding:10px; border-radius:var(--v7-radius-sm); }
body.v7-app.page-animals .animal-nav-more[open] summary { background:var(--v7-green-100); }
body.v7-app.page-animals .animal-nav-more>div { position:absolute; z-index:20; right:0; top:calc(100% + 4px); min-width:220px; padding:8px; background:white; border:1px solid var(--v7-line); border-radius:var(--v7-radius); box-shadow:var(--v7-shadow); }
body.v7-app.page-animals .animal-nav-more a { display:block; padding:10px; border-radius:6px; color:var(--v7-ink); text-decoration:none; }
body.v7-app.page-animals .animal-nav-more a:hover { background:var(--v7-green-50); }
@media(min-width:1101px) {
 body.v7-app.page-animals .animal-statistics-totals .filtered-total-cards { grid-template-columns:repeat(5,minmax(0,1fr))!important; }
}
body.v7-app.page-animals .animal-metrics { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--v7-space-3); }
body.v7-app.page-animals .animal-metric { text-decoration:none; }
body.v7-app.page-animals .animal-metric:hover { border-color:var(--v7-line-strong)!important; }
body.v7-app.page-animals .animal-metric>span { display:flex; justify-content:space-between; align-items:center; gap:8px; }
body.v7-app.page-animals .animal-metric>strong { font-variant-numeric:tabular-nums; }
body.v7-app.page-animals .animal-metric>small { display:flex; justify-content:space-between; gap:8px; order:2; color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-metric i { width:10px; height:10px; border-radius:50%; background:var(--v7-green-600); }
body.v7-app.page-animals .animal-metric-heifer i { background:#a1a5c6; }
body.v7-app.page-animals .animal-metric-calf i { background:#d7b777; }
body.v7-app.page-animals .animal-attention { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; }
body.v7-app.page-animals .animal-attention>a { display:flex; align-items:center; gap:12px; padding:16px; background:var(--v7-white); border:1px solid var(--v7-line); border-radius:var(--v7-radius); color:var(--v7-ink); text-decoration:none; }
body.v7-app.page-animals .animal-attention>a>span:last-child { margin-left:auto; }
body.v7-app.page-animals .animal-attention strong { display:block; font-size:12px; font-weight:650; }
body.v7-app.page-animals .animal-attention small { display:block; color:var(--v7-muted); font-size:11px; margin-top:3px; }
body.v7-app.page-animals .animal-indicator { display:grid; place-items:center; flex:0 0 38px; width:38px; height:38px; border-radius:var(--v7-radius-sm); background:var(--v7-green-100); color:var(--v7-green-900); font-size:16px; font-weight:700; }
body.v7-app.page-animals .animal-indicator-alert { background:#fbe7e5; color:var(--v7-danger); }
body.v7-app.page-animals .animal-indicator-warm { background:#fdf1dc; color:#7a5a12; }
body.v7-app.page-animals .animal-columns { display:grid; grid-template-columns:minmax(0,1.3fr) minmax(0,1fr); gap:var(--v7-space-4); align-items:start; }
body.v7-app.page-animals .animal-surface { min-width:0; border:1px solid var(--v7-line); border-radius:var(--v7-radius); background:white; box-shadow:var(--v7-shadow); overflow:hidden; }
body.v7-app.page-animals .animal-section-heading { display:flex; flex-wrap:wrap; justify-content:space-between; gap:16px; align-items:center; padding:14px 18px; border-bottom:1px solid var(--v7-line); }
body.v7-app.page-animals .animal-section-heading h2 { margin:0; font-size:18px; line-height:1.3; color:var(--v7-green-900); font-weight:700; }
body.v7-app.page-animals .animal-section-heading h2>small { display:block; font-size:11px; color:var(--v7-muted); font-weight:400; letter-spacing:0; margin-top:5px; }
body.v7-app.page-animals .animal-section-heading>a { font-size:12px; text-decoration:none; font-weight:650; }
body.v7-app.page-animals .animal-section-heading>small { color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-section-footer { margin-top:6px; padding:14px 18px; border-top:1px solid var(--v7-line); background:var(--v7-green-50); font-size:11px; color:var(--v7-muted); line-height:1.7; }
body.v7-app.page-animals .animal-agenda-row { display:flex; align-items:center; gap:15px; margin:0 18px; padding:18px 0; border-bottom:1px solid var(--v7-line); }
body.v7-app.page-animals .animal-agenda-row:last-child { border-bottom:0; }
body.v7-app.page-animals .animal-date-tile { flex:0 0 68px; border:1px solid var(--v7-line); background:var(--v7-green-50); border-radius:var(--v7-radius-sm); text-align:center; padding:7px 3px; color:var(--v7-green-900); }
body.v7-app.page-animals .animal-date-tile strong { display:block; font-size:23px; line-height:1.2; font-weight:650; }
body.v7-app.page-animals .animal-date-tile small { display:block; font-size:11px; white-space:nowrap; }
body.v7-app.page-animals .animal-date-late { background:#fbe7e5; border-color:#efc1bd; color:var(--v7-danger); }
body.v7-app.page-animals .animal-agenda-content { flex:1; min-width:0; }
body.v7-app.page-animals .animal-agenda-content>strong { display:block; font-size:13px; font-weight:650; }
body.v7-app.page-animals .animal-agenda-content>a { display:block; margin:3px 0; font-size:12px; text-decoration:none; }
body.v7-app.page-animals .animal-agenda-content>a span { color:var(--v7-muted); }
body.v7-app.page-animals .animal-agenda-content>small { display:block; color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-agenda-end { display:flex; flex-direction:column; align-items:flex-end; gap:10px; }
body.v7-app.page-animals .animal-badge { display:inline-flex; gap:5px; align-items:center; padding:4px 9px; border-radius:6px; font-size:11px; line-height:1.5; font-weight:650; white-space:nowrap; }
body.v7-app.page-animals :is(.animal-badge-cow,.animal-avatar-cow) { background:var(--v7-green-100); color:var(--v7-green-900); }
body.v7-app.page-animals :is(.animal-badge-heifer,.animal-avatar-heifer) { background:#ececf6; color:#5f6081; }
body.v7-app.page-animals :is(.animal-badge-calf,.animal-avatar-calf,.animal-badge-warm) { background:#f8efd9; color:#896722; }
body.v7-app.page-animals .animal-badge-neutral { background:var(--v7-canvas); color:var(--v7-muted); }
body.v7-app.page-animals .animal-badge-alert { background:#fbe7e5; color:var(--v7-danger); }
body.v7-app.page-animals .animal-timeline { list-style:none; margin:0; padding:4px 18px; }
body.v7-app.page-animals .animal-timeline>li:not(.animal-empty) { position:relative; display:flex; align-items:flex-start; gap:13px; padding:17px 0; }
body.v7-app.page-animals .animal-timeline>li:not(:last-child):not(.animal-empty)::after { content:""; position:absolute; left:4px; top:29px; bottom:-20px; width:1px; background:var(--v7-line); }
body.v7-app.page-animals .animal-timeline-dot { position:relative; z-index:1; margin-top:5px; width:9px; height:9px; flex:0 0 9px; border-radius:50%; background:var(--v7-green-600); box-shadow:0 0 0 4px white; }
body.v7-app.page-animals .animal-timeline a { font-size:13px; font-weight:650; text-decoration:none; }
body.v7-app.page-animals .animal-timeline p { margin:3px 0; font-size:12px; color:var(--v7-muted); }
body.v7-app.page-animals .animal-timeline small { color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-timeline-detail>li>div { width:100%; }
body.v7-app.page-animals .animal-timeline-title { display:flex; justify-content:space-between; gap:12px; font-size:13px; }
body.v7-app.page-animals .animal-timeline-title time { color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-dot { width:8px; height:8px; border-radius:50%; background:var(--v7-green-600); }
body.v7-app.page-animals .animal-empty { text-align:center; padding:38px 24px; color:var(--v7-muted); }
body.v7-app.page-animals .animal-empty strong { display:block; color:var(--v7-ink); font-size:14px; }
body.v7-app.page-animals .animal-empty p { font-size:12px; max-width:350px; margin:10px auto 0; line-height:1.75; }
body.v7-app.page-animals .animal-empty .button { margin-top:16px; }
body.v7-app.page-animals .animal-empty-symbol { width:38px; height:38px; border-radius:50%; background:var(--v7-green-50); color:var(--v7-green-700); display:grid; place-items:center; margin:0 auto 16px; }
body.v7-app.page-animals .animal-calf-callout { display:flex; align-items:center; gap:18px; border:1px solid var(--v7-line); border-radius:var(--v7-radius); padding:18px; background:var(--v7-green-50); color:var(--v7-green-900); text-decoration:none; }
body.v7-app.page-animals .animal-calf-mark { display:grid; place-items:center; width:44px; height:44px; flex-shrink:0; background:var(--v7-green-100); border-radius:var(--v7-radius-sm); font-size:25px; }
body.v7-app.page-animals .animal-calf-callout strong { display:block; font-size:15px; font-weight:650; }
body.v7-app.page-animals .animal-calf-callout small { display:block; font-size:11px; color:var(--v7-muted); margin-top:4px; }
body.v7-app.page-animals .animal-callout-action { margin-left:auto; font-size:12px; white-space:nowrap; font-weight:650; }
body.v7-app.page-animals .animal-extra-filters { flex-basis:100%; font-size:12px; padding-top:4px; }
body.v7-app.page-animals .animal-extra-filters summary { cursor:pointer; color:var(--v7-green-700); width:fit-content; padding:4px 0; }
body.v7-app.page-animals .animal-milk-filter-note { flex:1 1 100%; min-width:0; margin:0; }
body.v7-app.page-animals .animal-milk-table caption { text-align:left; padding:10px 0; font-weight:650; color:var(--v7-green-900); }
body.v7-app.page-animals .animal-extra-filters .animal-form-grid { grid-template-columns:repeat(3,minmax(0,1fr)); padding-top:16px; }
body.v7-app.page-animals .animal-register-meta { display:flex; flex-wrap:wrap; gap:10px 24px; padding:12px 18px; background:var(--v7-green-50); color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-surface>.table-wrap { border:0!important; border-radius:0!important; margin:0!important; width:100%; }
body.v7-app.page-animals table.animal-table td { white-space:normal; }
body.v7-app.page-animals table.animal-table td small { display:block; color:var(--v7-muted); font-size:11px; margin-top:5px; }
body.v7-app.page-animals .animal-name-cell { display:flex; align-items:center; gap:12px; color:var(--v7-ink); text-decoration:none; }
body.v7-app.page-animals .animal-name-cell strong { font-size:13px; font-weight:650; }
body.v7-app.page-animals .animal-avatar { display:inline-grid; place-items:center; width:38px; height:38px; border-radius:var(--v7-radius-sm); flex-shrink:0; font-size:17px; font-weight:650; text-transform:uppercase; }
body.v7-app.page-animals .animal-avatar-large { width:56px; height:56px; border-radius:var(--v7-radius); font-size:26px; }
body.v7-app.page-animals .animal-open-link { text-decoration:none; font-size:11px; white-space:nowrap; font-weight:650; }
body.v7-app.page-animals .animal-back { font-size:12px; text-decoration:none; color:var(--v7-green-700); width:fit-content; }
body.v7-app.page-animals .animal-profile-identity { display:flex; align-items:center; gap:16px; min-width:0; }
body.v7-app.page-animals .animal-profile-title { flex:1; min-width:0; overflow-wrap:anywhere; }
body.v7-app.page-animals .animal-profile-actions { display:flex; flex-wrap:wrap; align-items:center; gap:10px; justify-content:flex-end; }
body.v7-app.page-animals .animal-profile-tabs { display:flex; gap:4px; width:fit-content; max-width:100%; overflow-x:auto; padding:6px; border:1px solid var(--v7-line); background:var(--v7-green-50); border-radius:var(--v7-radius); }
body.v7-app.page-animals .animal-profile-tabs a { padding:8px 12px; color:var(--v7-green-900); text-decoration:none; font-size:13px; border-radius:var(--v7-radius-sm); white-space:nowrap; }
body.v7-app.page-animals .animal-profile-tabs a[aria-current] { background:var(--v7-green-700); color:var(--v7-white); font-weight:650; }
body.v7-app.page-animals .animal-profile-tabs a:not([aria-current]):hover { background:var(--v7-green-100); }
body.v7-app.page-animals .animal-facts { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--v7-space-4); padding:18px; margin:0; }
body.v7-app.page-animals .animal-facts-four { grid-template-columns:repeat(4,minmax(0,1fr)); }
body.v7-app.page-animals .animal-facts dt { color:var(--v7-muted); font-size:11px; margin-bottom:5px; }
body.v7-app.page-animals .animal-facts dd { margin:0; color:var(--v7-ink); font-size:14px; font-weight:600; overflow-wrap:anywhere; }
body.v7-app.page-animals .animal-note { margin:0 18px 18px; padding:16px; background:var(--v7-green-50); border-radius:var(--v7-radius-sm); font-size:12px; }
body.v7-app.page-animals .animal-prewrap { white-space:pre-wrap; overflow-wrap:anywhere; }
body.v7-app.page-animals .animal-notice { padding:14px 18px; border-radius:var(--v7-radius-sm); background:#fdf1dc; color:#7a5a12; font-size:12px; }
body.v7-app.page-animals .animal-form-section>.animal-notice { margin:16px 18px 0; }
body.v7-app.page-animals .animal-offspring { display:flex; flex-wrap:wrap; gap:14px; padding:18px; }
body.v7-app.page-animals .animal-offspring>a { flex:1 1 190px; border:1px solid var(--v7-line); border-radius:var(--v7-radius-sm); padding:14px; text-decoration:none; font-size:13px; }
body.v7-app.page-animals .animal-offspring span { display:block; margin-top:5px; color:var(--v7-muted); font-size:11px; }
body.v7-app.page-animals .animal-change-list { margin:0; padding:0 18px; list-style:none; }
body.v7-app.page-animals .animal-change-list li { display:flex; justify-content:space-between; gap:12px; padding:16px 0; border-bottom:1px solid var(--v7-line); font-size:12px; }
body.v7-app.page-animals .animal-edit-layout { display:grid; grid-template-columns:minmax(0,1fr) 280px; gap:var(--v7-space-4); align-items:start; }
body.v7-app.page-animals .animal-form-sections { display:flex; flex-direction:column; gap:var(--v7-space-4); min-width:0; }
body.v7-app.page-animals .animal-form-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px 16px; align-items:start; }
body.v7-app.page-animals .animal-form-section>.animal-form-grid { padding:18px; }
body.v7-app.page-animals .animal-form-grid label small { font-size:11px; font-weight:400; color:var(--v7-muted); line-height:1.6; }
body.v7-app.page-animals .animal-full { grid-column:1/-1; }
body.v7-app.page-animals .animal-step { display:inline-grid; place-items:center; margin-right:9px; width:28px; height:28px; background:var(--v7-green-100); color:var(--v7-green-900); border-radius:var(--v7-radius-sm); font-size:11px; vertical-align:middle; }
body.v7-app.page-animals .animal-side-note { background:var(--v7-green-50); border:1px solid var(--v7-line); padding:18px; border-radius:var(--v7-radius); color:var(--v7-muted); font-size:12px; line-height:1.8; }
body.v7-app.page-animals .animal-side-note h2 { color:var(--v7-green-900); font-size:18px; font-weight:700; line-height:1.35; margin:12px 0 14px; }
body.v7-app.page-animals .animal-help { color:var(--v7-muted); font-size:12px; line-height:1.75; margin:0; }
body.v7-app.page-animals .animal-form-section>.animal-help { padding:0 18px; }
body.v7-app.page-animals label.animal-checkbox { display:flex; flex-direction:row; align-items:center; gap:10px; margin:18px 18px 12px; font-size:13px; }
body.v7-app.page-animals .animal-checkbox input { width:18px; height:18px; accent-color:var(--v7-green-700); }
body.v7-app.page-animals [data-animal-calf-fields][hidden] { display:none; }
body.v7-app.page-animals :is(.animal-metric,.animal-nav a,.animal-calf-callout,.animal-profile-tabs a,.animal-nav summary):focus-visible { outline:3px solid var(--v7-green-600); outline-offset:3px; }
@media(max-width:1200px) {
 body.v7-app.page-animals .animal-attention { grid-template-columns:1fr; gap:8px; }
 body.v7-app.page-animals .animal-attention>a { padding:12px 16px; }
 body.v7-app.page-animals .animal-attention>a>span:nth-child(2) { display:flex; flex:1; align-items:center; gap:14px; justify-content:space-between; }
 body.v7-app.page-animals .animal-columns { grid-template-columns:1fr; }
 body.v7-app.page-animals .animal-edit-layout { grid-template-columns:minmax(0,1fr) 230px; gap:18px; }
}
@media(max-width:760px) {
 body.v7-app.page-animals .animal-nav { gap:8px; }
 body.v7-app.page-animals .animal-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
 body.v7-app.page-animals .animal-attention>a>span:nth-child(2) { display:block; }
 body.v7-app.page-animals .animal-calf-callout { flex-wrap:wrap; padding:14px; gap:12px; }
 body.v7-app.page-animals .animal-calf-callout>span:nth-child(2) { flex:1; min-width:180px; }
 body.v7-app.page-animals .animal-callout-action { margin-left:56px; }
 body.v7-app.page-animals .animal-section-heading { padding:14px; gap:12px; }
 body.v7-app.page-animals .animal-agenda-row { margin:0 18px; flex-wrap:wrap; gap:12px; }
 body.v7-app.page-animals .animal-agenda-end { width:100%; padding-left:80px; flex-direction:row; align-items:center; justify-content:space-between; }
 body.v7-app.page-animals .animal-timeline { padding:0 18px; }
 body.v7-app.page-animals .animal-section-footer { padding:14px 18px; }
 body.v7-app.page-animals .animal-filters .uniform-filter-grid>.field-wide { flex-basis:100%; }
 body.v7-app.page-animals .animal-extra-filters .animal-form-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
 body.v7-app.page-animals .animal-edit-layout { grid-template-columns:1fr; }
 body.v7-app.page-animals .animal-side-note { font-size:12px; }
 body.v7-app.page-animals .animal-form-section>.animal-form-grid { padding:14px; }
 body.v7-app.page-animals .animal-profile-actions { justify-content:flex-start; }
 body.v7-app.page-animals .animal-facts-four { grid-template-columns:repeat(2,minmax(0,1fr)); }
 body.v7-app.page-animals .animal-change-list li { flex-direction:column; gap:6px; }
}
@media(max-width:440px) {
 body.v7-app.page-animals .animal-form-grid,
 body.v7-app.page-animals .animal-extra-filters .animal-form-grid { grid-template-columns:1fr; }
 body.v7-app.page-animals .animal-profile-tabs a { padding:8px 12px; }
 body.v7-app.page-animals .animal-timeline-title { flex-wrap:wrap; gap:5px; }
}
/* Présentation commune des saisies et rapports d'irrigation. */
body.v7-app form.irrigation-source-catalog-form {
  grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr) minmax(0, 1.2fr) minmax(0, 1.35fr) minmax(0, .65fr) minmax(0, 1.5fr) !important;
  align-items: end !important;
}
body.v7-app .irrigation-source-catalog-form textarea[name="remarks"] { min-height: var(--v7-control); height: var(--v7-control); }
@media (max-width: 1200px) {
  body.v7-app form.irrigation-source-catalog-form { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 960px) {
  body.v7-app form.irrigation-source-catalog-form { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 620px) {
  body.v7-app form.irrigation-source-catalog-form { grid-template-columns: minmax(0, 1fr) !important; }
}
body.v7-app [data-irrigation-water] [hidden] { display: none !important; }
body.v7-app .irrigation-preview { display: flex; flex-wrap: wrap; gap: 12px 24px; margin-top: 16px; }
body.v7-app .irrigation-history-json { white-space: pre-wrap; overflow-wrap: anywhere; max-width: 100%; }
/* Les cartes réutilisent la présentation commune des graphiques du fourrage. */
body.v7-app.page-irrigation-statistics .irrigation-kpis-readings { margin: 12px 0 16px; }
body.v7-app.page-irrigation-statistics [data-irrigation-chart="distance"] { --chart-accent: #267b88; --chart-soft: #edf6f7; }
body.v7-app.page-irrigation-statistics [data-irrigation-chart="monthly"] { --chart-accent: #3378a1; --chart-soft: #edf4f9; }
body.v7-app.page-irrigation-statistics [data-irrigation-chart="parcels"] { --chart-accent: #9c661c; --chart-soft: #fbf5e9; }
body.v7-app.page-irrigation-statistics [data-irrigation-chart="readings"] { --chart-accent: #76649a; --chart-soft: #f3f0f8; }
body.v7-app.page-irrigation-statistics .irrigation-data-table h3 { margin: 14px 0 9px; font-size: 13px; }
body.v7-app [data-parcel-ownership-form] [hidden] { display: none !important; }
body.v7-app .parcel-catalog-navigation { display: flex; flex-wrap: wrap; gap: 8px; }
body.v7-app .parcel-table .parcel-action-cell { width: 1%; text-align: right !important; white-space: nowrap; }
body.v7-app .parcel-table .parcel-actions { display: inline-flex; flex-wrap: nowrap; justify-content: flex-end; }
body.v7-app .parcel-actions > * { flex: 0 0 auto; }
body.v7-app .parcel-profile-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 18px; padding: 0 0 10px; border-bottom: 1px solid var(--v7-line); }
body.v7-app .parcel-profile-tabs a { display: inline-flex; align-items: center; padding: 9px 14px; border-radius: 8px; color: var(--v7-green-800); text-decoration: none; font-weight: 600; }
body.v7-app .parcel-profile-tabs a[aria-current="page"] { background: var(--v7-green-100); box-shadow: inset 0 0 0 1px var(--v7-line); }
body.v7-app .parcel-profile-tabs a:hover { background: var(--v7-green-50); }
body.v7-app .parcel-profile-actions, body.v7-app .parcel-form-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin-top: 16px; }
body.v7-app .parcel-profile-actions > *, body.v7-app .parcel-form-actions > * { flex: 0 0 auto; white-space: nowrap; }
body.v7-app .parcel-field-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: end; gap: 12px 16px; }
body.v7-app .parcel-field-grid > label, body.v7-app .parcel-cadastral-row > label, body.v7-app .parcel-analysis-measure > label { min-width: 0; margin: 0; }
body.v7-app .parcel-field-grid :is(input:not([type="checkbox"]), select, textarea), body.v7-app .parcel-cadastral-row :is(input, select), body.v7-app .parcel-analysis-measure input { width: 100%; min-width: 0; }
body.v7-app .parcel-field-grid > .parcel-field-full { grid-column: 1 / -1; }
body.v7-app .parcel-agricultural-form { display: grid; gap: 18px; }
body.v7-app .parcel-cadastral-row { display: grid; grid-template-columns: minmax(120px, .7fr) minmax(180px, 1.25fr) minmax(140px, 1fr) minmax(180px, 1.2fr) auto; gap: 12px; align-items: end; padding: 14px 0; border-top: 1px solid var(--v7-line); }
body.v7-app .parcel-cadastral-row > button { white-space: nowrap; margin-bottom: 1px; }
body.v7-app .parcel-data-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px 24px; margin: 0; }
body.v7-app .parcel-data-grid > div { min-width: 0; }
body.v7-app .parcel-data-grid dt { color: var(--v7-muted); font-size: 13px; margin-bottom: 5px; }
body.v7-app .parcel-data-grid dd { margin: 0; overflow-wrap: anywhere; white-space: pre-wrap; }
body.v7-app .parcel-data-grid dd small { display: block; margin-top: 4px; color: var(--v7-muted); }
body.v7-app .parcel-analysis-measures { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin: 18px 0; }
body.v7-app .parcel-analysis-measure { display: grid; grid-template-columns: 1fr; align-content: start; gap: 10px; padding: 14px; border: 1px solid var(--v7-line); border-radius: 10px; min-width: 0; }
body.v7-app .parcel-analysis-measure h3 { margin: 0 0 2px; font-size: 15px; }
body.v7-app .parcel-text-value { white-space: pre-wrap; overflow-wrap: anywhere; }
body.v7-app [data-parcel-cadastral-status]:empty { display: none; }
body.v7-app .parcel-map-panel { isolation: isolate; }
body.v7-app .parcel-map-canvas { width: 100%; height: min(70vh, 720px); min-height: 430px; border: 1px solid var(--v7-line); border-radius: 10px; background: var(--v7-green-50); }
body.v7-app .parcel-map-view-controls { position: relative; z-index: 1100; display: flex; flex-wrap: wrap; align-items: end; gap: 12px; margin: 12px 0; }
body.v7-app .parcel-map-view-controls > label { flex: 0 1 280px; min-width: 160px; margin: 0; }
body.v7-app .parcel-map-view-controls select { width: 100%; }
body.v7-app .parcel-map-label-menu { position: relative; flex: 0 1 auto; min-width: 0; max-width: 100%; }
body.v7-app .parcel-map-label-menu > button { max-width: 100%; white-space: normal; }
body.v7-app .parcel-map-label-options { position: absolute; top: calc(100% + 6px); left: 0; z-index: 1200; width: 290px; max-width: calc(100vw - 64px); max-height: min(340px, 50vh); overflow-y: auto; box-sizing: border-box; padding: 8px; border: 1px solid var(--v7-line); border-radius: 10px; background: #fff; box-shadow: 0 5px 18px rgba(22, 60, 40, .18); }
body.v7-app .parcel-map-label-options[hidden] { display: none !important; }
body.v7-app .parcel-map-label-options > label.check { display: flex; flex-direction: row; align-items: center; gap: 10px; min-width: 0; margin: 0; padding: 9px 8px; border-radius: 5px; font-weight: 500; cursor: pointer; }
body.v7-app .parcel-map-label-options > label.check:hover, body.v7-app .parcel-map-label-options > label.check:focus-within { background: var(--v7-green-50); }
body.v7-app .parcel-map-label-options input[type="checkbox"] { flex: 0 0 auto; width: auto; min-width: 0; margin: 0; }
body.v7-app .parcel-map-label-menu :is(button, input):focus-visible { outline: 3px solid var(--v7-green-600); outline-offset: 3px; }
body.v7-app .parcel-map-view-controls > button { flex: 0 0 auto; margin-left: auto; white-space: nowrap; }
body.v7-app.parcel-map-expanded-open { overflow: hidden; }
body.v7-app #main-content .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) { display: flex; flex-direction: column; width: 100%; height: 100vh; height: 100dvh; max-width: none !important; margin: 0 !important; padding: 16px !important; border: 0 !important; border-radius: 0 !important; box-sizing: border-box; overflow: auto !important; background: var(--v7-bg, #f7faf8); }
body.v7-app .parcel-map-panel.parcel-map-expanded { position: fixed !important; inset: 0 !important; z-index: 20000; }
body.v7-app .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) > :not(.parcel-map-canvas) { flex-shrink: 0; }
body.v7-app .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) > h2 { margin-top: 0; margin-bottom: 0; }
body.v7-app .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) .parcel-map-canvas { flex: 1 0 180px; height: auto; min-height: 180px; }
body.v7-app .parcel-map-panel::backdrop { background: var(--v7-bg, #f7faf8); }
body.v7-app .parcel-map-toolbar { display: flex; flex-wrap: wrap; align-items: end; gap: 12px; margin: 12px 0; }
body.v7-app .parcel-map-toolbar > label:first-of-type { flex: 1 1 220px; }
body.v7-app .parcel-map-toolbar input[type="color"] { width: 72px; height: 40px; }
body.v7-app .parcel-map-buttons { display: flex; flex-wrap: wrap; gap: 8px; }
body.v7-app .parcel-map-panel [data-parcel-map-status] { margin: 12px 0; }
body.v7-app .parcel-map-view-status:empty { display: none; }
body.v7-app .parcel-map-panel [data-error="1"] { color: var(--v7-danger, #b42318); font-weight: 700; }
body.v7-app .parcel-map-panel[data-saving="1"] .parcel-map-canvas { pointer-events: none; }
body.v7-app .parcel-popup { display: grid; gap: 4px; min-width: 0; }
body.v7-app .parcel-map-popup .leaflet-popup-content-wrapper { max-width: calc(100vw - 32px); }
body.v7-app .parcel-map-popup .leaflet-popup-content { max-width: calc(100vw - 72px); white-space: normal; }
body.v7-app .parcel-popup > * { min-width: 0; white-space: normal; overflow-wrap: anywhere; }
body.v7-app .parcel-map-canvas :is(.parcel-map-popup, .parcel-map-label) { font-size: 12px; }
body.v7-app .parcel-map-canvas .parcel-map-label { width: max-content; max-width: min(260px, calc(100vw - 80px)); padding: 4px 8px; border: 1px solid #355443; border-radius: 5px; background: rgba(255, 255, 255, .95); color: #163c28; box-shadow: 0 1px 5px rgba(0, 0, 0, .3); font-weight: 650; line-height: 1.35; white-space: pre-line; overflow-wrap: anywhere; text-align: left; pointer-events: none; }
body.v7-app .parcel-map-canvas .leaflet-container { font: inherit; }
body.v7-app .parcel-map-panel .leaflet-draw-toolbar a { background-color: #fff; }
@media (max-width: 1100px) {
  body.v7-app .parcel-field-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  body.v7-app .parcel-cadastral-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.v7-app .parcel-cadastral-row > button { justify-self: end; grid-column: 1 / -1; }
}
@media (max-width: 850px) {
  body.v7-app .parcel-field-grid, body.v7-app .parcel-data-grid, body.v7-app .parcel-analysis-measures { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
  body.v7-app .parcel-field-grid, body.v7-app .parcel-data-grid, body.v7-app .parcel-cadastral-row, body.v7-app .parcel-analysis-measures { grid-template-columns: minmax(0, 1fr); }
  body.v7-app .parcel-profile-tabs { gap: 4px; }
  body.v7-app .parcel-profile-tabs a { padding: 8px 10px; }
  body.v7-app .parcel-form-actions { justify-content: flex-start; }
}
@media (max-width: 700px) {
  body.v7-app .parcel-map-canvas { height: 430px; min-height: 0; }
  body.v7-app .parcel-map-toolbar > label, body.v7-app .parcel-map-buttons { width: 100%; }
  body.v7-app .parcel-map-toolbar > label:first-of-type { flex-basis: 100%; }
  body.v7-app .parcel-map-buttons button { flex: 1 1 150px; }
  body.v7-app .parcel-map-view-controls { align-items: stretch; }
  body.v7-app .parcel-map-view-controls > label { flex: 1 1 180px; }
  body.v7-app .parcel-map-label-menu { flex: 1 1 220px; }
  body.v7-app .parcel-map-label-menu > button { width: 100%; }
  body.v7-app .parcel-map-view-controls > button { flex: 1 1 auto; margin-left: 0; }
  body.v7-app #main-content .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) { padding: 10px !important; }
}
@media print {
  body.v7-app .parcel-map-toolbar, body.v7-app .parcel-map-canvas, body.v7-app .parcel-map-view-controls { display: none; }
  body.v7-app.parcel-map-expanded-open { overflow: visible; }
  body.v7-app .parcel-map-panel:is(:fullscreen, .parcel-map-expanded) { position: static !important; inset: auto !important; height: auto; overflow: visible !important; }
}
/* Prévisions des parcelles : mêmes cartes et tableaux que les statistiques. */
body.v7-app .parcel-weather-filters .uniform-filter-grid { grid-template-columns: minmax(0, 420px); }
body.v7-app .parcel-weather-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
body.v7-app .parcel-weather-kpis article > p { margin: 7px 0 0; color: var(--v7-muted); font-size: 11px; }
body.v7-app .parcel-weather-charts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
body.v7-app .parcel-weather-chart-card[data-parcel-weather-chart="temperature"] { --chart-accent: #a75348; --chart-soft: #fbf0ed; }
body.v7-app .parcel-weather-chart-card[data-parcel-weather-chart="precipitation"] { --chart-accent: #356aab; --chart-soft: #eef4fb; }
body.v7-app .parcel-weather-symbol { display: inline-block; min-width: 1.5em; text-align: center; }
body.v7-app .parcel-weather-metadata { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin: 16px 0 0; }
body.v7-app .parcel-weather-metadata dt { color: var(--v7-muted); font-size: 11px; }
body.v7-app .parcel-weather-metadata dd { margin: 4px 0 0; overflow-wrap: anywhere; }
@media (max-width: 1100px) {
  body.v7-app .parcel-weather-kpis,
  body.v7-app .parcel-weather-metadata { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.v7-app .parcel-weather-charts { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 700px) {
  body.v7-app .parcel-weather-kpis,
  body.v7-app .parcel-weather-metadata { grid-template-columns: minmax(0, 1fr); }
}
/* Compteurs : mêmes panneaux et graphiques que les autres modules métier. */
body.v7-app .meter-catalog-navigation { display: flex; flex-wrap: wrap; gap: 8px; }
body.v7-app .meter-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
body.v7-app .meter-history-json { white-space: pre-wrap; overflow-wrap: anywhere; }
body.v7-app .meter-annual-table th, body.v7-app .meter-annual-table td { white-space: nowrap; }
body.v7-app .meter-annual-table td { text-align: right; }
body.v7-app .meter-annual-table td:first-child { text-align: left; }
body.v7-app .meter-import-mapping select { min-width: 220px; max-width: 100%; }
body.v7-app .meter-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
body.v7-app .meter-summary article { border: 1px solid var(--v7-line); border-radius: 10px; padding: 14px; }
body.v7-app .meter-summary strong { display: block; margin-top: 6px; font-size: 20px; }
@media print { body.v7-app [data-meter-chart] { break-inside: avoid; } }

/* Les cartes et indicateurs utilisent les composants de statistiques communs. */
body.v7-app .meter-annual-filters .uniform-filter-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); }
body.v7-app .meter-statistics-filters .uniform-filter-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
body.v7-app .meter-chart-card[data-chart-mode="index"] { --chart-accent: #3378a1; --chart-soft: #edf4f9; }
body.v7-app .meter-chart-card[data-chart-mode="stock"] { --chart-accent: #267b88; --chart-soft: #edf6f7; }
body.v7-app .meter-chart-card[data-chart-mode="instant"] { --chart-accent: #76649a; --chart-soft: #f3f0f8; }
body.v7-app .meter-chart-card .forage-chart-header > div { min-width: 0; }
body.v7-app .meter-chart-card h2 { overflow-wrap: anywhere; }
body.v7-app .meter-chart-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 14px 0 16px; }
body.v7-app .meter-chart-kpis article:first-child { background: var(--chart-soft); border-color: var(--chart-soft); }
body.v7-app .meter-chart-kpis article:first-child strong { color: var(--chart-accent); }
body.v7-app .meter-chart-kpis strong { font-size: 19px; }
@media (max-width: 1100px) {
  body.v7-app .meter-annual-filters .uniform-filter-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  body.v7-app .meter-statistics-filters .uniform-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  body.v7-app .meter-annual-filters .uniform-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 700px) {
  body.v7-app .meter-chart-kpis { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 550px) {
  body.v7-app .meter-annual-filters .uniform-filter-grid,
  body.v7-app .meter-statistics-filters .uniform-filter-grid { grid-template-columns: minmax(0, 1fr); }
}
/* Matériel : primitives partagées, fiches et cartes de statistiques. */
body.v7-app .equipment-navigation { display: flex; flex-wrap: wrap; gap: 8px; }
body.v7-app .equipment-history-json { white-space: pre-wrap; overflow-wrap: anywhere; max-width: 100%; }
body.v7-app .equipment-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
body.v7-app .equipment-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
body.v7-app .equipment-facts dt { color: var(--v7-muted); font-size: 12px; }
body.v7-app .equipment-facts dd { margin: 5px 0 0; overflow-wrap: anywhere; }
body.v7-app .equipment-chart-card[data-equipment-chart="usage"] { --chart-accent: #3378a1; --chart-soft: #edf4f9; }
body.v7-app .equipment-chart-card[data-equipment-chart="cost"] { --chart-accent: #9c661c; --chart-soft: #fbf5e9; }
body.v7-app .equipment-chart-card .forage-chart-header > div { min-width: 0; }
body.v7-app .equipment-chart-card h2 { overflow-wrap: anywhere; }
body.v7-app .equipment-statistics-filters .uniform-filter-grid { grid-template-columns: minmax(180px, 2fr) repeat(2, minmax(0, 1fr)); }
body.v7-app .equipment-chart-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 14px 0 16px; }
body.v7-app .equipment-chart-kpis strong { font-size: 19px; }
body.v7-app .equipment-annual-table :is(th,td) { white-space: nowrap; }
body.v7-app .equipment-annual-table td { text-align: right; }
body.v7-app .equipment-annual-table td:first-child { text-align: left; }
@media print { body.v7-app .equipment-chart-card { break-inside: avoid; } }
@media (max-width: 700px) {
  body.v7-app .equipment-chart-kpis { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 550px) {
  body.v7-app .equipment-statistics-filters .uniform-filter-grid { grid-template-columns: minmax(0, 1fr); }
}
/* GED : compléments aux panneaux, tableaux et formulaires communs. */
body.v7-app .documents-preview { display: block; width: 100%; min-height: 650px; border: 1px solid var(--v7-line); border-radius: 8px; background: #fff; }
body.v7-app .documents-image { display: block; max-width: 100%; max-height: 750px; object-fit: contain; margin: 0 auto; }
body.v7-app .documents-note { white-space: pre-wrap; overflow-wrap: anywhere; }
body.v7-app .documents-history-details { display: grid; gap: 8px; }
body.v7-app .documents-history-details dt { font-weight: 700; }
body.v7-app .documents-history-details dd { margin: 3px 0 0; overflow-wrap: anywhere; white-space: pre-wrap; }
body.v7-app .documents-history-details dl { margin: 0; }
@media (max-width: 700px) {
  body.v7-app .documents-preview { min-height: 430px; }
}
@media print {
  body.v7-app .documents-preview, body.v7-app .documents-image { display: none; }
}
/* Identité de la ferme et formulaire d’administration. */
.farm-identity-logo,
body.v7-app .brand-logo.farm-identity-logo {
  object-fit: contain;
}
body.v7-app .farm-profile-form > .farm-profile-section {
  grid-column: 1 / -1;
}
body.v7-app .farm-profile-section .form-section-grid > label { grid-column: span 3; }
body.v7-app .farm-profile-section .form-section-grid > .field-wide { grid-column: span 6; }
body.v7-app .farm-logo-editor {
  display: grid;
  grid-template-columns: 160px minmax(0, 1fr);
  align-items: start;
  gap: 16px;
}
body.v7-app .farm-logo-preview {
  width: 160px;
  height: 160px;
  max-width: 100%;
  padding: 8px;
  border: 1px solid var(--v7-line);
  border-radius: var(--v7-radius-sm);
  background: #fff;
  object-fit: contain;
}
body.v7-app .farm-logo-controls {
  display: grid;
  gap: 10px;
  min-width: 0;
}
body.v7-app .farm-logo-controls p { margin: 0; }
@media (max-width: 960px) {
  body.v7-app .farm-profile-section .form-section-grid > label { grid-column: span 6; }
}
@media (max-width: 620px) {
  body.v7-app .farm-profile-section .form-section-grid > :is(label,.field-wide) { grid-column: 1 / -1; }
  body.v7-app .farm-logo-editor { grid-template-columns: minmax(0, 1fr); }
}
/* Centre de sauvegarde : composants et couleurs communs à l'administration. */
body.v7-app .backup-workspace { display: grid; gap: 18px; min-width: 0; }
body.v7-app .backup-workspace > *,
body.v7-app .backup-section-heading > * { min-width: 0; }
body.v7-app .backup-workspace :is(section,nav)[id] { scroll-margin-top: 100px; }
body.v7-app .backup-overview { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
body.v7-app .backup-overview-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 9px;
  min-width: 0;
  padding: 18px;
  border: 1px solid var(--v7-line);
  border-radius: var(--v7-radius);
  background: var(--v7-white);
  box-shadow: var(--v7-shadow);
}
body.v7-app .backup-card-label { color: var(--v7-muted); font-size: 11px; font-weight: 700; }
body.v7-app .backup-overview-card > strong { color: var(--v7-green-950); font-size: 21px; line-height: 1.25; overflow-wrap: anywhere; }
body.v7-app .backup-overview-card > .muted { font-size: 11px; }
body.v7-app .backup-navigation { display: flex; flex-wrap: wrap; gap: 6px; padding: 6px; border: 1px solid var(--v7-line); border-radius: 10px; background: var(--v7-white); }
body.v7-app .backup-navigation a { display: inline-flex; align-items: center; min-height: 38px; padding: 8px 14px; border-radius: 7px; color: var(--v7-green-900); font-size: 12px; font-weight: 700; text-decoration: none; }
body.v7-app .backup-navigation a:hover { background: var(--v7-green-100); }
body.v7-app .backup-workspace :is(a,button,summary,pre):focus-visible { outline: 2px solid var(--v7-green-700); outline-offset: 3px; }
body.v7-app .backup-section-heading { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: 14px; margin-bottom: 18px; }
body.v7-app .backup-section-heading > div { flex: 1 1 300px; }
body.v7-app .backup-section-heading h2 { margin: 0; color: var(--v7-green-950); font-size: 16px; }
body.v7-app .backup-section-heading p { margin: 7px 0 0; color: var(--v7-muted); font-size: 12px; }
body.v7-app .backup-section-heading .backup-eyebrow { margin: 0 0 5px; color: var(--v7-green-700); font-size: 10px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; }
body.v7-app .backup-workspace :is(button,a.button) { flex: 0 0 auto; white-space: nowrap; }
body.v7-app .backup-status { display: inline-flex; align-items: center; gap: 6px; width: fit-content; max-width: 100%; padding: 5px 9px; border-radius: 999px; background: #edf1ef; color: #4d6255; font-size: 11px; font-weight: 750; line-height: 1.3; }
body.v7-app .backup-status::before { content: ''; flex: 0 0 6px; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
body.v7-app .backup-status.is-succeeded { background: #e8f4eb; color: #22633b; }
body.v7-app .backup-status.is-failed { background: #fcebe8; color: #a12b23; }
body.v7-app .backup-status.is-queued { background: #fff2d9; color: #885713; }
body.v7-app .backup-status.is-running { background: #eaf1fb; color: #2d5e91; }
body.v7-app .backup-workspace .backup-job-panel { border-left: 4px solid var(--v7-green-600) !important; }
body.v7-app .backup-job-panel .backup-section-heading { margin-bottom: 8px; }
body.v7-app .backup-job-reference { margin: 0 0 16px; color: var(--v7-muted); font-size: 12px; overflow-wrap: anywhere; }
body.v7-app .backup-workspace .backup-job-output { width: 100%; max-width: 100%; max-height: 320px; margin: 14px 0; padding: 16px; overflow: auto; border: 1px solid var(--v7-line); border-radius: var(--v7-radius-sm); background: var(--v7-green-50); color: var(--v7-ink); font-size: 12px; white-space: pre-wrap; overflow-wrap: anywhere; }
body.v7-app .backup-archive-list { margin: 14px 0; padding: 14px; border: 1px solid var(--v7-line); border-radius: var(--v7-radius-sm); background: var(--v7-green-50); }
body.v7-app .backup-archive-list h3 { margin: 0 0 8px; font-size: 12px; }
body.v7-app .backup-archive-list ul { margin: 0; padding-left: 18px; max-height: 200px; overflow: auto; font-size: 12px; overflow-wrap: anywhere; }
body.v7-app .backup-schedule-panel h2 { margin: 0 0 10px; color: var(--v7-green-900); font-size: 14px; }
body.v7-app .backup-schedule-panel p { font-size: 12px; }
body.v7-app .backup-create-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
body.v7-app .backup-action-card { display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; gap: 20px; min-width: 0; padding: 20px; border: 1px solid var(--v7-line); border-radius: 10px; background: var(--v7-white); }
body.v7-app .backup-action-card-featured { border-color: var(--v7-line-strong); background: var(--v7-green-50); }
body.v7-app .backup-action-card h3 { margin: 7px 0 8px; color: var(--v7-green-900); font-size: 16px; }
body.v7-app .backup-action-card p { margin: 0; color: var(--v7-muted); font-size: 12px; }
body.v7-app .backup-storage-path { display: flex; flex-wrap: wrap; gap: 5px 12px; margin: 14px 0 0; color: var(--v7-muted); font-size: 11px; overflow-wrap: anywhere; }
body.v7-app .backup-connection-tests { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--v7-line); }
body.v7-app .backup-connection-tests h3 { margin: 0; font-size: 13px; }
body.v7-app .backup-connection-tests p { margin: 4px 0 14px; font-size: 12px; }
body.v7-app .backup-workspace .backup-inline-actions { justify-content: flex-start !important; }
body.v7-app .backup-source-picker { margin-bottom: 20px; padding: 16px; border: 1px solid var(--v7-line); border-radius: 10px; background: var(--v7-green-50); }
body.v7-app .backup-step-title { display: flex; align-items: center; gap: 9px; margin: 0 0 14px; color: var(--v7-green-900); font-size: 13px; }
body.v7-app .backup-step-title > span { display: inline-grid; flex: 0 0 24px; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--v7-green-100); color: var(--v7-green-900); font-size: 11px; }
body.v7-app .backup-workspace .backup-source-form > label { grid-column: span 6; }
body.v7-app .backup-workspace .backup-source-form > .form-actions { grid-column: span 6; justify-content: flex-start !important; padding: 0; border: 0; }
body.v7-app .backup-source-picker > p { margin: 12px 0 0; font-size: 11px; }
body.v7-app .backup-workspace .backup-operation-form > label { grid-column: span 3; }
body.v7-app .backup-workspace .backup-operation-form > .field-wide { grid-column: span 6; }
body.v7-app .backup-workspace .backup-operation-form > .backup-archive-field { grid-column: span 9; }
body.v7-app .backup-workspace .entity-form > .field-full { grid-column: 1 / -1; }
body.v7-app .backup-operation-form > .backup-step-title { margin-bottom: 0; }
body.v7-app .backup-operation-form > p { margin: 0; font-size: 12px; }
body.v7-app .backup-key-details { border: 1px solid var(--v7-line); border-radius: var(--v7-radius-sm); background: var(--v7-green-50); }
body.v7-app .backup-key-details > summary { padding: 12px 14px; color: var(--v7-green-900); font-size: 12px; font-weight: 700; cursor: pointer; }
body.v7-app .backup-key-body { display: grid; gap: 14px; padding: 0 14px 14px; }
body.v7-app .backup-key-body > label:last-child { max-width: 420px; }
body.v7-app .backup-workspace .backup-operation-form > .backup-test-actions { justify-content: flex-start !important; padding-top: 0; border-top: 0; }
body.v7-app .backup-workspace .backup-confirmation { margin-top: 10px; padding: 16px; border-color: #edc8c2; background: #fff9f7; }
body.v7-app .backup-confirmation > legend { color: #913c30; }
body.v7-app .backup-confirmation > p { margin: 0 0 16px; font-size: 12px; }
body.v7-app .backup-confirmation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; align-items: end; }
body.v7-app .backup-workspace .backup-confirmation-actions { align-items: center; margin-top: 16px !important; padding-top: 14px; border-top: 1px solid #edc8c2; }
body.v7-app .backup-confirmation-actions > p { flex: 1 1 280px; min-width: 0; margin: 0; font-size: 11px; }
body.v7-app .backup-note { margin: 0 0 18px; padding: 12px 14px; border-left: 3px solid var(--v7-green-600); border-radius: 0 var(--v7-radius-sm) var(--v7-radius-sm) 0; background: var(--v7-green-50); font-size: 12px; }
body.v7-app .backup-settings-section { display: grid; gap: 14px; min-width: 0; }
body.v7-app .backup-settings-section > .backup-section-heading { margin: 0; padding: 0 2px; }
body.v7-app .backup-workspace .backup-settings-form { align-items: start !important; }
body.v7-app .backup-settings-form > fieldset { padding: 18px; background: var(--v7-green-50); }
body.v7-app .backup-settings-form fieldset > legend { font-size: 13px; }
body.v7-app .backup-settings-form fieldset > p { margin: 0 0 14px; font-size: 12px; }
body.v7-app .backup-settings-form fieldset > p:last-child { margin: 12px 0 0; }
body.v7-app .backup-settings-form fieldset > h3 { margin: 24px 0 8px; font-size: 13px; }
body.v7-app .backup-settings-form .settings-grid { grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); gap: 14px 16px; align-items: end; }
body.v7-app .backup-workspace .backup-history-cleanup { margin-top: 18px; border: 1px solid var(--v7-line); border-radius: var(--v7-radius-sm); overflow: hidden; }
body.v7-app .backup-history-cleanup p { margin: 0; font-size: 12px; }
body.v7-app .backup-empty { display: grid; justify-items: center; gap: 6px; padding: 22px 12px; text-align: center; }

@media (max-width: 1100px) {
  body.v7-app .backup-overview { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 960px) {
  body.v7-app .backup-workspace .backup-operation-form > :is(label,.field-wide,.backup-archive-field) { grid-column: span 6; }
}
@media (max-width: 700px) {
  body.v7-app .backup-create-grid { grid-template-columns: minmax(0, 1fr); }
  body.v7-app .backup-confirmation-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 620px) {
  body.v7-app .backup-workspace { gap: 14px; }
  body.v7-app .backup-overview { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  body.v7-app .backup-overview-card { gap: 7px; padding: 14px; }
  body.v7-app .backup-overview-card > strong { font-size: 19px; }
  body.v7-app .backup-navigation a { flex: 1 1 auto; justify-content: center; }
  body.v7-app .backup-section-heading > div { flex-basis: 100%; }
  body.v7-app .backup-section-heading > a.button,
  body.v7-app .backup-action-card > button { width: 100%; text-align: center; }
  body.v7-app .backup-action-card { padding: 16px; }
  body.v7-app .backup-workspace .backup-source-form > :is(label,.form-actions),
  body.v7-app .backup-workspace .backup-operation-form > :is(label,.field-wide,.backup-archive-field) { grid-column: 1 / -1; }
  body.v7-app .backup-workspace .backup-source-form > .form-actions,
  body.v7-app .backup-workspace .backup-operation-form > .backup-test-actions { flex-direction: column; }
  body.v7-app .backup-workspace .backup-inline-actions,
  body.v7-app .backup-workspace .backup-confirmation-actions { flex-direction: column; align-items: stretch; }
  body.v7-app .backup-inline-actions > *,
  body.v7-app .backup-confirmation-actions > button { width: 100%; text-align: center; }
  body.v7-app .backup-confirmation-actions > p { flex: 0 1 auto; text-align: left; }
  body.v7-app .backup-workspace .backup-confirmation,
  body.v7-app .backup-settings-form > fieldset { padding: 12px; }
}
