.vigilance-slider [data-slot="track"] {
	border-inline-start-color: var(--vigilance-color, transparent) !important;
	border-inline-end-color: transparent !important;
}

.vigilance-slider [data-slot="filler"] {
	background: var(--vigilance-color, transparent) !important;
}

.vigilance-slider [data-slot="thumb"] {
	background: var(--vigilance-color, #9ca3af) !important;
}

.vigilance-slider [data-slot="step"][data-in-range="true"] {
	background: var(--vigilance-color, #d1d5db) !important;
}
/* Copyright 2014 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

:root {
  --react-pdf-text-layer: 1;
  --highlight-bg-color: rgba(180, 0, 170, 1);
  --highlight-selected-bg-color: rgba(0, 100, 0, 1);
}

@media screen and (forced-colors: active) {
  :root {
    --highlight-bg-color: Highlight;
    --highlight-selected-bg-color: ButtonText;
  }
}

[data-main-rotation='90'] {
  transform: rotate(90deg) translateY(-100%);
}

[data-main-rotation='180'] {
  transform: rotate(180deg) translate(-100%, -100%);
}

[data-main-rotation='270'] {
  transform: rotate(270deg) translateX(-100%);
}

.textLayer {
  position: absolute;
  text-align: initial;
  inset: 0;
  overflow: hidden;
  line-height: 1;
  text-size-adjust: none;
  forced-color-adjust: none;
  transform-origin: 0 0;
  z-index: 2;
}

.textLayer :is(span, br) {
  color: transparent;
  position: absolute;
  white-space: pre;
  cursor: text;
  margin: 0;
  transform-origin: 0 0;
}

/* Only necessary in Google Chrome, see issue 14205, and most unfortunately
 * the problem doesn't show up in "text" reference tests. */

.textLayer span.markedContent {
  top: 0;
  height: 0;
}

.textLayer .highlight {
  margin: -1px;
  padding: 1px;
  background-color: var(--highlight-bg-color);
  border-radius: 4px;
}

.textLayer .highlight.appended {
  position: initial;
}

.textLayer .highlight.begin {
  border-radius: 4px 0 0 4px;
}

.textLayer .highlight.end {
  border-radius: 0 4px 4px 0;
}

.textLayer .highlight.middle {
  border-radius: 0;
}

.textLayer .highlight.selected {
  background-color: var(--highlight-selected-bg-color);
}

/* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */

.textLayer br::selection {
  background: transparent;
}

.textLayer .endOfContent {
  display: block;
  position: absolute;
  inset: 100% 0 0;
  z-index: -1;
  cursor: default;
  user-select: none;
}

.textLayer.selecting .endOfContent {
  top: 0;
}

.hiddenCanvasElement {
  position: absolute;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  display: none;
}
:root {
  --toastify-color-light: #fff;
  --toastify-color-dark: #121212;
  --toastify-color-info: #3498db;
  --toastify-color-success: #07bc0c;
  --toastify-color-warning: #f1c40f;
  --toastify-color-error: hsl(6, 78%, 57%);
  --toastify-color-transparent: rgba(255, 255, 255, 0.7);

  --toastify-icon-color-info: var(--toastify-color-info);
  --toastify-icon-color-success: var(--toastify-color-success);
  --toastify-icon-color-warning: var(--toastify-color-warning);
  --toastify-icon-color-error: var(--toastify-color-error);

  --toastify-container-width: fit-content;
  --toastify-toast-width: 320px;
  --toastify-toast-offset: 16px;
  --toastify-toast-top: max(var(--toastify-toast-offset), env(safe-area-inset-top));
  --toastify-toast-right: max(var(--toastify-toast-offset), env(safe-area-inset-right));
  --toastify-toast-left: max(var(--toastify-toast-offset), env(safe-area-inset-left));
  --toastify-toast-bottom: max(var(--toastify-toast-offset), env(safe-area-inset-bottom));
  --toastify-toast-background: #fff;
  --toastify-toast-padding: 14px;
  --toastify-toast-min-height: 64px;
  --toastify-toast-max-height: 800px;
  --toastify-toast-bd-radius: 6px;
  --toastify-toast-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);
  --toastify-font-family: sans-serif;
  --toastify-z-index: 9999;
  --toastify-text-color-light: #757575;
  --toastify-text-color-dark: #fff;

  /* Used only for colored theme */
  --toastify-text-color-info: #fff;
  --toastify-text-color-success: #fff;
  --toastify-text-color-warning: #fff;
  --toastify-text-color-error: #fff;

  --toastify-spinner-color: #616161;
  --toastify-spinner-color-empty-area: #e0e0e0;
  --toastify-color-progress-light: linear-gradient(to right, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55);
  --toastify-color-progress-dark: #bb86fc;
  --toastify-color-progress-info: var(--toastify-color-info);
  --toastify-color-progress-success: var(--toastify-color-success);
  --toastify-color-progress-warning: var(--toastify-color-warning);
  --toastify-color-progress-error: var(--toastify-color-error);
  /* used to control the opacity of the progress trail */
  --toastify-color-progress-bgo: 0.2;
}

.Toastify__toast-container {
  z-index: var(--toastify-z-index);
  -webkit-transform: translate3d(0, 0, var(--toastify-z-index));
  position: fixed;
  width: var(--toastify-container-width);
  box-sizing: border-box;
  color: #fff;
  display: flex;
  flex-direction: column;
}

.Toastify__toast-container--top-left {
  top: var(--toastify-toast-top);
  left: var(--toastify-toast-left);
}

.Toastify__toast-container--top-center {
  top: var(--toastify-toast-top);
  left: 50%;
  transform: translateX(-50%);
  align-items: center;
}

.Toastify__toast-container--top-right {
  top: var(--toastify-toast-top);
  right: var(--toastify-toast-right);
  align-items: end;
}

.Toastify__toast-container--bottom-left {
  bottom: var(--toastify-toast-bottom);
  left: var(--toastify-toast-left);
}

.Toastify__toast-container--bottom-center {
  bottom: var(--toastify-toast-bottom);
  left: 50%;
  transform: translateX(-50%);
  align-items: center;
}

.Toastify__toast-container--bottom-right {
  bottom: var(--toastify-toast-bottom);
  right: var(--toastify-toast-right);
  align-items: end;
}

.Toastify__toast {
  --y: 0;
  position: relative;
  touch-action: none;
  width: var(--toastify-toast-width);
  min-height: var(--toastify-toast-min-height);
  box-sizing: border-box;
  margin-bottom: 1rem;
  padding: var(--toastify-toast-padding);
  border-radius: var(--toastify-toast-bd-radius);
  box-shadow: var(--toastify-toast-shadow);
  max-height: var(--toastify-toast-max-height);
  font-family: var(--toastify-font-family);
  /* webkit only issue #791 */
  z-index: 0;
  /* inner swag */
  display: flex;
  flex: 1 auto;
  align-items: center;
  word-break: break-word;
}

@media only screen and (max-width: 480px) {
  .Toastify__toast-container {
    width: 100vw;
    left: env(safe-area-inset-left);
    margin: 0;
  }
  .Toastify__toast-container--top-left,
  .Toastify__toast-container--top-center,
  .Toastify__toast-container--top-right {
    top: env(safe-area-inset-top);
    transform: translateX(0);
  }
  .Toastify__toast-container--bottom-left,
  .Toastify__toast-container--bottom-center,
  .Toastify__toast-container--bottom-right {
    bottom: env(safe-area-inset-bottom);
    transform: translateX(0);
  }
  .Toastify__toast-container--rtl {
    right: env(safe-area-inset-right);
    left: initial;
  }
  .Toastify__toast {
    --toastify-toast-width: 100%;
    margin-bottom: 0;
    border-radius: 0;
  }
}

.Toastify__toast-container[data-stacked='true'] {
  width: var(--toastify-toast-width);
}

.Toastify__toast--stacked {
  position: absolute;
  width: 100%;
  transform: translate3d(0, var(--y), 0) scale(var(--s));
  transition: transform 0.3s;
}

.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body,
.Toastify__toast--stacked[data-collapsed] .Toastify__close-button {
  transition: opacity 0.1s;
}

.Toastify__toast--stacked[data-collapsed='false'] {
  overflow: visible;
}

.Toastify__toast--stacked[data-collapsed='true']:not(:last-child) > * {
  opacity: 0;
}

.Toastify__toast--stacked:after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  height: calc(var(--g) * 1px);
  bottom: 100%;
}

