/*
 * Habillage Titanide des pages natives d'Odoo (voir odoo-skin.js). Refonte du 30/09/2026.
 *
 * Principe : la page Odoo prend la charte du front piste 3B « En prise » à l'identique. Encre
 * pleine, blanc, un seul aplat Signal par action principale ; IBM Plex Sans et JetBrains Mono ;
 * aucun arrondi ; filets de 1 px (#55665c) ; champs blancs à contour ; étiquettes en capitales
 * mono ; focus Signal de 3 px sur socle encre. Les jetons viennent de app/globals.css du front
 * (chargé par odoo-skin.js avant cette feuille) : on les RÉUTILISE, on n'en invente aucun.
 *
 * Portée : `html.ti-odoo` pour les variables et les composants qu'Odoo ou Bootstrap peuvent
 * poser hors de <main> (menus déroulants, fenêtres, tiroirs) ; `html.ti-odoo main` pour le
 * contenu. L'en-tête et le pied du front sont hors de <main> : rien ici ne les touche.
 */

/* ---------------------------------------------------------------------------------------------
   Variables : Bootstrap 5.3 et thème de site Odoo ramenés aux jetons du front
   --------------------------------------------------------------------------------------------- */
/* Odoo 19 compile Bootstrap sans préfixe : ses variables s'appellent --body-bg, --card-bg,
   --table-bg… Chaque variable --bs-* ci-dessous est donc doublée sous son nom sans préfixe. */
html.ti-odoo {
  --ti-ink: #080a09;
  --ti-signal: #00ff66;
  --ti-white: #ffffff;
  --ti-muted: #bcc7c0;
  --ti-line: #55665c;
  --ti-alert: #ff6259;
  --ti-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --ti-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

  --bs-body-bg: var(--ti-ink);
  --body-bg: var(--ti-ink);
  --bs-body-bg-rgb: 8, 10, 9;
  --body-bg-rgb: 8, 10, 9;
  --bs-body-color: var(--ti-white);
  --body-color: var(--ti-white);
  --bs-body-color-rgb: 255, 255, 255;
  --body-color-rgb: 255, 255, 255;
  --bs-body-font-family: var(--ti-sans);
  --body-font-family: var(--ti-sans);
  --bs-font-sans-serif: var(--ti-sans);
  --font-sans-serif: var(--ti-sans);
  --bs-font-monospace: var(--ti-mono);
  --font-monospace: var(--ti-mono);
  --bs-emphasis-color: var(--ti-white);
  --emphasis-color: var(--ti-white);
  --bs-emphasis-color-rgb: 255, 255, 255;
  --emphasis-color-rgb: 255, 255, 255;
  --bs-heading-color: var(--ti-white);
  --heading-color: var(--ti-white);
  --bs-secondary-color: var(--ti-muted);
  --secondary-color: var(--ti-muted);
  --bs-secondary-color-rgb: 188, 199, 192;
  --secondary-color-rgb: 188, 199, 192;
  --bs-tertiary-color: var(--ti-muted);
  --tertiary-color: var(--ti-muted);
  --bs-secondary-bg: transparent;
  --secondary-bg: transparent;
  --bs-tertiary-bg: transparent;
  --tertiary-bg: transparent;
  --bs-border-color: var(--ti-line);
  --border-color: var(--ti-line);
  --bs-border-color-translucent: var(--ti-line);
  --border-color-translucent: var(--ti-line);
  --bs-border-radius: 0;
  --border-radius: 0;
  --bs-border-radius-sm: 0;
  --border-radius-sm: 0;
  --bs-border-radius-lg: 0;
  --border-radius-lg: 0;
  --bs-border-radius-xl: 0;
  --border-radius-xl: 0;
  --bs-border-radius-xxl: 0;
  --border-radius-xxl: 0;
  --bs-border-radius-pill: 0;
  --border-radius-pill: 0;
  --bs-link-color: var(--ti-white);
  --link-color: var(--ti-white);
  --bs-link-color-rgb: 255, 255, 255;
  --link-color-rgb: 255, 255, 255;
  --bs-link-hover-color: var(--ti-white);
  --link-hover-color: var(--ti-white);
  --bs-link-hover-color-rgb: 255, 255, 255;
  --link-hover-color-rgb: 255, 255, 255;
  --bs-primary: var(--ti-signal);
  --primary: var(--ti-signal);
  --bs-primary-rgb: 0, 255, 102;
  --primary-rgb: 0, 255, 102;
  --bs-primary-text-emphasis: var(--ti-signal);
  --primary-text-emphasis: var(--ti-signal);
  --bs-primary-bg-subtle: transparent;
  --primary-bg-subtle: transparent;
  --bs-primary-border-subtle: var(--ti-signal);
  --primary-border-subtle: var(--ti-signal);
  --bs-focus-ring-color: var(--ti-signal);
  --focus-ring-color: var(--ti-signal);
  --bs-form-valid-color: var(--ti-signal);
  --form-valid-color: var(--ti-signal);
  --bs-form-valid-border-color: var(--ti-signal);
  --form-valid-border-color: var(--ti-signal);
  --bs-form-invalid-color: var(--ti-alert);
  --form-invalid-color: var(--ti-alert);
  --bs-form-invalid-border-color: var(--ti-alert);
  --form-invalid-border-color: var(--ti-alert);
  --body-bg: var(--ti-ink);
  --o-color-1: var(--ti-signal);
  --o-color-2: var(--ti-white);
  --o-color-3: var(--ti-ink);
  --o-color-4: var(--ti-ink);
  --o-color-5: var(--ti-ink);
  color-scheme: dark;
}

html.ti-odoo body,
html.ti-odoo #wrapwrap {
  background: var(--ti-ink) !important;
  color: var(--ti-white);
  font-family: var(--ti-sans) !important;
  font-size: 16px;
  line-height: 1.5;
  overflow-x: clip;
}

/* L'ancien thème : en-tête, pied de page, blocs partagés. Masqués dès le premier rendu. */
html.ti-odoo #wrapwrap > header:not(.header),
html.ti-odoo #wrapwrap > footer:not(.footer),
html.ti-odoo .o_footer_copyright,
html.ti-odoo #o_shared_blocks,
html.ti-odoo .o_header_standard,
html.ti-odoo #website_cookies_bar ~ .o_cookies_discrete_bar { display: none !important; }

/* Pas d'éclair de page nue avant l'arrivée de l'en-tête du front. */
html.ti-odoo:not(.ti-odoo--habille) #wrapwrap { visibility: hidden; }

html.ti-odoo #wrapwrap > main { background: var(--ti-ink); color: var(--ti-white); }

/* Le titre de page est le bandeau du front : les titres d'Odoo qui le répètent disparaissent. */
html.ti-odoo main .o_portal_wrap .wrapper > h3,
html.ti-odoo main .o_portal_submenu { display: none !important; }

