/* ============================================================
   BIMREVO — Charte GEOREVO
   Bleu #1A56E8 · Jaune #F5C518 · Montserrat
   ============================================================ */
:root {
  --blue: #1A56E8; --blue-d: #1240B8; --blue-l: #E8EFFD;
  --yellow: #F5C518; --white: #FFFFFF;
  --gray-100: #F1F3F5; --gray-200: #E9ECEF; --gray-400: #ADB5BD;
  --gray-600: #6C757D; --gray-800: #343A40; --gray-900: #212529;
  --green: #1D9E75; --amber: #EF9F27; --red: #E24B4A;
  --header-h: 52px;
  --font: 'Montserrat', system-ui, sans-serif;
  --r: 8px; --rl: 12px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { width: 100%; height: 100%; overflow: hidden; font-family: var(--font); background: #111; }

/* ── HEADER ── */
.gr-header {
  position: fixed; top: 0; left: 0; right: 0; height: var(--header-h);
  background: #fff; border-bottom: 3px solid var(--yellow);
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 14px; z-index: 10000; gap: 10px;
}
.gr-header-left { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.gr-menu-btn {
  width: 34px; height: 34px; border-radius: var(--r);
  background: var(--gray-100); border: none; cursor: pointer;
  display: flex; align-items: center; justify-content: center; color: var(--gray-800);
}
.gr-menu-btn:hover { background: var(--gray-200); }
.gr-brand { font-size: 15px; font-weight: 700; color: var(--blue); display: flex; align-items: center; gap: 5px; }
.gr-g { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--yellow); color: #111; font-size: 13px; font-weight: 800; }
.gr-sep { color: var(--gray-400); font-weight: 300; }
.gr-product { color: var(--blue); }
.gr-header-center {
  font-size: 12px; font-weight: 600; color: var(--gray-600);
  display: flex; align-items: center; gap: 7px;
  flex: 1; justify-content: center;
  min-width: 0;
}
.gr-dot-live { width: 7px; height: 7px; border-radius: 50%; background: var(--green); animation: pulse 2s infinite; }
@keyframes pulse { 0%,100%{box-shadow:0 0 0 2px rgba(29,158,117,.2)} 50%{box-shadow:0 0 0 6px rgba(29,158,117,0)} }

/* ─── BREADCRUMB pro (projet courant + status) ─── */
.gr-breadcrumb {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 12px;
  background: var(--gray-50, #FAFBFC);
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  font-size: 12px; font-weight: 500;
  color: var(--gray-700);
  max-width: 100%;
  overflow: hidden;
  white-space: nowrap;
}
.gr-bc-icon { display: inline-flex; color: var(--blue); flex-shrink: 0; }
.gr-bc-item { text-overflow: ellipsis; overflow: hidden; max-width: 200px; }
.gr-bc-workspace { color: var(--gray-500); font-weight: 500; }
.gr-bc-project { color: var(--gray-900, #0A0E1A); font-weight: 700; }
.gr-bc-sep { color: var(--gray-400); font-weight: 400; }
.gr-bc-status {
  display: inline-flex; align-items: center; gap: 5px;
  margin-left: 4px; padding-left: 10px;
  border-left: 1px solid var(--gray-200);
  font-size: 10px; font-weight: 700; letter-spacing: 0.8px;
  color: var(--green);
  text-transform: uppercase;
}
.gr-bc-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--green);
  box-shadow: 0 0 0 2px rgba(29,158,117,0.18);
  animation: pulse 2s infinite;
}
@media (max-width: 900px) {
  .gr-header-center { display: none; }
}

.gr-header-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.gr-btn {
  display: flex; align-items: center; gap: 5px; padding: 6px 10px;
  background: transparent; border: 0.5px solid var(--gray-200); border-radius: var(--r);
  font-size: 11px; font-weight: 600; font-family: var(--font); color: var(--gray-800);
  cursor: pointer; transition: all .15s; white-space: nowrap;
  text-decoration: none;
}
.gr-btn:hover { background: var(--gray-100); border-color: var(--gray-400); }
.gr-btn-primary { background: var(--blue); color: #fff; border-color: var(--blue); }
.gr-btn-primary:hover { background: var(--blue-d); }
.gr-btn-danger:hover { background: #FEF2F2; color: var(--red); border-color: var(--red); }
.gr-btn-pro {
  background: var(--yellow); color: #111;
  border-color: var(--yellow);
  font-weight: 700;
}
.gr-btn-pro:hover {
  background: #E6B710; border-color: #E6B710;
  box-shadow: 0 2px 6px rgba(245,197,24,0.4);
}
.gr-demo { font-size: 10px; font-weight: 700; letter-spacing: 1.5px; background: var(--yellow); color: #111; padding: 3px 8px; border-radius: 4px; }

/* ─── MODULES MÉTIER (CTA principaux dans header) ─── */
.gr-modules { display: flex; align-items: center; gap: 6px; }
.gr-module {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 14px;
  font-size: 12px; font-weight: 700;
  letter-spacing: 0.3px;
  border: 1px solid var(--gray-200);
  border-radius: 8px;
  background: #fff;
  color: var(--gray-800);
  cursor: pointer;
  text-decoration: none;
  transition: all .15s ease;
  white-space: nowrap;
  font-family: var(--font);
}
.gr-module:hover {
  background: var(--gray-50, #FAFBFC);
  border-color: var(--gray-300, #DEE2E6);
  color: var(--gray-900, #0A0E1A);
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(0,0,0,0.06);
}
.gr-module:active { transform: translateY(0); }
.gr-module.is-active {
  background: rgba(26,86,232,0.08);
  border-color: var(--blue);
  color: var(--blue);
}
.gr-module-primary {
  background: var(--blue);
  border-color: var(--blue);
  color: #fff;
  box-shadow: 0 1px 2px rgba(26,86,232,0.20), 0 2px 6px rgba(26,86,232,0.12);
}
.gr-module-primary:hover {
  background: var(--blue-d);
  border-color: var(--blue-d);
  color: #fff;
  box-shadow: 0 2px 4px rgba(26,86,232,0.30), 0 4px 12px rgba(26,86,232,0.20);
}
.gr-header-divider {
  width: 1px; height: 22px;
  background: var(--gray-200);
  margin: 0 4px;
}
@media (max-width: 900px) {
  .gr-module span { display: none; }
  .gr-module {
    padding: 8px;
    width: 36px; height: 36px;
    justify-content: center;
  }
}
@media (max-width: 480px) {
  .gr-modules .gr-module:not(.gr-module-primary) { display: none; }
  .gr-header-divider { display: none; }
}

/* ════════════════════════════════════════════════════════════
   TOOLBAR GAUCHE — Outils opérationnels (style Figma/Revit)
   Desktop: vertical à gauche · Mobile: horizontal en bas
   ════════════════════════════════════════════════════════════ */
.gr-toolbar {
  position: fixed; left: 14px; top: calc(var(--header-h) + 14px);
  z-index: 999;
  display: flex; flex-direction: column; gap: 6px;
  padding: 5px;
  background: rgba(255,255,255,0.98);
  backdrop-filter: blur(12px);
  border: 1px solid rgba(229,233,238,0.85);
  border-radius: 11px;
  box-shadow:
    0 1px 2px rgba(10,14,26,0.04),
    0 8px 24px rgba(10,14,26,0.10);
  user-select: none;
  transition: left .3s cubic-bezier(.4,0,.2,1), top .25s ease;
}
body:has(.sidebar.open) .gr-toolbar { left: 312px; }
body.measure-bar-open .gr-toolbar {
  top: calc(var(--header-h) + 52px);
}

.gr-tool-group { display: flex; flex-direction: column; gap: 2px; }
.gr-tool-group + .gr-tool-group {
  padding-top: 6px;
  margin-top: 2px;
  border-top: 1px solid #EFF1F4;
}

.gr-tool {
  position: relative;
  width: 36px; height: 36px;
  display: flex; align-items: center; justify-content: center;
  background: transparent;
  border: none;
  border-radius: 7px;
  color: #475064;
  cursor: pointer;
  transition: background .12s ease, color .12s ease;
  text-decoration: none;
  padding: 0;
}
.gr-tool svg {
  width: 17px;
  height: 17px;
  stroke-width: 2;
}
.gr-tool:hover {
  background: #F1F4F7;
  color: #1A56E8;
}
.gr-tool:active {
  background: #E5E9EE;
}
.gr-tool.is-active {
  background: #1A56E8;
  color: #FFFFFF;
}
.gr-tool.is-active::before {
  content: ''; position: absolute; left: -8px; top: 8px; bottom: 8px;
  width: 3px; background: #1A56E8; border-radius: 2px;
}
.gr-tool-primary { color: #1A56E8; }
.gr-tool-primary:hover { background: rgba(26,86,232,0.10); color: #0E3FAA; }
.gr-tool-danger { color: #6B7484; }
.gr-tool-danger:hover { background: #FEF2F2; color: #E24B4A; }

/* Tooltip à droite */
.gr-tool-label {
  position: absolute;
  left: calc(100% + 10px);
  top: 50%; transform: translateY(-50%) translateX(-4px);
  white-space: nowrap;
  background: #0A0E1A;
  color: #FFFFFF;
  font-family: 'Inter', sans-serif;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.2px;
  padding: 5px 10px;
  border-radius: 6px;
  opacity: 0; pointer-events: none;
  transition: opacity .15s ease, transform .15s ease;
  box-shadow: 0 4px 12px rgba(10,14,26,0.20);
}
.gr-tool-label::before {
  content: ''; position: absolute;
  left: -4px; top: 50%; transform: translateY(-50%);
  width: 8px; height: 8px;
  background: #0A0E1A;
  transform: translateY(-50%) rotate(45deg);
}
.gr-tool:hover .gr-tool-label {
  opacity: 1;
  transform: translateY(-50%) translateX(0);
  transition-delay: .25s;
}

/* Mobile : toolbar passe en bas */
@media (max-width: 768px) {
  .gr-toolbar {
    left: 50%; right: auto; top: auto;
    bottom: 12px;
    transform: translateX(-50%);
    flex-direction: row;
    padding: 6px;
    border-radius: 14px;
    max-width: calc(100vw - 24px);
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  body:has(.sidebar.open) .gr-toolbar {
    left: 50%;
    opacity: 0; pointer-events: none;
  }
  body.measure-bar-open .gr-toolbar { top: auto; }
  .gr-toolbar::-webkit-scrollbar { display: none; }
  .gr-tool-group { flex-direction: row; gap: 2px; padding-top: 0; border-top: none; }
  .gr-tool-group + .gr-tool-group {
    padding-top: 0; padding-left: 8px;
    border-top: none;
    border-left: 1px solid var(--gray-200);
    margin-left: 6px;
  }
  .gr-tool { width: 38px; height: 38px; }
  .gr-tool-label {
    left: 50%; bottom: calc(100% + 8px);
    top: auto; transform: translateX(-50%);
    font-size: 10px;
  }
  .gr-tool-label::before {
    left: 50%; top: auto; bottom: -4px;
    transform: translateX(-50%);
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 4px solid #1A1F2E;
    border-bottom: none;
  }
  .gr-tool.is-active::before {
    left: 6px; top: auto; bottom: -7px;
    width: auto; height: 3px;
    right: 6px;
  }
  .gr-tool:hover .gr-tool-label {
    transform: translateX(-50%) translateY(-2px);
  }
}

/* ─── NUKE all credits/logos overlays (croix jaune en bas-droite) ─── */
.cesium-widget-credits,
.cesium-credit-logoContainer,
.cesium-credit-textContainer,
.cesium-credit-expand-link,
.cesium-attribution,
.cesium-viewer-bottom,
.cesium-viewer-toolbar,
.esri-attribution,
.esri-attribution__powered-by,
.esri-attribution__sources {
  display: none !important;
  visibility: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
}
a[href*="cesium.com"], a[href*="cesiumjs.org"] { display: none !important; }


/* ── BARRE MESURE ── */
.gr-measure-bar {
  position: fixed; top: var(--header-h); left: 0; right: 0;
  background: #fff; border-bottom: 0.5px solid var(--gray-200);
  padding: 6px 16px; z-index: 9999; gap: 4px;
  box-shadow: 0 2px 8px rgba(0,0,0,.08);
  display: flex; align-items: center;
}
.gr-measure-tool {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 14px; font-size: 11px; font-weight: 600; color: var(--gray-600);
  border-radius: 20px; cursor: pointer; transition: all .15s;
  border: 0.5px solid transparent;
}
.gr-measure-tool:hover { background: var(--blue-l); color: var(--blue); border-color: var(--blue); }
.gr-measure-tool.active { background: var(--blue); color: #fff; }
.gr-measure-del:hover { background: #FEF2F2 !important; color: var(--red) !important; border-color: var(--red) !important; }

/* ── VIEWER ── */
#viewer_container {
  position: fixed !important;
  top: var(--header-h) !important;
  left: 0 !important; right: 0 !important; bottom: 0 !important;
  z-index: 1;
}
#cesiumContainer { width: 100%; height: 100%; }
#viewer_container.crosshair-active,
#viewer_container.crosshair-active * { cursor: crosshair !important; }
.crosshair-active { cursor: crosshair !important; }

/* ── SIDEBAR ── */
.sidebar {
  position: fixed; top: var(--header-h); left: 0; bottom: 0;
  width: 300px; background: #0f1629;
  border-right: 1px solid rgba(255,255,255,.06);
  z-index: 1000; transform: translateX(-100%);
  transition: transform .3s cubic-bezier(.4,0,.2,1);
  display: flex; flex-direction: column; overflow: hidden;
}
.sidebar.open { transform: translateX(0); }
.gr-sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 0.5px solid rgba(255,255,255,.08); }
.gr-sidebar-title { font-size: 13px; font-weight: 700; color: #fff; }
.gr-sidebar-close { background: rgba(255,255,255,.08); border: none; color: rgba(255,255,255,.6); width: 26px; height: 26px; border-radius: 6px; cursor: pointer; font-size: 13px; }
.gr-sidebar-close:hover { background: rgba(255,255,255,.15); color: #fff; }
.gr-sidebar-project { font-size: 10px; font-weight: 700; color: var(--yellow); letter-spacing: 1px; text-transform: uppercase; padding: 12px 16px 6px; }
#menu-2D { flex: 1; overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.1) transparent; }

/* Category grid */
.category-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 8px 12px 12px; }
.category-card { border-radius: var(--r); overflow: hidden; cursor: pointer; border: 1.5px solid rgba(255,255,255,.06); transition: all .2s; }
.category-card:hover { border-color: var(--yellow); transform: translateY(-1px); }
.category-thumb { height: 58px; background-size: cover; background-position: center; background-color: rgba(255,255,255,.05); display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; }
.category-thumb svg { width: 80%; height: 80%; max-width: 60px; }
.category-thumb-nuage { background: linear-gradient(135deg, rgba(29,158,117,0.15) 0%, rgba(26,86,232,0.15) 100%); }
.category-thumb-bim   { background: linear-gradient(135deg, rgba(26,86,232,0.20) 0%, rgba(14,63,170,0.25) 100%); }
.category-thumb-archi { background: linear-gradient(135deg, rgba(29,158,117,0.20) 0%, rgba(245,197,24,0.15) 100%); }
.category-thumb-3d    { background: linear-gradient(135deg, rgba(245,197,24,0.20) 0%, rgba(26,86,232,0.20) 100%); }
.category-card:hover .category-thumb svg { transform: scale(1.05); transition: transform .2s; }
.category-title { font-size: 10px; font-weight: 600; color: #fff; padding: 5px 8px; background: rgba(255,255,255,.04); text-align: center; }

/* Panels */
.group-container { padding: 0 10px 12px; display: flex; flex-direction: column; gap: 5px; }
.panel-card { background: rgba(255,255,255,.04); border: 0.5px solid rgba(255,255,255,.08); border-radius: var(--r); overflow: hidden; }
.panel-header { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: transparent; border: none; cursor: pointer; transition: background .15s; }
.panel-header:hover { background: rgba(255,255,255,.04); }
.panel-title { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600; color: #fff; }
.dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.dot-yellow { background: var(--yellow); }
.panel-meta .chip { font-size: 10px; font-weight: 600; background: rgba(26,86,232,.3); color: #aac4f7; padding: 1px 7px; border-radius: 10px; }
.panel-body { padding: 4px 12px 10px; display: none; flex-direction: column; gap: 2px; }
.panel-body.open { display: flex; }

/* Switches */
.switch-row { display: flex; align-items: center; gap: 10px; padding: 6px 0; cursor: pointer; border-bottom: 0.5px solid rgba(255,255,255,.04); }
.switch-row:last-child { border: none; }
.switch-row input[type="checkbox"] { display: none; }
.switch { position: relative; width: 32px; height: 18px; background: rgba(255,255,255,.15); border-radius: 10px; flex-shrink: 0; transition: background .2s; }
.switch::after { content: ''; position: absolute; width: 12px; height: 12px; border-radius: 50%; background: #fff; top: 3px; left: 3px; transition: transform .2s; }
input:checked + .switch { background: var(--blue); }
input:checked + .switch::after { transform: translateX(14px); }
.switch-label { font-size: 12px; color: rgba(255,255,255,.75); font-weight: 500; }

.close-button { margin: 8px 12px; padding: 8px 12px; background: rgba(255,255,255,.06); border: none; border-radius: var(--r); color: rgba(255,255,255,.7); font-size: 12px; font-family: var(--font); font-weight: 600; cursor: pointer; display: block; }
.close-button:hover { background: rgba(255,255,255,.1); color: #fff; }
.map-attrib { padding: 10px 16px; font-size: 10px; color: rgba(255,255,255,.3); text-align: center; border-top: 0.5px solid rgba(255,255,255,.06); }

/* ── DASHBOARD ── */
.dashboard-container {
  position: fixed; right: 20px; bottom: 20px;
  width: 860px; max-height: 84vh;
  background: #f4f5f7; border-radius: 16px;
  box-shadow: 0 20px 60px rgba(0,0,0,.25);
  transform: translateY(calc(100% + 30px));
  transition: transform .35s cubic-bezier(.4,0,.2,1);
  z-index: 9000; overflow-y: auto;
}
.dashboard-container.active { transform: translateY(0); }
.db-inner { padding: 14px; display: flex; flex-direction: column; gap: 10px; }
.db-topbar { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; background: #fff; border: 0.5px solid rgba(0,0,0,.08); border-radius: var(--rl); border-top: 3px solid var(--blue); }
.db-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); display: inline-block; margin-right: 6px; animation: pulse 2s infinite; }
.db-project-name { font-size: 13px; font-weight: 700; color: var(--gray-900); }
.db-project-sub { font-size: 11px; color: var(--gray-600); margin-top: 1px; }
.db-tabs { display: flex; gap: 4px; }
.db-tab { font-size: 11px; padding: 4px 10px; border-radius: 20px; border: 0.5px solid rgba(0,0,0,.12); background: transparent; color: var(--gray-600); cursor: pointer; font-family: var(--font); font-weight: 600; }
.db-tab.db-tab-on { background: var(--blue); color: #fff; border-color: var(--blue); }
.db-kpis { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 8px; }
.db-kpi { background: #fff; border: 0.5px solid rgba(0,0,0,.08); border-radius: var(--rl); padding: 12px 14px; position: relative; overflow: hidden; }
.db-kpi::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; }
.db-kpi-blue::before { background: var(--blue); }
.db-kpi-green::before { background: var(--green); }
.db-kpi-amber::before { background: var(--amber); }
.db-kpi-red::before { background: var(--red); }
.db-kpi-label { font-size: 9px; color: var(--gray-400); font-weight: 700; letter-spacing: .8px; margin-bottom: 4px; }
.db-kpi-val { font-size: 22px; font-weight: 700; color: var(--gray-900); line-height: 1; }
.db-kpi-unit { font-size: 10px; color: var(--gray-400); margin-top: 3px; }
.db-main-grid { display: grid; grid-template-columns: minmax(0,1.6fr) minmax(0,1fr); gap: 10px; }
.db-card { background: #fff; border: 0.5px solid rgba(0,0,0,.08); border-radius: var(--rl); padding: 14px 16px; }
.db-card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.db-card-title { font-size: 12px; font-weight: 700; color: var(--gray-900); }
.db-chip { font-size: 10px; padding: 2px 8px; border-radius: 10px; background: var(--gray-100); color: var(--gray-600); font-weight: 600; }
.db-table { width: 100%; border-collapse: collapse; font-size: 11px; }
.db-table th { font-size: 10px; color: var(--gray-400); font-weight: 600; text-align: left; padding: 0 0 6px; border-bottom: 0.5px solid rgba(0,0,0,.07); letter-spacing: .05em; text-transform: uppercase; }
.db-table td { padding: 6px 0; border-bottom: 0.5px solid rgba(0,0,0,.05); color: var(--gray-800); vertical-align: middle; }
.db-table tr:last-child td { border: none; }
.db-pbar-wrap { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--gray-600); }
.db-pbar { height: 5px; background: var(--gray-200); border-radius: 4px; overflow: hidden; width: 90px; }
.db-pfill { height: 100%; border-radius: 4px; }
.db-badge { display: inline-flex; align-items: center; font-size: 10px; padding: 2px 7px; border-radius: 9px; font-weight: 600; }
.db-b-green { background: #EAF3DE; color: #3B6D11; }
.db-b-amber { background: #FAEEDA; color: #854F0B; }
.db-b-red { background: #FCEBEB; color: #A32D2D; }
.db-b-gray { background: var(--gray-100); color: var(--gray-600); }
.db-legend { display: flex; flex-direction: column; gap: 5px; }
.db-legend-row { display: flex; align-items: center; justify-content: space-between; font-size: 11px; color: var(--gray-800); }
.db-legend-l { display: flex; align-items: center; gap: 6px; }
.db-ldot { width: 8px; height: 8px; border-radius: 2px; }
.db-bottom-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 10px; }
.db-alert { display: flex; gap: 9px; padding: 7px 0; border-bottom: 0.5px solid rgba(0,0,0,.06); }
.db-aicon { width: 26px; height: 26px; border-radius: 7px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; }
.db-ared { background: #FCEBEB; }
.db-aamber { background: #FAEEDA; }
.db-atitle { font-size: 11px; font-weight: 600; color: var(--gray-900); }
.db-asub { font-size: 10px; color: var(--gray-600); margin-top: 1px; }
.db-statrow { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; border-bottom: 0.5px solid rgba(0,0,0,.06); font-size: 11px; }
.db-statkey { color: var(--gray-600); }
.db-statval { font-weight: 600; color: var(--gray-900); }
.dashboard-container::-webkit-scrollbar { width: 4px; }
.dashboard-container::-webkit-scrollbar-thumb { background: rgba(0,0,0,.15); border-radius: 4px; }

/* ── LAYERS PANEL ── */
.layers-panel { position: fixed; top: 80px; right: 20px; width: 260px; background: #fff; border: 0.5px solid rgba(0,0,0,.1); border-radius: var(--rl); box-shadow: 0 8px 32px rgba(0,0,0,.15); z-index: 9500; display: none; }
.layers-panel .panel-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-bottom: 0.5px solid var(--gray-200); font-size: 12px; font-weight: 700; color: var(--gray-900); background: #fff; }
.close-btn { background: none; border: none; cursor: pointer; color: var(--gray-400); font-size: 14px; }
.close-btn:hover { color: var(--gray-900); }
.layers-content { padding: 6px 0; max-height: 400px; overflow-y: auto; }
.layer-tree { list-style: none; }
.layer-group { border-bottom: 0.5px solid var(--gray-100); }
.layer-header { display: flex; align-items: center; gap: 8px; padding: 8px 14px; cursor: pointer; font-size: 12px; font-weight: 600; color: var(--gray-800); }
.layer-header:hover { background: var(--gray-100); }
.toggle-icon { font-size: 10px; color: var(--gray-400); }
.group-title { flex: 1; }
.layer-subtree { list-style: none; padding: 0 0 6px 28px; display: none; }
.layer-group.open .layer-subtree { display: block; }
.layer-item { display: flex; align-items: center; gap: 8px; padding: 5px 14px 5px 0; font-size: 12px; color: var(--gray-700, #495057); }
.layer-item input { accent-color: var(--blue); }

/* ── MISC ── */
.demo-ribbon { position: fixed; top: 14px; right: -28px; background: var(--yellow); color: #111; font-size: 10px; font-weight: 700; padding: 4px 36px; transform: rotate(45deg); z-index: 10001; letter-spacing: 1px; }
.cesium-widget-credits, .cesium-credit-logoContainer { display: none !important; }

/* ── ANNOTATION POPUP (créé par JS) ── */
#ann-popup { display: none; position: fixed; z-index: 99999; width: 270px; }
#ann-popup-inner { background: #fff; border: 0.5px solid rgba(0,0,0,.12); border-radius: var(--rl); padding: 14px; box-shadow: 0 8px 32px rgba(0,0,0,.2); border-top: 3px solid var(--blue); }

/* ── VOLUME EDITOR (créé par JS) ── */
#vol-editor { font-family: var(--font) !important; }

/* ── Anciens styles conservés pour compatibilité JS ── */
.floating-icon { display: none; }
.tools-bar { display: none; }

/* ============================================================
   SPLASH SCREEN v3 — Dashboard cockpit BIMREVO
   Style Linear/Stripe : 3 colonnes (Score · Maquette · Audit)
   + footer timeline · 8s en boucle
   ============================================================ */
#bim-splash {
  position: fixed; inset: 0;
  background: linear-gradient(180deg, #FAFBFC 0%, #F4F6F9 100%);
  z-index: 99999;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  font-family: var(--font);
  transition: opacity .6s ease, visibility .6s ease;
  overflow: hidden;
}
#bim-splash.hidden { opacity: 0; visibility: hidden; pointer-events: none; }

#bim-splash::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: var(--yellow); z-index: 3;
}

/* ── BRAND ── */
.bim-splash-brand { text-align: center; margin-bottom: 22px; position: relative; z-index: 2; }
.bim-splash-georevo {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  font-size: 11px; font-weight: 600; letter-spacing: 5px;
  color: var(--gray-600); text-transform: uppercase; margin-bottom: 10px;
}
.bim-splash-georevo .gr-g-splash {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--yellow); color: #111;
  font-size: 12px; font-weight: 800; letter-spacing: 0;
}
.bim-splash-bimrevo { font-size: 32px; font-weight: 700; letter-spacing: 5px; color: var(--blue); }
.bim-splash-tagline {
  font-size: 10px; font-weight: 500; letter-spacing: 3px;
  color: var(--gray-400); text-transform: uppercase; margin-top: 8px;
}

/* ════════════════════════════════════════════════════════════
   DASHBOARD CONTAINER
   ════════════════════════════════════════════════════════════ */
.bim-splash-scene.bim-dashboard {
  width: 720px; max-width: 92vw;
  background: #FFFFFF;
  border: 1px solid #E5E9EE;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 8px 24px rgba(26,86,232,0.08);
  display: flex; flex-direction: column;
  margin-bottom: 22px;
  position: relative; z-index: 2;
}

/* ── Header dashboard ── */
.dash-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 16px;
  background: linear-gradient(180deg, #F8FAFC 0%, #FFFFFF 100%);
  border-bottom: 1px solid #E5E9EE;
}
.dash-header-left { display: flex; align-items: center; gap: 10px; }
.dash-header-logo {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 5px;
  background: linear-gradient(135deg, var(--blue), #0E3FAA);
  color: #fff; font-weight: 800; font-size: 12px;
}
.dash-header-title { font-size: 12px; font-weight: 700; color: #0A0E1A; letter-spacing: 1.5px; }
.dash-header-tag {
  font-size: 9px; font-weight: 600; letter-spacing: 2px;
  color: var(--gray-500); text-transform: uppercase;
  padding: 2px 6px; background: #F4F6F9; border-radius: 3px;
}
.dash-header-right { display: flex; align-items: center; gap: 6px; }
.dash-live-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: #1D9E75;
  box-shadow: 0 0 8px rgba(29,158,117,0.5);
  animation: dash-blink 1.4s ease-in-out infinite;
}
@keyframes dash-blink { 0%,100%{opacity:1} 50%{opacity:0.4} }
.dash-live-text {
  font-size: 9px; font-weight: 700; letter-spacing: 1.5px;
  color: #1D9E75; text-transform: uppercase;
}

/* ── Body : 3 colonnes ── */
.dash-body {
  display: grid; grid-template-columns: 200px 1fr 200px;
  gap: 0;
  height: 280px;
  background: #FFFFFF;
}
.dash-col {
  padding: 16px 18px;
  display: flex; flex-direction: column; gap: 10px;
  position: relative;
}
.dash-col + .dash-col { border-left: 1px solid #EFF1F4; }

.dash-card-label {
  font-size: 9px; font-weight: 700; letter-spacing: 1.5px;
  color: var(--gray-500); text-transform: uppercase;
  padding-bottom: 6px;
  border-bottom: 1px solid #F4F6F9;
}

/* ── Colonne 1 : SCORE ── */
.dash-col-score { align-items: center; }
.dash-score-wrap { position: relative; width: 100px; height: 100px; margin-top: 8px; }
.dash-score-ring { width: 100%; height: 100%; }
.dash-score-fill { animation: score-fill 8s ease-out infinite; }
@keyframes score-fill {
  0%   { stroke-dashoffset: 201; }
  35%  { stroke-dashoffset: 27; }
  100% { stroke-dashoffset: 27; }
}
.dash-score-num-wrap {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.dash-score-num {
  font-size: 28px; font-weight: 800; color: #1D9E75;
  line-height: 1;
  animation: score-pop 8s ease-out infinite;
}
@keyframes score-pop {
  0%,5%   { opacity: 0; transform: scale(0.5); }
  20%     { opacity: 1; transform: scale(1.15); }
  30%,100%{ opacity: 1; transform: scale(1); }
}
.dash-score-sub { font-size: 9px; font-weight: 600; color: var(--gray-500); letter-spacing: 1px; margin-top: 2px; }
.dash-stats { display: flex; gap: 14px; margin-top: 8px; }
.dash-stat { text-align: center; }
.dash-stat-num {
  display: block; font-size: 16px; font-weight: 800; color: #0A0E1A;
  font-variant-numeric: tabular-nums;
}
.dash-stat-num-1 { animation: stat-fade 8s ease-out infinite; animation-delay: 0.6s; }
.dash-stat-num-2 { animation: stat-fade 8s ease-out infinite; animation-delay: 0.9s; }
@keyframes stat-fade {
  0%,8%  { opacity: 0; transform: translateY(4px); }
  18%    { opacity: 1; transform: translateY(0); }
  90%    { opacity: 1; }
  100%   { opacity: 0.85; }
}
.dash-stat-label {
  font-size: 8px; font-weight: 600; letter-spacing: 1px;
  color: var(--gray-500); text-transform: uppercase;
  margin-top: 2px; display: block;
}

/* ── Colonne 2 : MAQUETTE ── */
.dash-col-model { padding: 16px; }
.dash-model-wrap {
  position: relative; flex: 1;
  background: linear-gradient(180deg, #F8FAFC 0%, #EFF2F6 100%);
  border-radius: 8px;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
}
.dash-model-img {
  max-width: 90%; max-height: 90%;
  display: block;
  user-select: none; -webkit-user-drag: none;
}
.dash-clash {
  position: absolute;
  width: 14px; height: 14px;
  border-radius: 50%;
  background: #E24B4A;
  box-shadow:
    0 0 0 4px rgba(226,75,74,0.25),
    0 0 0 9px rgba(226,75,74,0.10),
    0 0 12px rgba(226,75,74,0.5);
  opacity: 0;
  transform: scale(0);
  pointer-events: none;
}
.dash-clash::after {
  content: ''; position: absolute; inset: 3px;
  border-radius: 50%;
  background: #fff;
}
.dash-clash-1 { top: 38%; left: 32%; animation: clash-pop 8s ease-out infinite; animation-delay: 1.5s; }
.dash-clash-2 { top: 32%; left: 47%; animation: clash-pop 8s ease-out infinite; animation-delay: 1.7s; }
.dash-clash-3 { top: 50%; left: 50%; animation: clash-pop 8s ease-out infinite; animation-delay: 1.9s; }
.dash-clash-4 { top: 45%; left: 62%; animation: clash-pop 8s ease-out infinite; animation-delay: 2.1s; }
.dash-clash-5 { top: 40%; left: 75%; animation: clash-pop 8s ease-out infinite; animation-delay: 2.3s; }
@keyframes clash-pop {
  0%,18%   { opacity: 0; transform: scale(0); }
  20%      { opacity: 1; transform: scale(1.5); }
  24%      { opacity: 1; transform: scale(1); }
  28%      { opacity: 0.4; }
  31%      { opacity: 1; }
  35%      { opacity: 0.4; }
  38%,88%  { opacity: 1; transform: scale(1); }
  95%,100% { opacity: 0; transform: scale(1); }
}
.dash-scan-bar {
  position: absolute;
  top: 0; bottom: 0;
  width: 60px;
  background: linear-gradient(90deg, transparent 0%, rgba(245,197,24,0) 10%, rgba(245,197,24,0.5) 50%, rgba(245,197,24,0) 90%, transparent 100%);
  pointer-events: none;
  animation: scan-cross 8s ease-in-out infinite;
}
@keyframes scan-cross {
  0%   { left: -60px; opacity: 0; }
  3%   { opacity: 1; }
  35%  { left: 100%; opacity: 1; }
  40%  { opacity: 0; }
  100% { opacity: 0; left: 100%; }
}
.dash-model-status {
  display: flex; align-items: center; gap: 6px;
  padding-top: 8px;
  font-size: 9px; font-weight: 600; letter-spacing: 1px;
  color: var(--gray-700); text-transform: uppercase;
}
.dash-blink-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--yellow);
  animation: dash-blink 1s ease-in-out infinite;
}

/* ── Colonne 3 : AUDIT CHECKS ── */
.dash-checks { list-style: none; padding: 0; margin: 0; flex: 1; }
.dash-check {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 0;
  font-size: 11px; font-weight: 600; color: #343A40;
  opacity: 0; transform: translateX(-6px);
}
.dash-check + .dash-check { border-top: 1px solid #F4F6F9; }
.dash-check-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; height: 16px; border-radius: 50%;
  font-size: 10px; font-weight: 800;
  color: #fff;
  flex-shrink: 0;
}
.dash-check-ok { background: #1D9E75; }
.dash-check-warn { background: #E24B4A; }
.dash-check-1 { animation: check-in 8s ease-out infinite; animation-delay: 3.0s; }
.dash-check-2 { animation: check-in 8s ease-out infinite; animation-delay: 3.3s; }
.dash-check-3 { animation: check-in 8s ease-out infinite; animation-delay: 3.6s; }
.dash-check-4 { animation: check-in 8s ease-out infinite; animation-delay: 3.9s; }
.dash-check-5 { animation: check-in 8s ease-out infinite; animation-delay: 4.2s; }
.dash-check-6 { animation: check-in 8s ease-out infinite; animation-delay: 4.5s; }
@keyframes check-in {
  0%,36%   { opacity: 0; transform: translateX(-6px); }
  40%      { opacity: 1; transform: translateX(0); }
  90%      { opacity: 1; }
  100%     { opacity: 0; }
}

/* ── Footer : Timeline ── */
.dash-footer {
  display: flex; gap: 8px;
  padding: 12px 18px;
  background: #F8FAFC;
  border-top: 1px solid #E5E9EE;
}
.dash-step { flex: 1; display: flex; flex-direction: column; gap: 4px; }
.dash-step-bar {
  height: 3px; border-radius: 2px;
  background: #E5E9EE;
  position: relative; overflow: hidden;
}
.dash-step-bar::after {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0;
  width: 0%;
  background: linear-gradient(90deg, var(--blue), var(--yellow));
}
.dash-step-1 .dash-step-bar::after { animation: step-fill 8s ease-out infinite; animation-delay: 0s; }
.dash-step-2 .dash-step-bar::after { animation: step-fill 8s ease-out infinite; animation-delay: 0.6s; }
.dash-step-3 .dash-step-bar::after { animation: step-fill 8s ease-out infinite; animation-delay: 1.2s; }
.dash-step-4 .dash-step-bar::after { animation: step-fill 8s ease-out infinite; animation-delay: 1.8s; }
.dash-step-5 .dash-step-bar::after { animation: step-fill 8s ease-out infinite; animation-delay: 2.4s; }
@keyframes step-fill {
  0%       { width: 0%; }
  8%       { width: 100%; }
  88%      { width: 100%; }
  95%,100% { width: 0%; }
}
.dash-step-label {
  font-size: 8px; font-weight: 700; letter-spacing: 1px;
  color: var(--gray-500); text-transform: uppercase;
  text-align: center;
}

/* ── STATUS TEXT ── */
.bim-splash-status {
  font-size: 11px; font-weight: 600; letter-spacing: 2px;
  color: var(--gray-800); text-transform: uppercase;
  min-height: 14px; margin-bottom: 14px;
  position: relative; z-index: 2;
}

/* ── PROGRESS BAR ── */
.bim-splash-bar-wrap {
  width: 320px; height: 3px;
  background: var(--gray-200);
  border-radius: 4px; overflow: hidden;
  position: relative; z-index: 2;
}
.bim-splash-bar {
  height: 100%; width: 0%;
  background: linear-gradient(90deg, var(--blue), var(--yellow));
  border-radius: 4px;
  animation: bim-splash-progress 5s ease-out forwards;
}
@keyframes bim-splash-progress {
  0%   { width: 0%; }
  30%  { width: 35%; }
  60%  { width: 65%; }
  85%  { width: 88%; }
  100% { width: 96%; }
}

/* ── MARQUEE ── */
.bim-splash-pub {
  margin-top: 24px; height: 16px; overflow: hidden;
  width: 720px; max-width: 92vw; text-align: center;
  position: relative; z-index: 2;
}
.bim-splash-pub-track { animation: bim-splash-pub-roll 18s ease-in-out infinite; }
.bim-splash-pub-item {
  height: 16px; line-height: 16px;
  font-size: 10px; font-weight: 600; letter-spacing: 2px;
  color: var(--blue); text-transform: uppercase;
}
.bim-splash-pub-item span { color: var(--gray-400); margin: 0 6px; font-weight: 400; }
@keyframes bim-splash-pub-roll {
  0%,14%   { transform: translateY(0); }
  17%,30%  { transform: translateY(-16px); }
  33%,47%  { transform: translateY(-32px); }
  50%,64%  { transform: translateY(-48px); }
  67%,81%  { transform: translateY(-64px); }
  84%,97%  { transform: translateY(-80px); }
  100%     { transform: translateY(-96px); }
}

/* ── FOOTER ── */
.bim-splash-footer {
  position: absolute; bottom: 22px; left: 0; right: 0;
  text-align: center; font-size: 9px; letter-spacing: 2px;
  color: var(--gray-400); text-transform: uppercase;
  z-index: 2;
}
.bim-splash-footer a { text-decoration: none; transition: opacity .15s; color: inherit; }
.bim-splash-footer a:hover { opacity: 0.7; }
.bim-splash-footer strong { color: var(--blue); font-weight: 700; }

.bim-splash-demo {
  position: absolute; top: 22px; right: 22px;
  font-size: 10px; font-weight: 700; letter-spacing: 1.5px;
  background: var(--yellow); color: #111;
  padding: 4px 10px; border-radius: 4px;
  z-index: 3;
}

/* Mobile : passer en 1 colonne, masquer score+checks */
@media (max-width: 768px) {
  .bim-splash-scene.bim-dashboard { width: 92vw; max-width: 380px; }
  .dash-body { grid-template-columns: 1fr !important; height: auto !important; }
  .dash-col-score, .dash-col-checks { display: none !important; }
  .dash-col + .dash-col { border-left: none !important; }
  .dash-col-model { padding: 14px; }
  .dash-model-wrap { min-height: 150px; }
  .dash-footer { padding: 10px 14px; gap: 4px; }
  .dash-step-label { font-size: 7px; letter-spacing: 0.5px; }
  .bim-splash-bar-wrap { width: 80vw; max-width: 280px; }
  .bim-splash-pub { width: 92vw; max-width: 380px; }
  .bim-splash-bimrevo { font-size: 26px; letter-spacing: 3px; }
  .bim-splash-tagline { font-size: 9px; letter-spacing: 2px; padding: 0 12px; }
}

/* ============================================================
   RESPONSIVE — Tablette & Mobile
   Breakpoints : ≤1024px (tablette) · ≤640px (mobile) · ≤480px (smartphone)
   ============================================================ */

/* ── TABLETTE ── */
@media (max-width: 1024px) {
  /* Header : on rétrécit le texte des boutons */
  .gr-btn { padding: 6px 8px; font-size: 10px; }
  .gr-btn svg { width: 13px; height: 13px; }

  /* Sidebar : on l'autorise à s'ouvrir mais en overlay (pas de push) */
  .sidebar { width: 280px; box-shadow: 4px 0 20px rgba(0,0,0,0.1); }

  /* Dashboard : prend toute la largeur disponible */
  .dashboard-container {
    width: calc(100vw - 24px); max-width: 860px;
    right: 12px; bottom: 12px;
  }
}

/* ── MOBILE & SMARTPHONE ── */
@media (max-width: 640px) {
  /* Header : icônes only, masquage du texte des boutons */
  .gr-header { padding: 0 8px; gap: 4px; }
  .gr-brand { font-size: 12px; }
  .gr-brand .gr-sep, .gr-brand .gr-product { display: none; } /* on garde juste "GEOREVO" */
  .gr-header-center { display: none; }
  .gr-header-right { gap: 3px; }
  .gr-btn {
    padding: 7px; font-size: 0; /* hide text */
    min-width: 34px; height: 34px;
    justify-content: center;
  }
  .gr-btn svg { width: 15px; height: 15px; }
  /* Cache certains boutons sur mobile (IFC pas pertinent) */
  #ifcViewerBtn { display: none; }
  /* Le bouton Annoter et Volume aussi (gestes complexes mobile) */
  #annotationButton, #measure-volume { display: none; }

  /* Barre de mesure : pas adaptée mobile */
  .gr-measure-bar { display: none !important; }

  /* Sidebar : devient plein écran */
  .sidebar {
    width: 100vw; max-width: 100vw;
    z-index: 10001;
  }
  .sidebar.open { box-shadow: none; }

  /* ── DASHBOARD → BOTTOM-SHEET ── */
  .dashboard-container {
    width: 100vw; max-width: 100vw;
    right: 0; bottom: 0; left: 0;
    border-radius: 16px 16px 0 0;
    max-height: 85vh;
    transform: translateY(100%);
    box-shadow: 0 -4px 30px rgba(0,0,0,0.25);
  }
  .dashboard-container.active { transform: translateY(0); }
  .dashboard-container::before {
    /* Drag handle visuel (la petite barre grise du haut) */
    content: ''; position: sticky; top: 0;
    display: block; width: 40px; height: 4px;
    background: var(--gray-400); border-radius: 4px;
    margin: 8px auto 0; opacity: 0.5;
  }
  .db-inner { padding: 10px; gap: 8px; }
  .db-topbar { padding: 8px 10px; flex-wrap: wrap; gap: 8px; }
  .db-tabs { width: 100%; overflow-x: auto; }
  .db-tab { font-size: 10px; padding: 4px 8px; flex-shrink: 0; }
  /* KPIs : 2x2 au lieu de 4x1 */
  .db-kpis { grid-template-columns: 1fr 1fr; }
  .db-kpi { padding: 10px 12px; }
  .db-kpi-val { font-size: 18px; }
  /* Main grid : tout en colonne */
  .db-main-grid { grid-template-columns: 1fr; }
  .db-bottom-grid { grid-template-columns: 1fr; }
  .db-card { padding: 12px; }
  .db-table { font-size: 10px; }

  /* Layers panel (panneau de couches) → bottom-sheet */
  .layers-panel {
    width: 100vw; max-width: 100vw;
    right: 0; left: 0; top: auto; bottom: 0;
    border-radius: 16px 16px 0 0;
    max-height: 70vh; overflow-y: auto;
  }

  /* IFC Viewer Panel : en overlay plein écran (rare cas où ouvert sur mobile) */
  #ifcViewerPanel {
    width: 100vw !important;
    min-width: 100vw !important;
    border-left: none;
  }
  #ifcResizeHandle { display: none; } /* pas besoin sur mobile */

  /* Annotation popup */
  #annotationPopup {
    width: calc(100vw - 24px) !important;
    max-width: 320px;
  }
  #ann-popup { width: calc(100vw - 24px); max-width: 290px; }

  /* Profile container */
  #profileContainer {
    width: calc(100vw - 16px) !important;
    right: 8px !important; left: 8px;
    top: 60px !important;
    max-height: 70vh; overflow-y: auto;
  }

  /* Powered by GEOREVO ribbon : plus discret */
  body > div[style*="bottom:12px"][style*="left:12px"] {
    bottom: 6px !important; left: 6px !important;
    padding: 3px 7px !important; font-size: 9px !important;
  }
}

/* ── PETIT SMARTPHONE (≤480px) ── */
@media (max-width: 480px) {
  .gr-header { padding: 0 6px; }
  .gr-brand { font-size: 11px; }
  .gr-g { width: 20px; height: 20px; font-size: 11px; }
  .gr-menu-btn { width: 30px; height: 30px; }

  /* Boutons header encore plus compacts */
  .gr-btn { min-width: 32px; height: 32px; padding: 6px; }

  /* Cache un bouton de plus si nécessaire */
  #toggleMeasureBar { display: none; }

  /* Splash : dimensions réduites */
  .bim-splash-scene { width: 90vw; max-width: 320px; height: 200px; }
  .bim-splash-bar-wrap { width: 80vw; max-width: 280px; }
  .bim-splash-pub { width: 90vw; max-width: 340px; }
  .bim-splash-bimrevo { font-size: 26px; letter-spacing: 3px; }
  .bim-splash-tagline { font-size: 9px; letter-spacing: 2px; padding: 0 12px; }
}

/* ── ORIENTATION : empêche les bottom-sheets de cacher le contenu en paysage ── */
@media (max-width: 900px) and (orientation: landscape) {
  .dashboard-container { max-height: 95vh; }
  .layers-panel { max-height: 90vh; }
}

/* ============================================================
   POINT CLOUD CONTROLS — sliders dépliables sous chaque nuage
   Sidebar fond sombre (#0f1629), donc styles adaptés au dark
   ============================================================ */
.pc-layer { display: flex !important; flex-direction: column !important; }
.pc-layer-row {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
  width: 100% !important;
}
.pc-settings-btn {
  width: 26px !important; height: 26px !important;
  border-radius: 6px !important;
  background: transparent !important;
  border: none !important;
  color: rgba(255,255,255,0.45) !important;
  cursor: pointer !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: all .15s;
  flex-shrink: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
}
.pc-settings-btn:hover {
  background: rgba(255,255,255,0.08) !important;
  color: #F5C518 !important;
}
.pc-settings-btn.active {
  background: rgba(245,197,24,0.15) !important;
  color: #F5C518 !important;
}

/* Container des contrôles — caché par défaut */
.pc-controls {
  display: none;
  flex-direction: column;
  gap: 8px !important;
  padding: 10px 4px 12px !important;
  margin-top: 2px;
  border-top: 1px solid rgba(255,255,255,0.06);
  border-radius: 0 0 6px 6px;
}
.pc-controls.open {
  display: flex !important;
}

/* Une ligne = label + slider + valeur */
.pc-row {
  display: grid !important;
  grid-template-columns: 1fr 80px 42px !important;
  align-items: center !important;
  gap: 6px !important;
  margin: 0 !important;
}
.pc-row-label {
  font-size: 10px !important;
  font-weight: 500 !important;
  color: rgba(255,255,255,0.65) !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  margin: 0 !important;
}
.pc-row-val {
  font-size: 9px !important;
  font-weight: 700 !important;
  color: #F5C518 !important;
  text-align: right !important;
  font-variant-numeric: tabular-nums;
  white-space: nowrap !important;
  margin: 0 !important;
}

/* Slider custom — dans le ton GEOREVO */
.pc-slider {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  width: 100% !important;
  height: 3px !important;
  background: rgba(255,255,255,0.12) !important;
  border-radius: 3px !important;
  outline: none !important;
  cursor: pointer !important;
  padding: 0 !important;
  margin: 0 !important;
  border: none !important;
}
.pc-slider::-webkit-slider-runnable-track {
  background: transparent !important;
  height: 3px !important;
  border: none !important;
}
.pc-slider::-moz-range-track {
  background: rgba(255,255,255,0.12) !important;
  height: 3px !important;
  border: none !important;
  border-radius: 3px !important;
}
.pc-slider::-webkit-slider-thumb {
  -webkit-appearance: none !important;
  appearance: none !important;
  width: 14px !important; height: 14px !important;
  border-radius: 50% !important;
  background: #F5C518 !important;
  border: 2px solid #0f1629 !important;
  cursor: pointer !important;
  box-shadow: 0 0 0 1px rgba(245,197,24,0.4) !important;
  margin-top: -6px;
  transition: transform .12s;
}
.pc-slider::-webkit-slider-thumb:hover { transform: scale(1.2); }
.pc-slider::-moz-range-thumb {
  width: 14px !important; height: 14px !important;
  border-radius: 50% !important;
  background: #F5C518 !important;
  border: 2px solid #0f1629 !important;
  cursor: pointer !important;
  box-shadow: 0 0 0 1px rgba(245,197,24,0.4) !important;
}
.pc-slider:active::-webkit-slider-thumb { transform: scale(1.3); background: #fff !important; }

/* Toggle row spéciale (EDL on/off) */
.pc-toggle-row {
  grid-template-columns: 1fr auto 42px;
}
.pc-mini-switch {
  position: relative !important;
  display: inline-block !important;
  width: 30px !important; height: 16px !important;
  cursor: pointer !important;
  flex-shrink: 0;
}
.pc-mini-switch input {
  opacity: 0 !important;
  width: 0 !important;
  height: 0 !important;
  position: absolute !important;
  margin: 0 !important;
}
.pc-mini-track {
  position: absolute !important;
  inset: 0 !important;
  background: rgba(255,255,255,0.18) !important;
  border-radius: 10px !important;
  transition: background .15s !important;
  display: block !important;
}
.pc-mini-track::after {
  content: '' !important;
  position: absolute !important;
  width: 11px !important; height: 11px !important;
  border-radius: 50% !important;
  background: #fff !important;
  top: 2.5px !important; left: 2.5px !important;
  transition: transform .18s ease !important;
}
.pc-mini-switch input:checked + .pc-mini-track {
  background: #1A56E8 !important;
}
.pc-mini-switch input:checked + .pc-mini-track::after {
  transform: translateX(14px) !important;
}

/* Bouton reset */
.pc-reset-btn {
  margin-top: 4px !important;
  padding: 6px 8px !important;
  background: rgba(255,255,255,0.05) !important;
  border: 1px solid rgba(255,255,255,0.08) !important;
  border-radius: 5px !important;
  color: rgba(255,255,255,0.65) !important;
  font-family: 'Montserrat', sans-serif !important;
  font-size: 10px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  transition: all .15s;
  width: auto !important;
  display: block !important;
}
.pc-reset-btn:hover {
  background: rgba(245,197,24,0.10) !important;
  border-color: rgba(245,197,24,0.30) !important;
  color: #F5C518 !important;
}

/* Disabled : grise tout quand le nuage n'est pas chargé */
.pc-controls.disabled .pc-slider,
.pc-controls.disabled .pc-mini-switch,
.pc-controls.disabled .pc-reset-btn { pointer-events: none; opacity: 0.4; }

/* ============================================================
   BIMREVO AUTH & PROJECTS — Modales
   ============================================================ */
.bim-modal {
  position: fixed; inset: 0; z-index: 20000;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Montserrat', sans-serif;
  padding: 16px;
}
.bim-modal-backdrop {
  position: absolute; inset: 0;
  background: rgba(15, 22, 41, 0.55);
  backdrop-filter: blur(4px);
  animation: bim-fade-in .15s ease-out;
}
@keyframes bim-fade-in { from { opacity: 0; } to { opacity: 1; } }
.bim-modal-card {
  position: relative;
  width: 100%; max-height: 90vh; overflow-y: auto;
  background: #fff; border-radius: 14px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.20), 0 8px 24px rgba(0,0,0,0.08);
  animation: bim-modal-in .2s ease-out;
}
@keyframes bim-modal-in {
  from { opacity: 0; transform: translateY(8px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
.bim-modal-header {
  display: flex; justify-content: space-between; align-items: flex-start;
  padding: 18px 22px 14px; border-bottom: 1px solid #E9ECEF;
  position: relative;
}
.bim-modal-header::after {
  content: ''; position: absolute; bottom: 0; left: 22px; right: 22px; height: 2px;
  background: linear-gradient(90deg, #1A56E8, #F5C518);
}
.bim-modal-title {
  font-size: 16px; font-weight: 800; color: #212529;
  margin-bottom: 2px;
}
.bim-modal-subtitle { font-size: 11px; font-weight: 500; color: #6C757D; }
.bim-modal-close {
  width: 28px; height: 28px; border-radius: 7px; border: none;
  background: #F1F3F5; color: #6C757D; cursor: pointer; font-size: 14px;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s; flex-shrink: 0;
}
.bim-modal-close:hover { background: #FEF2F2; color: #E24B4A; }
.bim-modal-brand { display: flex; align-items: center; gap: 10px; }
.bim-modal-brand-g {
  width: 32px; height: 32px; border-radius: 8px;
  background: #F5C518; color: #111;
  display: flex; align-items: center; justify-content: center;
  font-size: 15px; font-weight: 800;
}
.bim-modal-brand-name { font-size: 14px; font-weight: 800; color: #1A56E8; letter-spacing: 1px; }
.bim-modal-brand-sub { font-size: 9px; font-weight: 600; color: #6C757D; letter-spacing: 1.5px; text-transform: uppercase; }
.bim-modal-body { padding: 18px 22px 20px; }

/* Tabs (login / signup) */
.bim-modal-tabs {
  display: flex; gap: 4px; padding: 8px 14px 0; border-bottom: 1px solid #E9ECEF;
}
.bim-tab {
  padding: 10px 14px; background: transparent; border: none; cursor: pointer;
  font-family: inherit; font-size: 12px; font-weight: 700; color: #6C757D;
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  transition: all .15s;
}
.bim-tab:hover { color: #1A56E8; }
.bim-tab.active { color: #1A56E8; border-bottom-color: #1A56E8; }

/* Form fields */
.bim-field { display: block; margin-bottom: 12px; }
.bim-field span {
  display: block; font-size: 10px; font-weight: 700; color: #6C757D;
  letter-spacing: 1px; text-transform: uppercase; margin-bottom: 5px;
}
.bim-field input, .bim-field textarea {
  width: 100%; padding: 9px 12px;
  border: 1px solid #E9ECEF; border-radius: 7px;
  font-family: inherit; font-size: 13px; color: #212529;
  background: #fff; transition: all .15s;
  box-sizing: border-box;
}
.bim-field input:focus, .bim-field textarea:focus {
  outline: none; border-color: #1A56E8; box-shadow: 0 0 0 3px rgba(26,86,232,0.12);
}

/* Buttons */
.bim-btn-primary {
  width: 100%; padding: 10px 16px; border: none; border-radius: 8px;
  background: #1A56E8; color: #fff;
  font-family: inherit; font-size: 12px; font-weight: 700; letter-spacing: 0.4px;
  cursor: pointer; transition: all .15s;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
.bim-btn-primary:hover { background: #1344c4; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(26,86,232,0.25); }
.bim-btn-primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.bim-btn-secondary {
  padding: 10px 14px; border: 1px solid #E9ECEF; border-radius: 8px;
  background: #fff; color: #343A40;
  font-family: inherit; font-size: 12px; font-weight: 700;
  cursor: pointer; transition: all .15s;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
.bim-btn-secondary:hover { background: #F8F9FA; border-color: #1A56E8; color: #1A56E8; }
.bim-btn-danger {
  padding: 10px 14px; border: 1px solid #E9ECEF; border-radius: 8px;
  background: #fff; color: #E24B4A;
  font-family: inherit; font-size: 12px; font-weight: 700;
  cursor: pointer; transition: all .15s;
}
.bim-btn-danger:hover { background: #FEF2F2; border-color: #E24B4A; }

/* Error block */
.bim-error {
  background: #FEF2F2; color: #E24B4A; padding: 9px 12px; border-radius: 7px;
  font-size: 11px; font-weight: 600; margin-bottom: 10px;
  border: 1px solid rgba(226,75,74,0.20);
}

.bim-modal-foot {
  text-align: center; margin-top: 12px;
}
.bim-modal-foot a {
  color: #6C757D; font-size: 11px; text-decoration: none; font-weight: 500;
}
.bim-modal-foot a:hover { color: #1A56E8; }

/* Projects list */
.bim-projects-actions {
  display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap;
}
.bim-projects-actions .bim-btn-primary { width: auto; }

.bim-projects-list {
  display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
}
@media (max-width: 540px) { .bim-projects-list { grid-template-columns: 1fr; } }

.bim-project-card {
  border: 1px solid #E9ECEF; border-radius: 10px; padding: 14px;
  cursor: pointer; transition: all .15s; background: #fff;
  display: flex; flex-direction: column; gap: 6px;
}
.bim-project-card:hover {
  border-color: #1A56E8; transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(26,86,232,0.10);
}
.bim-project-card .pn { font-size: 13px; font-weight: 800; color: #212529; }
.bim-project-card .pd { font-size: 11px; color: #6C757D; min-height: 14px; line-height: 1.4; }
.bim-project-card .pf {
  font-size: 10px; color: #ADB5BD; font-weight: 600; letter-spacing: 0.5px;
  display: flex; gap: 8px; margin-top: 4px;
}
.bim-project-card .pf .pf-public {
  color: #1D9E75;
}

.bim-empty {
  padding: 30px 16px; text-align: center;
  color: #ADB5BD; font-size: 12px; font-weight: 600;
  border: 1px dashed #E9ECEF; border-radius: 8px;
}

/* Section titles */
.bim-section-title {
  font-size: 9px; font-weight: 800; color: #6C757D;
  letter-spacing: 1.5px; text-transform: uppercase;
  margin: 16px 0 8px;
}

/* Upload zone */
.bim-upload-zone {
  border: 2px dashed #E9ECEF; border-radius: 10px; padding: 22px;
  text-align: center; cursor: pointer; transition: all .15s;
  background: #FAFBFC;
  color: #6C757D;
}
.bim-upload-zone:hover, .bim-upload-zone.drag-over {
  border-color: #1A56E8; background: rgba(26,86,232,0.04); color: #1A56E8;
}
.bim-upload-zone svg { color: inherit; margin-bottom: 6px; }
.bim-upload-title { font-size: 12px; font-weight: 700; margin-bottom: 2px; color: inherit; }
.bim-upload-sub { font-size: 10px; color: #ADB5BD; }

.bim-upload-progress { padding: 10px 0; }
.bim-upload-progress-label { font-size: 11px; font-weight: 600; color: #1A56E8; margin-bottom: 6px; }
.bim-upload-progress-bar {
  width: 100%; height: 4px; background: #E9ECEF;
  border-radius: 4px; overflow: hidden;
}
.bim-upload-progress-bar > div {
  height: 100%; background: linear-gradient(90deg, #1A56E8, #F5C518);
  border-radius: 4px; transition: width .2s;
}

/* Files list */
.bim-files-list { display: flex; flex-direction: column; gap: 6px; }
.bim-file-item {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; background: #F8F9FA; border-radius: 8px;
  border: 1px solid #E9ECEF;
}
.bim-file-icon {
  width: 30px; height: 30px; border-radius: 6px;
  background: rgba(26,86,232,0.10); color: #1A56E8;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; font-size: 11px; font-weight: 800;
}
.bim-file-info { flex: 1; min-width: 0; }
.bim-file-name {
  font-size: 12px; font-weight: 700; color: #212529;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.bim-file-meta { font-size: 10px; color: #6C757D; }
.bim-file-actions { display: flex; gap: 4px; flex-shrink: 0; }
.bim-file-action {
  width: 28px; height: 28px; border-radius: 6px; border: none;
  background: transparent; color: #6C757D; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.bim-file-action:hover { background: #fff; color: #1A56E8; }
.bim-file-action.danger:hover { color: #E24B4A; background: #FEF2F2; }

/* Share */
.bim-share-row { margin: 8px 0; }
.bim-toggle {
  display: inline-flex; align-items: center; gap: 8px; cursor: pointer;
  font-size: 12px; color: #343A40; font-weight: 600;
}
.bim-toggle input { opacity: 0; width: 0; height: 0; position: absolute; }
.bim-toggle-track {
  position: relative; display: inline-block;
  width: 32px; height: 18px; background: #ADB5BD; border-radius: 10px;
  transition: background .15s;
}
.bim-toggle-track::after {
  content: ''; position: absolute;
  width: 14px; height: 14px; border-radius: 50%;
  background: #fff; top: 2px; left: 2px;
  transition: transform .18s ease;
  box-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
.bim-toggle input:checked + .bim-toggle-track { background: #1A56E8; }
.bim-toggle input:checked + .bim-toggle-track::after { transform: translateX(14px); }

.bim-share-link {
  display: flex; gap: 6px; margin-top: 8px;
}
.bim-share-link input {
  flex: 1; padding: 8px 10px; border: 1px solid #E9ECEF;
  border-radius: 6px; font-size: 11px; font-family: monospace;
  color: #1A56E8; background: #F8F9FA;
}

.bim-detail-actions {
  display: flex; gap: 8px; margin-top: 18px; padding-top: 14px;
  border-top: 1px solid #E9ECEF;
}

/* Toast */
.bim-toast {
  position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%) translateY(20px);
  padding: 10px 18px; background: #212529; color: #fff;
  border-radius: 8px; font-family: 'Montserrat', sans-serif;
  font-size: 12px; font-weight: 600;
  opacity: 0; pointer-events: none; transition: all .25s;
  z-index: 30000; max-width: 90vw;
  box-shadow: 0 8px 24px rgba(0,0,0,0.20);
}
.bim-toast.visible { opacity: 1; transform: translateX(-50%) translateY(0); }
.bim-toast.success { background: #1D9E75; }
.bim-toast.error { background: #E24B4A; }

/* Avatar in header (when logged in) */
.gr-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 50%;
  background: linear-gradient(135deg, #1A56E8, #F5C518);
  color: #fff; font-size: 11px; font-weight: 800;
  cursor: pointer; flex-shrink: 0;
  border: 2px solid #fff; box-shadow: 0 0 0 1px #E9ECEF;
}
.gr-avatar:hover { box-shadow: 0 0 0 2px #1A56E8; }

/* ============================================================
   PLAN BADGES & USAGE BARS
   ============================================================ */
.bim-plan-badge {
  font-size: 9px; font-weight: 800; letter-spacing: 1.5px;
  padding: 2px 8px; border-radius: 4px;
  display: inline-block;
}
.bim-plan-badge.plan-free       { background: #E9ECEF; color: #6C757D; }
.bim-plan-badge.plan-solo       { background: rgba(26,86,232,0.12); color: #1A56E8; }
.bim-plan-badge.plan-team       { background: linear-gradient(135deg, #1A56E8, #F5C518); color: #fff; }
.bim-plan-badge.plan-enterprise { background: #111; color: #F5C518; }

.bim-upgrade-link {
  font-size: 11px; font-weight: 700; color: #F5C518;
  text-decoration: none; margin-left: auto; padding: 3px 8px;
  border-radius: 4px; background: rgba(245,197,24,0.10);
  transition: all .15s;
}
.bim-upgrade-link:hover { background: rgba(245,197,24,0.20); }

.bim-usage-row {
  margin-top: 8px; padding-top: 8px; border-top: 1px solid #F1F3F5;
}
.bim-usage-label {
  display: flex; justify-content: space-between;
  font-size: 10px; font-weight: 600; color: #6C757D;
  margin-bottom: 4px;
}
.bim-usage-bars { display: flex; gap: 6px; }
.bim-usage-bar {
  flex: 1; height: 4px; background: #F1F3F5;
  border-radius: 2px; overflow: hidden;
}
.bim-usage-bar > div { height: 100%; transition: width .3s; }

/* ============================================================
   WATERMARK PUBLIC SHARE (plan Free) — discret en bas à droite
   ============================================================ */
#bimWatermark {
  position: fixed; bottom: 14px; right: 14px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 11px;
  background: rgba(255,255,255,0.92);
  backdrop-filter: blur(8px);
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 99px;
  z-index: 19999;
  font-family: 'Montserrat', sans-serif;
  font-size: 10px;
  color: #6C757D;
  text-decoration: none;
  box-shadow: 0 2px 8px rgba(0,0,0,0.06);
  transition: all .2s ease;
  animation: bim-wm-slide .4s ease-out .8s both;
}
#bimWatermark:hover {
  background: #fff;
  color: #1A56E8;
  box-shadow: 0 4px 14px rgba(26,86,232,0.18);
  transform: translateY(-1px);
}
@keyframes bim-wm-slide {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
.bim-wm-cube { flex-shrink: 0; }
.bim-wm-text { font-weight: 500; letter-spacing: 0.2px; }
.bim-wm-text strong { color: #1A56E8; font-weight: 800; letter-spacing: 1px; }
#bimWatermark:hover .bim-wm-text strong { color: #0E3FAA; }

@media (max-width: 640px) {
  #bimWatermark { bottom: 10px; right: 10px; padding: 5px 9px; font-size: 9px; }
}

/* ════════════════════════════════════════════════════════════
   ÉDITEUR VOLUME — panneau flottant moderne (style Linear/Notion)
   ════════════════════════════════════════════════════════════ */
.vol-editor {
  position: fixed; right: 20px; top: 50%;
  transform: translateY(-50%);
  z-index: 99999;
  width: 280px;
  background: #fff;
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 12px;
  box-shadow:
    0 1px 2px rgba(0,0,0,0.04),
    0 12px 40px rgba(0,0,0,0.12);
  font-family: 'Montserrat', sans-serif;
  font-size: 12px;
  color: #0f1629;
  overflow: hidden;
  user-select: none;
}
.vol-editor::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #1A56E8 0%, #F5C518 100%);
}

.vol-editor-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px 10px;
  border-bottom: 1px solid #F4F6F9;
}
.vol-editor-title {
  font-size: 13px; font-weight: 700; color: #1A56E8;
  letter-spacing: 0.3px;
  user-select: none;
}
.vol-editor-close {
  width: 26px; height: 26px;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: none;
  color: #ADB5BD; cursor: pointer;
  border-radius: 6px;
  transition: background .15s, color .15s;
}
.vol-editor-close:hover {
  background: #F4F6F9;
  color: #E24B4A;
}

/* Stats Surface / Hauteur / Volume */
.vol-editor-stats {
  display: grid; grid-template-columns: 1fr 1fr 1fr;
  gap: 1px;
  background: #F4F6F9;
  margin: 12px 14px 8px;
  border-radius: 8px;
  overflow: hidden;
}
.vol-stat {
  background: #FAFBFC;
  padding: 8px 6px;
  display: flex; flex-direction: column; align-items: center; gap: 2px;
}
.vol-stat-label {
  font-size: 9px; font-weight: 700; letter-spacing: 0.8px;
  color: #6C757D; text-transform: uppercase;
}
.vol-stat-val {
  font-size: 12px; font-weight: 800; color: #0f1629;
  font-variant-numeric: tabular-nums;
}

.vol-editor-section {
  padding: 8px 16px;
}
.vol-editor-label {
  display: block;
  font-size: 10px; font-weight: 700; letter-spacing: 0.5px;
  color: #6C757D; text-transform: uppercase;
  margin-bottom: 6px;
}

/* Slider hauteur + input */
.vol-h-row { display: flex; align-items: center; gap: 8px; }
.vol-slider {
  flex: 1; height: 4px;
  -webkit-appearance: none; appearance: none;
  background: #E9ECEF;
  border-radius: 2px;
  outline: none;
  cursor: pointer;
}
.vol-slider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 16px; height: 16px;
  background: #1A56E8;
  border: 2px solid #fff;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 0 1px 3px rgba(26,86,232,0.4);
}
.vol-slider::-moz-range-thumb {
  width: 16px; height: 16px;
  background: #1A56E8;
  border: 2px solid #fff;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 0 1px 3px rgba(26,86,232,0.4);
}
.vol-h-num {
  width: 56px;
  padding: 5px 6px;
  font-size: 12px; font-weight: 700;
  text-align: center;
  background: #fff;
  border: 1px solid #E9ECEF;
  border-radius: 6px;
  color: #0f1629;
  font-family: inherit;
}
.vol-h-num:focus {
  outline: none;
  border-color: #1A56E8;
  box-shadow: 0 0 0 3px rgba(26,86,232,0.12);
}

/* Couleurs */
.vol-colors { display: flex; gap: 6px; flex-wrap: wrap; }
.vol-color-swatch {
  width: 28px; height: 28px;
  background: var(--c, #1A56E8);
  border: 2px solid transparent;
  border-radius: 8px;
  cursor: pointer;
  padding: 0;
  position: relative;
  transition: transform .15s, box-shadow .15s;
  box-shadow: 0 1px 3px rgba(0,0,0,0.10);
}
.vol-color-swatch:hover { transform: scale(1.08); }
.vol-color-swatch.is-active {
  border-color: var(--c, #1A56E8);
  box-shadow: 0 0 0 2px #fff inset, 0 2px 6px rgba(0,0,0,0.15);
  transform: scale(1.05);
}

/* Pad de déplacement (boussole) */
.vol-pad {
  display: grid;
  grid-template-columns: 38px 38px 38px;
  grid-template-rows: 38px 38px 38px;
  gap: 4px;
  justify-content: center;
}
.vol-pad-up    { grid-column: 2; grid-row: 1; }
.vol-pad-left  { grid-column: 1; grid-row: 2; }
.vol-pad-center{ grid-column: 2; grid-row: 2; }
.vol-pad-right { grid-column: 3; grid-row: 2; }
.vol-pad-down  { grid-column: 2; grid-row: 3; }
.vol-pad-btn {
  display: flex; align-items: center; justify-content: center;
  background: #F4F6F9;
  border: 1px solid transparent;
  border-radius: 8px;
  color: #495057;
  cursor: pointer;
  transition: all .12s ease;
  padding: 0;
}
.vol-pad-btn:hover {
  background: #E7EBF0;
  color: #1A56E8;
  border-color: #1A56E8;
}
.vol-pad-btn:active {
  transform: scale(0.92);
}
.vol-pad-center {
  background: #fff;
  border: 1px dashed #ADB5BD;
  color: #6C757D;
}
.vol-pad-center:hover {
  background: rgba(245,197,24,0.12);
  border-color: #F5C518;
  border-style: solid;
  color: #B8930E;
}

/* Rotation */
.vol-rot { display: flex; align-items: center; gap: 8px; }
.vol-rot-btn {
  flex: 1; height: 36px;
  display: flex; align-items: center; justify-content: center;
  background: #F4F6F9;
  border: 1px solid transparent;
  border-radius: 8px;
  color: #495057;
  cursor: pointer;
  transition: all .12s ease;
}
.vol-rot-btn:hover {
  background: #E7EBF0;
  color: #1A56E8;
  border-color: #1A56E8;
}
.vol-rot-btn:active { transform: scale(0.95); }
.vol-rot-val {
  min-width: 50px;
  text-align: center;
  font-size: 12px; font-weight: 700;
  color: #0f1629;
  font-variant-numeric: tabular-nums;
  background: #FAFBFC;
  padding: 6px 8px;
  border-radius: 6px;
  border: 1px solid #E9ECEF;
}

/* Bouton Enregistrer (CTA principal) */
.vol-editor-save {
  display: block;
  width: calc(100% - 32px);
  margin: 14px 16px 16px;
  padding: 11px 16px;
  font-size: 12px; font-weight: 700; letter-spacing: 0.3px;
  background: #1A56E8;
  color: #fff;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  font-family: inherit;
  transition: all .15s ease;
  box-shadow: 0 1px 2px rgba(26,86,232,0.20), 0 2px 6px rgba(26,86,232,0.12);
}
.vol-editor-save:hover {
  background: #0E3FAA;
  box-shadow: 0 2px 4px rgba(26,86,232,0.30), 0 4px 12px rgba(26,86,232,0.20);
  transform: translateY(-1px);
}
.vol-editor-save:active {
  transform: translateY(0);
}

/* Mobile : prendre toute la largeur en bas */
@media (max-width: 640px) {
  .vol-editor {
    right: 10px; left: 10px; top: auto; bottom: 80px;
    transform: none;
    width: auto;
  }
}

/* ════════════════════════════════════════════════════════════
   PARTAGE D'ANNOTATION PAR MAIL — modal moderne
   ════════════════════════════════════════════════════════════ */
.ann-share-modal {
  position: fixed; inset: 0;
  z-index: 100000;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Montserrat', sans-serif;
  animation: ann-modal-in 0.18s ease-out;
}
@keyframes ann-modal-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes ann-card-in {
  from { opacity: 0; transform: scale(0.96) translateY(10px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes ann-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
.ann-share-backdrop {
  position: absolute; inset: 0;
  background: rgba(15, 22, 41, 0.55);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.ann-share-card {
  position: relative;
  width: 460px; max-width: calc(100vw - 32px);
  max-height: calc(100vh - 64px);
  background: #fff;
  border-radius: 14px;
  overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: 0 4px 12px rgba(0,0,0,0.10), 0 24px 60px rgba(15,22,41,0.28);
  animation: ann-card-in 0.22s ease-out;
}
.ann-share-card::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #1A56E8 0%, #F5C518 100%);
  z-index: 1;
}

/* HEADER */
.ann-share-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid #F4F6F9;
}
.ann-share-title {
  display: flex; align-items: center; gap: 10px;
  font-size: 14px; font-weight: 700; color: #1A56E8;
  letter-spacing: 0.2px;
}
.ann-share-title svg { color: #1A56E8; flex-shrink: 0; }
.ann-share-close {
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: none;
  color: #ADB5BD; cursor: pointer;
  border-radius: 6px;
  transition: background .15s, color .15s;
}
.ann-share-close:hover {
  background: #F4F6F9;
  color: #E24B4A;
}

/* BODY */
.ann-share-body {
  padding: 16px 20px;
  overflow-y: auto;
  flex: 1;
}

/* Aperçu annotation */
.ann-share-preview {
  background: linear-gradient(180deg, #F8FAFC 0%, #F4F6F9 100%);
  border: 1px solid #EFF1F4;
  border-left: 3px solid #F5C518;
  border-radius: 8px;
  padding: 10px 14px;
  margin-bottom: 16px;
}
.ann-share-preview-label {
  font-size: 9px; font-weight: 700; letter-spacing: 1px;
  color: #6C757D; text-transform: uppercase;
  margin-bottom: 4px;
}
.ann-share-preview-text {
  font-size: 13px; font-weight: 600; color: #0f1629;
  line-height: 1.4;
  margin-bottom: 8px;
  word-break: break-word;
}
.ann-share-preview-coords {
  display: flex; align-items: center; gap: 5px;
  font-size: 11px; color: #6C757D;
  font-variant-numeric: tabular-nums;
}
.ann-share-preview-coords svg { color: #1A56E8; flex-shrink: 0; }

/* Champs */
.ann-share-field {
  margin-bottom: 14px;
}
.ann-share-field label {
  display: block;
  font-size: 11px; font-weight: 700; letter-spacing: 0.3px;
  color: #495057;
  margin-bottom: 5px;
  text-transform: uppercase;
}
.ann-share-req { color: #E24B4A; }
.ann-share-field input,
.ann-share-field textarea {
  width: 100%;
  padding: 9px 12px;
  font-size: 13px; font-weight: 500;
  font-family: inherit;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 8px;
  color: #0f1629;
  box-sizing: border-box;
  transition: border-color .15s, box-shadow .15s;
}
.ann-share-field input:focus,
.ann-share-field textarea:focus {
  outline: none;
  border-color: #1A56E8;
  box-shadow: 0 0 0 3px rgba(26,86,232,0.10);
}
.ann-share-field textarea {
  resize: vertical;
  min-height: 60px;
  font-family: inherit;
}

/* Options checkboxes */
.ann-share-options {
  display: flex; flex-direction: column; gap: 8px;
  padding: 12px 14px;
  background: #FAFBFC;
  border: 1px solid #EFF1F4;
  border-radius: 8px;
  margin-bottom: 12px;
}
.ann-share-check {
  display: flex; align-items: center; gap: 8px;
  font-size: 12px; font-weight: 500;
  color: #495057;
  cursor: pointer;
  user-select: none;
}
.ann-share-check input[type="checkbox"] {
  width: 16px; height: 16px;
  accent-color: #1A56E8;
  cursor: pointer;
  margin: 0;
}

/* Status / messages */
.ann-share-status {
  font-size: 12px; font-weight: 600;
  padding: 0;
  min-height: 0;
  transition: all .2s;
}
.ann-share-status.info {
  color: #1A56E8;
  padding: 8px 12px;
  background: rgba(26,86,232,0.08);
  border-radius: 6px;
}
.ann-share-status.success {
  color: #1D9E75;
  padding: 8px 12px;
  background: rgba(29,158,117,0.10);
  border-radius: 6px;
}
.ann-share-status.error {
  color: #E24B4A;
  padding: 8px 12px;
  background: rgba(226,75,74,0.10);
  border-radius: 6px;
}
.ann-share-status.warning {
  color: #B8930E;
  padding: 8px 12px;
  background: rgba(245,197,24,0.15);
  border-radius: 6px;
}

/* FOOTER */
.ann-share-footer {
  display: flex; gap: 10px; justify-content: flex-end;
  padding: 12px 20px 16px;
  border-top: 1px solid #F4F6F9;
  background: #FAFBFC;
}
.ann-share-btn-cancel,
.ann-share-btn-send {
  padding: 9px 18px;
  font-size: 12px; font-weight: 700; letter-spacing: 0.3px;
  font-family: inherit;
  border-radius: 8px;
  cursor: pointer;
  transition: all .15s;
  display: inline-flex; align-items: center; gap: 6px;
}
.ann-share-btn-cancel {
  background: transparent;
  border: 1px solid #E5E9EE;
  color: #6C757D;
}
.ann-share-btn-cancel:hover {
  background: #F4F6F9;
  border-color: #DEE2E6;
  color: #495057;
}
.ann-share-btn-send {
  background: #1A56E8;
  border: 1px solid #1A56E8;
  color: #fff;
  box-shadow: 0 1px 2px rgba(26,86,232,0.20), 0 2px 6px rgba(26,86,232,0.12);
}
.ann-share-btn-send:hover:not(:disabled) {
  background: #0E3FAA;
  border-color: #0E3FAA;
  box-shadow: 0 2px 4px rgba(26,86,232,0.30), 0 4px 12px rgba(26,86,232,0.20);
}
.ann-share-btn-send:disabled {
  opacity: 0.7; cursor: not-allowed;
  transform: none;
}
.ann-share-spinner { flex-shrink: 0; }

/* Mobile */
@media (max-width: 540px) {
  .ann-share-card { width: calc(100vw - 24px); max-height: calc(100vh - 24px); }
  .ann-share-head { padding: 14px 16px 12px; }
  .ann-share-body { padding: 14px 16px; }
  .ann-share-footer { padding: 12px 16px; }
  .ann-share-title { font-size: 13px; }
}

/* ════════════════════════════════════════════════════════════
   IFC COMPARE — Panel comparaison maquettes
   ════════════════════════════════════════════════════════════ */
.cmp-ifc-panel {
  position: fixed;
  top: calc(var(--header-h) + 60px);
  right: 16px;
  width: 360px; max-height: calc(100vh - var(--header-h) - 80px);
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.10), 0 12px 40px rgba(15,22,41,0.18);
  display: flex; flex-direction: column;
  font-family: 'Montserrat', sans-serif;
  z-index: 8500;     /* au-dessus du viewer IFC (8000) mais sous les modals (10000+) */
  overflow: hidden;
  animation: cmp-panel-in 0.18s ease-out;
}
/* Quand IFC Studio est ouvert, on positionne le panel au-dessus du viewer 3D */
body:has(#ifcViewerPanel[style*="display: flex"]) .cmp-ifc-panel,
body:has(#ifcViewerPanel[style*="display:flex"]) .cmp-ifc-panel {
  top: 110px;
  right: calc(min(820px, 100vw) - 380px);
}
@keyframes cmp-panel-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.cmp-ifc-panel::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #1D9E75 0%, #E24B4A 100%);
  z-index: 1;
}

/* Head */
.cmp-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px 12px;
  border-bottom: 1px solid #F4F6F9;
}
.cmp-title {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 700; color: #0f1629;
  letter-spacing: 0.2px;
}
.cmp-title svg { color: #495057; flex-shrink: 0; }
.cmp-close {
  width: 26px; height: 26px;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: none;
  color: #ADB5BD; cursor: pointer;
  border-radius: 6px;
  transition: all .15s;
}
.cmp-close:hover { background: #F4F6F9; color: #E24B4A; }

/* Body */
.cmp-body {
  padding: 14px 16px;
  overflow-y: auto;
  flex: 1;
}
.cmp-info {
  background: #F8FAFC;
  border: 1px solid #EFF1F4;
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 11px;
  color: #495057;
  line-height: 1.5;
  margin-bottom: 14px;
}

/* État A / B */
.cmp-state {
  border: 1px solid #EFF1F4;
  border-radius: 8px;
  margin-bottom: 10px;
  background: #FAFBFC;
  overflow: hidden;
}
.cmp-state-a { border-left: 3px solid #1D9E75; }
.cmp-state-b { border-left: 3px solid #E24B4A; }

.cmp-state-head {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px;
  background: #fff;
  border-bottom: 1px solid #EFF1F4;
}
.cmp-dot {
  width: 9px; height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
}
.cmp-dot-a { background: #1D9E75; box-shadow: 0 0 0 2px rgba(29,158,117,0.18); }
.cmp-dot-b { background: #E24B4A; box-shadow: 0 0 0 2px rgba(226,75,74,0.18); }

.cmp-state-label {
  font-size: 10px; font-weight: 700; letter-spacing: 1px;
  color: #495057; text-transform: uppercase;
}
.cmp-state-name {
  font-size: 11px; color: #6C757D;
  margin-left: auto;
  text-align: right;
  word-break: break-all;
  max-width: 50%;
}

.cmp-state-body { padding: 10px 12px; }

/* Drop zone */
.cmp-drop {
  display: flex; align-items: center; justify-content: center;
  gap: 8px;
  padding: 16px 12px;
  background: #fff;
  border: 1.5px dashed #DEE2E6;
  border-radius: 6px;
  cursor: pointer;
  font-size: 11px; font-weight: 600;
  color: #6C757D;
  transition: all .15s;
}
.cmp-drop:hover {
  border-color: #1A56E8;
  color: #1A56E8;
  background: #F4F8FF;
}
.cmp-drop.cmp-drop-over {
  border-color: #1A56E8;
  background: rgba(26,86,232,0.08);
  color: #1A56E8;
}
.cmp-drop svg { flex-shrink: 0; }

/* Stats (après chargement) */
.cmp-stats {
  display: flex; align-items: center; gap: 8px;
  font-size: 11px; color: #495057;
}
.cmp-stats > span:first-child {
  flex: 1;
  font-weight: 500;
}
.cmp-stats strong {
  color: #0f1629;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
}
.cmp-toggle, .cmp-remove {
  width: 26px; height: 26px;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: 1px solid #E5E9EE;
  border-radius: 6px; cursor: pointer;
  color: #6C757D;
  transition: all .15s;
}
.cmp-toggle:hover { background: #F4F6F9; color: #1A56E8; border-color: #1A56E8; }
.cmp-toggle.cmp-toggle-off { color: #ADB5BD; opacity: 0.5; }
.cmp-remove:hover { background: #FEF2F2; color: #E24B4A; border-color: #E24B4A; }

/* Contrôles d'opacité */
.cmp-controls {
  margin-top: 6px;
  padding: 12px 14px;
  background: #F8FAFC;
  border: 1px solid #EFF1F4;
  border-radius: 8px;
}
.cmp-section-title {
  font-size: 10px; font-weight: 700; letter-spacing: 1px;
  color: #6C757D; text-transform: uppercase;
  margin-bottom: 10px;
}
.cmp-slider-row {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 8px;
}
.cmp-slider-row:last-child { margin-bottom: 0; }
.cmp-slider-label {
  width: 16px; font-size: 11px; font-weight: 700;
  text-align: center;
  flex-shrink: 0;
}
.cmp-label-a { color: #1D9E75; }
.cmp-label-b { color: #E24B4A; }
.cmp-slider {
  flex: 1;
  -webkit-appearance: none;
  appearance: none;
  height: 4px;
  border-radius: 2px;
  background: #DEE2E6;
  outline: none;
  cursor: pointer;
}
.cmp-slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 14px; height: 14px;
  border-radius: 50%;
  cursor: pointer;
  border: 2px solid #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.20);
}
.cmp-slider::-moz-range-thumb {
  width: 14px; height: 14px;
  border-radius: 50%;
  cursor: pointer;
  border: 2px solid #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.20);
}
.cmp-slider-a::-webkit-slider-thumb { background: #1D9E75; }
.cmp-slider-a::-moz-range-thumb     { background: #1D9E75; }
.cmp-slider-b::-webkit-slider-thumb { background: #E24B4A; }
.cmp-slider-b::-moz-range-thumb     { background: #E24B4A; }
.cmp-slider-val {
  width: 36px; font-size: 10px; font-weight: 700;
  color: #495057;
  text-align: right;
  font-variant-numeric: tabular-nums;
  flex-shrink: 0;
}

/* Status */
.cmp-status {
  font-size: 11px; font-weight: 600;
  margin-top: 10px;
  min-height: 0;
  transition: all .2s;
}
.cmp-status.info {
  color: #1A56E8;
  padding: 8px 10px;
  background: rgba(26,86,232,0.08);
  border-radius: 6px;
}
.cmp-status.success {
  color: #1D9E75;
  padding: 8px 10px;
  background: rgba(29,158,117,0.10);
  border-radius: 6px;
}
.cmp-status.error {
  color: #E24B4A;
  padding: 8px 10px;
  background: rgba(226,75,74,0.10);
  border-radius: 6px;
}

/* Mobile */
@media (max-width: 540px) {
  .cmp-ifc-panel {
    width: calc(100vw - 24px);
    right: 12px;
    top: calc(var(--header-h) + 110px);
    max-height: calc(100vh - var(--header-h) - 130px);
  }
}

/* Bandeau "Modèle déjà chargé détecté" dans le panel comparaison */
.cmp-existing-banner {
  display: flex; align-items: center; gap: 10px;
  background: linear-gradient(135deg, rgba(245,197,24,0.10) 0%, rgba(26,86,232,0.06) 100%);
  border: 1px solid rgba(245,197,24,0.35);
  border-left: 3px solid #F5C518;
  padding: 10px 12px;
  border-radius: 8px;
  margin-bottom: 14px;
  animation: cmp-banner-pulse 2.5s ease-in-out infinite;
}
@keyframes cmp-banner-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(245,197,24, 0); }
  50%      { box-shadow: 0 0 0 4px rgba(245,197,24, 0.12); }
}
.cmp-existing-icon {
  width: 30px; height: 30px;
  background: #1A56E8; color: #fff;
  border-radius: 7px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.cmp-existing-text { flex: 1; min-width: 0; }
.cmp-existing-title {
  font-size: 12px; font-weight: 700; color: #0f1629;
  margin-bottom: 2px;
}
.cmp-existing-sub {
  font-size: 11px; color: #6C757D;
}
.cmp-existing-use {
  padding: 7px 14px;
  background: #1D9E75;
  color: #fff;
  border: none;
  border-radius: 6px;
  font-size: 11px; font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  flex-shrink: 0;
  transition: background .15s;
  letter-spacing: 0.3px;
}
.cmp-existing-use:hover {
  background: #168961;
}

/* ════════════════════════════════════════════════════════════
   IFC COMPARE — Mode d'affichage Superposé / Split
   ════════════════════════════════════════════════════════════ */
.cmp-mode-row {
  display: flex; gap: 6px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 8px;
  padding: 3px;
}
.cmp-mode-btn {
  flex: 1;
  display: flex; align-items: center; justify-content: center;
  gap: 6px;
  padding: 7px 10px;
  background: transparent; border: none;
  border-radius: 6px;
  font-family: inherit;
  font-size: 11px; font-weight: 700;
  color: #6C757D;
  cursor: pointer;
  transition: all .15s;
}
.cmp-mode-btn:hover {
  background: #F4F6F9;
  color: #495057;
}
.cmp-mode-btn.cmp-mode-active {
  background: #1A56E8;
  color: #fff;
  box-shadow: 0 1px 3px rgba(26,86,232,0.18);
}
.cmp-mode-btn.cmp-mode-active svg {
  filter: brightness(2.5) saturate(0.5);
}
.cmp-mode-btn svg { flex-shrink: 0; }

/* Labels affichés en haut des viewports en mode split */
.cmp-split-label {
  position: absolute; top: 12px;
  display: flex; align-items: center; gap: 6px;
  padding: 5px 10px;
  background: rgba(15, 22, 41, 0.78);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-radius: 6px;
  font-family: 'Montserrat', sans-serif;
  font-size: 10px; font-weight: 800;
  letter-spacing: 1.2px;
  color: #fff;
  z-index: 100;
  pointer-events: none;
  box-shadow: 0 2px 8px rgba(0,0,0,0.20);
  animation: cmp-split-label-in 0.25s ease-out;
}
@keyframes cmp-split-label-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.cmp-split-label-a { left: calc(25% - 35px); border-left: 2px solid #1D9E75; }
.cmp-split-label-b { right: calc(25% - 35px); border-left: 2px solid #E24B4A; }
.cmp-split-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
.cmp-split-dot-a { background: #1D9E75; box-shadow: 0 0 0 2px rgba(29,158,117,0.30); }
.cmp-split-dot-b { background: #E24B4A; box-shadow: 0 0 0 2px rgba(226,75,74,0.30); }

/* Ligne de séparation au milieu des 2 viewports */
.cmp-split-divider {
  position: absolute; top: 0; bottom: 0;
  left: 50%;
  width: 2px;
  background: linear-gradient(180deg,
    rgba(26,86,232,0) 0%,
    rgba(26,86,232,0.5) 15%,
    rgba(245,197,24,0.7) 50%,
    rgba(26,86,232,0.5) 85%,
    rgba(26,86,232,0) 100%);
  transform: translateX(-1px);
  pointer-events: none;
  z-index: 99;
  animation: cmp-split-divider-in 0.25s ease-out;
}
@keyframes cmp-split-divider-in {
  from { opacity: 0; transform: translateX(-1px) scaleY(0.6); }
  to   { opacity: 1; transform: translateX(-1px) scaleY(1); }
}

/* ════════════════════════════════════════════════════════════
   GUID UNIVERSEL — affichage cohérent partout (audit, clash,
   QTO, BCF, compare, props)
   ════════════════════════════════════════════════════════════ */
.bim-guid {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 7px;
  background: #F4F6F9;
  border: 1px solid #EFF1F4;
  border-radius: 4px;
  font-family: 'Roboto Mono', 'Consolas', 'Monaco', monospace;
  font-size: 10.5px;
  font-weight: 500;
  color: #6C757D;
  cursor: pointer;
  letter-spacing: 0.2px;
  transition: all .15s;
  user-select: all;
  vertical-align: middle;
  max-width: 100%;
}
.bim-guid:hover {
  background: #E8EFFB;
  border-color: #1A56E8;
  color: #1A56E8;
}
.bim-guid-icon {
  flex-shrink: 0;
  opacity: 0.55;
}
.bim-guid:hover .bim-guid-icon {
  opacity: 1;
}
.bim-guid-text {
  font-feature-settings: 'tnum' on, 'lnum' on;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bim-guid-compact {
  font-size: 10px;
  padding: 1px 5px;
  max-width: 90px;
}
.bim-guid-empty {
  color: #ADB5BD;
  cursor: default;
  font-style: italic;
}
.bim-guid-empty:hover {
  background: #F4F6F9;
  border-color: #EFF1F4;
  color: #ADB5BD;
}
.bim-guid-copied {
  background: #D4F4E8 !important;
  border-color: #1D9E75 !important;
  color: #1D9E75 !important;
  animation: bim-guid-pulse 0.4s ease-out;
}
@keyframes bim-guid-pulse {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.04); }
  100% { transform: scale(1); }
}
.bim-guid-copied .bim-guid-icon { opacity: 1; }

/* Variante "label" (préfixe explicite) */
.bim-guid-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10px;
  color: #6C757D;
}
.bim-guid-label::before {
  content: 'GUID';
  font-family: 'Montserrat', sans-serif;
  font-weight: 700;
  font-size: 9px;
  letter-spacing: 1px;
  color: #ADB5BD;
}

/* GUID dans les lignes audit (lieux problématiques) */
.aux-prob-row .aux-prob-guid {
  margin-top: 5px;
}
.aux-prob-row .aux-prob-guid .bim-guid {
  font-size: 9.5px;
  padding: 1px 5px;
}

/* ════════════════════════════════════════════════════════════
   QTO — Arborescence Catégorie / Type / Items
   ════════════════════════════════════════════════════════════ */
.qto-tree-cat {
  background: #fff;
  border: 1px solid #EFF1F4;
  border-radius: 10px;
  margin-bottom: 8px;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(15, 22, 41, 0.04);
}
.qto-tree-cat-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  background: linear-gradient(135deg, #1A56E8 0%, #0E3FAA 100%);
  color: #fff;
  cursor: pointer;
  user-select: none;
  transition: background .15s;
}
.qto-tree-cat-head:hover {
  background: linear-gradient(135deg, #1849c4 0%, #093894 100%);
}
.qto-tree-cat-title {
  flex: 1;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.3px;
}
.qto-tree-cat-stats {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.qto-stat-pill {
  padding: 3px 10px;
  background: rgba(255,255,255,0.15);
  border-radius: 12px;
  font-size: 11px;
  font-weight: 500;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.qto-stat-pill b {
  font-weight: 700;
}
.qto-stat-pill-surf b { color: #b8e6d4; }
.qto-stat-pill-vol b  { color: #fcd9a0; }
.qto-stat-pill-lin b  { color: #d4c2f0; }

.qto-chevron {
  flex-shrink: 0;
  transition: transform .18s ease-out;
  color: #fff;
}
.qto-collapsed .qto-chevron {
  transform: rotate(0deg);
}
.qto-tree-cat:not(.qto-collapsed) > .qto-tree-cat-head .qto-chevron,
.qto-tree-type:not(.qto-collapsed) > .qto-tree-type-head .qto-chevron-sm {
  transform: rotate(90deg);
}

.qto-tree-cat-body {
  padding: 6px 0 8px;
  background: #fff;
}
.qto-tree-cat.qto-collapsed > .qto-tree-cat-body {
  display: none;
}

/* Type sous catégorie */
.qto-tree-type {
  border-top: 1px solid #F4F6F9;
}
.qto-tree-type:first-child { border-top: none; }
.qto-tree-type-head {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 16px 9px 24px;
  cursor: pointer;
  user-select: none;
  transition: background .12s;
}
.qto-tree-type-head:hover {
  background: #F8FAFC;
}
.qto-chevron-sm {
  flex-shrink: 0;
  color: #ADB5BD;
  transition: transform .15s;
}
.qto-tree-type-title {
  flex: 1;
  font-size: 12px;
  font-weight: 600;
  color: #0f1629;
}
.qto-tree-type-stats {
  display: flex;
  gap: 12px;
  font-size: 11px;
  color: #6C757D;
  font-variant-numeric: tabular-nums;
}
.qto-tree-type-stats b {
  color: #1A56E8;
  font-weight: 700;
}

.qto-tree-type-body {
  padding: 0 16px 8px 36px;
}
.qto-tree-type.qto-collapsed > .qto-tree-type-body {
  display: none;
}

/* Tableau items individuels */
.qto-items-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 11px;
  margin-top: 4px;
}
.qto-items-table thead th {
  background: #FAFBFC;
  border-bottom: 1px solid #EFF1F4;
  padding: 6px 8px;
  text-align: right;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: #ADB5BD;
}
.qto-items-table thead th.qto-th-name { text-align: left; padding-left: 4px; }
.qto-items-table thead th.qto-th-guid { text-align: left; }
.qto-items-table tbody tr {
  border-bottom: 1px solid #F4F6F9;
  transition: background .12s;
  cursor: pointer;
}
.qto-items-table tbody tr:hover {
  background: rgba(26, 86, 232, 0.04);
}
.qto-items-table tbody tr:last-child { border-bottom: none; }
.qto-items-table tbody td {
  padding: 5px 8px;
  text-align: right;
  color: #495057;
  font-variant-numeric: tabular-nums;
}
.qto-items-table tbody td.qto-td-name {
  text-align: left;
  padding-left: 4px;
  font-weight: 500;
  color: #0f1629;
  max-width: 180px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.qto-items-table tbody td.qto-td-guid {
  text-align: left;
}
.qto-items-table tbody td.qto-td-storey {
  color: #1A56E8;
  font-weight: 600;
  font-size: 10px;
}
.qto-no-items {
  padding: 10px;
  font-size: 11px;
  color: #ADB5BD;
  text-align: center;
  font-style: italic;
}
.qto-empty-filter {
  padding: 24px;
  text-align: center;
  color: #6C757D;
  font-size: 12px;
  font-style: italic;
}

/* ════════════════════════════════════════════════════════════
   AUDIT — Cards critères activables/désactivables
   ════════════════════════════════════════════════════════════ */
.audit-card {
  background: #fff;
  border-radius: 10px;
  padding: 11px 13px;
  margin-bottom: 5px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07);
  border-left: 3px solid #1D9E75;
  cursor: pointer;
  transition: all .18s;
  user-select: none;
  position: relative;
}
.audit-card:hover {
  box-shadow: 0 2px 8px rgba(0,0,0,0.12);
  transform: translateY(-1px);
}
.audit-card-disabled {
  opacity: 0.5;
  filter: grayscale(0.6);
  background: #FAFBFC;
}
.audit-card-disabled:hover {
  opacity: 0.75;
}
.audit-card-disabled .audit-card-bar-fill {
  background: #ADB5BD !important;
}

.audit-card-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 5px;
}
.audit-card-label {
  flex: 1;
  font-size: 11px;
  font-weight: 700;
  color: #0f1629;
}
.audit-card-toggle {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  background: #1D9E75;
  color: #fff;
  border-radius: 10px;
  font-size: 8px;
  font-weight: 800;
  letter-spacing: 1.2px;
  transition: background .15s;
}
.audit-card-disabled .audit-card-toggle {
  background: #ADB5BD;
}
.audit-card-state {
  font-family: 'Montserrat', sans-serif;
}
.audit-card-score {
  font-size: 10px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 10px;
  font-variant-numeric: tabular-nums;
}
.audit-card-bar {
  background: #f0f2f5;
  border-radius: 3px;
  height: 3px;
  margin-bottom: 6px;
  overflow: hidden;
}
.audit-card-bar-fill {
  height: 100%;
  border-radius: 3px;
  transition: width .25s ease-out, background .25s;
}
.audit-card-detail {
  font-size: 10px;
  color: #666;
  margin-bottom: 4px;
}
.audit-card-reco {
  font-size: 9px;
  margin-top: 5px;
  padding-top: 5px;
  border-top: 1px solid #f5f5f5;
}
.audit-card-impact {
  font-size: 9px;
  color: #ADB5BD;
  margin-top: 6px;
  letter-spacing: 0.3px;
}
.audit-card-impact b {
  color: #1A56E8;
  font-weight: 700;
}
.audit-card-disabled .audit-card-impact b {
  color: #ADB5BD;
}

/* ════════════════════════════════════════════════════════════
   IFC COMPARE — Rapport versionnage (ajouté/supprimé/modifié)
   ════════════════════════════════════════════════════════════ */
.cmp-versioning {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid #EFF1F4;
}
.cmp-vers-summary {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  margin-bottom: 12px;
}
.cmp-vers-stat {
  padding: 8px 10px;
  border-radius: 8px;
  text-align: center;
  border: 1px solid #EFF1F4;
}
.cmp-vers-stat-added    { background: rgba(29,158,117,0.08); border-color: rgba(29,158,117,0.25); }
.cmp-vers-stat-deleted  { background: rgba(226,75,74,0.08); border-color: rgba(226,75,74,0.25); }
.cmp-vers-stat-modified { background: rgba(245,167,35,0.08); border-color: rgba(245,167,35,0.30); }
.cmp-vers-stat-unchanged{ background: rgba(108,117,125,0.06); border-color: rgba(108,117,125,0.20); }
.cmp-vers-num {
  font-size: 18px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  margin-bottom: 2px;
}
.cmp-vers-stat-added    .cmp-vers-num { color: #1D9E75; }
.cmp-vers-stat-deleted  .cmp-vers-num { color: #E24B4A; }
.cmp-vers-stat-modified .cmp-vers-num { color: #C77800; }
.cmp-vers-stat-unchanged .cmp-vers-num{ color: #6C757D; }
.cmp-vers-lbl {
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: #6C757D;
}

/* Blocs collapsables par catégorie */
.cmp-vers-block {
  border: 1px solid #EFF1F4;
  border-radius: 8px;
  margin-bottom: 6px;
  overflow: hidden;
}
.cmp-vers-block-added    { border-left: 3px solid #1D9E75; }
.cmp-vers-block-deleted  { border-left: 3px solid #E24B4A; }
.cmp-vers-block-modified { border-left: 3px solid #F5A623; }

.cmp-vers-block-head {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  background: #FAFBFC;
  cursor: pointer;
  user-select: none;
  transition: background .12s;
}
.cmp-vers-block-head:hover { background: #F4F6F9; }
.cmp-vers-block-label {
  flex: 1;
  font-size: 11px;
  font-weight: 700;
  color: #0f1629;
}
.cmp-vers-block-count {
  font-size: 10px;
  font-weight: 700;
  padding: 1px 8px;
  border-radius: 9px;
  background: #fff;
  color: #495057;
  border: 1px solid #E5E9EE;
  font-variant-numeric: tabular-nums;
}
.cmp-vers-chev {
  flex-shrink: 0;
  color: #6C757D;
  transition: transform .15s;
  transform: rotate(90deg);
}
.cmp-vers-block.cmp-vers-collapsed .cmp-vers-chev { transform: rotate(0deg); }
.cmp-vers-block.cmp-vers-collapsed .cmp-vers-block-body { display: none; }

.cmp-vers-block-body { padding: 6px 12px 8px; background: #fff; }

.cmp-vers-class {
  margin-bottom: 8px;
}
.cmp-vers-class:last-child { margin-bottom: 0; }
.cmp-vers-class-head {
  font-size: 10px;
  font-weight: 700;
  color: #6C757D;
  letter-spacing: 0.4px;
  margin: 4px 0 4px 4px;
}
.cmp-vers-class-head b {
  color: #1A56E8;
  font-weight: 700;
}
.cmp-vers-items {
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.cmp-vers-item {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 8px;
  background: #FAFBFC;
  border-radius: 5px;
  font-size: 10.5px;
}
.cmp-vers-item:hover { background: #F1F5FB; }
.cmp-vers-item-name {
  flex: 1;
  color: #0f1629;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cmp-vers-more {
  font-size: 10px;
  color: #ADB5BD;
  text-align: center;
  padding: 4px;
  font-style: italic;
}

.cmp-vers-actions {
  margin-top: 10px;
  text-align: center;
}
.cmp-vers-export {
  padding: 8px 16px;
  background: #1A56E8;
  color: #fff;
  border: none;
  border-radius: 6px;
  font-family: inherit;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
  letter-spacing: 0.3px;
  transition: background .15s;
}
.cmp-vers-export:hover { background: #0E3FAA; }

/* ════════════════════════════════════════════════════════════
   BCF — Modal de revue avant export
   ════════════════════════════════════════════════════════════ */
.bcf-review-modal {
  position: fixed; inset: 0;
  z-index: 100001;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Montserrat', sans-serif;
  animation: bcf-modal-in 0.18s ease-out;
}
@keyframes bcf-modal-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.bcf-review-backdrop {
  position: absolute; inset: 0;
  background: rgba(15, 22, 41, 0.55);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.bcf-review-card {
  position: relative;
  width: 760px; max-width: calc(100vw - 32px);
  height: 700px; max-height: calc(100vh - 64px);
  background: #fff;
  border-radius: 14px;
  display: flex; flex-direction: column;
  box-shadow: 0 4px 12px rgba(0,0,0,0.10), 0 24px 60px rgba(15,22,41,0.28);
  overflow: hidden;
  animation: bcf-card-in 0.22s ease-out;
}
@keyframes bcf-card-in {
  from { opacity: 0; transform: scale(0.96) translateY(10px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
.bcf-review-card::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #1A56E8 0%, #F5C518 100%);
  z-index: 1;
}

.bcf-review-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 22px 14px;
  border-bottom: 1px solid #F4F6F9;
}
.bcf-review-title {
  display: flex; align-items: center; gap: 9px;
  font-size: 14px; font-weight: 700; color: #1A56E8;
  letter-spacing: 0.2px;
}
.bcf-review-close {
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: none;
  color: #ADB5BD; cursor: pointer;
  border-radius: 6px;
  transition: all .15s;
}
.bcf-review-close:hover {
  background: #F4F6F9;
  color: #E24B4A;
}

.bcf-review-toolbar {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 12px 22px;
  border-bottom: 1px solid #F4F6F9;
  background: #FAFBFC;
}
.bcf-review-search {
  flex: 1; min-width: 200px;
  display: flex; align-items: center; gap: 6px;
  padding: 7px 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 7px;
  color: #6C757D;
  transition: border-color .15s;
}
.bcf-review-search:focus-within {
  border-color: #1A56E8;
}
.bcf-review-search input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 12px;
  color: #0f1629;
}
.bcf-review-toolbar select {
  padding: 7px 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 7px;
  font-family: inherit;
  font-size: 12px;
  color: #495057;
  cursor: pointer;
}
.bcf-review-quickactions {
  display: flex; gap: 6px;
}
.bcf-review-quick {
  padding: 6px 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 6px;
  font-family: inherit;
  font-size: 11px;
  font-weight: 600;
  color: #6C757D;
  cursor: pointer;
  transition: all .15s;
}
.bcf-review-quick:hover {
  background: #F4F6F9;
  color: #1A56E8;
  border-color: #1A56E8;
}

.bcf-review-body {
  flex: 1;
  overflow-y: auto;
  padding: 12px 22px;
}
.bcf-review-empty {
  padding: 30px 12px;
  text-align: center;
  color: #6C757D;
  font-size: 12px;
  font-style: italic;
}

.bcf-review-issue {
  display: flex; gap: 10px;
  padding: 12px 14px;
  background: #fff;
  border: 1px solid #EFF1F4;
  border-radius: 9px;
  margin-bottom: 8px;
  transition: all .15s;
}
.bcf-review-issue:hover {
  border-color: #DEE2E6;
}
.bcf-review-issue-off {
  opacity: 0.55;
  background: #FAFBFC;
}
.bcf-review-check {
  display: flex; align-items: flex-start;
  cursor: pointer;
  padding-top: 3px;
}
.bcf-review-check input {
  width: 16px; height: 16px;
  accent-color: #1A56E8;
  cursor: pointer;
  margin: 0;
}
.bcf-review-issue-body {
  flex: 1;
}
.bcf-review-issue-head {
  display: flex; align-items: center; gap: 8px; margin-bottom: 5px;
}
.bcf-review-sev {
  padding: 2px 7px;
  border-radius: 9px;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 1px;
}
.bcf-review-issue-title {
  flex: 1;
  font-size: 12px;
  font-weight: 700;
  color: #0f1629;
}
.bcf-review-issue-desc {
  font-size: 11px;
  color: #6C757D;
  line-height: 1.4;
  margin-bottom: 6px;
}
.bcf-review-issue-guid {
  margin-bottom: 6px;
}
.bcf-review-comment {
  width: 100%;
  padding: 7px 10px;
  background: #FAFBFC;
  border: 1px solid #E5E9EE;
  border-radius: 6px;
  font-family: inherit;
  font-size: 11px;
  color: #0f1629;
  resize: vertical;
  min-height: 40px;
  box-sizing: border-box;
  transition: border-color .15s;
}
.bcf-review-comment:focus {
  outline: none;
  border-color: #1A56E8;
}

.bcf-review-footer {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 22px;
  border-top: 1px solid #F4F6F9;
  background: #FAFBFC;
}
.bcf-review-count {
  font-size: 12px;
  color: #6C757D;
}
.bcf-review-count b {
  color: #1A56E8;
  font-size: 14px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.bcf-review-buttons {
  display: flex; gap: 10px;
}
.bcf-review-cancel,
.bcf-review-export {
  padding: 9px 18px;
  font-family: inherit;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.3px;
  border-radius: 7px;
  cursor: pointer;
  transition: all .15s;
  display: inline-flex; align-items: center; gap: 6px;
}
.bcf-review-cancel {
  background: transparent;
  border: 1px solid #E5E9EE;
  color: #6C757D;
}
.bcf-review-cancel:hover {
  background: #F4F6F9;
  color: #495057;
}
.bcf-review-export {
  background: #1A56E8;
  border: 1px solid #1A56E8;
  color: #fff;
  box-shadow: 0 1px 2px rgba(26,86,232,0.20), 0 2px 6px rgba(26,86,232,0.12);
}
.bcf-review-export:hover {
  background: #0E3FAA;
  border-color: #0E3FAA;
}

/* Mobile */
@media (max-width: 540px) {
  .bcf-review-card {
    width: calc(100vw - 16px);
    height: calc(100vh - 16px);
    border-radius: 10px;
  }
  .bcf-review-head { padding: 14px 16px 12px; }
  .bcf-review-toolbar { padding: 10px 16px; }
  .bcf-review-body { padding: 10px 16px; }
  .bcf-review-footer { padding: 12px 16px; }
}


/* ════════════════════════════════════════════════════════════════════
   AUDIT — Configuration toolbar style Notion/Linear
   Liste verticale propre, ligne par section, drill-down inline
   ════════════════════════════════════════════════════════════════════ */

/* HEADER */
.audr-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 14px;
}
.audr-header-left {
  flex: 1;
  min-width: 0;
}
.audr-title {
  font-family: 'Montserrat', sans-serif;
  font-size: 13px;
  font-weight: 800;
  color: #0f1629;
  letter-spacing: -0.1px;
  margin-bottom: 4px;
}
.audr-subtitle {
  font-size: 11px;
  color: #6C757D;
  font-weight: 500;
}
.audr-subtitle b {
  color: #0f1629;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.audr-sub-sep {
  color: #ADB5BD;
  margin: 0 1px;
}

.audr-rerun {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 14px;
  background: #1A56E8;
  color: #fff;
  border: none;
  border-radius: 8px;
  font-family: 'Montserrat', sans-serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.2px;
  cursor: pointer;
  transition: all .15s ease;
  white-space: nowrap;
  flex-shrink: 0;
  box-shadow: 0 1px 2px rgba(26, 86, 232, 0.25), 0 2px 8px rgba(26, 86, 232, 0.15);
}
.audr-rerun:hover {
  background: #0E3FAA;
  transform: translateY(-1px);
  box-shadow: 0 2px 4px rgba(26, 86, 232, 0.30), 0 4px 12px rgba(26, 86, 232, 0.20);
}
.audr-rerun:active {
  transform: translateY(0);
}
.audr-rerun:disabled {
  opacity: 0.65;
  cursor: wait;
  transform: none;
}
.audr-rerun-loading svg {
  animation: audr-spin 0.6s linear infinite;
}
@keyframes audr-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* QUICK ACTIONS */
.audr-quick {
  display: flex;
  gap: 6px;
  margin-bottom: 10px;
}
.audr-quick-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 6px;
  font-family: inherit;
  font-size: 10.5px;
  font-weight: 600;
  color: #495057;
  cursor: pointer;
  transition: all .12s;
}
.audr-quick-btn:hover {
  background: #F4F6F9;
  border-color: #1A56E8;
  color: #1A56E8;
}
.audr-quick-btn svg { flex-shrink: 0; }

/* LISTE DES SECTIONS */
.audr-list {
  background: #fff;
  border: 1px solid #EFF1F4;
  border-radius: 10px;
  overflow: hidden;
}

/* LIGNE SECTION */
.audr-row {
  border-bottom: 1px solid #F4F6F9;
  transition: background .12s;
}
.audr-row:last-child {
  border-bottom: none;
}
.audr-row.is-open {
  background: #FAFBFC;
}

.audr-row-head {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 14px;
  background: transparent;
  border: none;
  cursor: pointer;
  font-family: inherit;
  text-align: left;
  transition: background .12s;
}
.audr-row-head:hover {
  background: #F8FAFC;
}
.audr-row.is-open .audr-row-head {
  background: #F4F6F9;
}

/* PILL d'état (TOUT / RIEN / PARTIEL) */
.audr-row-pill {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 60px;
  padding: 3px 8px;
  border-radius: 11px;
  font-family: 'Montserrat', sans-serif;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
}
.audr-pill-all {
  background: #E8F8F3;
  color: #1D9E75;
}
.audr-pill-partial {
  background: #FFF4E0;
  color: #C77800;
}
.audr-pill-none {
  background: #F4F6F9;
  color: #ADB5BD;
}
.audr-pill-empty {
  background: #F4F6F9;
  color: #ADB5BD;
}

/* NOM SECTION */
.audr-row-name {
  flex: 1;
  font-size: 12.5px;
  font-weight: 600;
  color: #0f1629;
  letter-spacing: -0.1px;
}
.audr-row-none .audr-row-name {
  color: #6C757D;
}

/* STATS (compteur + points) */
.audr-row-stats {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
  font-variant-numeric: tabular-nums;
}
.audr-row-rules {
  font-size: 11px;
  color: #6C757D;
  font-weight: 500;
}
.audr-row-rules b {
  color: #0f1629;
  font-weight: 700;
}
.audr-row-pts {
  font-size: 10.5px;
  color: #6C757D;
  font-weight: 500;
  padding: 2px 8px;
  background: #F4F6F9;
  border-radius: 5px;
}
.audr-row-all .audr-row-pts {
  background: rgba(29, 158, 117, 0.10);
  color: #1D9E75;
  font-weight: 600;
}
.audr-row-partial .audr-row-pts {
  background: rgba(245, 167, 35, 0.12);
  color: #C77800;
  font-weight: 600;
}

/* CHEVRON */
.audr-row-chev {
  color: #ADB5BD;
  flex-shrink: 0;
  transition: transform .2s ease;
}
.audr-row.is-open .audr-row-chev {
  transform: rotate(-180deg);
  color: #1A56E8;
}

/* DRILL-DOWN */
.audr-drilldown {
  padding: 6px 14px 12px 14px;
  background: #FAFBFC;
  border-top: 1px solid #EFF1F4;
  animation: audr-drill-in .2s ease-out;
}
@keyframes audr-drill-in {
  from {
    opacity: 0;
    max-height: 0;
  }
  to {
    opacity: 1;
    max-height: 600px;
  }
}

.audr-drill-actions {
  display: flex;
  gap: 5px;
  margin-bottom: 8px;
}
.audr-drill-btn {
  padding: 4px 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 5px;
  font-family: inherit;
  font-size: 10px;
  font-weight: 600;
  color: #6C757D;
  cursor: pointer;
  transition: all .12s;
  letter-spacing: 0.2px;
}
.audr-drill-btn:hover {
  background: #1A56E8;
  border-color: #1A56E8;
  color: #fff;
}

/* RÈGLE INDIVIDUELLE */
.audr-rule {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 10px;
  margin-bottom: 3px;
  background: #fff;
  border: 1px solid transparent;
  border-radius: 6px;
  cursor: pointer;
  transition: all .12s;
  user-select: none;
}
.audr-rule:hover {
  border-color: #E5E9EE;
  background: #fff;
}
.audr-rule input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.audr-rule-checkbox {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  border-radius: 4px;
  background: #fff;
  border: 1.5px solid #DEE2E6;
  display: flex;
  align-items: center;
  justify-content: center;
  color: transparent;
  transition: all .12s;
}
.audr-rule input:checked + .audr-rule-checkbox {
  background: #1A56E8;
  border-color: #1A56E8;
  color: #fff;
}
.audr-rule:hover .audr-rule-checkbox {
  border-color: #1A56E8;
}

.audr-rule-label {
  flex: 1;
  font-size: 11.5px;
  color: #0f1629;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.audr-rule-pts {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 4px;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.2px;
}

/* État OFF (règle décochée) */
.audr-rule.is-off {
  background: #F8FAFC;
}
.audr-rule.is-off .audr-rule-label {
  color: #ADB5BD;
  text-decoration: line-through;
  text-decoration-color: rgba(173, 181, 189, 0.5);
}
.audr-rule.is-off .audr-rule-pts {
  opacity: 0.5;
}

/* Mobile */
@media (max-width: 540px) {
  .audr-header {
    flex-direction: column;
    align-items: stretch;
  }
  .audr-rerun {
    width: 100%;
    justify-content: center;
  }
  .audr-row-stats {
    gap: 8px;
  }
  .audr-row-pill {
    min-width: 50px;
    font-size: 8px;
  }
}

/* ════════════════════════════════════════════════════════════
   BCF — Sélecteur de priorité dans la modal de revue
   ════════════════════════════════════════════════════════════ */
.bcf-review-priority {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 8px 0;
}
.bcf-review-priority-label {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: #6C757D;
  flex-shrink: 0;
}
.bcf-review-priority-btns {
  display: flex;
  gap: 4px;
  background: #F4F6F9;
  padding: 3px;
  border-radius: 7px;
}
.bcf-prio-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 9px;
  background: transparent;
  border: none;
  border-radius: 5px;
  font-family: inherit;
  font-size: 10.5px;
  font-weight: 600;
  color: #6C757D;
  cursor: pointer;
  transition: all .12s;
  letter-spacing: 0.2px;
}
.bcf-prio-btn:hover {
  color: #0f1629;
  background: rgba(255,255,255,0.5);
}
.bcf-prio-btn svg {
  flex-shrink: 0;
}

/* États actifs avec couleurs distinctes */
.bcf-prio-btn.bcf-prio-high.is-active {
  background: #FEE2E2;
  color: #DC2626;
  box-shadow: inset 0 0 0 1px #FCA5A5;
}
.bcf-prio-btn.bcf-prio-normal.is-active {
  background: #FEF3C7;
  color: #C77800;
  box-shadow: inset 0 0 0 1px #FCD34D;
}
.bcf-prio-btn.bcf-prio-low.is-active {
  background: #D1FAE5;
  color: #047857;
  box-shadow: inset 0 0 0 1px #6EE7B7;
}

/* ════════════════════════════════════════════════════════════
   COMPARAISON VERSIONNAGE — améliorations (v2)
   - Recherche
   - Sous-classes IFC collapsables
   - Catégorie "Figés" (4ème)
   - Export Excel
   ════════════════════════════════════════════════════════════ */

/* Recherche dans le rapport */
.cmp-vers-search-wrap {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 8px 11px;
  margin-bottom: 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 8px;
  color: #6C757D;
  transition: border-color .15s;
}
.cmp-vers-search-wrap:focus-within {
  border-color: #1A56E8;
}
.cmp-vers-search {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 11.5px;
  color: #0f1629;
}
.cmp-vers-search::placeholder {
  color: #ADB5BD;
}

/* Sous-classes IFC : header cliquable + chevron + collapsable */
.cmp-vers-class-head {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 5px 4px;
  cursor: pointer;
  user-select: none;
  border-radius: 4px;
  transition: background .12s;
}
.cmp-vers-class-head:hover {
  background: rgba(26, 86, 232, 0.06);
}
.cmp-vers-class-chev {
  flex-shrink: 0;
  color: #ADB5BD;
  transition: transform .15s;
  transform: rotate(90deg);
}
.cmp-vers-class.cmp-vers-class-collapsed .cmp-vers-class-chev {
  transform: rotate(0deg);
}
.cmp-vers-class.cmp-vers-class-collapsed .cmp-vers-items {
  display: none;
}
.cmp-vers-class-name {
  flex: 1;
  font-size: 10.5px;
  font-weight: 700;
  color: #0f1629;
  letter-spacing: 0.2px;
}
.cmp-vers-class-count {
  font-size: 10px;
  font-weight: 700;
  padding: 1px 7px;
  background: rgba(26, 86, 232, 0.1);
  color: #1A56E8;
  border-radius: 9px;
  font-variant-numeric: tabular-nums;
}

/* Détail spécifique (renommé) à côté du nom */
.cmp-vers-item-detail {
  font-size: 9.5px;
  color: #C77800;
  font-style: italic;
  margin-left: 4px;
}

/* Bloc figés */
.cmp-vers-block-unchanged {
  border-left: 3px solid #6C757D;
}

/* Boutons d'export : Excel */
.cmp-vers-actions {
  display: flex;
  gap: 8px;
  justify-content: center;
}
.cmp-vers-export {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cmp-vers-export.cmp-vers-export-xlsx {
  background: #107C41;
}
.cmp-vers-export.cmp-vers-export-xlsx:hover {
  background: #0A6033;
}

/* Animation expand/collapse fluide pour les sous-classes */
.cmp-vers-items {
  animation: cmp-class-in 0.18s ease-out;
}
@keyframes cmp-class-in {
  from { opacity: 0; max-height: 0; }
  to   { opacity: 1; max-height: 8000px; }
}

/* ════════════════════════════════════════════════════════════
   COMPARAISON IFC — Browser éléments versionnage (UX pro)
   Onglets · recherche · liste déroulante · focus 3D
   ════════════════════════════════════════════════════════════ */

/* ── ONGLETS ── */
.cmpb-tabs {
  display: flex;
  gap: 3px;
  margin: 8px 0 10px;
  background: #F4F6F9;
  padding: 3px;
  border-radius: 8px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.cmpb-tabs::-webkit-scrollbar { height: 0; display: none; }

.cmpb-tab {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 10px;
  background: transparent;
  border: none;
  border-radius: 6px;
  font-family: inherit;
  font-size: 11px;
  font-weight: 600;
  color: #6C757D;
  cursor: pointer;
  transition: all .12s;
  white-space: nowrap;
  flex-shrink: 0;
}
.cmpb-tab:hover {
  background: rgba(255,255,255,0.65);
  color: #0f1629;
}
.cmpb-tab.is-active {
  background: #fff;
  color: #1A56E8;
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}
.cmpb-tab-icon {
  font-weight: 800;
  font-size: 12px;
  width: 12px;
  text-align: center;
}
.cmpb-tab-added.is-active   { color: #1D9E75; }
.cmpb-tab-added.is-active   .cmpb-tab-icon { color: #1D9E75; }
.cmpb-tab-deleted.is-active { color: #E24B4A; }
.cmpb-tab-deleted.is-active .cmpb-tab-icon { color: #E24B4A; }
.cmpb-tab-modified.is-active{ color: #C77800; }
.cmpb-tab-modified.is-active .cmpb-tab-icon { color: #F5A623; }
.cmpb-tab-unchanged.is-active { color: #495057; }
.cmpb-tab-count {
  font-size: 9.5px;
  font-weight: 700;
  padding: 1px 6px;
  background: rgba(108,117,125,0.15);
  color: #495057;
  border-radius: 9px;
  font-variant-numeric: tabular-nums;
}
.cmpb-tab.is-active .cmpb-tab-count {
  background: rgba(26,86,232,0.15);
  color: #1A56E8;
}
.cmpb-tab-added.is-active .cmpb-tab-count   { background: rgba(29,158,117,0.15);  color: #1D9E75; }
.cmpb-tab-deleted.is-active .cmpb-tab-count { background: rgba(226,75,74,0.15);   color: #E24B4A; }
.cmpb-tab-modified.is-active .cmpb-tab-count{ background: rgba(245,167,35,0.18);  color: #C77800; }

/* ── RECHERCHE ── */
.cmpb-search-wrap {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 7px 11px;
  margin-bottom: 10px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 8px;
  color: #6C757D;
  transition: border-color .15s;
}
.cmpb-search-wrap:focus-within { border-color: #1A56E8; }
.cmpb-search {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 11.5px;
  color: #0f1629;
}
.cmpb-search::placeholder { color: #ADB5BD; }
.cmpb-search-clear {
  background: transparent;
  border: none;
  color: #ADB5BD;
  cursor: pointer;
  font-size: 13px;
  padding: 0 4px;
  border-radius: 4px;
  transition: all .12s;
}
.cmpb-search-clear:hover {
  background: #F4F6F9;
  color: #E24B4A;
}

/* ── LISTE ── */
.cmpb-list {
  max-height: 480px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid #EFF1F4;
  border-radius: 9px;
  padding: 4px;
}
.cmpb-list::-webkit-scrollbar { width: 6px; }
.cmpb-list::-webkit-scrollbar-thumb {
  background: #DEE2E6;
  border-radius: 3px;
}

.cmpb-empty {
  padding: 30px 12px;
  text-align: center;
  font-size: 12px;
  color: #ADB5BD;
  font-style: italic;
}

/* ── BLOCS PAR CLASSE IFC ── */
.cmpb-cls {
  margin-bottom: 4px;
}
.cmpb-cls:last-child { margin-bottom: 0; }
.cmpb-cls-head {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 7px 9px;
  background: #FAFBFC;
  border-radius: 6px;
  cursor: pointer;
  user-select: none;
  transition: background .12s;
}
.cmpb-cls-head:hover { background: #F1F3F5; }
.cmpb-cls-chev {
  flex-shrink: 0;
  color: #6C757D;
  transition: transform .15s;
  transform: rotate(90deg);
}
.cmpb-cls.is-collapsed .cmpb-cls-chev { transform: rotate(0deg); }
.cmpb-cls.is-collapsed .cmpb-cls-body { display: none; }
.cmpb-cls-name {
  flex: 1;
  font-size: 11px;
  font-weight: 700;
  color: #0f1629;
  letter-spacing: 0.2px;
}
.cmpb-cls-count {
  font-size: 10px;
  font-weight: 700;
  padding: 1px 7px;
  background: rgba(26,86,232,0.10);
  color: #1A56E8;
  border-radius: 9px;
  font-variant-numeric: tabular-nums;
}
.cmpb-cls-body {
  padding: 4px 0 4px 22px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* ── ITEMS ── */
.cmpb-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 9px;
  background: #fff;
  border: 1px solid transparent;
  border-radius: 6px;
  cursor: pointer;
  transition: all .12s;
}
.cmpb-item:hover {
  background: rgba(26, 86, 232, 0.04);
  border-color: rgba(26, 86, 232, 0.20);
}
.cmpb-item.is-active {
  background: #FFF8DC;
  border-color: #FFD700;
  box-shadow: 0 0 0 2px rgba(255, 215, 0, 0.25);
}
.cmpb-item.is-notfound {
  background: #FFF0F0;
  border-color: #FCA5A5;
  animation: cmpb-shake 0.4s ease-out;
}
@keyframes cmpb-shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-3px); }
  75% { transform: translateX(3px); }
}

/* Badge statut sur l'item (mode "Tous") */
.cmpb-status {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 800;
}
.cmpb-status-added    { background: rgba(29,158,117,0.15); color: #1D9E75; }
.cmpb-status-deleted  { background: rgba(226,75,74,0.15);  color: #E24B4A; }
.cmpb-status-modified { background: rgba(245,167,35,0.18); color: #C77800; }
.cmpb-status-unchanged{ background: rgba(108,117,125,0.15); color: #6C757D; }

.cmpb-item-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cmpb-item-name {
  font-size: 11.5px;
  font-weight: 500;
  color: #0f1629;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cmpb-item-detail {
  font-size: 10px;
  color: #C77800;
  font-style: italic;
}
.cmpb-item-detail-wrap {
  display: flex;
  align-items: center;
  gap: 4px;
}
.cmpb-item-guid {
  flex-shrink: 0;
}
.cmpb-item-arrow {
  flex-shrink: 0;
  color: #ADB5BD;
  opacity: 0;
  transition: opacity .15s;
}
.cmpb-item:hover .cmpb-item-arrow {
  opacity: 1;
  color: #1A56E8;
}
.cmpb-item.is-active .cmpb-item-arrow {
  opacity: 1;
  color: #C77800;
}

/* Mobile */
@media (max-width: 540px) {
  .cmpb-tabs { padding: 2px; }
  .cmpb-tab { padding: 5px 8px; font-size: 10.5px; }
  .cmpb-tab-label { display: none; }
  .cmpb-tab.is-active .cmpb-tab-label { display: inline; }
}

/* ════════════════════════════════════════════════════════════════════
   COMPARAISON IFC — Browser de versionnage (UX pro)
   Onglets · Recherche · Liste groupée par classe · Click pour focus 3D
   ════════════════════════════════════════════════════════════════════ */

/* ─── ONGLETS DE FILTRAGE ─── */
.cmpb-tabs {
  display: flex;
  gap: 4px;
  padding: 4px;
  margin-bottom: 10px;
  background: #F4F6F9;
  border-radius: 9px;
  border: 1px solid #EFF1F4;
}
.cmpb-tab {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  padding: 7px 8px;
  background: transparent;
  border: none;
  border-radius: 6px;
  font-family: 'Montserrat', sans-serif;
  font-size: 10.5px;
  font-weight: 700;
  color: #6C757D;
  cursor: pointer;
  transition: all .15s;
  white-space: nowrap;
  min-width: 0;
}
.cmpb-tab:hover {
  background: rgba(255,255,255,0.6);
  color: #0f1629;
}
.cmpb-tab.is-active {
  background: #fff;
  color: #0f1629;
  box-shadow: 0 1px 3px rgba(15,22,41,0.06), 0 0 0 1px rgba(15,22,41,0.04);
}
.cmpb-tab-icon {
  font-weight: 900;
  font-size: 13px;
  line-height: 1;
  flex-shrink: 0;
}
.cmpb-tab-label {
  letter-spacing: 0.2px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cmpb-tab-count {
  font-size: 9.5px;
  font-weight: 700;
  padding: 1px 6px;
  background: rgba(108,117,125,0.12);
  color: #6C757D;
  border-radius: 8px;
  font-variant-numeric: tabular-nums;
  flex-shrink: 0;
}
.cmpb-tab.is-active .cmpb-tab-count {
  background: rgba(26,86,232,0.10);
  color: #1A56E8;
}
/* Couleurs par catégorie quand active */
.cmpb-tab-added.is-active { color: #1D9E75; }
.cmpb-tab-added.is-active .cmpb-tab-icon { color: #1D9E75; }
.cmpb-tab-added.is-active .cmpb-tab-count { background: rgba(29,158,117,0.12); color: #1D9E75; }
.cmpb-tab-deleted.is-active { color: #E24B4A; }
.cmpb-tab-deleted.is-active .cmpb-tab-icon { color: #E24B4A; }
.cmpb-tab-deleted.is-active .cmpb-tab-count { background: rgba(226,75,74,0.12); color: #E24B4A; }
.cmpb-tab-modified.is-active { color: #C77800; }
.cmpb-tab-modified.is-active .cmpb-tab-icon { color: #C77800; }
.cmpb-tab-modified.is-active .cmpb-tab-count { background: rgba(245,167,35,0.12); color: #C77800; }
.cmpb-tab-unchanged.is-active .cmpb-tab-count { background: rgba(108,117,125,0.18); }

/* ─── RECHERCHE ─── */
.cmpb-search-wrap {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 8px 11px;
  margin-bottom: 8px;
  background: #fff;
  border: 1px solid #E5E9EE;
  border-radius: 8px;
  color: #6C757D;
  transition: border-color .15s;
}
.cmpb-search-wrap:focus-within {
  border-color: #1A56E8;
}
.cmpb-search {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 11.5px;
  color: #0f1629;
  min-width: 0;
}
.cmpb-search::placeholder { color: #ADB5BD; }
.cmpb-search-clear {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #F4F6F9;
  color: #6C757D;
  border: none;
  border-radius: 50%;
  font-size: 10px;
  cursor: pointer;
  transition: all .12s;
}
.cmpb-search-clear:hover {
  background: #E24B4A;
  color: #fff;
}

/* ─── LISTE ─── */
.cmpb-list {
  background: #fff;
  border: 1px solid #EFF1F4;
  border-radius: 9px;
  overflow: hidden;
  margin-bottom: 12px;
  max-height: 480px;
  overflow-y: auto;
}
.cmpb-empty {
  padding: 30px 14px;
  text-align: center;
  color: #ADB5BD;
  font-size: 11.5px;
  font-style: italic;
}

/* Classe IFC (header collapsable) */
.cmpb-cls {
  border-bottom: 1px solid #F4F6F9;
}
.cmpb-cls:last-child { border-bottom: none; }
.cmpb-cls-head {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 8px 12px;
  background: #FAFBFC;
  cursor: pointer;
  user-select: none;
  transition: background .12s;
}
.cmpb-cls-head:hover {
  background: #F4F6F9;
}
.cmpb-cls-chev {
  flex-shrink: 0;
  color: #6C757D;
  transition: transform .15s;
  transform: rotate(90deg);
}
.cmpb-cls.is-collapsed .cmpb-cls-chev {
  transform: rotate(0deg);
}
.cmpb-cls.is-collapsed .cmpb-cls-body {
  display: none;
}
.cmpb-cls-name {
  flex: 1;
  font-size: 11px;
  font-weight: 700;
  color: #0f1629;
  letter-spacing: 0.2px;
}
.cmpb-cls-count {
  font-size: 10px;
  font-weight: 700;
  padding: 1px 8px;
  background: rgba(26,86,232,0.10);
  color: #1A56E8;
  border-radius: 9px;
  font-variant-numeric: tabular-nums;
}
.cmpb-cls-body {
  background: #fff;
}

/* Item individuel */
.cmpb-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 12px 7px 14px;
  border-bottom: 1px solid #F8FAFC;
  cursor: pointer;
  transition: all .15s;
  outline: none;
}
.cmpb-item:last-child { border-bottom: none; }
.cmpb-item:hover {
  background: rgba(26,86,232,0.04);
}
.cmpb-item:focus-visible {
  background: rgba(26,86,232,0.06);
  box-shadow: inset 0 0 0 2px rgba(26,86,232,0.4);
}

/* Animation focus (highlight de l'item après click) */
.cmpb-item.is-focused {
  background: #FFF8E0;
  animation: cmpb-pulse-focus 0.6s ease-out;
}
@keyframes cmpb-pulse-focus {
  0%   { background: #FFEFA8; transform: translateX(0); }
  50%  { background: #FFF8E0; }
  100% { background: transparent; }
}
.cmpb-item.is-error {
  background: #FFE8E8;
  animation: cmpb-pulse-error 0.5s ease-out;
}
@keyframes cmpb-pulse-error {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-4px); }
  75% { transform: translateX(4px); }
}

/* Badge statut (en mode "Tous") */
.cmpb-status {
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  font-size: 14px;
  font-weight: 900;
  line-height: 1;
}
.cmpb-status-added    { background: rgba(29,158,117,0.12); color: #1D9E75; }
.cmpb-status-deleted  { background: rgba(226,75,74,0.12); color: #E24B4A; }
.cmpb-status-modified { background: rgba(245,167,35,0.15); color: #C77800; }
.cmpb-status-unchanged { background: rgba(108,117,125,0.10); color: #6C757D; }

/* Bordure gauche selon statut (visible en mode filtré aussi) */
.cmpb-item.cmpb-item-added    { border-left: 3px solid rgba(29,158,117,0.5); }
.cmpb-item.cmpb-item-deleted  { border-left: 3px solid rgba(226,75,74,0.5); }
.cmpb-item.cmpb-item-modified { border-left: 3px solid rgba(245,167,35,0.6); }
.cmpb-item.cmpb-item-unchanged { border-left: 3px solid transparent; }
/* En mode "Tous", on cache la bordure gauche car le badge la remplace */
.cmpb-tab.is-active[data-tab="all"] ~ .cmpb-list .cmpb-item { border-left-color: transparent !important; }

/* Contenu principal de l'item */
.cmpb-item-main {
  flex: 1;
  min-width: 0;
}
.cmpb-item-name {
  font-size: 11.5px;
  font-weight: 600;
  color: #0f1629;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-bottom: 2px;
}
.cmpb-item-detail-wrap {
  font-weight: 500;
}
.cmpb-item-detail {
  font-size: 10px;
  color: #C77800;
  font-style: italic;
  margin-left: 4px;
}
.cmpb-item-guid {
  margin-top: 2px;
}

/* Flèche cliquable à droite */
.cmpb-item-arrow {
  flex-shrink: 0;
  color: #ADB5BD;
  opacity: 0;
  transition: all .15s;
}
.cmpb-item:hover .cmpb-item-arrow,
.cmpb-item:focus-visible .cmpb-item-arrow {
  opacity: 1;
  color: #1A56E8;
}

/* Mobile : onglets en 2 lignes si étroit */
@media (max-width: 540px) {
  .cmpb-tabs {
    flex-wrap: wrap;
  }
  .cmpb-tab {
    min-width: 30%;
  }
  .cmpb-tab-label {
    display: none;
  }
}

/* ════════════════════════════════════════════════════════════════════
   COMPARAISON IFC — Panel inline (intégré comme onglet IFC Studio)
   Plein écran, sans bordures floattantes
   ════════════════════════════════════════════════════════════════════ */

.cmp-inline-wrap {
  display: flex;
  flex-direction: column;
  flex: 1;
  height: 100%;
  background: #f5f7fb;
  overflow: hidden;
  min-height: 0;
}

/* Header : titre + sous-titre */
.cmp-inline-head {
  background: #fff;
  padding: 16px 24px 14px;
  border-bottom: 1px solid #edf0f7;
  flex-shrink: 0;
}
.cmp-inline-head .cmp-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: 'Montserrat', sans-serif;
  font-size: 15px;
  font-weight: 800;
  color: #0f1629;
  letter-spacing: -0.2px;
  margin-bottom: 4px;
}
.cmp-inline-subtitle {
  font-size: 11.5px;
  color: #6C757D;
  font-weight: 500;
  margin-left: 30px;
}

/* Body : scroll + padding généreux */
.cmp-inline-body {
  flex: 1;
  overflow-y: auto;
  padding: 18px 24px 24px;
  min-height: 0;
}

/* Layout des 2 états côte à côte */
.cmp-inline-states {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 16px;
}

/* Mobile / écran étroit : 1 colonne */
@media (max-width: 720px) {
  .cmp-inline-states {
    grid-template-columns: 1fr;
  }
  .cmp-inline-head { padding: 14px 16px 12px; }
  .cmp-inline-body { padding: 14px 16px 18px; }
  .cmp-inline-subtitle { margin-left: 0; }
}

/* Override : le state inline a sa propre carte (pas borderless) */
.cmp-inline-wrap .cmp-state {
  background: #fff;
  border: 1px solid #edf0f7;
  border-radius: 12px;
  padding: 14px;
  box-shadow: 0 1px 2px rgba(15,22,41,0.04);
}
.cmp-inline-wrap .cmp-controls {
  background: #fff;
  border: 1px solid #edf0f7;
  border-radius: 12px;
  padding: 14px 16px;
  margin-bottom: 16px;
  box-shadow: 0 1px 2px rgba(15,22,41,0.04);
}

/* Section versionnage en mode inline : sans border-top extra (déjà espacé) */
.cmp-inline-wrap #cmpVersioningSection {
  margin-top: 16px;
  padding-top: 0;
  border-top: none;
  background: #fff;
  border: 1px solid #edf0f7;
  border-radius: 12px;
  padding: 18px 18px 14px;
  box-shadow: 0 1px 2px rgba(15,22,41,0.04);
}
.cmp-inline-wrap #cmpVersioningSection:empty {
  display: none;
}

/* ════════════════════════════════════════════════════════════════════
   COMPARAISON IFC — Légende permanente sur le viewer 3D
   ════════════════════════════════════════════════════════════════════ */
.cmp-legend {
  position: absolute;
  top: 14px;
  left: 14px;
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(15,22,41,0.08);
  border-radius: 10px;
  padding: 11px 13px;
  font-family: 'Montserrat', sans-serif;
  font-size: 11px;
  color: #0f1629;
  box-shadow: 0 4px 16px rgba(15,22,41,0.10), 0 1px 3px rgba(15,22,41,0.06);
  z-index: 50;
  min-width: 200px;
  max-width: 280px;
  pointer-events: auto;
}
.cmp-legend-title {
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  color: #6C757D;
  margin-bottom: 8px;
  padding-bottom: 7px;
  border-bottom: 1px solid #EFF1F4;
}
.cmp-legend-row {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 10.5px;
  margin-bottom: 5px;
}
.cmp-legend-row:last-of-type { margin-bottom: 0; }
.cmp-legend-dot {
  flex-shrink: 0;
  width: 9px;
  height: 9px;
  border-radius: 50%;
}
.cmp-legend-label {
  font-weight: 700;
  flex-shrink: 0;
  color: #0f1629;
}
.cmp-legend-name {
  flex: 1;
  font-weight: 500;
  color: #6C757D;
  font-size: 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-align: right;
}
.cmp-legend-sep {
  height: 1px;
  background: #EFF1F4;
  margin: 8px -13px;
}
.cmp-legend-statuses {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
}
.cmp-legend-stbadge {
  font-size: 9.5px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 5px;
  letter-spacing: 0.2px;
}
.cmp-legend-selected {
  margin-top: 9px;
  padding-top: 9px;
  border-top: 1px solid #EFF1F4;
}
.cmp-legend-sel-head {
  font-size: 9.5px;
  font-weight: 800;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  margin-bottom: 4px;
}
.cmp-legend-sel-name {
  font-size: 11.5px;
  font-weight: 700;
  color: #0f1629;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-bottom: 3px;
}
.cmp-legend-sel-guid code {
  font-family: 'JetBrains Mono', 'Consolas', monospace;
  font-size: 9.5px;
  color: #6C757D;
  background: #F4F6F9;
  padding: 1px 6px;
  border-radius: 4px;
  display: inline-block;
}

/* Responsive : si écran étroit, légende plus compacte */
@media (max-width: 720px) {
  .cmp-legend {
    top: 8px;
    left: 8px;
    padding: 8px 10px;
    min-width: 160px;
    max-width: 200px;
    font-size: 10px;
  }
  .cmp-legend-name { display: none; }
}

/* ════════════════════════════════════════════════════════════
   COMPARAISON IFC — Mini-légende des couleurs de diff
   Bandeau bas du viewer, discret
   ════════════════════════════════════════════════════════════ */
.cmp-diff-legend {
  position: absolute;
  bottom: 14px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 14px;
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(15,22,41,0.08);
  border-radius: 22px;
  font-family: 'Montserrat', sans-serif;
  font-size: 11px;
  font-weight: 500;
  color: #0f1629;
  box-shadow: 0 3px 12px rgba(15,22,41,0.10);
  z-index: 50;
  pointer-events: none;
  white-space: nowrap;
}
.cmp-diff-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.cmp-diff-item-muted {
  opacity: 0.6;
}
.cmp-diff-swatch {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  flex-shrink: 0;
}
.cmp-diff-item b {
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: #0f1629;
  margin-left: 1px;
}
.cmp-diff-sep {
  width: 1px;
  height: 12px;
  background: #E5E9EE;
}

/* Sur mobile : plus compact */
@media (max-width: 720px) {
  .cmp-diff-legend {
    font-size: 10px;
    padding: 5px 10px;
    gap: 7px;
    bottom: 8px;
  }
  .cmp-diff-sep { display: none; }
  .cmp-diff-item-muted { display: none; }
}