.Toastify__toast--stacked[data-pos='top'] {
  top: 0;
}

.Toastify__toast--stacked[data-pos='bot'] {
  bottom: 0;
}

.Toastify__toast--stacked[data-pos='bot'].Toastify__toast--stacked:before {
  transform-origin: top;
}

.Toastify__toast--stacked[data-pos='top'].Toastify__toast--stacked:before {
  transform-origin: bottom;
}

.Toastify__toast--stacked:before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 100%;
  transform: scaleY(3);
  z-index: -1;
}

.Toastify__toast--rtl {
  direction: rtl;
}

.Toastify__toast--close-on-click {
  cursor: pointer;
}

.Toastify__toast-icon {
  margin-inline-end: 10px;
  width: 22px;
  flex-shrink: 0;
  display: flex;
}

.Toastify--animate {
  animation-fill-mode: both;
  animation-duration: 0.5s;
}

.Toastify--animate-icon {
  animation-fill-mode: both;
  animation-duration: 0.3s;
}

.Toastify__toast-theme--dark {
  background: var(--toastify-color-dark);
  color: var(--toastify-text-color-dark);
}

.Toastify__toast-theme--light {
  background: var(--toastify-color-light);
  color: var(--toastify-text-color-light);
}

.Toastify__toast-theme--colored.Toastify__toast--default {
  background: var(--toastify-color-light);
  color: var(--toastify-text-color-light);
}