/* ---------------------------------------------------------------------------------------------
   Grille : le `.shell` du front (1600 px, gouttières 16/24 px)
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main #wrap .container,
html.ti-odoo main #wrap .container-fluid,
html.ti-odoo main .oe_website_login_container {
  max-width: var(--shell-max, 1600px) !important;
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--shell-pad, 16px) !important;
}
html.ti-odoo main #wrap { padding-top: 24px; padding-bottom: 72px; }
html.ti-odoo main #wrap .row { --bs-gutter-x: var(--gutter, 16px); }
html.ti-odoo main .o_wsale_sticky_object { top: 16px !important; }

/* ---------------------------------------------------------------------------------------------
   Typographie
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main,
html.ti-odoo main :is(p, li, td, th, span, div, label, small, address, dt, dd):not(.fa):not([class*=" fa-"]):not([class^="fa-"]) { font-family: var(--ti-sans); }
html.ti-odoo main :is(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6):not(.display) {
  color: var(--ti-white);
  font-family: var(--ti-sans);
  font-weight: 700;
  letter-spacing: -0.035em;
  line-height: 1.25;
}
html.ti-odoo main #wrap :is(h1, h2, .h1, .h2):not(.display) { font-size: 1.75rem; }
html.ti-odoo main #wrap :is(h3, h4, .h3, .h4) { font-size: 1.25rem; margin-bottom: 16px; }
html.ti-odoo main #wrap :is(h5, h6, .h5, .h6) { font-size: 1rem; }
html.ti-odoo main :is(.text-muted, .text-body-secondary, .text-secondary, .o_portal_sidebar .text-muted, small.text-muted) { color: var(--ti-muted) !important; }
html.ti-odoo main :is(.text-primary, .link-primary, .text-o-color-1) { color: var(--ti-signal) !important; }
html.ti-odoo main :is(.text-dark, .text-black, .text-body, .text-reset) { color: var(--ti-white) !important; }
html.ti-odoo main :is(.text-danger, .text-warning) { color: var(--ti-alert) !important; }
html.ti-odoo main .text-success { color: var(--ti-signal) !important; }
html.ti-odoo main :is(strong, b, .fw-bold, .fw-bolder) { font-weight: 700; }
html.ti-odoo main hr { border-color: var(--ti-line); opacity: 1; }
html.ti-odoo main .fa-angle-right, html.ti-odoo main .fa-angle-left { color: inherit; }

/* Liens de texte : blanc souligné, inversion au survol (comme les liens du front). */
html.ti-odoo main #wrap a:not(.btn):not(.ui-button):not(.dropdown-item):not(.nav-link):not(.page-link):not(.list-group-item):not(.o_portal_index_card a):not(.ti-lien-fort) {
  color: var(--ti-white);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.2em;
  text-decoration-color: var(--ti-line);
}
html.ti-odoo main #wrap a:not(.btn):not(.ui-button):not(.dropdown-item):not(.nav-link):not(.page-link):not(.list-group-item):hover {
  text-decoration-color: var(--ti-white);
}
html.ti-odoo main #wrap a.text-reset,
html.ti-odoo main #wrap .o_cart_product_image a { text-decoration: none !important; }
html.ti-odoo main .ti-lien-fort { color: var(--ti-white); font-weight: 600; text-decoration: none; }
html.ti-odoo main .ti-lien-fort:hover { text-decoration: underline; text-underline-offset: 0.2em; }

/* ---------------------------------------------------------------------------------------------
   Boutons : `.ui-button` du front
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .btn:not(.btn-link):not(.btn-close):not(.o_show_password):not(.js_add_cart_json):not(.css_quantity .btn):not(.dropdown-toggle-split) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 48px;
  padding: 12px 18px;
  font-family: var(--ti-sans);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.5;
  border: 1px solid var(--ti-line);
  border-radius: 0 !important;
  background: transparent;
  color: var(--ti-white);
  text-decoration: none;
  box-shadow: none;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
html.ti-odoo main .btn:not(.btn-link):not(.btn-close):not(.o_show_password):not(.js_add_cart_json):hover:not(:disabled):not(.disabled) {
  background: var(--ti-white);
  border-color: var(--ti-white);
  color: var(--ti-ink);
}
/* Principal : l'aplat Signal, encre dessus ; le survol inverse en blanc. */
html.ti-odoo main .btn-primary,
html.ti-odoo main .btn-primary:focus,
html.ti-odoo main .btn-success,
html.ti-odoo main a[name="website_sale_main_button"],
html.ti-odoo main button[name="o_payment_submit_button"] {
  background: var(--ti-signal) !important;
  border-color: var(--ti-signal) !important;
  color: var(--ti-ink) !important;
}
html.ti-odoo main .btn-primary:hover:not(:disabled):not(.disabled),
html.ti-odoo main a[name="website_sale_main_button"]:hover,
html.ti-odoo main button[name="o_payment_submit_button"]:hover:not(:disabled) {
  background: var(--ti-white) !important;
  border-color: var(--ti-white) !important;
  color: var(--ti-ink) !important;
}
html.ti-odoo main .btn:disabled,
html.ti-odoo main .btn.disabled {
  background: transparent !important;
  color: var(--ti-muted) !important;
  border-color: var(--ti-line) !important;
  opacity: 1;
  cursor: not-allowed;
}
/* Secondaires, clairs, contour, danger (« Vider le panier ») : contour filet, lettre blanche. */
html.ti-odoo main :is(.btn-secondary, .btn-light, .btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-danger, .btn-outline-danger, .btn-dark, .btn-info, .btn-warning, .btn-white) {
  background: transparent !important;
  border-color: var(--ti-line) !important;
  color: var(--ti-white) !important;
}
html.ti-odoo main :is(.btn-secondary, .btn-light, .btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-danger, .btn-outline-danger, .btn-dark, .btn-info, .btn-warning, .btn-white):hover:not(:disabled) {
  background: var(--ti-white) !important;
  border-color: var(--ti-white) !important;
  color: var(--ti-ink) !important;
}
html.ti-odoo main .btn-sm:not(.btn-link) { min-height: 44px; padding: 10px 14px; }
/* Liens-boutons : lien de texte fort. */
html.ti-odoo main .btn-link {
  color: var(--ti-white) !important;
  font-weight: 600;
  text-decoration: underline;
  text-decoration-color: var(--ti-line);
  text-underline-offset: 0.2em;
  padding-inline: 0;
  border: 0;
  background: none;
}
html.ti-odoo main .btn-link:hover { text-decoration-color: var(--ti-white); }
html.ti-odoo .btn-close { filter: invert(1) grayscale(1); opacity: 1; }
html.ti-odoo main .ui-button { text-decoration: none !important; }

/* Focus : contour Signal 3 px, dégagement 4 px, socle encre (règle du front). */
html.ti-odoo main :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible,
html.ti-odoo main .btn:focus-visible,
html.ti-odoo main .form-control:focus,
html.ti-odoo main .form-select:focus,
html.ti-odoo main .form-check-input:focus-visible {
  outline: 3px solid var(--ti-signal) !important;
  outline-offset: 4px;
  box-shadow: 0 0 0 7px var(--ti-ink) !important;
}

/* ---------------------------------------------------------------------------------------------
   Champs : `.field` du front, étiquettes en capitales mono
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main :is(.form-control, .form-select, input[type="text"], input[type="email"], input[type="password"], input[type="tel"], input[type="number"], input[type="search"], textarea, select):not(.form-check-input):not([type="hidden"]) {
  min-height: 48px;
  padding: 12px;
  border: 1px solid var(--ti-line) !important;
  border-radius: 0 !important;
  background-color: var(--ti-white) !important;
  color: var(--ti-ink) !important;
  font-family: var(--ti-sans);
  font-size: 1rem;
  box-shadow: none;
}
html.ti-odoo main .form-select,
html.ti-odoo main select { padding-right: 40px; }
html.ti-odoo main :is(.form-control, .form-select, input, textarea, select):focus { border-color: var(--ti-signal) !important; }
html.ti-odoo main :is(.form-control, input, textarea)::placeholder { color: #55665c; opacity: 1; }
html.ti-odoo main :is(.form-control, .form-select).is-invalid,
html.ti-odoo main .o_has_error :is(.form-control, .form-select) { border-color: var(--ti-alert) !important; border-width: 2px !important; }
html.ti-odoo main :is(.invalid-feedback, .o_has_error .text-danger) { color: var(--ti-alert) !important; font-size: 0.875rem; }
html.ti-odoo main :is(.form-control[readonly], .form-control:disabled) { background-color: #eef1ef !important; color: #55665c !important; }

html.ti-odoo main :is(.form-label, .col-form-label, .ti-etiquette, form.address_autoformat label:not(.form-check-label), .o_portal_details label:not(.form-check-label), .oe_signup_form label, .oe_reset_password_form label, .oe_login_form label) {
  display: block;
  margin: 0 0 6px;
  padding: 0;
  font-family: var(--ti-mono) !important;
  font-size: 0.75rem;
  font-weight: 400;
  line-height: 1.5;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  color: var(--ti-muted) !important;
}
html.ti-odoo main .label-optional::after { content: " (facultatif)"; text-transform: none; }

/* Afficher / masquer le mot de passe : carré filet collé au champ. */
html.ti-odoo main .input-group { flex-wrap: nowrap; }
html.ti-odoo main .input-group > .o_show_password,
html.ti-odoo main .input-group > .btn:not(.btn-primary) {
  min-height: 48px;
  min-width: 48px;
  border: 1px solid var(--ti-line) !important;
  border-left: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--ti-white) !important;
}
html.ti-odoo main .input-group > .o_show_password:hover { background: var(--ti-white) !important; color: var(--ti-ink) !important; }