.Toastify__toast-theme--colored.Toastify__toast--info {
  color: var(--toastify-text-color-info);
  background: var(--toastify-color-info);
}

.Toastify__toast-theme--colored.Toastify__toast--success {
  color: var(--toastify-text-color-success);
  background: var(--toastify-color-success);
}

.Toastify__toast-theme--colored.Toastify__toast--warning {
  color: var(--toastify-text-color-warning);
  background: var(--toastify-color-warning);
}

.Toastify__toast-theme--colored.Toastify__toast--error {
  color: var(--toastify-text-color-error);
  background: var(--toastify-color-error);
}

.Toastify__progress-bar-theme--light {
  background: var(--toastify-color-progress-light);
}

.Toastify__progress-bar-theme--dark {
  background: var(--toastify-color-progress-dark);
}

.Toastify__progress-bar--info {
  background: var(--toastify-color-progress-info);
}

.Toastify__progress-bar--success {
  background: var(--toastify-color-progress-success);
}

.Toastify__progress-bar--warning {
  background: var(--toastify-color-progress-warning);
}

.Toastify__progress-bar--error {
  background: var(--toastify-color-progress-error);
}

.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,
.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,
.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning,
.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error {
  background: var(--toastify-color-transparent);
}

.Toastify__close-button {
  color: #fff;
  position: absolute;
  top: 6px;
  right: 6px;
  background: transparent;
  outline: none;
  border: none;
  padding: 0;
  cursor: pointer;
  opacity: 0.7;
  transition: 0.3s ease;
  z-index: 1;
}

.Toastify__toast--rtl .Toastify__close-button {
  left: 6px;
  right: unset;
}

.Toastify__close-button--light {
  color: #000;
  opacity: 0.3;
}

.Toastify__close-button > svg {
  fill: currentColor;
  height: 16px;
  width: 14px;
}

.Toastify__close-button:hover,
.Toastify__close-button:focus {
  opacity: 1;
}

@keyframes Toastify__trackProgress {
  0% {
    transform: scaleX(1);
  }
  100% {
    transform: scaleX(0);
  }
}

.Toastify__progress-bar {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  opacity: 0.7;
  transform-origin: left;
}

.Toastify__progress-bar--animated {
  animation: Toastify__trackProgress linear 1 forwards;
}

.Toastify__progress-bar--controlled {
  transition: transform 0.2s;
}

.Toastify__progress-bar--rtl {
  right: 0;
  left: initial;
  transform-origin: right;
  border-bottom-left-radius: initial;
}