/* Cases et boutons radio : aplat Signal, coche encre. */
html.ti-odoo main .form-check-input {
  width: 1.25em;
  height: 1.25em;
  border: 1px solid var(--ti-muted);
  border-radius: 0;
  background-color: transparent;
}
html.ti-odoo main .form-check-input[type="radio"] { border-radius: 50%; }
html.ti-odoo main .form-check-input:checked {
  background-color: var(--ti-signal);
  border-color: var(--ti-signal);
  --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23080a09' stroke-linecap='square' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
  --form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23080a09' stroke-linecap='square' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
html.ti-odoo main .form-check-input[type="radio"]:checked {
  --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23080a09'/%3e%3c/svg%3e");
  --form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23080a09'/%3e%3c/svg%3e");
}
html.ti-odoo main .form-switch .form-check-input {
  width: 2.5em;
  border-radius: 0;
  --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3crect x='-3' y='-3' width='6' height='6' fill='%23bcc7c0'/%3e%3c/svg%3e");
  --form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3crect x='-3' y='-3' width='6' height='6' fill='%23bcc7c0'/%3e%3c/svg%3e");
}
html.ti-odoo main .form-switch .form-check-input:checked {
  --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3crect x='-3' y='-3' width='6' height='6' fill='%23080a09'/%3e%3c/svg%3e");
  --form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3crect x='-3' y='-3' width='6' height='6' fill='%23080a09'/%3e%3c/svg%3e");
}
html.ti-odoo main .form-check-label { color: var(--ti-white); font-family: var(--ti-sans); text-transform: none; }

/* ---------------------------------------------------------------------------------------------
   Panneaux, cartes, listes : filet 1 px, fond encre, 20 px (`panel` du front)
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .card {
  --bs-card-bg: transparent;
  --card-bg: transparent;
  --bs-card-color: var(--ti-white);
  --card-color: var(--ti-white);
  --bs-card-border-color: var(--ti-line);
  --card-border-color: var(--ti-line);
  --bs-card-border-radius: 0;
  --card-border-radius: 0;
  --bs-card-inner-border-radius: 0;
  --card-inner-border-radius: 0;
  --bs-card-cap-bg: transparent;
  --card-cap-bg: transparent;
  --bs-card-cap-color: var(--ti-white);
  --card-cap-color: var(--ti-white);
  display: flex;
  height: auto;
  border: 1px solid var(--ti-line) !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--ti-white);
  box-shadow: none !important;
  z-index: auto;
}
html.ti-odoo main .card:hover, html.ti-odoo main .card:focus-within { box-shadow: none !important; }
/* Odoo 19 pose un fond blanc à 90 % et une lettre sombre sur tout corps de carte. */
html.ti-odoo main :is(.card-body, .card-text, .o_total_card, .o_cart_total, .list-group-item, .accordion-body) {
  --background-color: transparent;
  --color: var(--ti-white);
  background-color: transparent !important;
  color: var(--ti-white) !important;
}
html.ti-odoo main .card-header,
html.ti-odoo main .card-footer { background: transparent !important; border-color: var(--ti-line) !important; }
html.ti-odoo main .o_total_card > .card-body { padding: 20px !important; }

html.ti-odoo main :is(.bg-light, .bg-white, .bg-body, .bg-body-tertiary, .bg-body-secondary, .bg-100, .bg-200, .bg-300, .bg-400, .bg-o-color-3, .bg-o-color-4, .bg-o-color-5, .o_cc1, .o_cc2, .o_cc3, .o_cc4, .o_cc5, .bg-secondary, .bg-dark, .bg-black-15, .bg-black-25) {
  background: transparent !important;
  background-color: transparent !important;
  color: var(--ti-white) !important;
}
html.ti-odoo main :is(.border, .border-top, .border-bottom, .border-start, .border-end) { border-color: var(--ti-line) !important; }
html.ti-odoo main :is(.rounded, .rounded-1, .rounded-2, .rounded-3, .rounded-pill, .rounded-circle) { border-radius: 0 !important; }
html.ti-odoo main .shadow, html.ti-odoo main .shadow-sm, html.ti-odoo main .shadow-lg { box-shadow: none !important; }

html.ti-odoo main .list-group {
  --bs-list-group-bg: transparent;
  --list-group-bg: transparent;
  --bs-list-group-color: var(--ti-white);
  --list-group-color: var(--ti-white);
  --bs-list-group-border-color: var(--ti-line);
  --list-group-border-color: var(--ti-line);
  --bs-list-group-border-radius: 0;
  --list-group-border-radius: 0;
  --bs-list-group-action-hover-bg: transparent;
  --list-group-action-hover-bg: transparent;
  --bs-list-group-action-hover-color: var(--ti-white);
  --list-group-action-hover-color: var(--ti-white);
  --bs-list-group-active-bg: transparent;
  --list-group-active-bg: transparent;
  --bs-list-group-active-color: var(--ti-white);
  --list-group-active-color: var(--ti-white);
  --bs-list-group-active-border-color: var(--ti-signal);
  --list-group-active-border-color: var(--ti-signal);
  border-radius: 0;
}
html.ti-odoo main .list-group-item { padding: 16px 20px; background: transparent !important; color: var(--ti-white) !important; border-color: var(--ti-line) !important; }
html.ti-odoo main .list-group-item:has(input:checked),
html.ti-odoo main .list-group-item.active {
  border-color: var(--ti-signal) !important;
  box-shadow: inset 4px 0 0 var(--ti-signal);
  z-index: 2;
}
/* Cartes d'adresse du tunnel : la carte choisie porte le liseré Signal. */
html.ti-odoo main .o_address_card { cursor: pointer; }
html.ti-odoo main .o_address_card:is(.border-primary, .bg-primary, .active),
html.ti-odoo main .o_address_card:has(input:checked) {
  border-color: var(--ti-signal) !important;
  box-shadow: inset 4px 0 0 var(--ti-signal) !important;
}

/* ---------------------------------------------------------------------------------------------
   Tableaux : lignes filets, en-têtes en capitales mono
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .table,
html.ti-odoo main .table > :not(caption) > * > * {
  --bs-table-bg: transparent;
  --table-bg: transparent;
  --bs-table-color: var(--ti-white);
  --table-color: var(--ti-white);
  --bs-table-border-color: var(--ti-line);
  --table-border-color: var(--ti-line);
  --bs-table-striped-bg: rgba(255, 255, 255, 0.03);
  --table-striped-bg: rgba(255, 255, 255, 0.03);
  --bs-table-striped-color: var(--ti-white);
  --table-striped-color: var(--ti-white);
  --bs-table-hover-bg: rgba(255, 255, 255, 0.06);
  --table-hover-bg: rgba(255, 255, 255, 0.06);
  --bs-table-hover-color: var(--ti-white);
  --table-hover-color: var(--ti-white);
  --bs-table-active-bg: transparent;
  --table-active-bg: transparent;
  --bs-table-accent-bg: transparent;
  --table-accent-bg: transparent;
  background-color: transparent;
  color: var(--ti-white);
  border-color: var(--ti-line);
}
html.ti-odoo main :is(.table-light, .table-secondary, thead.bg-100, .o_portal_my_doc_table thead) {
  --bs-table-bg: transparent;
  --table-bg: transparent;
  --bs-table-color: var(--ti-muted);
  --table-color: var(--ti-muted);
}
html.ti-odoo main .table thead th,
html.ti-odoo main .table thead td {
  font-family: var(--ti-mono) !important;
  font-size: 0.75rem;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  color: var(--ti-muted) !important;
  border-bottom: 1px solid var(--ti-line);
}
html.ti-odoo main .table td, html.ti-odoo main .table th { padding: 12px 8px; vertical-align: middle; }
html.ti-odoo main .o_cart_total .table td,
html.ti-odoo main .o_cart_total .table th { padding: 8px 0; border: 0; }
html.ti-odoo main .o_cart_total tr:last-child td,
html.ti-odoo main .o_cart_total tr[id*="total"]:last-child td { border-top: 1px solid var(--ti-line); padding-top: 16px; font-size: 1.125rem; font-weight: 700; }

/* ---------------------------------------------------------------------------------------------
   Alertes, pastilles, compteurs
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .alert {
  --bs-alert-bg: transparent;
  --alert-bg: transparent;
  --bs-alert-color: var(--ti-white);
  --alert-color: var(--ti-white);
  --bs-alert-border-color: var(--ti-line);
  --alert-border-color: var(--ti-line);
  --bs-alert-link-color: var(--ti-white);
  --alert-link-color: var(--ti-white);
  border: 1px solid var(--ti-line) !important;
  border-left: 4px solid var(--ti-white) !important;
  border-radius: 0;
  background: transparent !important;
  color: var(--ti-white) !important;
  padding: 16px 20px;
}
html.ti-odoo main :is(.alert-success, .alert-info, .alert-primary) { border-left-color: var(--ti-signal) !important; }
html.ti-odoo main :is(.alert-danger, .alert-warning) { border-left-color: var(--ti-alert) !important; }
html.ti-odoo main .alert :is(.fa, .alert-heading, a) { color: var(--ti-white) !important; }

html.ti-odoo main .badge {
  border-radius: 0 !important;
  font-family: var(--ti-mono);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  padding: 4px 8px;
  border: 1px solid var(--ti-line);
  background: transparent !important;
  color: var(--ti-white) !important;
}
html.ti-odoo main :is(.badge.bg-primary, .badge.text-bg-primary, .badge.text-bg-success, .badge.bg-success, .o_cart_item_count, .o_wsale_cart_quantity) {
  background: var(--ti-signal) !important;
  border-color: var(--ti-signal) !important;
  color: var(--ti-ink) !important;
}
html.ti-odoo main :is(.badge.text-bg-danger, .badge.bg-danger, .badge.text-bg-warning, .badge.bg-warning) {
  border-color: var(--ti-alert) !important;
  color: var(--ti-alert) !important;
}

/* ---------------------------------------------------------------------------------------------
   Tunnel d'achat : étapes, lignes du panier, quantités, récapitulatif
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .o_wizard { margin: 0 0 24px !important; gap: 8px 0; }
html.ti-odoo main .o_wizard [name="step_name"],
html.ti-odoo main .o_wizard [name="step_name"] *:not(.fa),
html.ti-odoo main .o_wizard a span:not(.fa) {
  font-family: var(--ti-mono) !important;
  font-size: 0.75rem;
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ti-muted) !important;
}
html.ti-odoo main .o_wizard [name="step_name"].fw-bold,
html.ti-odoo main .o_wizard [name="step_name"].fw-bold * { color: var(--ti-white) !important; }
html.ti-odoo main .o_wizard [name="step_name"].fw-bold p { border-bottom: 2px solid var(--ti-signal); padding-bottom: 4px; }
html.ti-odoo main .o_wizard a,
html.ti-odoo main .o_wizard a *:not(.fa) { color: var(--ti-white) !important; text-decoration: none !important; }
html.ti-odoo main .o_wizard .fa { font-family: FontAwesome !important; }
html.ti-odoo main .o_wizard .fa-angle-right { color: var(--ti-line) !important; }

html.ti-odoo main .o_cart_product { border-bottom: 1px solid var(--ti-line); padding: 16px 0 !important; margin: 0 !important; }
html.ti-odoo main #cart_products { border-top: 1px solid var(--ti-line); }
html.ti-odoo main .o_cart_product_image img,
html.ti-odoo main .o_cart_products_table img,
html.ti-odoo main .td-img img,
html.ti-odoo main img.o_image_64_max {
  background: var(--ti-white);
  object-fit: contain;
  border-radius: 0 !important;
  border: 0;
}
html.ti-odoo main .o_cart_product h6,
html.ti-odoo main .o_cart_product [name="o_cart_line_product_link"],
html.ti-odoo main .o_cart_product .h6 { color: var(--ti-white) !important; font-weight: 700; text-decoration: none !important; }
html.ti-odoo main .o_cart_product :is(.text-muted, .small, small) { color: var(--ti-muted) !important; }

/* Sélecteur de quantité : carrés filets de 44 px autour d'un champ blanc. */
html.ti-odoo main .css_quantity {
  flex-wrap: nowrap;
  width: auto;
  border: 0;
  background: transparent;
}
html.ti-odoo main .css_quantity .btn,
html.ti-odoo main .css_quantity .js_add_cart_json {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 0;
  border: 1px solid var(--ti-line) !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--ti-white) !important;
  box-shadow: none;
}
html.ti-odoo main .css_quantity .btn:hover { background: var(--ti-white) !important; color: var(--ti-ink) !important; border-color: var(--ti-white) !important; }
html.ti-odoo main .css_quantity input.quantity,
html.ti-odoo main .css_quantity input.js_quantity {
  min-height: 44px !important;
  width: 56px;
  max-width: 64px;
  padding: 8px !important;
  text-align: center;
  font-family: var(--ti-mono);
  border-left: 0 !important;
  border-right: 0 !important;
}