.Toastify__progress-bar--wrp {
  position: absolute;
  overflow: hidden;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 5px;
  border-bottom-left-radius: var(--toastify-toast-bd-radius);
  border-bottom-right-radius: var(--toastify-toast-bd-radius);
}

.Toastify__progress-bar--wrp[data-hidden='true'] {
  opacity: 0;
}

.Toastify__progress-bar--bg {
  opacity: var(--toastify-color-progress-bgo);
  width: 100%;
  height: 100%;
}

.Toastify__spinner {
  width: 20px;
  height: 20px;
  box-sizing: border-box;
  border: 2px solid;
  border-radius: 100%;
  border-color: var(--toastify-spinner-color-empty-area);
  border-right-color: var(--toastify-spinner-color);
  animation: Toastify__spin 0.65s linear infinite;
}

@keyframes Toastify__bounceInRight {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  from {
    opacity: 0;
    transform: translate3d(3000px, 0, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(-25px, 0, 0);
  }
  75% {
    transform: translate3d(10px, 0, 0);
  }
  90% {
    transform: translate3d(-5px, 0, 0);
  }
  to {
    transform: none;
  }
}

@keyframes Toastify__bounceOutRight {
  20% {
    opacity: 1;
    transform: translate3d(-20px, var(--y), 0);
  }
  to {
    opacity: 0;
    transform: translate3d(2000px, var(--y), 0);
  }
}

@keyframes Toastify__bounceInLeft {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  0% {
    opacity: 0;
    transform: translate3d(-3000px, 0, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(25px, 0, 0);
  }
  75% {
    transform: translate3d(-10px, 0, 0);
  }
  90% {
    transform: translate3d(5px, 0, 0);
  }
  to {
    transform: none;
  }
}

@keyframes Toastify__bounceOutLeft {
  20% {
    opacity: 1;
    transform: translate3d(20px, var(--y), 0);
  }
  to {
    opacity: 0;
    transform: translate3d(-2000px, var(--y), 0);
  }
}

@keyframes Toastify__bounceInUp {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  from {
    opacity: 0;
    transform: translate3d(0, 3000px, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(0, -20px, 0);
  }
  75% {
    transform: translate3d(0, 10px, 0);
  }
  90% {
    transform: translate3d(0, -5px, 0);
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes Toastify__bounceOutUp {
  20% {
    transform: translate3d(0, calc(var(--y) - 10px), 0);
  }
  40%,
  45% {
    opacity: 1;
    transform: translate3d(0, calc(var(--y) + 20px), 0);
  }
  to {
    opacity: 0;
    transform: translate3d(0, -2000px, 0);
  }
}

@keyframes Toastify__bounceInDown {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  0% {
    opacity: 0;
    transform: translate3d(0, -3000px, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(0, 25px, 0);
  }
  75% {
    transform: translate3d(0, -10px, 0);
  }
  90% {
    transform: translate3d(0, 5px, 0);
  }
  to {
    transform: none;
  }
}

@keyframes Toastify__bounceOutDown {
  20% {
    transform: translate3d(0, calc(var(--y) - 10px), 0);
  }
  40%,
  45% {
    opacity: 1;
    transform: translate3d(0, calc(var(--y) + 20px), 0);
  }
  to {
    opacity: 0;
    transform: translate3d(0, 2000px, 0);
  }
}

.Toastify__bounce-enter--top-left,
.Toastify__bounce-enter--bottom-left {
  animation-name: Toastify__bounceInLeft;
}

.Toastify__bounce-enter--top-right,
.Toastify__bounce-enter--bottom-right {
  animation-name: Toastify__bounceInRight;
}

.Toastify__bounce-enter--top-center {
  animation-name: Toastify__bounceInDown;
}

.Toastify__bounce-enter--bottom-center {
  animation-name: Toastify__bounceInUp;
}

.Toastify__bounce-exit--top-left,
.Toastify__bounce-exit--bottom-left {
  animation-name: Toastify__bounceOutLeft;
}

.Toastify__bounce-exit--top-right,
.Toastify__bounce-exit--bottom-right {
  animation-name: Toastify__bounceOutRight;
}

.Toastify__bounce-exit--top-center {
  animation-name: Toastify__bounceOutUp;
}

.Toastify__bounce-exit--bottom-center {
  animation-name: Toastify__bounceOutDown;
}

@keyframes Toastify__zoomIn {
  from {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }
  50% {
    opacity: 1;
  }
}

@keyframes Toastify__zoomOut {
  from {
    opacity: 1;
  }
  50% {
    opacity: 0;
    transform: translate3d(0, var(--y), 0) scale3d(0.3, 0.3, 0.3);
  }
  to {
    opacity: 0;
  }
}

.Toastify__zoom-enter {
  animation-name: Toastify__zoomIn;
}

.Toastify__zoom-exit {
  animation-name: Toastify__zoomOut;
}

@keyframes Toastify__flipIn {
  from {
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    animation-timing-function: ease-in;
    opacity: 0;
  }
  40% {
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    animation-timing-function: ease-in;
  }
  60% {
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }
  80% {
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }
  to {
    transform: perspective(400px);
  }
}

@keyframes Toastify__flipOut {
  from {
    transform: translate3d(0, var(--y), 0) perspective(400px);
  }
  30% {
    transform: translate3d(0, var(--y), 0) perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }
  to {
    transform: translate3d(0, var(--y), 0) perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}

.Toastify__flip-enter {
  animation-name: Toastify__flipIn;
}

.Toastify__flip-exit {
  animation-name: Toastify__flipOut;
}

@keyframes Toastify__slideInRight {
  from {
    transform: translate3d(110%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, var(--y), 0);
  }
}

@keyframes Toastify__slideInLeft {
  from {
    transform: translate3d(-110%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, var(--y), 0);
  }
}

@keyframes Toastify__slideInUp {
  from {
    transform: translate3d(0, 110%, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, var(--y), 0);
  }
}

@keyframes Toastify__slideInDown {
  from {
    transform: translate3d(0, -110%, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, var(--y), 0);
  }
}

@keyframes Toastify__slideOutRight {
  from {
    transform: translate3d(0, var(--y), 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(110%, var(--y), 0);
  }
}

@keyframes Toastify__slideOutLeft {
  from {
    transform: translate3d(0, var(--y), 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(-110%, var(--y), 0);
  }
}

@keyframes Toastify__slideOutDown {
  from {
    transform: translate3d(0, var(--y), 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(0, 500px, 0);
  }
}

@keyframes Toastify__slideOutUp {
  from {
    transform: translate3d(0, var(--y), 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(0, -500px, 0);
  }
}

.Toastify__slide-enter--top-left,
.Toastify__slide-enter--bottom-left {
  animation-name: Toastify__slideInLeft;
}

.Toastify__slide-enter--top-right,
.Toastify__slide-enter--bottom-right {
  animation-name: Toastify__slideInRight;
}

.Toastify__slide-enter--top-center {
  animation-name: Toastify__slideInDown;
}

.Toastify__slide-enter--bottom-center {
  animation-name: Toastify__slideInUp;
}

.Toastify__slide-exit--top-left,
.Toastify__slide-exit--bottom-left {
  animation-name: Toastify__slideOutLeft;
  animation-timing-function: ease-in;
  animation-duration: 0.3s;
}

.Toastify__slide-exit--top-right,
.Toastify__slide-exit--bottom-right {
  animation-name: Toastify__slideOutRight;
  animation-timing-function: ease-in;
  animation-duration: 0.3s;
}

.Toastify__slide-exit--top-center {
  animation-name: Toastify__slideOutUp;
  animation-timing-function: ease-in;
  animation-duration: 0.3s;
}

.Toastify__slide-exit--bottom-center {
  animation-name: Toastify__slideOutDown;
  animation-timing-function: ease-in;
  animation-duration: 0.3s;
}

@keyframes Toastify__spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
/* Variables de la grille (reprises d'hypervision, recalées sur DESIGN.md) : un écran hôte pose .datagrid-root ou .projets-root. */
.datagrid-root,
.projets-root {
	--sheet: #ffffff;
	--sheet-2: #f3f4f6;
	--paper: #f9fafb;
	--ink: #0f1010;
	--ink-2: #5a5b5b;
	--ink-3: #737474;
	--rule: #dadbdb;
	--rule-strong: #737474;
	--action: #1975d2;
	--select: #ecf5fd;
	--danger: #e9164a;
	--danger-ink: #ba123b;
	--danger-tint: rgb(233 22 74 / 0.1);
	--layer-shadow:
		0 2px 4px rgba(16, 24, 40, 0.06), 0 12px 28px -6px rgba(16, 24, 40, 0.18);
	--ease: cubic-bezier(0.16, 1, 0.3, 1);
	--font-sans: Roboto, sans-serif;
	font-variant-numeric: tabular-nums;
}
/* GlobalStyle impose `* { font-size }` : `:not(svg)` pèse un sélecteur de type, assez pour battre `*` sans battre une classe Tailwind. */
:where(.datagrid-root, .projets-root) :not(svg) {
	font-size: inherit;
}
/* GlobalStyle retire l'anneau de tous les boutons : le clavier doit le revoir. */
.datagrid-root button:focus-visible,
.projets-root button:focus-visible {
	outline: 2px solid #1975d2 !important;
	outline-offset: 2px;
}
.datagrid-root .layer,
.projets-root .layer {
	border: 1px solid var(--rule);
	border-radius: 6px;
	background: var(--sheet);
	box-shadow: var(--layer-shadow);
}
.gridzone {
	position: relative;
	display: flex;
	flex: 1;
	min-height: 0;
	flex-direction: column;
}
.gridwrap {
	flex: 1;
	min-height: 0;
	overflow: auto;
	background: var(--sheet);
	overscroll-behavior: contain;
}
table.g {
	border-collapse: separate;
	border-spacing: 0;
	table-layout: fixed;
	font-size: 13px;
}
.g th,
.g td {
	height: 36px;
	padding: 0 8px;
	border-bottom: 1px solid var(--rule);
	border-right: 1px solid var(--rule);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	text-align: left;
	vertical-align: middle;
	background: var(--sheet);
}
.g td {
	position: relative;
}
/* Première colonne calée sur la gouttière des titres de page (32 px). */
.g td:first-child,
.g th:first-child .th-btn,
.g td:first-child .cell-editor {
	padding-left: 24px;
}
.g th:last-child,
.g td:last-child {
	border-right: 0;
}
.g td:last-child,
.g th:last-child .th-btn {
	padding-right: 24px;
}
.g thead th {
	position: sticky;
	top: 0;
	z-index: 3;
	height: auto;
	padding: 0;
	background: var(--sheet-2);
	border-bottom: 1px solid var(--rule);
}
.g .th-in {
	display: flex;
	align-items: stretch;
}
.g .th-btn {
	display: flex;
	flex: 1;
	align-items: center;
	gap: 6px;
	min-width: 0;
	height: 34px;
	padding: 0 10px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	text-align: left;
	font-size: 12.5px;
	font-weight: 600;
	color: var(--ink-2);
}
.g th[aria-sort] .th-btn {
	color: var(--ink);
}
.g th[aria-sort] .th-btn::after {
	content: "";
	width: 0;
	height: 0;
	border-left: 4px solid transparent;
	border-right: 4px solid transparent;
	border-bottom: 5px solid var(--action);
}
.g th[aria-sort="descending"] .th-btn::after {
	transform: rotate(180deg);
}
.g .th-btn:hover {
	color: var(--action);
	background: var(--select);
}
.g th.cur-col .th-btn {
	box-shadow: inset 0 -2px 0 var(--action);
	color: var(--ink);
}
.g th.num .th-btn {
	justify-content: flex-end;
}
.g .th-lbl {
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
}
/* Crayon révélé au survol de l'en-tête ou quand la colonne porte la cellule active : permanent, il chargeait chaque en-tête. */
.g .col-mark {
	flex-shrink: 0;
	color: var(--ink-3);
	opacity: 0;
	transition: opacity 150ms var(--ease);
}
.g th:hover .col-mark,
.g th.cur-col .col-mark,
.g .th-btn:focus-visible .col-mark {
	opacity: 1;
}
.g .fz {
	position: sticky;
	z-index: 2;
}
/* Ombre de colonne figée seulement quand du contenu passe dessous : au repos, elle doublait le filet. */
.gridwrap[data-scrolled] .g .fz-last {
	box-shadow: 6px 0 8px -6px rgba(16, 24, 40, 0.12);
}
.g.grouped tr.row td:first-child {
	padding-left: 46px;
}
.g.grouped2 tr.row td:first-child {
	padding-left: 70px;
}
/* Fiche ouverte : la ligne entière porte la sélection, l'anneau de cellule et le trait d'en-tête se lisaient comme une édition. */
.detail-open .g td.cur,
.detail-open .g:focus-within td.cur,
.detail-open .g th.cur-col .th-btn {
	box-shadow: none;
}
.g thead .fz {
	z-index: 4;
}
.g td.num {
	text-align: right;
}
.g tr.row:hover td {
	background-color: var(--sheet-2);
}
.g tr.row.cur-row td {
	background-color: var(--select);
}
/* Pseudo-élément plutôt qu'ombre : il passe au-dessus de l'anneau de td.cur, que la première cellule porte souvent. */
.g tr.row.cur-row td:first-child::before {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	width: 2px;
	background: var(--action);
}
.g td:focus {
	outline: none;
}
.g tr.row td.edit-ok:hover {
	cursor: pointer;
	background-color: color-mix(in srgb, var(--action) 12%, var(--sheet));
}
.g td.cur {
	box-shadow: inset 0 0 0 1px var(--rule-strong);
}
.g:focus-within td.cur {
	box-shadow: inset 0 0 0 2px var(--action);
}
.g td.err {
	box-shadow: inset 0 0 0 2px var(--danger) !important;
}
.g td.err.cur {
	overflow: visible;
}
.g td.opens {
	cursor: pointer;
}
.g td.opens:hover {
	text-decoration: underline;
}
.g td.editing {
	overflow: visible;
	z-index: 5;
}
.g td.saving::after,
.g td.saved::after {
	content: "";
	position: absolute;
	left: 8px;
	right: 8px;
	bottom: 4px;
	height: 2px;
	border-radius: 2px;
	background: var(--action);
}
.g td.saving::after {
	opacity: 0.5;
	background: repeating-linear-gradient(
		90deg,
		var(--action) 0 4px,
		transparent 4px 7px
	);
}
.g td.saved::after {
	animation: dry 1000ms var(--ease) forwards;
	transform-origin: left;
}
@keyframes dry {
	0% {
		transform: scaleX(0.2);
		opacity: 1;
	}
	25% {
		transform: scaleX(1);
		opacity: 1;
	}
	100% {
		transform: scaleX(1);
		opacity: 0;
	}
}
.g .cell-editor {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	padding: 0 8px;
	border: 0;
	border-radius: 4px;
	outline: 2px solid var(--action);
	background: var(--sheet);
	color: var(--ink);
	font: inherit;
	box-shadow: var(--layer-shadow);
}
.g .cell-editor-wrap {
	position: absolute;
	inset: 0;
}
.g .dropdown {
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 30;
	min-width: 240px;
	margin-top: 4px;
	overflow: hidden;
}
.g .dropdown ul {
	max-height: 260px;
	overflow-y: auto;
	padding: 4px;
}
.g .dropdown li {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 6px 8px;
	border-radius: 4px;
	cursor: pointer;
	white-space: nowrap;
}
.g .dropdown li[data-hi] {
	background: var(--select);
}
.g .dropdown li[aria-selected="true"] {
	font-weight: 600;
}
.g .dropdown .box {
	display: inline-grid;
	place-items: center;
	width: 14px;
	height: 14px;
	border: 1px solid var(--rule-strong);
	border-radius: 4px;
	font-size: 11px;
	color: var(--action);
}
.g .lb-foot {
	display: flex;
	gap: 10px;
	padding: 6px 10px;
	border-top: 1px solid var(--rule);
	font-size: 11px;
	color: var(--ink-3);
}
.g kbd,
.statusbar kbd {
	padding: 0 5px;
	border: 1px solid var(--rule);
	border-bottom-width: 2px;
	border-radius: 4px;
	background: var(--sheet);
	font: 500 11px var(--font-sans);
	color: var(--ink-2);
}
.g .cell-err {
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 20;
	max-width: 320px;
	margin-top: 2px;
	padding: 4px 8px;
	border-radius: 4px;
	background: var(--danger-tint);
	color: var(--danger-ink);
	font-size: 12px;
	font-weight: 600;
	white-space: normal;
}
.g .reason {
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 30;
	display: flex;
	flex-direction: column;
	gap: 8px;
	width: 320px;
	margin-top: 4px;
	padding: 14px;
	white-space: normal;
}
.g .reason h3 {
	font-weight: 600;
}
.g .reason textarea {
	width: 100%;
	padding: 6px 8px;
	border: 1px solid var(--rule-strong);
	border-radius: 6px;
	background: var(--sheet);
	font-size: 14px;
}
.g tr.g1 td {
	height: 44px;
	overflow: visible;
	border-top: 1px solid var(--rule);
	border-right: 0;
	font-size: 14px;
	font-weight: 600;
}
.g tbody tr.g1:first-child td {
	border-top-width: 0;
}
.g tr.g2 td {
	overflow: visible;
	background: var(--paper);
	border-right: 0;
	font-weight: 500;
	color: var(--ink-2);
}
.g tr.g2 .gl {
	padding-left: 24px;
}
.g tr.custom td {
	height: 30px;
	overflow: visible;
	border-right: 0;
}
.g .gl {
	position: sticky;
	left: 8px;
	display: inline-flex;
	align-items: center;
	gap: 8px;
}
.g .gl .n {
	padding: 0 6px;
	border-radius: 9999px;
	background: var(--sheet-2);
	font-size: 12px;
	font-weight: 500;
	color: var(--ink-3);
}
.g .gl .code {
	color: var(--ink-3);
	font-size: 12px;
	font-weight: 500;
}
.g .tg {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	text-transform: inherit;
}
.g .tg svg {
	transition: transform 160ms var(--ease);
}
.g .tg[aria-expanded="false"] svg {
	transform: rotate(-90deg);
}
.g .tg:hover {
	color: var(--action);
}
.g .addin {
	width: 360px;
	height: 28px;
	padding: 0 8px;
	border: 0;
	border-radius: 6px;
	outline: 2px solid var(--action);
	background: var(--sheet);
}
.statusbar {
	display: flex;
	flex-shrink: 0;
	align-items: center;
	gap: 16px;
	height: 32px;
	padding: 0 16px;
	border-top: 1px solid var(--rule);
	background: var(--sheet);
	font-size: 12px;
	color: var(--ink-2);
}
.statusbar .addr {
	font-weight: 600;
	color: var(--ink);
	white-space: nowrap;
}
.statusbar .msg {
	flex: 1;
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.statusbar .msg.err {
	color: var(--danger-ink);
	font-weight: 600;
}
.statusbar .keys {
	white-space: nowrap;
}
@media (max-width: 719px) {
	.g .fz {
		position: static;
	}
	/* Cellule figée devenue statique : le liseré se calerait sur toute la grille. */
	.g tr.row.cur-row td.fz:first-child::before {
		content: none;
	}
	.statusbar .keys {
		display: none;
	}
}
@media (prefers-reduced-motion: reduce) {
	.g td.saved::after {
		animation: none;
		opacity: 0;
	}
	.g .tg svg {
		transition: none;
	}
}
.g .th-btn:disabled {
	cursor: default;
	color: var(--ink-2);
	background: none;
}
/* Carte qui vient d'être déposée : surlignée après sa glissade (180 ms), puis s'efface. */
@keyframes projets-landed {
	from {
		background-color: #ecf5fd;
	}
}
.projets-root .projets-landed {
	animation: projets-landed 600ms cubic-bezier(0.2, 0, 0, 1) 180ms backwards;
}
@media (prefers-reduced-motion: reduce) {
	.projets-root .projets-landed {
		animation-delay: 0ms;
	}
}
/* « + » de l'en-tête de thème : rendu dans la pastille du compte de la grille, qu'on efface au profit de la sienne. */
.projets-root .g .gl .n:has(> .add-epic) {
	padding: 0;
	background: none;
}
.projets-root .add-epic {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}
/* Au toucher, pas de survol : le « + » reste visible. */
@media (hover: hover) {
	.projets-root tr.g2:not(:hover, :focus-within) .add-epic > button {
		opacity: 0;
	}
}