/* Récapitulatif : panneau filet, total en gras, bouton principal pleine largeur. */
html.ti-odoo main .o_total_card { padding: 0; }
html.ti-odoo main .o_total_card .btn-primary,
html.ti-odoo main .o_total_card a[name="website_sale_main_button"] { width: 100%; }
html.ti-odoo main .o_total_card hr { border-color: var(--ti-line); }
html.ti-odoo main .o_total_card .px-3 { color: var(--ti-muted); font-family: var(--ti-mono); font-size: 0.75rem; text-transform: uppercase; }
html.ti-odoo main :is(#o_cart_summary, .o_cart_summary, .o_wsale_accordion .accordion-button, .accordion-button, .accordion-item) {
  --bs-accordion-bg: transparent;
  --accordion-bg: transparent;
  --bs-accordion-color: var(--ti-white);
  --accordion-color: var(--ti-white);
  --bs-accordion-border-color: var(--ti-line);
  --accordion-border-color: var(--ti-line);
  --bs-accordion-btn-color: var(--ti-white);
  --accordion-btn-color: var(--ti-white);
  --bs-accordion-active-bg: transparent;
  --accordion-active-bg: transparent;
  --bs-accordion-active-color: var(--ti-white);
  --accordion-active-color: var(--ti-white);
  --bs-accordion-border-radius: 0;
  --accordion-border-radius: 0;
  --bs-accordion-inner-border-radius: 0;
  --accordion-inner-border-radius: 0;
  background: transparent;
  color: var(--ti-white);
}
html.ti-odoo main .accordion-button::after { filter: invert(1); }

/* Code promo : champ blanc + bouton contour accolés. */
html.ti-odoo main form[action="/shop/pricelist"] .input-group > .form-control { border-right: 0 !important; }
html.ti-odoo main form[action="/shop/pricelist"] .input-group > .btn { min-height: 48px; }
html.ti-odoo main form[action="/shop/claimreward"] { border: 1px dashed var(--ti-line); padding: 12px 16px; }

/* Paiement : chaque moyen est une ligne filet, le choisi porte le liseré Signal. */
html.ti-odoo main .o_payment_form .list-group-item,
html.ti-odoo main .o_payment_option_card { border-color: var(--ti-line) !important; background: transparent !important; }
html.ti-odoo main .o_payment_form .o_payment_icon,
html.ti-odoo main .o_payment_form img { background: var(--ti-white); padding: 2px; }

/* ---------------------------------------------------------------------------------------------
   Espace client /my
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .o_portal_index_card > a {
  display: flex;
  height: 100%;
  padding: 20px !important;
  border: 1px solid var(--ti-line);
  color: var(--ti-white) !important;
  text-decoration: none !important;
  background: transparent;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
html.ti-odoo main .o_portal_index_card > a:hover { box-shadow: inset 0 0 0 1px var(--ti-white); }
html.ti-odoo main .o_portal_index_card > a :is(h5, .h5, .h6, h6) { color: var(--ti-white) !important; font-weight: 700; margin-bottom: 4px; }
html.ti-odoo main .o_portal_index_card > a :is(p, .text-muted, small) { color: var(--ti-muted) !important; }
html.ti-odoo main .o_portal_index_card .o_portal_icon { display: none !important; }
html.ti-odoo main .o_portal_index_card .badge { margin-left: auto; }
html.ti-odoo main :is(.o_avatar, .o_portal_contact_img, img.rounded) { border-radius: 0 !important; }
html.ti-odoo main .o_portal_my_details,
html.ti-odoo main .o_portal_sidebar .card { border: 1px solid var(--ti-line); padding: 20px; }
html.ti-odoo main .o_portal_sidebar,
html.ti-odoo main .o_portal_wrap .navbar { --bs-navbar-color: var(--ti-white); --bs-navbar-hover-color: var(--ti-white); background: transparent !important; }
html.ti-odoo main .o_portal_html_view { background: var(--ti-white); color: var(--ti-ink); padding: 24px; }
html.ti-odoo main #o_portal_navbar_content .btn { min-height: 44px; }

/* Pagination, menus déroulants, fenêtres et tiroirs d'Odoo (souvent hors de <main>). */
html.ti-odoo .pagination {
  --bs-pagination-bg: transparent;
  --pagination-bg: transparent;
  --bs-pagination-color: var(--ti-white);
  --pagination-color: var(--ti-white);
  --bs-pagination-border-color: var(--ti-line);
  --pagination-border-color: var(--ti-line);
  --bs-pagination-border-radius: 0;
  --pagination-border-radius: 0;
  --bs-pagination-hover-bg: var(--ti-white);
  --pagination-hover-bg: var(--ti-white);
  --bs-pagination-hover-color: var(--ti-ink);
  --pagination-hover-color: var(--ti-ink);
  --bs-pagination-hover-border-color: var(--ti-white);
  --pagination-hover-border-color: var(--ti-white);
  --bs-pagination-active-bg: var(--ti-signal);
  --pagination-active-bg: var(--ti-signal);
  --bs-pagination-active-color: var(--ti-ink);
  --pagination-active-color: var(--ti-ink);
  --bs-pagination-active-border-color: var(--ti-signal);
  --pagination-active-border-color: var(--ti-signal);
  --bs-pagination-disabled-bg: transparent;
  --pagination-disabled-bg: transparent;
  --bs-pagination-disabled-color: var(--ti-muted);
  --pagination-disabled-color: var(--ti-muted);
  --bs-pagination-focus-box-shadow: none;
  --pagination-focus-box-shadow: none;
}
html.ti-odoo .dropdown-menu {
  --bs-dropdown-bg: var(--ti-ink);
  --dropdown-bg: var(--ti-ink);
  --bs-dropdown-color: var(--ti-white);
  --dropdown-color: var(--ti-white);
  --bs-dropdown-border-color: var(--ti-line);
  --dropdown-border-color: var(--ti-line);
  --bs-dropdown-border-radius: 0;
  --dropdown-border-radius: 0;
  --bs-dropdown-link-color: var(--ti-white);
  --dropdown-link-color: var(--ti-white);
  --bs-dropdown-link-hover-bg: var(--ti-white);
  --dropdown-link-hover-bg: var(--ti-white);
  --bs-dropdown-link-hover-color: var(--ti-ink);
  --dropdown-link-hover-color: var(--ti-ink);
  --bs-dropdown-link-active-bg: var(--ti-signal);
  --dropdown-link-active-bg: var(--ti-signal);
  --bs-dropdown-link-active-color: var(--ti-ink);
  --dropdown-link-active-color: var(--ti-ink);
  --bs-dropdown-header-color: var(--ti-muted);
  --dropdown-header-color: var(--ti-muted);
  --bs-dropdown-divider-bg: var(--ti-line);
  --dropdown-divider-bg: var(--ti-line);
  font-family: var(--ti-sans);
}
/* `.modal` du front (porte d'âge) est une grille visible : les fenêtres de Bootstrap restent
   masquées tant que leur script ne les ouvre pas (il pose display:block en ligne). */
html.ti-odoo .modal:not([data-habillage]) { display: none; place-items: initial; padding: 0; }
html.ti-odoo .modal-content {
  --bs-modal-bg: var(--ti-ink);
  --modal-bg: var(--ti-ink);
  --bs-modal-color: var(--ti-white);
  --modal-color: var(--ti-white);
  --bs-modal-border-color: var(--ti-line);
  --modal-border-color: var(--ti-line);
  --bs-modal-border-radius: 0;
  --modal-border-radius: 0;
  --bs-modal-header-border-color: var(--ti-line);
  --modal-header-border-color: var(--ti-line);
  --bs-modal-footer-border-color: var(--ti-line);
  --modal-footer-border-color: var(--ti-line);
  background: var(--ti-ink);
  color: var(--ti-white);
  border: 1px solid var(--ti-line);
  border-radius: 0;
}
html.ti-odoo .offcanvas {
  --bs-offcanvas-bg: var(--ti-ink);
  --offcanvas-bg: var(--ti-ink);
  --bs-offcanvas-color: var(--ti-white);
  --offcanvas-color: var(--ti-white);
  --bs-offcanvas-border-color: var(--ti-line);
  --offcanvas-border-color: var(--ti-line);
  background: var(--ti-ink);
  color: var(--ti-white);
}
html.ti-odoo .tooltip, html.ti-odoo .popover { --bs-popover-bg: var(--ti-ink); --bs-popover-body-color: var(--ti-white); --bs-popover-border-color: var(--ti-line); --bs-tooltip-bg: var(--ti-white); --bs-tooltip-color: var(--ti-ink); --bs-popover-border-radius: 0; --bs-tooltip-border-radius: 0; }

/* ---------------------------------------------------------------------------------------------
   Connexion, création de compte, mot de passe : grille du front (odoo-skin.js)
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main #wrap:has(.ti-compte) { padding-top: 0; }
html.ti-odoo main .ti-compte { padding-top: 0 !important; }
html.ti-odoo main .ti-compte__grille {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
  align-items: start;
}
@media (min-width: 900px) {
  html.ti-odoo main .ti-compte__grille { grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); gap: 40px; }
}
html.ti-odoo main .ti-panneau { border: 1px solid var(--ti-line); padding: 20px; }
html.ti-odoo main .ti-panneau__titre { font-size: 1.25rem !important; margin: 0 0 16px; letter-spacing: -0.035em; }
html.ti-odoo main .ti-panneau__texte { color: var(--ti-muted); font-size: 0.9375rem; margin: 0 0 16px; }
html.ti-odoo main .ti-panneau form { margin: 0; max-width: none !important; }
html.ti-odoo main .ti-panneau form .mb-3,
html.ti-odoo main .ti-panneau form .form-group,
html.ti-odoo main .ti-panneau form .field-login,
html.ti-odoo main .ti-panneau form .field-password { margin: 0 0 16px !important; padding: 0 !important; }
html.ti-odoo main .ti-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; margin-top: 8px; }
html.ti-odoo main .ti-login-reste,
html.ti-odoo main .ti-panneau .oe_login_buttons > a.btn-link,
html.ti-odoo main .ti-panneau .oe_login_buttons .o_login_auth:empty { display: none !important; }
html.ti-odoo main .ti-panneau .oe_login_buttons { display: flex !important; flex-wrap: wrap; gap: 12px 24px; align-items: center; padding-top: 8px !important; margin: 0 !important; text-align: left !important; }
html.ti-odoo main .ti-panneau .alert { margin: 0 0 16px; }
html.ti-odoo main .ti-panneau .oe_login_form { max-width: none; }
html.ti-odoo main .ti-panneau--aside .ui-button { width: auto; }

/* ---------------------------------------------------------------------------------------------
   En-tête injecté : bouton « Menu » visible en mobile, pastille du panier
   --------------------------------------------------------------------------------------------- */
html.ti-odoo [data-habillage="tiroir"][hidden] { display: none !important; }
html.ti-odoo .ti-lettre-message { margin: 8px 0 0; color: var(--ti-muted); font-size: 0.875rem; }

/* ---------------------------------------------------------------------------------------------
   Mobile (375 px) : aucune largeur fixe ne déborde
   --------------------------------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  html.ti-odoo main #wrap { padding-top: 16px; padding-bottom: 48px; }
  html.ti-odoo main #wrap .row { --bs-gutter-x: 16px; margin-inline: calc(-0.5 * var(--bs-gutter-x)); }
  html.ti-odoo main .o_total_card > .card-body { padding: 16px !important; }
  html.ti-odoo main :is(table, .table-responsive) { max-width: 100%; }
  html.ti-odoo main .table-responsive { overflow-x: auto; }
  html.ti-odoo main .o_wizard [name="step_name"] .fa-angle-right { margin-inline: 8px !important; }
  html.ti-odoo main .btn:not(.btn-link):not(.btn-close) { white-space: normal; }
}

/* Connexion : la grille porte déjà le `.shell`, le conteneur d'Odoo ne rajoute pas sa gouttière. */
html.ti-odoo main .oe_website_login_container:has(.ti-compte) { padding-inline: 0 !important; max-width: none !important; }
/* Espace client : les rubriques s'enchaînent comme une grille, sans les grands blancs d'Odoo. */
html.ti-odoo main .o_portal_docs { row-gap: 8px; }
html.ti-odoo main .o_portal_category { margin-top: 0 !important; }
html.ti-odoo main .o_portal_category:empty,
html.ti-odoo main .o_portal_category:not(:has(.o_portal_index_card:not(.d-none))) { display: none !important; }

/* Teintes de texte : Odoo 19 les impose aux corps de carte avec un sélecteur très spécifique
   (`:where(.card) .card-body:not(…) .text-muted`) ; l'identifiant #wrapwrap passe devant. */
html.ti-odoo #wrapwrap main :is(.text-muted, .text-body-secondary, .text-secondary, .opacity-75) { color: var(--ti-muted) !important; opacity: 1 !important; }
html.ti-odoo #wrapwrap main :is(.card-body, .o_cart_total) :is(td, th, span, div, p, strong):not(.text-muted):not(.badge):not(.btn):not(.btn *) { color: var(--ti-white); }
html.ti-odoo #wrapwrap main .o_cart_total td.text-muted { color: var(--ti-muted) !important; }

/* Sélecteur de quantité : « − » et « + » en lettre du site plutôt qu'en icônes d'Odoo. */
html.ti-odoo main .css_quantity .oi-minus::before,
html.ti-odoo main .css_quantity .fa-minus::before { content: "−"; font-family: var(--ti-sans); font-size: 1.25rem; font-weight: 600; font-style: normal; }
html.ti-odoo main .css_quantity .oi-plus::before,
html.ti-odoo main .css_quantity .fa-plus::before { content: "+"; font-family: var(--ti-sans); font-size: 1.25rem; font-weight: 600; font-style: normal; }
html.ti-odoo main .css_quantity > .btn:first-child { border-left: 1px solid var(--ti-line) !important; }
html.ti-odoo main .css_quantity > .btn:last-child { border-right: 1px solid var(--ti-line) !important; }

/* Tunnel en mobile : la barre de récapitulatif collée en bas de l'écran reste pleine (encre). */
html.ti-odoo #wrapwrap main .o_mobile_summary {
  background: var(--ti-ink) !important;
  border-top: 1px solid var(--ti-line);
  padding: 12px 0 16px;
  z-index: 20;
}
/* Fils d'Ariane d'Odoo : le fil du front, posé en tête de page, les remplace. */
html.ti-odoo main #wrap ol.breadcrumb { display: none !important; }
/* Connexion par Odoo.com et son séparateur « - ou - » : sans objet pour un client Titanide. */
html.ti-odoo main .ti-compte form em,
html.ti-odoo main .ti-compte .o_auth_oauth_providers,
html.ti-odoo main .ti-compte .o_login_auth { display: none !important; }
html.ti-odoo main .breadcrumb { display: none !important; }
/* Modes de livraison en mobile : le prix garde toute sa largeur, le nom du transporteur passe à la ligne. */
html.ti-odoo main #o_delivery_methods .text-truncate { overflow: visible !important; text-overflow: clip !important; white-space: nowrap; flex: none; }
/* Retour de paiement : le message d'Odoo posé dans un panneau du front. */
html.ti-odoo main #wrap:has(.o_payment_status_alert, [name="o_payment_status"]) .container > .row,
html.ti-odoo main .o_payment_status_alert { border: 1px solid var(--ti-line); padding: 20px; }

/* Cases et boutons radio : un vrai espace entre la case et son libellé (retour de Jean L). */
html.ti-odoo main .form-check { display: flex; align-items: flex-start; gap: 12px; padding-left: 0; min-height: 1.5rem; }
html.ti-odoo main .form-check > .form-check-input { float: none; margin: 0.15em 0 0; flex: none; }
html.ti-odoo main .form-check.form-switch { padding-left: 0; }
html.ti-odoo main label:has(> .form-check-input) { display: inline-flex !important; align-items: center; gap: 12px; }
html.ti-odoo main label:has(> .form-check-input) > .form-check-input { margin: 0 !important; float: none; flex: none; }
html.ti-odoo main :is(input[type="checkbox"], input[type="radio"]):not(.form-check-input) { margin-right: 12px; accent-color: var(--ti-signal); }
html.ti-odoo main #o_delivery_methods .form-check-input,
html.ti-odoo main .o_payment_form .form-check-input { margin-right: 12px !important; }

/* Gris codés en dur par Odoo (text-300 à text-700, descriptions des moyens de paiement). */
html.ti-odoo #wrapwrap main :is(.text-300, .text-400, .text-500, .text-600, .text-700, .text-800, .o_payment_form small, .o_payment_form .small, .o_payment_form .text-muted, .o_payment_form p, .o_payment_form span:not(.badge)) { color: var(--ti-muted) !important; }
html.ti-odoo #wrapwrap main .o_payment_form label, html.ti-odoo #wrapwrap main .o_payment_form .o_payment_option_label { color: var(--ti-white) !important; }
/* Modes de livraison : Odoo pose le bouton radio en position absolue, par-dessus le nom. */
html.ti-odoo main #o_delivery_methods .form-check-input { position: static !important; margin: 0.2em 0 0 !important; }
html.ti-odoo main #o_delivery_methods .form-check { align-items: flex-start; }
html.ti-odoo main #o_delivery_methods .form-check-label { font-weight: 600; }
html.ti-odoo main #o_delivery_methods li > .text-muted { padding-left: calc(1.25em + 12px); }
/* Prix des modes de livraison : jamais tronqué, même en 375 px. */
html.ti-odoo main #o_delivery_methods .o_wsale_delivery_price_badge { flex: none; white-space: nowrap; overflow: visible !important; text-overflow: clip !important; max-width: none !important; }
/* Moyens de paiement : même correction que la livraison, le bouton radio n'est plus posé par-dessus. */
html.ti-odoo main .o_payment_form .form-check-input.position-absolute,
html.ti-odoo main .o_payment_form input[name="o_payment_radio"] { position: static !important; margin: 0.2em 12px 0 0 !important; flex: none; }

/* ---------------------------------------------------------------------------------------------
   Tunnel d'achat : repères UX (audit du 30/09/2026, voir le bloc « Tunnel d'achat » de odoo-skin.js)
   --------------------------------------------------------------------------------------------- */
html.ti-odoo main .ti-livraison-a-venir { color: var(--ti-muted); font-size: 0.875rem; }
html.ti-odoo main .ti-deja-client,
html.ti-odoo main .ti-cgv,
html.ti-odoo main .ti-attente-verif { margin: 12px 0 0; color: var(--ti-muted); font-size: 0.9375rem; line-height: 1.5; }
html.ti-odoo main .ti-deja-client { text-align: center; }
html.ti-odoo main .ti-deja-client a,
html.ti-odoo main .ti-cgv a { color: var(--ti-white); text-decoration: underline; text-underline-offset: 0.2em; display: inline-block; padding: 6px 0; }
html.ti-odoo main .ti-cgv--bouton { text-align: center; font-size: 0.8125rem; }
html.ti-odoo main .ti-attente-verif:empty { display: none; }
/* Barre collante du panier : mobile et tablette seulement, masquée quand le vrai bouton est à l'écran. */
html.ti-odoo .ti-barre-commande { display: none; }
@media (max-width: 991.98px) {
  html.ti-odoo .ti-barre-commande {
    display: flex; align-items: center; gap: 16px; justify-content: space-between;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
    background: var(--ti-ink); border-top: 1px solid var(--ti-line);
    transition: transform .2s ease;
  }
  html.ti-odoo .ti-barre-commande--cachee { transform: translateY(110%); }
  html.ti-odoo .ti-barre-commande__total { display: flex; flex-direction: column; margin: 0; color: var(--ti-white); font-family: var(--ti-sans); line-height: 1.2; }
  html.ti-odoo .ti-barre-commande__total span { font: 500 0.75rem/1.4 var(--ti-mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--ti-muted); }
  html.ti-odoo .ti-barre-commande__total strong { font-size: 1.25rem; font-weight: 700; }
  html.ti-odoo .ti-barre-commande__bouton { flex: 1 1 auto; max-width: 260px; min-height: 48px; justify-content: center; }
  html.ti-odoo.ti-avec-barre body { padding-bottom: calc(80px + env(safe-area-inset-bottom)); }
}
@media (prefers-reduced-motion: reduce) { html.ti-odoo .ti-barre-commande { transition: none; } }
html.ti-odoo #wrapwrap main .o_payment_form .ti-reseaux { display: block; margin-top: 2px; font-size: 0.8125rem; font-weight: 400; color: var(--ti-muted) !important; }

/* ---------------------------------------------------------------------------------------------
   Vider le panier (30/09/2026) : bouton au trait sous les articles, confirmation en <dialog>.
   Le <dialog> est posé dans <body>, hors de <main> : ses règles ne dépendent pas de « main ».
   --------------------------------------------------------------------------------------------- */
html.ti-odoo .ti-vider__form { margin: 0; }
html.ti-odoo .ti-vider { display: flex; justify-content: flex-end; margin: 0 0 32px; padding-top: 16px; } /* le filet sous la dernière ligne est déjà celui de #cart_products */
html.ti-odoo .ti-vider__bouton,
html.ti-odoo .ti-vider__annuler,
html.ti-odoo .ti-vider__confirmer { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 48px; padding: 12px 18px; font: 600 1rem/1.5 var(--ti-sans); border: 1px solid var(--ti-line); border-radius: 0; background: transparent; color: var(--ti-white); cursor: pointer; box-shadow: none; transition: background-color .15s ease, color .15s ease, border-color .15s ease; }
html.ti-odoo .ti-vider__bouton:hover,
html.ti-odoo .ti-vider__annuler:hover:not(:disabled) { background: var(--ti-white); border-color: var(--ti-white); color: var(--ti-ink); }
html.ti-odoo .ti-vider__confirmer { background: var(--ti-signal); border-color: var(--ti-signal); color: var(--ti-ink); }
html.ti-odoo .ti-vider__confirmer:hover:not(:disabled) { background: var(--ti-white); border-color: var(--ti-white); }
html.ti-odoo .ti-vider__bouton:focus-visible,
html.ti-odoo .ti-vider__annuler:focus-visible,
html.ti-odoo .ti-vider__confirmer:focus-visible { outline: 3px solid var(--ti-signal); outline-offset: 4px; box-shadow: 0 0 0 7px var(--ti-ink); }
html.ti-odoo .ti-vider__annuler:disabled,
html.ti-odoo .ti-vider__confirmer:disabled { opacity: .6; cursor: progress; }
/* Le reset du front remet margin à 0 sur dialog : on recentre explicitement. */
html.ti-odoo .ti-vider__boite { position: fixed; inset: 0; margin: auto; height: fit-content; max-height: calc(100% - 32px); width: min(460px, calc(100% - 32px)); max-width: 100%; padding: 28px 24px 24px; color: var(--ti-white); background: var(--ti-ink); border: 1px solid var(--ti-line); border-radius: 0; font-family: var(--ti-sans); }
html.ti-odoo .ti-vider__boite::backdrop { background: rgb(8 10 9 / .75); }
html.ti-odoo .ti-vider__titre { margin: 0 0 8px; font: 600 1.5rem/1.2 var(--ti-sans); color: var(--ti-white); }
html.ti-odoo .ti-vider__texte { margin: 0; color: var(--ti-white); }
html.ti-odoo .ti-vider__etat { margin: 8px 0 0; min-height: 1.5em; color: var(--ti-muted); font-size: .9375rem; }
html.ti-odoo .ti-vider__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; margin-top: 16px; }
html.ti-odoo body:has(.ti-vider__boite[open]) { overflow: hidden; }
@media (max-width: 480px) {
  html.ti-odoo .ti-vider { justify-content: stretch; }
  html.ti-odoo .ti-vider__form, html.ti-odoo .ti-vider__bouton { width: 100%; }
  html.ti-odoo .ti-vider__actions { flex-direction: column-reverse; }
  html.ti-odoo .ti-vider__actions button { width: 100%; }
}
/* Encart natif « Déjà client ? » au-dessus de l'adresse (.o_address_signin, commande en invité, 30/09) :
   Odoo le pose sur fond clair, texte blanc illisible sous l'habillage. */
html.ti-odoo main .o_address_signin.ti-encart-connexion { display: flex !important; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 16px; margin: 8px 0 16px; padding: 16px 20px !important; border: 1px solid var(--ti-line); background: var(--ti-ink) !important; text-align: left !important; }
html.ti-odoo main .o_address_signin.ti-encart-connexion span { color: var(--ti-white) !important; flex: 1 1 16rem; }
html.ti-odoo main .o_address_signin.ti-encart-connexion .ui-button { min-height: 48px; margin: 0 !important; }
html.ti-odoo main div:has(> .o_address_signin.ti-encart-connexion) { flex-wrap: wrap; align-items: flex-start !important; }
html.ti-odoo main div:has(> .o_address_signin.ti-encart-connexion) > h4 { order: 2; margin-top: 8px; }
html.ti-odoo main .o_address_signin.ti-encart-connexion { order: 1; flex: 1 1 100%; }
