:root {
    --bg: #f4f6f8;
    --card: #ffffff;
    --surface: #ffffff;
    --text: #1f2937;
    --muted: #6b7280;
    --text-muted: #6b7280;
    --border: #e5e7eb;
    --primary: #2563eb;
    --primary-dark: #1d4ed8;
    --danger: #dc2626;
    --available: #16a34a;
    --booked: #dc2626;
    --manual-booking: #7c3aed;
    --pending-validation: #eab308;
    --blocked: #9ca3af;
    --surface-muted: #f3f4f6;
    --control-hover-bg: #f8fafc;
    --control-hover-border: #94a3b8;
    --shadow: rgba(15, 23, 42, 0.12);
    --topbar-brand: #0f172a;
}

html[data-theme="dark"] {
    color-scheme: dark;
    --bg: #151a17;
    --card: #1e2621;
    --surface: #1e2621;
    --surface-elevated: #243029;
    --text: #f0f3f1;
    --muted: #c5cec7;
    --text-muted: #c5cec7;
    --border: #4a554e;
    --primary: #a3b9a1;
    --primary-dark: #8da28b;
    --danger: #f08a8a;
    --available: #7ec489;
    --booked: #e07a7a;
    --manual-booking: #b0a3d4;
    --pending-validation: #e0c65a;
    --blocked: #8b9390;
    --surface-muted: #2a332e;
    --control-hover-bg: #313b35;
    --control-hover-border: #6f8174;
    --shadow: rgba(0, 0, 0, 0.45);
    --topbar-brand: #f0f3f1;
    --input-bg: #151a17;
    --input-text: #f0f3f1;
}

* {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: "Segoe UI", Tahoma, sans-serif;
    background: var(--bg);
    color: var(--text);
}

h1, h2 {
    margin: 0 0 0.5rem;
}

p {
    margin: 0;
    color: var(--muted);
}

a {
    color: var(--primary);
    text-decoration: none;
}

.topbar {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.75rem;
    padding: 1.5rem 2rem;
    padding-left: max(1.5rem, env(safe-area-inset-left, 0px));
    padding-right: max(1.5rem, env(safe-area-inset-right, 0px));
    background: var(--card);
    border-bottom: 1px solid var(--border);
}

.topbar-actions {
    display: flex;
    flex-flow: row wrap;
    gap: 0.65rem 1rem;
    align-items: center;
    justify-content: flex-end;
    flex-shrink: 0;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

.topbar-actions > .link-muted {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-height: 2.25rem;
    padding: 0.35rem 0.15rem;
    line-height: 1.25;
    text-align: center;
    -webkit-tap-highlight-color: transparent;
}

.logout-form {
    margin: 0;
}

.logout-form button {
    display: inline;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    width: 100%;
}

.lang-dropdown {
    position: relative;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
}

.lang-dropdown-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    min-height: 2.25rem;
    padding: 0.35rem 0.6rem;
    border: 1px solid var(--border);
    border-radius: 0.375rem;
    background: var(--card);
    color: var(--text);
    font: inherit;
    font-size: 0.875rem;
    cursor: pointer;
    line-height: 1.2;
    -webkit-appearance: none;
    appearance: none;
    -webkit-tap-highlight-color: transparent;
}

.lang-dropdown-toggle:hover,
.lang-dropdown.is-open .lang-dropdown-toggle {
    border-color: var(--control-hover-border);
    background: var(--control-hover-bg);
}

/* Night/day control: fixed square everywhere (admin + client topbars, login). */
.topbar-nav-end {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.65rem;
    flex-shrink: 0;
    margin-left: auto;
}

button.night-mode-toggle,
.night-mode-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    min-width: 2.25rem;
    max-width: 2.25rem;
    min-height: 2.25rem;
    max-height: 2.25rem;
    padding: 0;
    border: 1px solid var(--border);
    border-radius: 0.375rem;
    background: var(--surface-muted);
    color: var(--text);
    cursor: pointer;
    flex: 0 0 2.25rem;
    flex-shrink: 0;
    line-height: 0;
    box-sizing: border-box;
    font-size: 1rem;
    -webkit-appearance: none;
    appearance: none;
    -webkit-tap-highlight-color: transparent;
    visibility: visible;
    opacity: 1;
}

.topbar-actions > .topbar-nav-end > button.night-mode-toggle,
.topbar-actions > .topbar-nav-end > .night-mode-toggle,
.auth-theme-bar > button.night-mode-toggle,
.auth-theme-bar > .night-mode-toggle {
    width: 2.25rem;
    height: 2.25rem;
    min-width: 2.25rem;
    max-width: 2.25rem;
    min-height: 2.25rem;
    max-height: 2.25rem;
    flex: 0 0 2.25rem;
}

button.night-mode-toggle:hover,
.night-mode-toggle:hover {
    border-color: var(--control-hover-border);
    background: var(--control-hover-bg);
    color: var(--text);
}

button.night-mode-toggle:focus-visible,
.night-mode-toggle:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.night-mode-icon {
    display: none;
}

.night-mode-toggle .night-mode-icon--moon {
    display: inline-flex;
}

.night-mode-toggle[aria-pressed="true"] .night-mode-icon--moon {
    display: none;
}

.night-mode-toggle[aria-pressed="true"] .night-mode-icon--sun {
    display: inline-flex;
}

.night-mode-icon svg {
    display: block;
}

.auth-theme-bar {
    position: fixed;
    top: 0.85rem;
    right: 0.85rem;
    z-index: 20;
    display: flex;
    gap: 0.5rem;
    align-items: center;
}

.lang-flag {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    line-height: 0;
}

.lang-flag img {
    display: block;
    width: 22px;
    height: auto;
    border-radius: 2px;
    box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.1);
    object-fit: cover;
    aspect-ratio: 3 / 2;
}

.lang-label {
    font-weight: 600;
    font-size: 0.875rem;
}

.lang-chevron {
    width: 0;
    height: 0;
    margin-left: 0.1rem;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 5px solid var(--muted);
}

.lang-dropdown-menu {
    position: absolute;
    top: calc(100% + 0.35rem);
    right: 0;
    z-index: 50;
    min-width: 10rem;
    margin: 0;
    padding: 0.35rem;
    list-style: none;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 0.5rem;
    box-shadow: 0 8px 24px var(--shadow);
}

.lang-dropdown-item {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.45rem 0.6rem;
    border-radius: 0.35rem;
    color: var(--text);
    text-decoration: none;
    font-size: 0.9rem;
}

.lang-dropdown-item:hover {
    background: var(--surface-muted);
}

.lang-dropdown-item.is-active {
    background: var(--surface-muted);
    font-weight: 600;
}

.topbar-title-row {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.125rem;
    margin-bottom: 0.5rem;
}

.topbar-title-row h1 {
    margin: 0;
    font-size: 1.15rem;
    font-weight: 600;
    color: var(--text);
}

.topbar-brand {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--topbar-brand);
    letter-spacing: 0.01em;
    line-height: 1.2;
}

.container {
    max-width: 1100px;
    margin: 0 auto;
    padding: 1.5rem;
}

.container:has(#calendar) {
    max-width: min(100%, 1440px);
}

/* Journaux + Paramètres techniques : plus large pour les tableaux / formulaires */
body.admin-wide-page .container {
    max-width: min(100%, 1680px);
}

.wizard-steps {
    display: flex;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-bottom: 1.25rem;
}

.wizard-step {
    padding: 0.5rem 0.9rem;
    border-radius: 999px;
    background: var(--card);
    border: 1px solid var(--border);
    color: var(--muted);
    font: inherit;
    font-size: 0.95rem;
    cursor: default;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.wizard-step.is-active {
    background: var(--primary);
    border-color: var(--primary);
    color: #fff;
    font-weight: 600;
}

.wizard-step.is-done {
    border-color: #86efac;
    color: #166534;
    background: #f0fdf4;
}

.wizard-step.is-clickable {
    cursor: pointer;
}

.wizard-step.is-clickable:hover {
    border-color: #4ade80;
    background: #dcfce7;
    color: #14532d;
}

.wizard-step.is-future,
.wizard-step:disabled {
    cursor: not-allowed;
    opacity: 0.55;
}

.wizard-step.is-active:disabled {
    opacity: 1;
    cursor: default;
}

.wizard-actions {
    display: flex;
    justify-content: flex-end;
    gap: 0.75rem;
    margin-top: 1.25rem;
    flex-wrap: wrap;
}

.wizard-panel {
    margin-bottom: 1.25rem;
}

.details-form {
    display: grid;
    gap: 1rem;
}

.identify-method-fieldset {
    border: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.identify-method-fieldset legend {
    font-weight: 600;
    color: var(--text);
    padding: 0;
}

.identify-method-options {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
}

.identify-method-options label {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--text);
    cursor: pointer;
}

.identify-method-options input[type="radio"] {
    margin: 0;
}

.identify-booking-choices {
    margin-top: 1.25rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.identify-booking-choices[hidden] {
    display: none !important;
}

.identify-booking-choices h3 {
    margin: 0;
    font-size: 1.05rem;
}

.identify-booking-choices-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.identify-booking-choice {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--surface, #fff);
}

.identify-booking-choice-title,
.identify-booking-choice-slot {
    margin: 0;
}

.identify-booking-choice-title {
    font-weight: 600;
}

.identify-booking-choice-slot {
    color: var(--muted, #64748b);
    font-size: 0.95rem;
}

.identify-booking-choice-btn {
    align-self: flex-start;
    margin-top: 0.25rem;
}

.captcha-field {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.captcha-field[hidden] {
    display: none !important;
}

.captcha-field-label {
    font-size: 0.95rem;
    font-weight: 500;
}

.captcha-row {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.captcha-display {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 7rem;
    min-height: 2.75rem;
    padding: 0.35rem 0.5rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #f8fafc;
    text-align: center;
    line-height: 1.2;
    user-select: none;
    overflow: hidden;
}

.captcha-display .captcha-image {
    display: block;
    max-width: 100%;
    height: auto;
    border-radius: 4px;
}

.btn-captcha-refresh {
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #e5e7eb;
    /* Always dark on the light grey control (do not follow --text / theme ink). */
    color: #1f2937;
    padding: 0.55rem 0.75rem;
    font: inherit;
    line-height: 1;
    cursor: pointer;
}

.btn-captcha-refresh:hover {
    background: #d1d5db;
    color: #111827;
}

.captcha-input-label {
    margin-top: 0.25rem;
}

.captcha-input-label input {
    max-width: 8rem;
    letter-spacing: 0.2em;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    text-transform: uppercase;
}

.booking-recap p {
    margin: 0.25rem 0;
    color: var(--text);
}

.slot-selection-label {
    font-weight: 600;
    color: var(--primary);
}

.summary-bar {
    margin-bottom: 1rem;
}

.step-title {
    margin: 1rem 0 0.75rem;
}

.massage-choices {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem;
    margin-top: 1rem;
}

.massage-card {
    border: 2px solid var(--border);
    border-radius: 12px;
    background: var(--card);
    color: var(--text);
    padding: 1.25rem;
    text-align: left;
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.massage-card:hover,
.massage-card.is-selected {
    border-color: var(--primary);
    box-shadow: 0 8px 24px rgba(37, 99, 235, 0.12);
}

.massage-card-title {
    display: block;
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--text);
}

.massage-card-desc {
    display: block;
    margin-top: 0.5rem;
    color: var(--muted);
    font-size: 0.95rem;
    line-height: 1.45;
}

.location-info-list,
.contact-location-list,
.seo-faq-location-list,
.ics-preview-card__location-list {
    margin: 0.35rem 0 0;
    padding-left: 1.15rem;
    list-style: disc;
    line-height: 1.45;
}

.location-info-list {
    color: var(--muted);
    font-size: 0.95rem;
}

.contact-location-list {
    color: var(--text);
}

.contact-location-list a {
    color: var(--primary);
    font-weight: 600;
    text-decoration: none;
}

.contact-location-list a:hover {
    color: var(--primary-dark);
    text-decoration: underline;
}

.ics-preview-card__location-list {
    font-size: 0.875rem;
    color: #334155;
}

.selected-massage-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 1rem;
}

.selected-massage-bar strong {
    color: var(--text);
}

#selected-massage-label {
    color: var(--primary);
    font-weight: 600;
}

.contact-form-banner {
    margin: 1rem 0 0;
    padding: 0.85rem 1rem;
    border-radius: 8px;
    border: 1px solid transparent;
    font-weight: 600;
    line-height: 1.45;
}

.contact-form-banner[hidden] {
    display: none !important;
}

.contact-form-banner--success {
    background: #e8f5e9;
    color: #14532d;
    border-color: #86efac;
}

.contact-form-banner--error {
    background: #fef2f2;
    color: #7f1d1d;
    border-color: #fca5a5;
}

html[data-theme="dark"] .contact-form-banner--success {
    background: #14261c;
    color: #bbf7d0;
    border-color: #3f7a55;
}

html[data-theme="dark"] .contact-form-banner--error {
    background: #2a1c1c;
    color: #fecaca;
    border-color: #7a3a3a;
}

.contact-form-block {
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--border, #e5e7eb);
}

.contact-form-heading {
    margin: 0 0 0.35rem;
    font-size: 1.2rem;
}

.contact-form-intro {
    margin: 0 0 1rem;
    color: var(--muted, #4b5563);
    line-height: 1.45;
}

.contact-form {
    display: grid;
    gap: 0.85rem;
    max-width: 28rem;
}

.contact-form label {
    display: grid;
    gap: 0.35rem;
    font-weight: 600;
}

.contact-form input[type="text"],
.contact-form input[type="email"],
.contact-form input[type="tel"],
.contact-form select,
.contact-form textarea {
    width: 100%;
    box-sizing: border-box;
    font-weight: normal;
}

html[data-theme="dark"] .contact-form input[type="text"],
html[data-theme="dark"] .contact-form input[type="email"],
html[data-theme="dark"] .contact-form input[type="tel"],
html[data-theme="dark"] .contact-form select,
html[data-theme="dark"] .contact-form textarea {
    font-weight: normal;
}

.contact-form .field-hint {
    font-weight: 400;
}

.contact-message-counter {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.contact-form-actions {
    margin-top: 0.25rem;
}

html[data-theme="dark"] .contact-form-block {
    border-top-color: #374151;
}

html[data-theme="dark"] .contact-form-intro {
    color: #d1d5db;
}

.contact-phone {
    margin: 1.25rem 0;
}

.contact-phone a {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--primary);
    text-decoration: none;
}

.contact-phone a:hover {
    color: var(--primary-dark);
    text-decoration: underline;
}

.contact-local {
    margin-top: 0.75rem;
    line-height: 1.5;
}

.contact-address {
    margin: 1rem 0;
    line-height: 1.5;
}

.contact-address-label {
    display: block;
    font-weight: 600;
    color: var(--text);
    margin-bottom: 0.25rem;
}

.contact-address a {
    color: var(--primary);
    font-weight: 600;
    text-decoration: none;
}

.contact-address a:hover {
    color: var(--primary-dark);
    text-decoration: underline;
}

.contact-transport {
    margin-top: 0.5rem;
    line-height: 1.5;
}

.seo-intro {
    margin-bottom: 1rem;
    padding: 0.75rem 1rem;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    font-size: 0.9rem;
}

.seo-intro h2 {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
    font-weight: 500;
    color: var(--text);
    line-height: 1.35;
}

.seo-intro p {
    margin: 0;
    line-height: 1.55;
    font-size: 0.875rem;
    color: var(--muted);
}

.seo-faq {
    margin-top: 0.5rem;
}

.seo-faq h2 {
    font-size: 1.1rem;
    color: var(--text);
}

.seo-faq-list {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.seo-faq-item {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 0.65rem 0.85rem;
    background: var(--card);
    color: var(--text);
}

.seo-faq-item summary {
    cursor: pointer;
    font-weight: 500;
    color: var(--text);
}

.seo-faq-item p {
    margin-top: 0.5rem;
    font-size: 0.875rem;
    line-height: 1.5;
}

.seo-faq-directions {
    margin-top: 0.5rem;
}

.seo-faq-location-block + .seo-faq-location-block,
.seo-faq-transport-section + .seo-faq-transport-section,
.seo-faq-parking-section + .seo-faq-parking-section {
    margin-top: 1rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

.seo-faq-location-subheading {
    margin: 0 0 0.35rem;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--text);
}

.seo-faq-transport,
.contact-transport {
    color: var(--muted);
    font-size: 0.8125rem;
}

.seo-faq-transport {
    margin-top: 0.5rem;
}

.seo-faq-transport-label {
    display: block;
    margin-bottom: 0.25rem;
}

.seo-faq-transport-list {
    margin: 0;
    padding-left: 1.25rem;
    list-style: disc;
}

.seo-faq-transport-list li {
    line-height: 1.5;
}

.seo-faq-massage-list {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
    list-style: disc;
    font-size: 0.875rem;
    line-height: 1.5;
}

.seo-faq-massage-list li {
    line-height: 1.5;
}

.seo-faq-intro {
    white-space: pre-line;
}

.seo-faq-parking-list {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
    list-style: disc;
    font-size: 0.875rem;
    line-height: 1.5;
}

.seo-faq-parking-list li {
    margin-bottom: 0.35rem;
}

.seo-faq-parking-note {
    color: var(--muted);
    font-size: 0.8125rem;
}

.seo-faq-parking-badges {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    margin-left: 0.35rem;
}

.seo-faq-parking-badge {
    display: inline-block;
    padding: 0.1rem 0.45rem;
    border-radius: 999px;
    background: var(--surface-muted, #f3f4f6);
    border: 1px solid var(--border);
    color: var(--muted);
    font-size: 0.75rem;
    line-height: 1.4;
    white-space: nowrap;
}

.seo-faq-item .seo-faq-map {
    margin-top: 0.75rem;
}

.seo-faq-map {
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
    max-width: 100%;
    background: var(--surface-muted);
}

.seo-faq-map iframe {
    display: block;
    width: 100%;
    aspect-ratio: 16 / 9;
    border: 0;
}

.site-footer {
    padding: 1.25rem 2rem 2rem;
    text-align: center;
    border-top: 1px solid var(--border);
    background: var(--card);
}

.site-footer p {
    font-size: 0.8rem;
    line-height: 1.45;
    color: var(--muted);
}

.panel {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1.25rem;
    margin-bottom: 1.25rem;
}

.legend {
    display: flex;
    gap: 0.75rem;
    margin-bottom: 1rem;
    flex-wrap: wrap;
}

.badge {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.35rem 0.7rem;
    border-radius: 999px;
    font-size: 0.9rem;
    background: var(--card, #fff);
    color: var(--text);
    border: 1px solid var(--border);
}

.badge::before {
    content: "";
    width: 10px;
    height: 10px;
    border-radius: 50%;
}

.badge.available::before { background: var(--available); }
.badge.booked::before { background: var(--booked); }
.badge.blocked::before { background: var(--blocked); }
.badge.manual::before { background: var(--manual-booking); }
.badge.pending::before { background: var(--pending-validation); }
.badge.private-calendar-blocked::before {
    background: var(--blocked);
    box-shadow: inset 0 0 0 2px rgba(180, 83, 9, 0.85);
}
.badge.private-calendar-override::before {
    background: var(--available);
    outline: 2px dashed rgba(180, 83, 9, 0.9);
    outline-offset: 0;
}
.badge.day-work-block::before {
    background: var(--blocked);
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}
.badge.night-work-block::before {
    background: var(--blocked);
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}
.badge.night-work-manual::before {
    background: var(--available);
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
}

/* Client booking legend: green + small orange top-right dot (not ring). */
#step-slot .badge.night-work-manual,
#client-slot-legend .badge.night-work-manual {
    position: relative;
}
#step-slot .badge.night-work-manual::before,
#client-slot-legend .badge.night-work-manual::before {
    background: var(--available);
    box-shadow: none;
}
#step-slot .badge.night-work-manual::after,
#client-slot-legend .badge.night-work-manual::after {
    content: "";
    position: absolute;
    top: 0.05rem;
    right: 0.05rem;
    width: 0.4rem;
    height: 0.4rem;
    border-radius: 50%;
    background: rgba(251, 146, 60, 0.95);
    box-shadow: 0 0 0 1px rgba(194, 65, 12, 0.45);
    pointer-events: none;
}
.badge.night-work-none::before {
    background: var(--blocked);
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}
.badge.weekly-weekday {
    position: relative;
    cursor: help;
}
/* Legend: solid orange pastille (calendar slots use orange ring + slot fill). */
.badge.weekly-weekday::before {
    background: rgba(251, 146, 60, 0.95);
    box-shadow: 0 0 0 1px rgba(194, 65, 12, 0.45);
}
.badge.weekly-weekday.is-tooltip-open::after {
    content: attr(data-tooltip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 0.35rem);
    transform: translateX(-50%);
    z-index: 5;
    min-width: 10rem;
    max-width: 16rem;
    padding: 0.35rem 0.55rem;
    border-radius: 6px;
    background: #111827;
    color: #fff;
    font-size: 0.75rem;
    font-weight: 500;
    line-height: 1.35;
    text-align: center;
    white-space: normal;
    pointer-events: none;
}

.calendar-color-legend {
    margin-top: 0.85rem;
}

/* Admin Gestion Massage — hero preview with live overlay */
.site-image-hero-preview {
    --admin-hero-overlay: 0.40;
    position: relative;
    max-width: min(100%, 420px);
    border-radius: 8px;
    overflow: hidden;
    background: #f3f4f6;
}

.site-image-hero-preview__overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background: linear-gradient(
        to bottom,
        rgba(47, 58, 50, calc(var(--admin-hero-overlay) * 0.45)) 0%,
        rgba(47, 58, 50, var(--admin-hero-overlay)) 100%
    );
}

/* Admin — CSP-safe layout utilities (replace inline style attributes) */
.admin-mt-xs { margin-top: 0.15rem; }
.admin-mt-sm { margin-top: 0.35rem; }
.admin-mt-md { margin-top: 0.75rem; }
.admin-mt-lg { margin-top: 1rem; }
.admin-mt-xl { margin-top: 1.25rem; }
.admin-mb-sm { margin-bottom: 0.35rem; }
.admin-mb-md { margin-bottom: 0.75rem; }
.admin-m-0 { margin: 0; }
.admin-my-md { margin: 0.75rem 0; }
.admin-fieldset-block { margin: 1rem 0; }
.admin-indent { margin-left: 1rem; }
.admin-subheading-sm { font-size: 1.05rem; }
.settings-actions--wrap { flex-wrap: wrap; gap: 0.5rem; }
.settings-actions--wrap-mb { flex-wrap: wrap; gap: 0.5rem; margin-bottom: 0.75rem; }
.settings-actions--mb { margin-bottom: 1rem; }
.settings-full--block { display: block; }
.admin-flex-row { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; margin-top: 0.35rem; }
.admin-flex-grow-input { flex: 1; min-width: 12rem; }
.btn-secondary--file-label { cursor: pointer; display: inline-flex; align-items: center; }
.logs-retention-archives-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; }

.js-site-image-card { margin-top: 1rem; }
.js-site-image-card + .js-site-image-card {
    margin-top: 1.25rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border-color, #e5e7eb);
}

.site-image-preview--hero {
    max-width: min(100%, 420px);
    max-height: 180px;
    width: 100%;
    height: auto;
    object-fit: cover;
    display: block;
    background: #f3f4f6;
}

.site-image-preview--og {
    max-width: min(100%, 420px);
    max-height: 220px;
    width: 100%;
    aspect-ratio: 1200 / 630;
    object-fit: cover;
    border-radius: 8px;
    display: block;
    background: #f3f4f6;
}

.site-image-preview--favicon {
    width: 64px;
    height: 64px;
    object-fit: contain;
    border-radius: 12px;
    display: block;
    background: #f3f4f6;
    padding: 6px;
}

/* Admin Gestion Massage — site image library */
.site-image-library__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 0.75rem;
}

.site-image-library__item {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    padding: 0.4rem;
    border: 2px solid var(--border-color, #e5e7eb);
    border-radius: 8px;
    background: #fafafa;
    cursor: pointer;
    outline: none;
}

.site-image-library__item:hover,
.site-image-library__item:focus-visible {
    border-color: var(--accent, #4a6354);
}

.site-image-library__item.is-selected {
    border-color: var(--accent, #4a6354);
    box-shadow: 0 0 0 1px var(--accent, #4a6354);
    background: #f3f6f4;
}

.site-image-library__item img {
    width: 100%;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: 4px;
    background: #f3f4f6;
    display: block;
}

.site-image-library__name {
    font-size: 0.75rem;
    line-height: 1.2;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--text-muted, #6b7280);
}

.site-image-library__badge {
    position: absolute;
    top: 0.55rem;
    left: 0.55rem;
    font-size: 0.65rem;
    font-weight: 600;
    padding: 0.1rem 0.35rem;
    border-radius: 4px;
    background: rgba(47, 58, 50, 0.85);
    color: #fff;
}

.site-image-library__delete {
    font-size: 0.75rem;
    padding: 0.25rem 0.4rem;
}

.full-health-check-bar {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-bottom: 0.35rem;
}

.full-health-check-last-run {
    margin: 0 0 1rem 0;
    font-size: 0.88rem;
}

.full-health-check-last-run--ok {
    color: var(--muted);
}

.full-health-check-last-run--nok {
    color: #b45309;
}

.full-health-check-last-run--never {
    color: var(--muted);
    font-style: italic;
}

.admin-health-section {
    margin-bottom: 0;
    border-left: 4px solid #1d4ed8;
    border-radius: 12px;
}

.admin-health-section-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    margin-left: auto;
    padding: 0.35rem 0.5rem;
    border: none;
    border-radius: 8px;
    background: transparent;
    color: var(--muted);
    font: inherit;
    font-size: 0.92rem;
    cursor: pointer;
    user-select: none;
}

.admin-health-section-toggle:hover,
.admin-health-section-toggle:focus-visible {
    color: var(--text);
    background: rgba(0, 0, 0, 0.04);
    outline: none;
}

.admin-health-banners > .full-health-check-panel {
    margin-bottom: 1rem;
}

.admin-health-banners > .full-health-check-panel[hidden] {
    display: none;
}

.admin-health-banners > .booking-issues-banner:first-of-type,
.admin-health-banners > .caldav-health-banner:first-of-type,
.admin-health-banners > .webdav-health-banner:first-of-type,
.admin-health-banners > .pdf-health-banner:first-of-type,
.admin-health-banners > .smtp-health-banner:first-of-type {
    margin-top: 0;
}

.admin-health-banners[hidden] {
    display: none;
}

.admin-health-banners:not([hidden]) > :last-child {
    margin-bottom: 1rem;
}

.admin-refresh-bar {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-bottom: 1rem;
    padding: 0.65rem 0.85rem;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--card);
}

.admin-simple-view-label {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0;
    font-size: 0.92rem;
    color: var(--text);
    cursor: pointer;
    user-select: none;
}

.admin-simple-view-label input {
    margin: 0;
}

.admin-sync-all-message {
    flex: 1 1 100%;
    margin: 0;
}

.admin-sync-all-steps {
    flex: 1 1 100%;
    list-style: none;
    margin: 0;
    padding: 0.35rem 0 0;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.admin-sync-all-step {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    margin: 0;
    padding: 0.4rem 0.55rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
    font-size: 0.9rem;
    line-height: 1.35;
}

.admin-sync-all-step-indicator {
    flex-shrink: 0;
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.1rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.85rem;
}

.admin-sync-all-step-body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.25rem 0.55rem;
}

.admin-sync-all-step-label {
    font-weight: 600;
    color: var(--text);
}

.admin-sync-all-step-status {
    color: var(--muted, #6b7280);
    font-size: 0.85rem;
}

.admin-sync-all-step-detail {
    flex: 1 1 100%;
    color: var(--muted, #6b7280);
    font-size: 0.85rem;
    word-break: break-word;
}

.admin-sync-all-step[data-status="pending"] .admin-sync-all-step-indicator::before {
    content: '○';
    color: var(--muted, #6b7280);
}

.admin-sync-all-step[data-status="running"] .admin-sync-all-step-status {
    color: var(--text);
}

.admin-sync-all-step[data-status="success"] {
    border-color: rgba(22, 163, 74, 0.35);
    background: rgba(22, 163, 74, 0.08);
}

.admin-sync-all-step[data-status="success"] .admin-sync-all-step-indicator::before {
    content: '✓';
    color: #15803d;
}

.admin-sync-all-step[data-status="success"] .admin-sync-all-step-status {
    color: #15803d;
}

.admin-sync-all-step[data-status="error"] {
    border-color: rgba(220, 38, 38, 0.35);
    background: rgba(220, 38, 38, 0.08);
}

.admin-sync-all-step[data-status="error"] .admin-sync-all-step-indicator::before {
    content: '✕';
    color: #b91c1c;
}

.admin-sync-all-step[data-status="error"] .admin-sync-all-step-status,
.admin-sync-all-step[data-status="error"] .admin-sync-all-step-detail {
    color: #b91c1c;
}

.admin-collapsible-controls {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-left: auto;
}

/* Simplified masseuse admin: keep health, upcoming, billing, slots, selection
   actions, history (collapsed). Nested schedule settings stay hidden. */
html.masseuse-admin-simple main.container {
    display: flex;
    flex-direction: column;
}

html.masseuse-admin-simple #admin-health-section { order: 1; }
html.masseuse-admin-simple #admin-refresh-bar { order: 2; }
html.masseuse-admin-simple #upcoming-bookings-panel { order: 3; }
html.masseuse-admin-simple #payment-tracking-panel { order: 4; }
html.masseuse-admin-simple #calendar-slots-panel,
html.masseuse-admin-simple [id^="admin-location-panel-"] { order: 5; }
html.masseuse-admin-simple #selection-actions-panel { order: 6; }
html.masseuse-admin-simple #bookings-panel { order: 7; }
html.masseuse-admin-simple #admin-message { order: 8; }

html.masseuse-admin-simple #maintenance-bar,
html.masseuse-admin-simple #availability-mode-panel,
html.masseuse-admin-simple #booking-validation-panel,
html.masseuse-admin-simple #generate-slots-panel,
html.masseuse-admin-simple #reminder-settings-panel,
html.masseuse-admin-simple #backup-admin-settings-panel,
html.masseuse-admin-simple #archive-settings-panel,
html.masseuse-admin-simple #multisite-settings-panel,
html.masseuse-admin-simple #admin-caldav-actions-panel,
html.masseuse-admin-simple #caldav-bookings-scheduling-settings-panel,
html.masseuse-admin-simple #caldav-private-scheduling-settings-panel,
html.masseuse-admin-simple #quick-reserve-admin-controls,
html.masseuse-admin-simple #weekly-weekday-admin-controls,
html.masseuse-admin-simple #day-work-admin-controls,
html.masseuse-admin-simple #night-work-admin-controls,
html.masseuse-admin-simple #bookings-export-controls,
html.masseuse-admin-simple #reservations-archives-block,
html.masseuse-admin-simple #payment-csv-export-archives,
html.masseuse-admin-simple #payment-export-controls,
html.masseuse-admin-simple #billing-archives-block,
html.masseuse-admin-simple #payment-receipts-export-btn,
html.masseuse-admin-simple #bookings-panel .panel-header-actions,
html.masseuse-admin-simple .booking-archive-meta-col,
html.masseuse-admin-simple .booking-sync-meta-col,
html.masseuse-admin-simple .export-period-block,
html.masseuse-admin-simple .csv-archives-block,
html.masseuse-admin-simple .location-upcoming-panel,
html.masseuse-admin-simple .location-settings-panel,
html.masseuse-admin-simple .location-bookings-panel,
html.masseuse-admin-simple [id^="admin-location-panel-"] > details.admin-settings-details {
    display: none !important;
}

/* Keep location calendars usable in simplified multi-site mode. */
html.masseuse-admin-simple details[id^="admin-location-panel-"] > summary {
    cursor: pointer;
}

html.masseuse-admin-simple .location-calendar-panel {
    display: block !important;
}

.admin-auto-refresh-label {
    font-size: 0.92rem;
    color: var(--muted, #6b7280);
    margin: 0;
}

.admin-auto-refresh-select {
    font: inherit;
    font-size: 0.92rem;
    padding: 0.35rem 0.5rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    color: var(--text);
}

.admin-refresh-bar .btn-small.is-loading {
    min-width: 7rem;
}

.section-refresh-btn {
    min-width: 2.25rem;
    padding: 0.35rem 0.5rem;
    line-height: 1;
    font-size: 1.1rem;
}

.section-refresh-btn.is-loading {
    min-width: 2.25rem;
}

.section-refresh-btn.is-loading .loading-label {
    display: none;
}

.section-refresh-btn.is-loading .loading-spinner {
    margin-right: 0;
}

#calendar-slots-panel #calendar,
.location-calendar-panel [id^="calendar-"] {
    margin-top: 0;
    margin-bottom: 0;
    border: none;
    padding: 0;
    background: transparent;
    border-radius: 0;
}

.maintenance-bar {
    margin-bottom: 1rem;
    padding: 0.9rem 1rem;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: var(--surface-muted);
    color: var(--text);
}

.maintenance-bar--active {
    background: #fff8f0;
    border-color: #f0c987;
}

.maintenance-bar-main {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.maintenance-bar-status {
    font-size: 0.92rem;
    font-weight: 600;
    color: #374151;
}

.maintenance-bar--active .maintenance-bar-status {
    color: #9a3412;
}

.maintenance-bar-feedback {
    font-size: 0.9rem;
    font-weight: 600;
    color: #17653a;
}

.maintenance-bar-feedback.is-error {
    color: #8f1f1f;
}

.maintenance-bar-details {
    margin-top: 0.75rem;
}

.maintenance-bar-details summary {
    cursor: pointer;
    color: #4b5563;
    font-size: 0.9rem;
}

.maintenance-bar-messages {
    display: grid;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.maintenance-bar-messages textarea {
    width: 100%;
    min-height: 4.5rem;
    resize: vertical;
}

.availability-mode-panel h2,
.booking-validation-panel h2 {
    margin-top: 0;
}

.availability-mode-status {
    margin: 0 0 0.75rem;
    color: var(--text-muted, #5a6472);
}

.availability-mode-options {
    border: 0;
    margin: 0;
    padding: 0;
    display: grid;
    gap: 0.75rem;
}

.availability-mode-option {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 0.65rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--border-color, #d8dee6);
    border-radius: 0.5rem;
    cursor: pointer;
}

.booking-validation-panel .availability-mode-option,
.availability-mode-panel .availability-mode-option {
    flex-direction: row;
    align-items: flex-start;
    justify-content: flex-start;
}

.availability-mode-option-stack {
    display: grid;
    gap: 0.5rem;
}

.availability-mode-option-stack--with-rules .booking-validation-conditional-rules {
    margin-top: 0;
}

.booking-validation-conditional-rules {
    display: grid;
    gap: 0.65rem;
    margin-left: 0.35rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--border, #d8dee6);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
    color: var(--text);
}

.booking-validation-evening-rule {
    display: grid;
    gap: 0.55rem;
}

.booking-validation-check-row {
    display: flex;
    align-items: flex-start;
    gap: 0.55rem;
    margin: 0;
    color: var(--text);
    cursor: pointer;
}

.booking-validation-check-row span {
    color: var(--text);
    line-height: 1.35;
}

.booking-validation-evening-times {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.45rem;
}

.booking-validation-rule-hint {
    display: block;
    font-size: 0.85rem;
    color: var(--muted);
    line-height: 1.4;
}

.availability-mode-option input[type="radio"] {
    margin: 0.15rem 0 0;
    flex-shrink: 0;
}

.availability-mode-option:has(input:checked) {
    border-color: var(--primary, #2f6f4e);
    background: rgba(47, 111, 78, 0.06);
}

.availability-mode-option-text {
    display: grid;
    gap: 0.25rem;
}

.availability-mode-option-text span {
    color: var(--text-muted, #5a6472);
    font-size: 0.95rem;
}

.maintenance-panel {
    max-width: 42rem;
    margin-top: 1rem;
}

.maintenance-panel h2 {
    margin-top: 0;
}

.maintenance-message {
    font-size: 1.05rem;
    line-height: 1.6;
}

.maintenance-hint {
    color: #6b7280;
    font-size: 0.95rem;
}

.full-health-check-status {
    font-size: 0.9rem;
    font-weight: 600;
}

.full-health-check-status--pending {
    color: #6b7280;
}

.full-health-check-status--ok {
    color: #17653a;
}

.full-health-check-status--fail,
.full-health-check-status--nok {
    color: #8f1f1f;
}

.full-health-check-panel {
    margin-bottom: 1rem;
    padding: 1rem 1.1rem;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: var(--surface-muted);
    color: var(--text);
}

.security-verify-whitelist {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 1rem;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: var(--surface-muted);
    color: var(--text);
}

.security-verify-whitelist-list {
    margin: 0.45rem 0 0;
    padding-left: 1.15rem;
}

.security-verify-whitelist-list:empty {
    display: none;
}

.security-verify-whitelist-item {
    margin: 0.35rem 0;
}

.security-verify-whitelist-item .btn-small {
    margin-left: 0.4rem;
}

.full-health-check-panel--ok {
    background: #f4fbf7;
    border-color: #b7e3c6;
}

.full-health-check-panel--nok {
    background: #fff5f5;
    border-color: #f5c2c2;
}

.full-health-check-panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.full-health-check-overall {
    font-weight: 700;
    font-size: 0.95rem;
}

.full-health-check-overall--ok {
    color: #17653a;
}

.full-health-check-overall--nok {
    color: #8f1f1f;
}

.full-health-check-run-at {
    margin: 0 0 0.75rem;
    color: #6b7280;
    font-size: 0.88rem;
}

.full-health-check-section {
    margin-top: 0.85rem;
    padding-top: 0.75rem;
    border-top: 1px solid rgba(0, 0, 0, 0.08);
}

.full-health-check-section:first-child {
    margin-top: 0;
    padding-top: 0;
    border-top: none;
}

.full-health-check-section-title {
    margin: 0 0 0.35rem;
    font-size: 0.95rem;
}

.full-health-check-section > summary.full-health-check-section-title {
    margin: 0;
    cursor: pointer;
    list-style: none;
}

.full-health-check-section > summary.full-health-check-section-title::-webkit-details-marker {
    display: none;
}

.full-health-check-section-body {
    padding-top: 0.35rem;
}

.full-health-check-section--ok .full-health-check-section-title {
    color: #17653a;
}

.full-health-check-section--nok .full-health-check-section-title {
    color: #8f1f1f;
}

.full-health-check-section--skipped .full-health-check-section-title {
    color: #6b7280;
}

.full-health-check-section-message {
    margin: 0 0 0.35rem;
    color: #4b5563;
    font-size: 0.9rem;
}

.full-health-check-checks {
    margin: 0;
    padding-left: 1.1rem;
    font-size: 0.88rem;
}

.full-health-check-check {
    margin: 0.2rem 0;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.5rem;
}

.full-health-check-check--ok {
    color: #17653a;
}

.full-health-check-check--nok {
    color: #8f1f1f;
}

.full-health-check-check-text {
    flex: 1 1 12rem;
}

.security-verify-whitelist-add {
    margin-left: auto;
    flex-shrink: 0;
    color: #1f2937;
    background: #fff;
    border: 1px solid #c24141;
}

.security-verify-setting-link {
    flex-shrink: 0;
    color: #1f2937;
    background: #fff;
    border: 1px solid #b45309;
    text-decoration: none;
}

.security-verify-setting-link:hover,
.security-verify-setting-link:focus {
    background: #fff7ed;
}

.security-verify-setting-flash {
    animation: security-verify-setting-flash 2.2s ease-out;
    scroll-margin-top: 1.25rem;
}

@keyframes security-verify-setting-flash {
    0%,
    18% {
        box-shadow: 0 0 0 3px #fdba74;
        outline: 2px solid #c2410c;
        outline-offset: 3px;
    }
    100% {
        box-shadow: none;
        outline-color: transparent;
    }
}

.full-health-check-check-status {
    font-weight: 600;
}

.full-health-check-retest-btn {
    margin-left: 0.15rem;
    flex-shrink: 0;
}

.full-health-check-check--running {
    opacity: 0.75;
}

.full-health-check-section--flat > .full-health-check-section-body {
    display: block;
}

.full-health-check-section--pending {
    opacity: 0.72;
}

.full-health-check-section--running {
    opacity: 0.85;
}

.full-health-check-section--pending .full-health-check-section-message,
.full-health-check-section--running .full-health-check-section-message {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.logs-refresh-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    align-items: center;
    margin: 0 0 1rem;
}

.logs-retention-panel .logs-retention-policy-fields,
.logs-retention-section-bar .logs-retention-policy-fields {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.75rem 1.5rem;
    margin: 0.75rem 0 1rem;
}

.logs-retention-policy-pair {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.4rem 0.75rem;
    max-width: 100%;
}

.logs-retention-policy-pair .checkbox-label {
    margin: 0;
    white-space: nowrap;
}

.logs-retention-policy-value {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.9rem;
    min-width: 8rem;
}

.logs-retention-policy-value input[type="number"] {
    width: 7.5rem;
    max-width: 100%;
}

.logs-retention-panel--level-disabled {
    opacity: 0.55;
    filter: grayscale(0.15);
}

.logs-retention-panel--level-disabled .logs-retention-manage-fieldset {
    pointer-events: none;
}

.logs-retention-level-banner {
    color: #6b5b2e;
    background: #fff8e6;
    border: 1px solid #e6d9a8;
    border-radius: 6px;
    padding: 0.55rem 0.75rem;
}

.logs-retention-policy-fields.is-disabled {
    opacity: 0.55;
    pointer-events: none;
}

.logs-retention-section-bar {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 0;
    border-top: 1px solid rgba(0, 0, 0, 0.08);
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}

.logs-retention-section-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.25rem;
    margin-bottom: 0.75rem;
    font-size: 0.92rem;
}

.logs-retention-export-controls {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: end;
    justify-content: flex-start;
    gap: 0.5rem 0.75rem;
    margin-bottom: 0.5rem;
}

.logs-retention-period-fields {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
    align-items: end;
    flex: 0 1 auto;
    min-width: 0;
}

.logs-retention-export-controls label,
.logs-retention-period-fields > label {
    display: flex;
    flex-direction: column;
    flex: 0 1 auto;
    width: auto;
    max-width: 100%;
    gap: 0.25rem;
    font-size: 0.9rem;
}

.logs-retention-export-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.logs-retention-period-fields .logs-retention-period,
.logs-retention-period-fields select {
    min-width: 8rem;
    width: auto;
}

.logs-retention-period-fields .date-field-with-calendar {
    width: auto;
    max-width: 11rem;
    min-width: 8.5rem;
}

.logs-retention-period-fields .export-period-input,
.logs-retention-period-fields input[type="text"] {
    min-width: 0;
}

.logs-retention-custom-range.is-disabled {
    opacity: 0.85;
}

.logs-retention-custom-range input:disabled,
.logs-retention-custom-range .date-field-with-calendar.is-disabled input[type="text"] {
    background: var(--surface-muted, #e5e7eb);
    color: var(--muted, #6b7280);
    cursor: not-allowed;
    border-color: var(--border, #d1d5db);
}

.logs-retention-custom-range .date-field-with-calendar.is-disabled .date-field-calendar-btn,
.logs-retention-custom-range .date-field-with-calendar.is-disabled .manual-booking-date-picker-btn {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
}

.logs-retention-section-settings {
    margin-top: 0.5rem;
}

.logs-retention-section-settings > summary {
    cursor: pointer;
    font-size: 0.9rem;
}

.logs-retention-section-save-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem 1rem;
    margin-top: 0.75rem;
}

.logs-retention-section-save-row .field-hint {
    margin: 0;
}

.logs-retention-archives-location {
    margin: 0.75rem 0 1rem;
}

.logs-retention-archives-location > summary {
    cursor: pointer;
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--text);
}

.logs-retention-archives-location-body {
    margin-top: 0.5rem;
}

.logs-retention-archives-location-body .csv-archives-path code {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    word-break: break-all;
}

.logs-viewer-panel {
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
}

.logs-viewer-help {
    margin: 0;
    padding: 0.55rem 0.75rem;
    border-radius: 6px;
    border: 1px solid var(--border, #d1d5db);
    background: var(--surface-muted, #f3f4f6);
    color: var(--text, #111827);
}

html[data-theme="dark"] .logs-viewer-help {
    background: rgba(255, 255, 255, 0.06);
    border-color: rgba(255, 255, 255, 0.12);
    color: var(--text);
}

.logs-viewer-sources {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.logs-viewer-source-btn.is-active {
    outline: 2px solid var(--primary, #2563eb);
    outline-offset: 1px;
}

.logs-viewer-browse-toolbar,
.logs-viewer-filters-actions,
.logs-viewer-pager,
.logs-viewer-upload {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
    align-items: center;
}

.logs-viewer-path {
    margin: 0;
    flex: 1 1 auto;
    min-width: 0;
}

.logs-viewer-path code {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    word-break: break-all;
}

.logs-viewer-filters-grid,
.logs-viewer-column-filters {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 0.5rem 0.75rem;
}

.logs-viewer-filters label,
.logs-viewer-zip-bar label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.9rem;
}

.logs-viewer-filters-title {
    margin: 0 0 0.5rem;
    font-size: 1rem;
}

.logs-viewer-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 1rem;
    font-size: 0.9rem;
    color: var(--muted, #6b7280);
}

.logs-viewer-data-table {
    min-width: 100%;
}

.logs-viewer-data-table th,
.logs-viewer-data-table td {
    color: var(--text);
    background: transparent;
}

html[data-theme="dark"] .logs-viewer-files-table tbody tr:hover,
html[data-theme="dark"] .logs-viewer-data-table tbody tr:hover {
    background: rgba(255, 255, 255, 0.04);
}

.logs-viewer-zip-bar select {
    min-width: 16rem;
    max-width: 100%;
}

.logs-section-refresh-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    margin-left: auto;
}

.syslog-settings-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem 1.25rem;
}

.syslog-settings-panel .syslog-category-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 0.5rem 1rem;
    margin-top: 0.75rem;
}

.syslog-category-fieldset.is-disabled {
    opacity: 0.65;
    pointer-events: none;
}

.syslog-category-fieldset.is-disabled .checkbox-label {
    cursor: not-allowed;
}

.syslog-control-subsection,
.syslog-test-subsection {
    margin-top: 1.25rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

.syslog-hostname-row {
    display: flex;
    gap: 0.5rem;
    align-items: center;
}

.syslog-hostname-row input {
    flex: 1;
    min-width: 0;
}

.syslog-test-actions {
    margin-top: 0.5rem;
    padding-top: 0;
}

.syslog-buffer-status {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 0.75rem;
    margin: 0.15rem 0 0.35rem;
}

.syslog-buffer-status .field-hint {
    margin: 0;
    flex: 1 1 12rem;
}

.syslog-buffer-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.syslog-resolve-status.success {
    color: var(--success, #0a7);
}

.syslog-resolve-status.error {
    color: var(--danger, #c33);
}

.outbound-granularity-fieldset {
    border: none;
    margin: 0.75rem 0 0;
    padding: 0;
}

.outbound-granularity-levels {
    margin-top: 0.5rem;
}

.outbound-granularity-level-list {
    margin: 0.35rem 0 0;
    padding-left: 1.25rem;
}

.outbound-granularity-level-list li + li {
    margin-top: 0.25rem;
}

.outbound-granularity-compare {
    margin-top: 0.75rem;
}

.outbound-granularity-compare-table {
    width: auto;
    min-width: 16rem;
}

.outbound-access-log-section {
    margin-top: 1.25rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

.outbound-access-log-section .table-wrap,
.outbound-access-log-section .admin-log-scroll-wrap {
    overflow-x: auto;
}

#outbound-access-log-table {
    table-layout: fixed;
    width: 100%;
    min-width: 72rem;
}

/* 8 columns: date, method, service, host, url, ssrf, egress, http */
#outbound-access-log-table :is(th, td):nth-child(1) {
    width: 9rem;
    white-space: nowrap;
}

#outbound-access-log-table :is(th, td):nth-child(2) {
    width: 3.75rem;
    white-space: nowrap;
}

#outbound-access-log-table :is(th, td):nth-child(3) {
    width: 7.5rem;
}

#outbound-access-log-table :is(th, td):nth-child(4) {
    width: 11rem;
}

#outbound-access-log-table :is(th, td):nth-child(5) {
    width: auto;
    min-width: 12rem;
}

#outbound-access-log-table :is(th, td):nth-child(6),
#outbound-access-log-table :is(th, td):nth-child(7) {
    width: 13rem;
}

#outbound-access-log-table :is(th, td):nth-child(8) {
    width: 5.5rem;
    white-space: nowrap;
    text-align: center;
}

.outbound-log-host-cell {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.outbound-log-host-cell code {
    font-size: 0.9em;
}

.outbound-log-url-cell {
    overflow: hidden;
}

.outbound-log-url-cell code {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
}

.outbound-log-host-linked {
    color: var(--muted);
    font-size: 0.85em;
    white-space: nowrap;
}

.outbound-log-host-linked-sep {
    opacity: 0.65;
}

.outbound-log-egress-cell,
.outbound-log-ssrf-cell {
    white-space: normal;
    overflow: visible;
    vertical-align: middle;
}

.outbound-policy-actions {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
    max-width: 100%;
}

.outbound-egress-status,
.outbound-ssrf-status {
    display: inline-block;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    white-space: normal;
    line-height: 1.25;
    max-width: 100%;
    box-sizing: border-box;
}

.outbound-egress-status--authorized,
.outbound-ssrf-status--authorized {
    color: #166534;
    background: #dcfce7;
}

.outbound-egress-status--blocked,
.outbound-ssrf-status--blocked {
    color: #991b1b;
    background: #fee2e2;
}

.outbound-egress-status--na,
.outbound-ssrf-status--na {
    color: var(--muted);
    font-weight: 400;
    padding: 0;
}

.caldav-health-banner,
.smtp-health-banner,
.smtp-queue-health-banner,
.webdav-health-banner,
.pdf-dompdf-prereq {
    margin: 0.5rem 0 0;
    padding-left: 1.2rem;
    list-style: none;
}

.pdf-dompdf-prereq__item {
    margin: 0.25rem 0;
    line-height: 1.45;
}

.pdf-dompdf-prereq__item.is-ok,
#pdf-dompdf-verdict.is-ok {
    color: var(--ok, #1b7f4a);
}

.pdf-dompdf-prereq__item.is-ko,
#pdf-dompdf-verdict.is-ko {
    color: var(--danger, #b42318);
}

.pdf-dompdf-prereq__item.is-info,
#pdf-dompdf-verdict.is-info {
    color: var(--text-muted, #3d5a80);
}

.pdf-dompdf-prereq__mark {
    font-weight: 700;
}

.pdf-health-banner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 1rem;
    padding: 0.85rem 1rem;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: var(--surface-muted);
    color: var(--text);
    font-weight: 500;
}

.caldav-health-ok,
.smtp-health-ok,
.smtp-queue-health-ok,
.webdav-health-ok,
.pdf-health-ok {
    background: #e8f7ee;
    border-color: #b7e3c6;
    color: #17653a;
}

.caldav-health-nok,
.smtp-health-nok,
.smtp-queue-health-nok,
.webdav-health-nok,
.pdf-health-nok {
    background: #fdecec;
    border-color: #f5c2c2;
    color: #8f1f1f;
}

.health-banner-actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.health-banner-test-buttons {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: nowrap;
}

.pdf-preview-block {
    margin: 1rem 0;
}

.pdf-preview-block--loading .pdf-preview-frame {
    opacity: 0.45;
}

.pdf-preview-status.error {
    color: var(--danger, #c0392b);
}

.pdf-preview-frame {
    display: block;
    width: 100%;
    min-height: 420px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #fff;
}

.health-banner-test-result[hidden] {
    display: none;
}

.health-banner-test-result {
    font-size: 0.88rem;
    font-weight: 700;
}

.health-banner-test-result--ok {
    color: #17653a;
}

.health-banner-test-result--fail {
    color: #8f1f1f;
}

.booking-failures-banner {
    margin-bottom: 1rem;
    padding: 0.85rem 1rem;
    border-radius: 10px;
    border: 1px solid #f5c2c2;
    background: #fdecec;
    color: #8f1f1f;
}

.booking-failures-banner-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 0.65rem;
}

.booking-failures-banner-count {
    font-size: 0.9rem;
    font-weight: 500;
}

.booking-failures-list {
    margin: 0;
    padding-left: 1.2rem;
    font-size: 0.92rem;
    line-height: 1.45;
}

.booking-failures-list li + li {
    margin-top: 0.35rem;
}

.booking-failures-when {
    font-weight: 600;
}

.booking-failures-client::before {
    content: " — ";
}

.booking-failures-detail::before {
    content: " : ";
}

.booking-issues-banner {
    margin-bottom: 1rem;
    padding: 0.85rem 1rem;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: #f8fafc;
    font-weight: 500;
}

.booking-issues-ok {
    background: #e8f7ee;
    border-color: #b7e3c6;
    color: #17653a;
}

.booking-issues-nok {
    background: #fdecec;
    border-color: #f5c2c2;
    color: #8f1f1f;
}

.booking-issues-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}

.booking-issues-list {
    margin: 0.75rem 0 0;
    padding: 0;
    list-style: none;
}

.booking-issues-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    flex-wrap: wrap;
    padding: 0.55rem 0;
    border-top: 1px solid rgba(0, 0, 0, 0.08);
    font-size: 0.92rem;
    font-weight: 400;
}

.booking-issues-item:first-child {
    border-top: none;
    padding-top: 0;
}

.booking-issues-item-main {
    min-width: 10rem;
}

.booking-issues-when {
    font-weight: 600;
}

.booking-issues-client::before {
    content: " — ";
}

.booking-issues-channels {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    flex-wrap: wrap;
}

.booking-issues-channel {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.booking-issues-actions {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.booking-issues-retry-result {
    font-size: 0.85rem;
    font-weight: 700;
}

.booking-issues-retry-result--ok {
    color: #17653a;
}

.booking-issues-retry-result--fail {
    color: #8f1f1f;
}

.status-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.5rem;
    padding: 0.2rem 0.55rem;
    border-radius: 999px;
    font-size: 0.82rem;
    font-weight: 600;
    line-height: 1.2;
    border: 1px solid transparent;
}

.status-badge.status-ok {
    background: #e8f7ee;
    border-color: #b7e3c6;
    color: #17653a;
}

.status-badge.status-nok {
    background: #fdecec;
    border-color: #f5c2c2;
    color: #8f1f1f;
}

.status-badge.status-missing {
    background: #fff4e5;
    border-color: #f0b429;
    color: #9a5b00;
}

.status-badge.status-muted {
    background: #f3f4f6;
    border-color: #d1d5db;
    color: #6b7280;
}

.status-badge.status-pending {
    background: #fff7e6;
    border-color: #f3d19c;
    color: #8a5a00;
}

.status-badge.status-due {
    background: #fff4e5;
    border-color: #f0b429;
    color: #9a5b00;
}

.status-badge.status-empty {
    background: #f3f4f6;
    border-color: #e5e7eb;
    color: #6b7280;
}

.webdav-receipt-badge {
    position: relative;
    cursor: help;
}

.webdav-receipt-badge.is-tooltip-open::after {
    content: attr(data-tooltip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 0.35rem);
    transform: translateX(-50%);
    z-index: 5;
    min-width: 10rem;
    max-width: 14rem;
    padding: 0.35rem 0.55rem;
    border-radius: 6px;
    background: #111827;
    color: #fff;
    font-size: 0.75rem;
    font-weight: 500;
    line-height: 1.35;
    text-align: center;
    white-space: normal;
    pointer-events: none;
}

.status-badge.status-cancelled {
    background: #fdecec;
    border-color: #f5c2c2;
    color: #8f1f1f;
}

.status-badge.status-abandon {
    background: #f3f4f6;
    border-color: #d1d5db;
    color: #6b7280;
}

.booking-cancelled-meta,
.bookings-list-cancelled-meta {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem 0.35rem;
    width: auto;
    flex-basis: auto;
    font-size: 0.82rem;
    color: var(--muted);
    margin-top: 0;
    line-height: 1.3;
    overflow: visible;
    position: relative;
    z-index: 1;
}

.booking-cancelled-meta-line {
    white-space: nowrap;
}

.booking-status-cell .booking-cancelled-meta {
    display: block;
    margin-top: 0.2rem;
}

.booking-status-cell .booking-cancelled-meta-line {
    display: block;
}

.bookings-list-validation .booking-cancelled-meta {
    display: inline-flex;
    margin-top: 0.15rem;
}

.booking-upcoming-remove-countdown {
    display: inline-block;
    margin-left: 0.35rem;
    font-size: 0.78rem;
    font-weight: 500;
    color: var(--muted);
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.01em;
}

.booking-cancel-reason-wrap {
    position: relative;
    display: inline-flex;
    vertical-align: middle;
    overflow: visible;
    z-index: 2;
}

.booking-cancel-reason-trigger {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    padding: 0.1rem 0.4rem;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--card);
    color: var(--muted);
    font: inherit;
    font-size: 0.78rem;
    line-height: 1.2;
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
}

.booking-cancel-reason-trigger:hover,
.booking-cancel-reason-trigger:focus-visible {
    color: var(--text);
    border-color: var(--control-hover-border);
    background: var(--control-hover-bg);
    outline: none;
}

.booking-cancel-reason-trigger-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 0.95rem;
    height: 0.95rem;
    border-radius: 50%;
    border: 1px solid currentColor;
    font-size: 0.62rem;
    font-weight: 700;
    font-style: italic;
    line-height: 1;
}

.booking-cancel-reason-popover {
    position: absolute;
    z-index: 80;
    top: calc(100% + 0.3rem);
    right: 0;
    left: auto;
    display: none;
    min-width: 10rem;
    max-width: min(18rem, calc(100vw - 2rem));
    padding: 0.45rem 0.6rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    box-shadow: 0 4px 14px rgba(15, 23, 42, 0.12);
    color: var(--text);
    font-size: 0.82rem;
    line-height: 1.4;
    pointer-events: none;
}

.booking-cancel-reason-popover-label {
    display: block;
    margin-bottom: 0.15rem;
    font-weight: 600;
    color: var(--muted);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.02em;
}

.booking-cancel-reason-popover-text {
    display: block;
    white-space: normal;
    word-break: break-word;
}

.booking-cancel-reason-wrap.is-open .booking-cancel-reason-popover,
.booking-cancel-reason-wrap:focus-within .booking-cancel-reason-popover {
    display: block;
}

@media (hover: hover) and (pointer: fine) {
    .booking-cancel-reason-wrap:hover .booking-cancel-reason-popover {
        display: block;
    }
}

#bookings-table tr.booking-row-cancelled td {
    padding-top: 0.45rem;
    padding-bottom: 0.45rem;
}

.bookings-list li.booking-row-cancelled {
    padding-top: 0.55rem;
    padding-bottom: 0.55rem;
}

.bookings-list li.booking-row-cancelled,
#bookings-table tr.booking-row-cancelled {
    opacity: 0.88;
    background: #f9fafb;
}

#bookings-table .status-badge {
    white-space: nowrap;
}


.booking-validation-conditional-rules {
    padding: 0.75rem 0.85rem;
    border: 1px solid #e4dfd2;
    border-radius: 8px;
    background: #faf8f3;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 0.65rem;
    text-align: left;
}

.booking-validation-conditional-rules[hidden] {
    display: none !important;
}

.booking-validation-check-row {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: 0.5rem;
    margin: 0;
    width: 100%;
    cursor: pointer;
    font-size: 0.92rem;
    color: #3f3a31;
}

.booking-validation-check-row input[type="checkbox"] {
    margin: 0;
    flex-shrink: 0;
}

.booking-validation-check-row span {
    line-height: 1.35;
}

.booking-validation-rule-line {
    margin: 0;
    font-size: 0.92rem;
    color: #3f3a31;
}

.booking-validation-evening-rule {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: 0.45rem 0.6rem;
    width: 100%;
}

.booking-validation-evening-times {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.booking-validation-evening-separator {
    font-size: 0.88rem;
    color: #6a6256;
}

.booking-validation-evening-rule .booking-validation-evening-start,
.booking-validation-evening-rule .booking-validation-evening-end,
.booking-validation-evening-rule .time-input-24h {
    width: 4.5rem;
    font-size: 0.9rem;
    padding: 0.2rem 0.35rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.booking-validation-rule-hint {
    font-size: 0.88rem;
    color: #6a6256;
}

.payment-tracking-main {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 0.5rem;
}

.payment-tracking-feedback {
    font-size: 0.92rem;
}

.payment-tracking-feedback.error {
    color: #8f1f1f;
}

.logging-settings-panel {
    border-left: 4px solid #1d4ed8;
}

.logging-global-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 0.5rem;
}

/* Uniform compact sizing for global logging panel buttons (gray + red). */
.logging-global-actions .btn,
#caldav-log-panel .settings-actions .btn,
#email-log-panel .settings-actions .btn {
    padding: 0.35rem 0.65rem;
    font-size: 0.85rem;
    line-height: 1.25;
    border-radius: 6px;
    min-height: 0;
}

.panel-header-actions .logging-toggle-select,
.panel-header-actions .btn-clear-log {
    font-size: 0.85rem;
    line-height: 1.25;
    border-radius: 6px;
    min-height: calc(0.7rem + 1.25em);
    box-sizing: border-box;
}

.panel-header-actions .logging-toggle-select {
    min-width: 0;
    width: auto;
    padding: 0.35rem 0.5rem;
}

.panel-header-actions .btn-clear-log {
    padding: 0.35rem 0.65rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.logging-toggle-label {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.92rem;
    white-space: nowrap;
}

.panel-header-actions .logging-toggle-label {
    margin-right: 0.25rem;
}

.logging-section--disabled .logging-disabled-notice {
    margin-bottom: 1rem;
}

.bookings-payment-controls {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}

.bookings-payment-controls select {
    min-width: 10rem;
}

#bookings-table .payment-col {
    white-space: nowrap;
}

.payment-export-row {
    margin: 0.75rem 0 0;
}

.payment-pending-panel {
    margin-top: 1rem;
    padding: 1rem;
    border: 1px solid var(--border);
    border-left-width: 4px;
    border-left-color: var(--muted);
    border-radius: 8px;
    background: var(--surface-muted);
    color: var(--text);
}

.payment-pending-header {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.payment-pending-header h3 {
    margin: 0;
    font-size: 1rem;
}

.payment-pending-count-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.75rem;
    padding: 0.15rem 0.55rem;
    border-radius: 999px;
    background: #6b7280;
    color: #fff;
    font-size: 0.85rem;
    font-weight: 700;
    line-height: 1.3;
}

.payment-pending-hint,
.payment-pending-summary,
.payment-pending-loading {
    margin: 0.5rem 0 0;
    font-size: 0.9rem;
    color: var(--muted);
}

.payment-pending-summary {
    font-weight: 600;
    color: var(--text);
}

.payment-pending-empty {
    margin-top: 0.75rem;
}

.payment-pending-table tbody tr {
    cursor: default;
}

.payment-pending-table tbody tr:hover {
    background: var(--surface-muted);
}

.payment-pending-row--overdue {
    background: #fff5f5;
}

.payment-pending-row--overdue:hover {
    background: #fdecec;
}

.payment-pending-action-link {
    font-size: 0.85rem;
    margin-right: 0.5rem;
    white-space: nowrap;
}

button.payment-pending-action-link {
    background: none;
    border: 0;
    padding: 0;
    color: inherit;
    cursor: pointer;
    text-decoration: underline;
    font: inherit;
}

.payment-pending-receipt-link {
    color: var(--muted);
}

.payment-list-status-wrap {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.5rem;
}

.payment-list-status-wrap .btn-small {
    font-size: 0.75rem;
    padding: 0.15rem 0.45rem;
    white-space: nowrap;
}

.payment-list-status-wrap .receipt-actions-menu,
.payment-receipts-browse-table .receipt-actions-menu {
    justify-content: flex-start;
}

.receipt-actions-menu .booking-actions-menu-panel a.btn-small {
    display: inline-flex;
    align-items: center;
    text-decoration: none;
    box-sizing: border-box;
}

.booking-actions-menu-panel .payment-receipt-delete-billing,
.booking-actions-menu-panel .payment-receipt-delete-local,
.booking-actions-menu-panel .payment-receipt-delete-webdav,
.booking-actions-menu-panel .booking-hard-delete-btn,
[data-bulk-receipt-actions] [data-bulk-action="delete_billing"],
[data-bulk-receipt-actions] [data-bulk-action="delete_local"],
[data-bulk-receipt-actions] [data-bulk-action="delete_webdav"] {
    color: #b91c1c;
    border-color: color-mix(in srgb, #b91c1c 35%, var(--border, #d1d5db));
}

html[data-theme="dark"] .booking-actions-menu-panel .payment-receipt-delete-billing,
html[data-theme="dark"] .booking-actions-menu-panel .payment-receipt-delete-local,
html[data-theme="dark"] .booking-actions-menu-panel .payment-receipt-delete-webdav,
html[data-theme="dark"] .booking-actions-menu-panel .booking-hard-delete-btn,
html[data-theme="dark"] [data-bulk-receipt-actions] [data-bulk-action="delete_billing"],
html[data-theme="dark"] [data-bulk-receipt-actions] [data-bulk-action="delete_local"],
html[data-theme="dark"] [data-bulk-receipt-actions] [data-bulk-action="delete_webdav"] {
    color: #fca5a5;
    border-color: color-mix(in srgb, #fca5a5 40%, var(--border, #374151));
}

.receipt-delivery-cols-toggle {
    /* Override global `label { flex-direction: column }` — checkbox left, label right. */
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    gap: 0.4rem;
    margin-left: 0.75rem;
    font-size: 0.9rem;
    cursor: pointer;
    user-select: none;
}

.receipt-delivery-cols-toggle-input {
    flex: 0 0 auto;
    margin: 0;
}

/* Only the open menu gets a raised stacking context (see .booking-actions-menu.is-open).
   A permanent z-index on every row menu made later « Reçu » buttons paint over open panels. */
.payment-list-table .receipt-actions-menu,
.payment-receipts-browse-table .receipt-actions-menu {
    position: relative;
}

.payment-list-table .payment-list-status-cell,
.payment-receipts-browse-table td {
    overflow: visible;
}

.payment-list-count-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.75rem;
    padding: 0.15rem 0.55rem;
    border-radius: 999px;
    background: #6b7280;
    color: #fff;
    font-size: 0.85rem;
    font-weight: 700;
    line-height: 1.3;
}

.payment-list-header-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 0.75rem;
}

.payment-list-header-row h3 {
    margin: 0;
}

html:not(.show-receipt-delivery-cols) .booking-receipt-delivery-col {
    display: none;
}

.csv-archives-import-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.payment-due-panel {
    margin-top: 1rem;
    padding: 1rem;
    border: 1px solid #f0b429;
    border-left-width: 4px;
    border-radius: 8px;
    background: #fffaf0;
}

.payment-due-header {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.payment-due-header h3 {
    margin: 0;
    font-size: 1rem;
}

.payment-due-count-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.75rem;
    padding: 0.15rem 0.55rem;
    border-radius: 999px;
    background: #f0b429;
    color: #fff;
    font-size: 0.85rem;
    font-weight: 700;
    line-height: 1.3;
}

.payment-due-hint,
.payment-due-summary,
.payment-due-loading {
    margin: 0.5rem 0 0;
    color: var(--text-muted, #5a6472);
    font-size: 0.92rem;
}

.payment-due-summary {
    color: #9a5b00;
    font-weight: 600;
}

.payment-due-empty {
    margin: 0.75rem 0 0;
}

.payment-due-table tbody tr {
    background: #fffdf7;
}

.payment-due-table tbody tr:hover {
    background: #fff7e6;
}

#bookings-table tbody tr.booking-payment-due {
    background: #fffaf0;
    box-shadow: inset 3px 0 0 #f0b429;
}

#bookings-table tbody tr.booking-payment-due:hover {
    background: #fff4e5;
}

.payment-earnings {
    margin-top: 1rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

.payment-earnings h3 {
    margin: 0 0 0.75rem;
    font-size: 1rem;
}

.payment-earnings h4 {
    margin: 0 0 0.5rem;
    font-size: 0.92rem;
    color: var(--text-muted, #5a6472);
}

.payment-earnings-loading {
    margin: 0;
    color: var(--text-muted, #5a6472);
    font-size: 0.92rem;
}

.payment-earnings-comparison {
    margin: 0.75rem 0 0;
    color: var(--muted);
    font-size: 0.92rem;
}

.payment-earnings-methods,
.payment-earnings-locations {
    margin-top: 0.85rem;
}

.payment-earnings-method-list,
.payment-earnings-location-list,
.payment-earnings-history-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.payment-earnings-method-list li,
.payment-earnings-location-list li,
.payment-earnings-history-list li {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.35rem 0;
    border-bottom: 1px solid var(--border);
    font-size: 0.92rem;
}

.payment-earnings-history {
    margin-top: 0.85rem;
}

.payment-earnings-history summary {
    cursor: pointer;
    font-weight: 600;
    font-size: 0.92rem;
}

.payment-earnings-charts {
    margin-top: 0.85rem;
}

.payment-earnings-charts summary {
    cursor: pointer;
    font-weight: 600;
    font-size: 0.92rem;
}

.payment-earnings-charts-body {
    margin-top: 0.75rem;
}

.payment-earnings-chart-year-label {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-weight: 600;
    font-size: 0.92rem;
}

.payment-earnings-chart-year-label select {
    min-width: 6.5rem;
}

.payment-earnings-charts-pies {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
    margin-top: 0.75rem;
}

.payment-earnings-chart-figure {
    margin: 0;
}

.payment-earnings-chart-figure figcaption {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.25rem 0.7rem;
    margin: 0 0 0.45rem;
    font-size: 0.92rem;
    font-weight: 600;
}

.payment-earnings-chart-year-total {
    margin: 0 0 0.65rem;
    padding-left: 1.2rem;
    font-weight: 500;
    font-size: 0.82rem;
    color: var(--muted);
}

.payment-earnings-chart-year-total li {
    margin: 0.1rem 0;
}

.payment-earnings-chart-figure--bars {
    margin-top: 1rem;
    overflow: visible;
}

.payment-earnings-pie {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 0.75rem 1rem;
}

.payment-earnings-pie-svg {
    width: 13.5rem;
    height: 13.5rem;
    flex: 0 0 auto;
    background: transparent;
}

.payment-earnings-pie-hole {
    fill: var(--card);
}

.payment-earnings-pie-center-value {
    fill: var(--text);
    font-size: 13px;
    font-weight: 700;
}

.payment-earnings-pie-center-unit {
    fill: var(--muted);
    font-size: 9px;
    font-weight: 600;
}

.payment-earnings-pie-legend {
    margin: 0;
    padding: 0;
    list-style: none;
    flex: 1 1 14rem;
    min-width: min(14rem, 100%);
    max-width: 100%;
    width: auto;
    font-size: 0.84rem;
}

.payment-earnings-pie-legend li {
    display: grid;
    grid-template-columns: 0.85rem minmax(0, 1fr);
    align-items: start;
    column-gap: 0.45rem;
    width: 100%;
    max-width: none;
    padding: 0.2rem 0;
    border-bottom: none;
}

.payment-earnings-pie-legend .payment-earnings-chart-swatch {
    display: inline-block;
    width: 0.75rem;
    height: 0.75rem;
    min-width: 0.75rem;
    min-height: 0.75rem;
    border-radius: 2px;
    flex: none;
    background-color: var(--payment-chart-swatch, #6cb6ff);
    background-image: none;
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.22);
}

.payment-earnings-chart-swatch--0 { --payment-chart-swatch: #6cb6ff; }
.payment-earnings-chart-swatch--1 { --payment-chart-swatch: #7dcea0; }
.payment-earnings-chart-swatch--2 { --payment-chart-swatch: #f5b041; }
.payment-earnings-chart-swatch--3 { --payment-chart-swatch: #af7ac5; }
.payment-earnings-chart-swatch--4 { --payment-chart-swatch: #e67e22; }
.payment-earnings-chart-swatch--5 { --payment-chart-swatch: #5dade2; }

.payment-earnings-chart-legend-body {
    display: flex;
    flex-direction: column;
    gap: 0.12rem;
    min-width: 0;
}

.payment-earnings-chart-legend-label {
    min-width: 0;
    overflow: visible;
    text-overflow: unset;
    white-space: normal;
    overflow-wrap: break-word;
    color: var(--text);
    font-weight: 600;
    line-height: 1.25;
}

.payment-earnings-chart-legend-value {
    color: var(--text);
    font-weight: 500;
    white-space: normal;
    overflow-wrap: break-word;
    line-height: 1.25;
}

.payment-earnings-bar-chart {
    display: grid;
    gap: 0.55rem;
}

.payment-earnings-bar-chart--short-counts {
    gap: 1.45rem;
}

.payment-earnings-bar-values,
.payment-earnings-bar-months {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: 0.15rem;
    padding: 0 0.15rem;
}

.payment-earnings-bar-value-cell,
.payment-earnings-bar-month-cell {
    min-width: 0;
    text-align: center;
    line-height: 1.15;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.payment-earnings-bar-value-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.58rem;
    font-size: 0.68rem;
    font-weight: 600;
    color: var(--text);
    white-space: normal;
    overflow: visible;
}

.payment-earnings-bar-value-amount {
    display: block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 0.88rem;
    font-weight: 700;
    line-height: 1.15;
}

.payment-earnings-bar-value-delta {
    display: block;
    font-size: 0.55rem;
    font-weight: 600;
    line-height: 1.15;
    color: var(--muted);
}

.payment-earnings-bar-value-delta.is-up {
    color: #2f7d4a;
}

.payment-earnings-bar-value-delta.is-down {
    color: #b4533a;
}

.payment-earnings-bar-month-cell {
    font-size: 0.62rem;
    color: var(--muted);
}

.payment-earnings-bar-svg {
    width: 100%;
    height: auto;
    display: block;
}

.payment-earnings-bar-plot {
    position: relative;
    overflow: visible;
}

.payment-earnings-bar-counts {
    position: absolute;
    inset: 0;
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    column-gap: 0.15rem;
    padding: 4.3% 0.12rem 2.9%;
    box-sizing: border-box;
    pointer-events: none;
    align-items: end;
    overflow: visible;
}

.payment-earnings-bar-count-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    align-self: end;
    position: relative;
    min-width: 0;
    gap: 0.16rem;
    padding: 0.1rem 0.04rem 0.42rem;
    color: #0b2438;
    text-align: center;
    line-height: 1.05;
    overflow: visible;
}

.payment-earnings-bar-count-num {
    font-size: 0.8rem;
    font-weight: 800;
    line-height: 1;
}

.payment-earnings-bar-count-unit {
    display: inline-block;
    max-width: 100%;
    font-size: 0.6rem;
    font-weight: 700;
    line-height: 1.12;
    letter-spacing: -0.02em;
    color: #0b2438;
    background: none;
    border-radius: 0;
    padding: 0;
    white-space: normal;
    overflow-wrap: anywhere;
    text-shadow: 0 0 3px rgba(255, 255, 255, 0.45);
}

.payment-earnings-bar-count-cell.is-short {
    padding-bottom: 0.12rem;
}

.payment-earnings-bar-count-cell.is-short .payment-earnings-bar-count-unit {
    position: absolute;
    top: calc(100% + 0.08rem);
    left: 50%;
    transform: translateX(-50%);
    z-index: 1;
    color: var(--text);
    background: none;
    box-shadow: none;
    text-shadow: none;
}

.payment-earnings-bar {
    fill: #6cb6ff;
}

.payment-earnings-chart-empty {
    margin: 0;
}

@media (max-width: 1100px) {
    .payment-earnings-charts-pies {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 720px) {
    .payment-earnings-charts-pies {
        grid-template-columns: 1fr;
    }

    .payment-earnings-pie {
        flex-direction: column;
        align-items: center;
    }

    .payment-earnings-pie-legend {
        flex: 1 1 auto;
        min-width: 100%;
        width: 100%;
    }
}

#payment-dialog label {
    display: block;
    margin-top: 0.75rem;
    margin-bottom: 0.25rem;
    font-weight: 600;
}

#payment-dialog input,
#payment-dialog select,
#payment-dialog textarea {
    width: 100%;
    box-sizing: border-box;
}

#calendar {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1rem;
    margin-bottom: 1.25rem;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
}

[id^="calendar-"] {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1rem;
    margin-bottom: 1.25rem;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
}

#calendar .fc-view-harness,
[id^="calendar-"] .fc-view-harness {
    min-width: 780px;
}

#calendar .fc-view-harness,
[id^="calendar-"] .fc-view-harness {
    position: relative;
}

#calendar .fc-timegrid-col,
[id^="calendar-"] .fc-timegrid-col {
    min-width: 118px;
}

#calendar .fc-col-header-cell-cushion,
#calendar .fc-timegrid-axis-cushion,
[id^="calendar-"] .fc-col-header-cell-cushion,
[id^="calendar-"] .fc-timegrid-axis-cushion {
    font-size: 0.85rem;
}

/* Day / Week: hide time-grid body, show stacked pill columns instead */
#calendar.fc-stacked-slots-active .fc-timegrid-body,
#calendar.fc-stacked-slots-active .fc-timegrid-axis,
#calendar.fc-stacked-slots-active .fc-timegrid-event-harness,
[id^="calendar-"].fc-stacked-slots-active .fc-timegrid-body,
[id^="calendar-"].fc-stacked-slots-active .fc-timegrid-axis,
[id^="calendar-"].fc-stacked-slots-active .fc-timegrid-event-harness {
    display: none !important;
}

#calendar.fc-stacked-slots-active .fc-scrollgrid-section-body > td,
[id^="calendar-"].fc-stacked-slots-active .fc-scrollgrid-section-body > td {
    border: none;
}

#calendar.fc-stacked-slots-week .fc-scrollgrid-section-header,
#calendar.fc-stacked-slots-week .fc-scrollgrid-section-body,
[id^="calendar-"].fc-stacked-slots-week .fc-scrollgrid-section-header,
[id^="calendar-"].fc-stacked-slots-week .fc-scrollgrid-section-body {
    display: none !important;
}

/* Stacked pill columns: let the calendar box scroll; don't clip in fc-view-harness. */
#calendar.fc-stacked-slots-active .fc-view-harness,
[id^="calendar-"].fc-stacked-slots-active .fc-view-harness {
    overflow: visible;
}

#calendar.fc-stacked-slots-active .fc-view-harness-active > .fc-view,
[id^="calendar-"].fc-stacked-slots-active .fc-view-harness-active > .fc-view {
    overflow: hidden;
    pointer-events: none;
}

.slots-stack-view {
    padding: 0.35rem 0.25rem 0.75rem;
}

.slots-stack-view--week {
    display: grid;
    grid-template-columns: repeat(var(--slots-stack-cols, 6), minmax(0, 1fr));
    gap: 0.5rem 0.5rem;
    align-items: start;
}

.slots-stack-header {
    margin: 0;
    padding: 0.15rem 0.25rem 0.35rem;
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.25;
    text-align: center;
    color: var(--text, #0f172a);
}

.slots-stack-view--day {
    max-width: 22rem;
    margin: 0 auto;
}

.slots-stack-col {
    min-width: 0;
}

.slots-stack-list {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.slots-stack-empty {
    margin: 0;
    padding: 0.5rem 0.25rem;
    font-size: 0.8rem;
    color: var(--muted);
    text-align: center;
}

.slot-pill {
    display: block;
    width: 100%;
    margin: 0;
    border: none;
    border-radius: 10px;
    padding: 0.5rem 0.65rem;
    font: inherit;
    font-size: 0.8rem;
    font-weight: 700;
    line-height: 1.25;
    text-align: left;
    color: #fff;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
}

.slot-pill.is-selectable {
    cursor: pointer;
}

.slot-pill:not(.is-selectable) {
    cursor: help;
}

.slot-pill.is-selectable:hover {
    filter: brightness(1.05);
}

.slot-reason-toast {
    position: fixed;
    left: 50%;
    bottom: 1.25rem;
    z-index: 12000;
    max-width: min(92vw, 28rem);
    padding: 0.7rem 1rem;
    border-radius: 0.55rem;
    background: rgba(15, 23, 42, 0.94);
    color: #f8fafc;
    font-size: 0.9rem;
    line-height: 1.35;
    text-align: center;
    box-shadow: 0 8px 24px rgba(15, 23, 42, 0.28);
    transform: translate(-50%, 0.5rem);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.18s ease, transform 0.18s ease;
}

.slot-reason-toast.is-visible {
    opacity: 1;
    transform: translate(-50%, 0);
}

.slot-pill.is-selected {
    outline: 3px solid #2563eb;
    box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25);
}

/* Selection action in flight — pulse + dim overlay on selected pills/events. */
@keyframes selection-applying-pulse {
    0%,
    100% {
        opacity: 0.78;
    }

    50% {
        opacity: 0.48;
    }
}

.slot-pill.is-selection-applying,
.fc-event.is-selection-applying {
    position: relative;
    cursor: wait;
    pointer-events: none;
    animation: selection-applying-pulse 1.05s ease-in-out infinite;
}

.slot-pill.is-selection-applying::after,
.fc-event.is-selection-applying::after {
    content: "…";
    position: absolute;
    inset: 0;
    z-index: 5;
    display: grid;
    place-items: center;
    border-radius: inherit;
    background: rgba(15, 23, 42, 0.38);
    color: #fff;
    font-size: 1.15em;
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1;
    pointer-events: none;
}

.action-row.is-selection-action-busy {
    cursor: wait;
}

.action-row.is-selection-action-busy button:disabled {
    opacity: 0.62;
    cursor: wait;
}

.slot-pill.event-available {
    background: var(--available);
}

.slot-pill.event-booked {
    background: var(--booked);
}

.slot-pill.event-manual {
    background: var(--manual-booking);
}

.slot-pill.event-pending {
    background: var(--pending-validation);
    color: #1f2937;
}

.slot-pill.event-blocked {
    background: var(--blocked);
}

.slot-pill.event-private-calendar-blocked,
.fc-event.event-private-calendar-blocked {
    box-shadow: inset 0 0 0 2px rgba(180, 83, 9, 0.85);
}

.fc-event.event-private-calendar-blocked.event-available {
    outline: 2px dashed rgba(180, 83, 9, 0.9);
    outline-offset: -2px;
}

.slot-pill.event-day-work,
.fc-event.event-day-work {
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}

.fc-event.event-day-work.event-available {
    outline: 2px dashed rgba(220, 38, 38, 0.9);
    outline-offset: -2px;
}

.slot-pill.event-night-work-block,
.fc-event.event-night-work-block {
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}

.fc-event.event-night-work-block.event-available {
    outline: 2px dashed rgba(220, 38, 38, 0.9);
    outline-offset: -2px;
}

.slot-pill.event-night-work-manual,
.fc-event.event-night-work-manual {
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
}

.fc-event.event-night-work-manual.event-available {
    outline: 2px dashed rgba(251, 146, 60, 0.95);
    outline-offset: -2px;
}

/* Admin « Vue client »: reuse public client calendar markers (orange dot, no admin rings). */
html.admin-calendar-client-view .calendar-color-legend .badge.manual,
html.admin-calendar-client-view .calendar-color-legend .badge.pending,
html.admin-calendar-client-view .calendar-color-legend .badge.private-calendar-blocked,
html.admin-calendar-client-view .calendar-color-legend .badge.night-work-block,
html.admin-calendar-client-view .calendar-color-legend .badge.night-work-none,
html.admin-calendar-client-view .calendar-color-legend .badge.private-calendar-override {
    display: none;
}

html.admin-calendar-client-view .admin-calendar-client-view-toggle.is-active {
    box-shadow: inset 0 0 0 2px rgba(14, 116, 144, 0.55);
}

/* Client calendar/list: green fill + small orange top-right dot (no orange ring). */
#step-slot .slot-pill.event-night-work-manual,
#step-slot .fc-event.event-night-work-manual,
#step-slot .client-slot-pill.event-night-work-manual,
html.admin-calendar-client-view .slot-pill.event-night-work-manual,
html.admin-calendar-client-view .fc-event.event-night-work-manual {
    box-shadow: none;
    outline: none;
    position: relative;
}

#step-slot .client-slot-pill.event-night-work-manual {
    border-color: inherit;
}

#step-slot .slot-pill.event-night-work-manual::before,
#step-slot .fc-event.event-night-work-manual::before,
#step-slot .client-slot-pill.event-night-work-manual::before,
html.admin-calendar-client-view .slot-pill.event-night-work-manual::before,
html.admin-calendar-client-view .fc-event.event-night-work-manual::before {
    content: "";
    position: absolute;
    top: 0.18rem;
    right: 0.18rem;
    z-index: 2;
    width: 0.55rem;
    height: 0.55rem;
    border-radius: 50%;
    background: rgba(251, 146, 60, 0.95);
    box-shadow: 0 0 0 1px rgba(194, 65, 12, 0.45);
    pointer-events: none;
}

#step-slot .client-slot-pill.event-night-work-manual::after {
    content: none;
}

/* Recurrent weekly weekday — orange circle; fill comes from status (green/gray/…). */
.slot-pill.event-weekly-weekday,
.fc-event.event-weekly-weekday,
.client-slot-pill.event-weekly-weekday {
    position: relative;
}

.slot-pill.event-weekly-weekday::before,
.fc-event.event-weekly-weekday::before {
    content: "";
    position: absolute;
    top: 0.18rem;
    right: 0.18rem;
    z-index: 2;
    width: 0.55rem;
    height: 0.55rem;
    border-radius: 50%;
    background: transparent;
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
    pointer-events: none;
}

.client-slot-pill.event-weekly-weekday:not(.event-night-work-manual)::after {
    content: "";
    width: 10px;
    height: 10px;
    border-radius: 50%;
    margin-left: auto;
    flex: 0 0 auto;
    background: transparent;
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
}

.client-slot-pill.event-weekly-weekday.event-night-work-manual {
    outline: 2px solid rgba(251, 146, 60, 0.95);
    outline-offset: -2px;
}

/* Client: weekly yellow outline must not fight the orange VM top-right dot. */
#step-slot .client-slot-pill.event-weekly-weekday.event-night-work-manual {
    outline: none;
}

html.admin-calendar-client-view .slot-pill.event-weekly-weekday.event-night-work-manual,
html.admin-calendar-client-view .fc-event.event-weekly-weekday.event-night-work-manual {
    box-shadow: none;
    outline: none;
}

.manual-validation-banner {
    display: block;
    margin: 0.85rem 0 1rem;
    padding: 0.9rem 1rem;
    border-radius: 10px;
    border: 2px solid rgba(234, 88, 12, 0.95);
    background: rgba(255, 247, 237, 0.98);
    color: #9a3412;
    box-shadow: 0 0 0 1px rgba(251, 146, 60, 0.35);
}

.manual-validation-banner[hidden] {
    display: none !important;
}

.manual-validation-banner strong {
    display: block;
    margin: 0 0 0.35rem;
    font-size: 1.05rem;
    font-weight: 700;
    color: #c2410c;
}

.manual-validation-banner p {
    margin: 0;
    font-size: 0.98rem;
    line-height: 1.45;
}

.slot-pill.event-night-work-none,
.fc-event.event-night-work-none {
    box-shadow: inset 0 0 0 2px rgba(220, 38, 38, 0.9);
}

.fc-event.event-night-work-none.event-available {
    outline: 2px dashed rgba(220, 38, 38, 0.9);
    outline-offset: -2px;
}

.client-calendar-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.65rem;
    margin: 0.75rem 0 0.85rem;
}

.client-calendar-toolbar-actions {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
}

.client-calendar-view-toggle {
    display: inline-flex;
    gap: 0.35rem;
}

.client-calendar-view-toggle .btn-small.is-active {
    background: var(--primary, #1d4ed8);
    border-color: var(--primary, #1d4ed8);
    color: #fff;
}

.client-slot-views {
    position: relative;
    margin: 0.25rem 0 1rem;
    min-height: 12rem;
}

.client-calendar-loading {
    position: absolute;
    inset: 0;
    z-index: 5;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 1.25rem;
    text-align: center;
    color: var(--text);
    background: color-mix(in srgb, var(--card, #fff) 82%, transparent);
    backdrop-filter: blur(1px);
    border-radius: 8px;
    pointer-events: all;
}

.client-calendar-loading[hidden] {
    display: none !important;
}

.client-calendar-loading-spinner {
    width: 1.75rem;
    height: 1.75rem;
    border-width: 3px;
}

.client-calendar-loading-label {
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
}

.client-slot-views.is-calendar-loading {
    cursor: wait;
}

@media (max-width: 640px) {
    .client-slot-views {
        min-height: 10rem;
    }

    .client-calendar-loading {
        padding: 1rem;
        gap: 0.6rem;
    }

    .client-calendar-loading-label {
        font-size: 0.95rem;
    }
}

/* FullCalendar sets display on .fc; force-hide when list mode is active */
#calendar[hidden],
#calendar.is-view-hidden,
#step-slot.is-list-mode #calendar,
#step-slot.is-list-mode #client-slot-legend,
.client-slots-list[hidden] {
    display: none !important;
}

#step-slot.is-list-mode .client-slots-list {
    display: flex !important;
}

.client-slots-list {
    --slots-sage: #76937f;
    --slots-sage-soft: #e8f0ea;
    --slots-sage-border: #9db5a5;
    --slots-ink: #1f2937;
    display: flex;
    flex-direction: column;
    gap: 1.15rem;
    margin: 0;
    padding: 0.15rem 0 0.35rem;
}

.client-slots-week-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.15rem 0.1rem 0.35rem;
}

.client-slots-week-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.35rem;
    height: 2.35rem;
    margin: 0;
    border: none;
    border-radius: 999px;
    background: transparent;
    color: var(--slots-ink);
    font: inherit;
    font-size: 1.15rem;
    line-height: 1;
    cursor: pointer;
}

.client-slots-week-btn:hover:not(:disabled) {
    background: var(--slots-sage-soft);
    color: var(--slots-sage);
}

.client-slots-week-btn:disabled {
    opacity: 0.35;
    cursor: default;
}

.client-slots-week-label {
    flex: 1;
    text-align: center;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--slots-ink);
}

.client-slots-list-body {
    display: flex;
    flex-direction: column;
    gap: 1.35rem;
}

.client-slots-list-empty {
    margin: 0;
    padding: 1.25rem 0.5rem;
    color: var(--muted);
    text-align: center;
}

.client-slots-next-notice {
    margin: 0.5rem 0 0.75rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--slots-sage-border, #9db5a5);
    border-radius: 10px;
    background: var(--slots-sage-soft, #e8f0ea);
    color: var(--slots-ink, #1f2937);
    font-weight: 600;
    text-align: center;
}

.client-slots-list-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.85rem;
    padding: 1.5rem 1rem;
    text-align: center;
}

.client-slots-list-empty-state .client-slots-list-empty {
    padding: 0;
}

.client-slots-next-hint {
    margin: 0;
    font-weight: 600;
    color: var(--slots-ink, #1f2937);
}

.client-slots-go-first {
    margin-top: 0.15rem;
}

.client-slots-day-title {
    margin: 0 0 0.7rem;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--slots-ink);
    text-transform: capitalize;
}

.client-slots-day-pills {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.client-slot-pill {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    width: 100%;
    margin: 0;
    border: 1.5px solid var(--slots-sage-border);
    border-radius: 12px;
    padding: 0.85rem 1rem;
    font: inherit;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--slots-ink);
    background: var(--card);
    box-shadow: none;
    cursor: pointer;
    text-align: left;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.client-slot-pill-icon {
    flex: 0 0 auto;
    width: 1.15rem;
    height: 1.15rem;
    color: var(--slots-sage);
}

.client-slot-pill .slot-time-label {
    font-weight: 600;
}

.client-slot-pill:hover {
    border-color: var(--slots-sage);
    background: var(--slots-sage-soft);
}

.client-slot-pill.is-selected {
    background: var(--slots-sage);
    border-color: var(--slots-sage);
    color: #fff;
    outline: none;
    box-shadow: none;
}

.client-slot-pill.is-selected .client-slot-pill-icon {
    color: #fff;
}

#step-slot.is-list-mode .client-calendar-view-toggle .btn-small.is-active {
    background: var(--slots-sage, #76937f);
    border-color: var(--slots-sage, #76937f);
}

@media (max-width: 640px) {
    .client-calendar-toolbar {
        flex-direction: column;
        align-items: stretch;
    }

    .client-calendar-view-toggle {
        display: grid;
        grid-template-columns: 1fr 1fr;
    }

    .client-slot-pill {
        padding: 0.9rem 1rem;
    }
}

.slot-pill .slot-time-label {
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: block;
}

@media (max-width: 700px) {
    .container {
        padding-left: max(1rem, env(safe-area-inset-left, 0px));
        padding-right: max(1rem, env(safe-area-inset-right, 0px));
    }

    #calendar,
    [id^="calendar-"] {
        padding: 0.65rem max(0.5rem, env(safe-area-inset-right, 0px)) 0.65rem max(0.5rem, env(safe-area-inset-left, 0px));
        -webkit-overflow-scrolling: touch;
        overscroll-behavior-x: contain;
    }

    #calendar .fc-header-toolbar,
    [id^="calendar-"] .fc-header-toolbar {
        flex-wrap: wrap;
        row-gap: 0.45rem;
        column-gap: 0.35rem;
        margin-bottom: 0.65rem !important;
    }

    #calendar .fc-toolbar-chunk,
    [id^="calendar-"] .fc-toolbar-chunk {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 0.25rem;
    }

    #calendar .fc-toolbar-chunk:nth-child(2) {
        flex: 1 1 100%;
        order: -1;
        justify-content: center;
        max-width: 100%;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }

    #calendar .fc-toolbar-title {
        font-size: clamp(0.78rem, 3.4vw, 0.92rem);
        line-height: 1.25;
        white-space: nowrap;
        text-align: center;
    }

    #calendar .fc-button {
        font-size: 0.72rem;
        padding: 0.28rem 0.42rem;
        line-height: 1.2;
    }

    #calendar .fc-button-group {
        display: inline-flex;
        flex-wrap: nowrap;
    }

    #calendar .fc-toolbar-chunk:first-child {
        flex: 1 1 auto;
        min-width: 0;
    }

    #calendar .fc-toolbar-chunk:last-child {
        flex: 1 1 auto;
        justify-content: flex-end;
        min-width: 0;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
    }

    #calendar .fc-view-harness,
    [id^="calendar-"] .fc-view-harness {
        min-width: 36rem;
    }

    #calendar.fc-stacked-slots-week .fc-view-harness,
    [id^="calendar-"].fc-stacked-slots-week .fc-view-harness {
        --slots-stack-col-min: 7rem;
        min-width: calc(var(--slots-stack-cols, 6) * var(--slots-stack-col-min) + (var(--slots-stack-cols, 6) - 1) * 0.35rem);
        width: max-content;
    }

    #calendar .fc-timegrid-col,
    [id^="calendar-"] .fc-timegrid-col {
        min-width: 4.5rem;
    }

    .slots-stack-view--week {
        --slots-stack-col-min: 7rem;
        grid-template-columns: repeat(var(--slots-stack-cols, 6), minmax(var(--slots-stack-col-min), 1fr));
        min-width: calc(var(--slots-stack-cols, 6) * var(--slots-stack-col-min) + (var(--slots-stack-cols, 6) - 1) * 0.35rem);
        width: max-content;
        max-width: none;
        gap: 0.35rem;
    }

    .table-wrap {
        -webkit-overflow-scrolling: touch;
        max-width: 100%;
        overscroll-behavior-x: contain;
    }

    #bookings-table,
    .location-bookings-table {
        min-width: 36rem;
    }

    html.masseuse-admin-simple #bookings-table,
    html.masseuse-admin-simple .location-bookings-table {
        min-width: 28rem;
    }

    .slots-stack-header {
        font-size: 0.72rem;
        padding: 0.1rem 0.15rem 0.25rem;
    }

    .slot-pill {
        font-size: 0.72rem;
        padding: 0.4rem 0.35rem;
    }

    .slot-pill .slot-time-label {
        overflow: visible;
        text-overflow: clip;
    }
}

@media (max-width: 480px) {
    #calendar.fc-stacked-slots-week .fc-view-harness,
    [id^="calendar-"].fc-stacked-slots-week .fc-view-harness,
    .slots-stack-view--week {
        --slots-stack-col-min: 5.5rem;
    }

    .slots-stack-header {
        font-size: 0.68rem;
    }

    .slot-pill {
        font-size: 0.68rem;
        padding: 0.35rem 0.3rem;
    }

    #calendar .fc-timegrid-col,
    [id^="calendar-"] .fc-timegrid-col {
        min-width: 4rem;
    }
}

.fc .fc-timegrid-event {
    border-radius: 4px;
    border: 1px solid rgba(255, 255, 255, 0.35);
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
    margin-bottom: 1px;
    min-width: 2.75rem;
}

.fc .fc-timegrid-event .fc-event-main {
    padding: 2px 3px;
    overflow: visible;
}

.fc .fc-timegrid-event-harness-inset .fc-timegrid-event {
    box-shadow: 0 1px 3px rgba(15, 23, 42, 0.18);
}

.fc .fc-event {
    cursor: pointer;
    border: none;
    pointer-events: auto;
}

.fc .fc-event.is-selected {
    outline: 3px solid #2563eb !important;
    box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25);
    z-index: 3;
}

.fc .fc-event.is-selection-applying {
    z-index: 4;
}

.fc .fc-highlight {
    background: rgba(37, 99, 235, 0.15);
}

.fc .event-available {
    background: var(--available);
    border-color: var(--available);
    color: #fff;
}

.fc .event-booked {
    background: var(--booked);
    border-color: var(--booked);
    color: #fff;
}

.fc .event-manual {
    background: var(--manual-booking);
    border-color: var(--manual-booking);
    color: #fff;
}

.fc .event-pending {
    background: var(--pending-validation);
    border-color: var(--pending-validation);
    color: #1f2937;
}

.fc .event-blocked {
    background: var(--blocked);
    border-color: var(--blocked);
    color: #fff;
}

/* Month view: stacked event bars */
.fc-dayGridMonth-view .fc-daygrid-event {
    font-size: 0.72rem;
    border-radius: 3px;
    overflow: hidden;
    text-overflow: ellipsis;
    padding: 1px 4px;
}

.fc-dayGridMonth-view .slot-time-label {
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: inline-block;
    max-width: 100%;
}

.generate-date-controls {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.generate-date-controls .inline-form {
    margin-top: 0;
}

.generate-range-days {
    font-size: 0.95rem;
    color: var(--muted);
    align-self: center;
    white-space: nowrap;
    min-height: 1.25em;
}

.slot-visibility-window-dates {
    display: block;
    margin-top: 0.2rem;
    font-weight: 500;
    color: var(--text, inherit);
}

.generate-week-nav {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
    margin-top: 0.25rem;
}

.generate-week-label {
    font-size: 0.95rem;
    color: var(--muted);
}

.generate-week-hint {
    font-size: 0.9rem;
    color: var(--muted);
}

.inline-form {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
    align-items: end;
    margin-top: 1rem;
}

label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    font-size: 0.95rem;
}

input[type="text"],
input[type="tel"],
input[type="password"],
input[type="email"],
input[type="number"],
input[type="date"],
input[type="url"],
select,
textarea {
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    font: inherit;
    min-width: 220px;
    background: var(--input-bg, #fff);
    color: var(--input-text, var(--text));
}

textarea {
    resize: vertical;
    min-height: 4.5rem;
}

button,
.btn-primary,
.btn-secondary,
.btn-outline,
.btn-danger,
.btn-warning {
    border: none;
    border-radius: 8px;
    padding: 0.7rem 1rem;
    font: inherit;
    cursor: pointer;
}

.btn-primary {
    background: var(--primary);
    color: #fff;
}

.btn-primary:hover {
    background: var(--primary-dark);
}

.loading-spinner {
    display: inline-block;
    width: 1em;
    height: 1em;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: loading-spin 0.75s linear infinite;
    vertical-align: -0.125em;
    flex-shrink: 0;
}

@keyframes loading-spin {
    to {
        transform: rotate(360deg);
    }
}

.is-loading {
    cursor: wait;
    opacity: 0.92;
}

.is-loading .loading-spinner {
    margin-right: 0.45em;
}

.is-loading .loading-label {
    vertical-align: middle;
}

.btn-secondary {
    background: var(--surface-muted, #e5e7eb);
    color: var(--text);
    border: 1px solid var(--border);
}

.btn-outline {
    background: var(--card, #fff);
    color: var(--text);
    border: 1px solid var(--border, #cbd5e1);
    box-sizing: border-box;
}

.btn-outline:hover {
    background: var(--control-hover-bg, #f8fafc);
    border-color: var(--control-hover-border, #94a3b8);
}

.btn-danger {
    background: var(--danger);
    color: #fff;
}

.btn-warning {
    background: #d97706;
    color: #fff;
}

.btn-warning:hover {
    background: #b45309;
}

#manual-booking-dialog .manual-booking-actions {
    flex-wrap: wrap;
    gap: 0.5rem;
}

.btn-small {
    padding: 0.35rem 0.65rem;
    font-size: 0.85rem;
    border-radius: 6px;
}

.queue-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: nowrap;
    gap: 0.45rem;
    white-space: nowrap;
}

.queue-btn-group {
    display: inline-flex;
    vertical-align: middle;
}

.queue-btn-group .btn-small {
    position: relative;
    border-radius: 0;
}

.queue-btn-group .btn-small:first-child {
    border-radius: 6px 0 0 6px;
}

.queue-btn-group .btn-small:last-child {
    border-radius: 0 6px 6px 0;
}

.queue-btn-group .btn-small + .btn-small {
    margin-left: -1px;
}

.queue-btn-group .btn-outline {
    z-index: 1;
}

.queue-btn-group .btn-outline:hover,
.queue-btn-group .btn-outline:focus-visible {
    z-index: 2;
}

.smtp-queue-bulk-actions {
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}

.smtp-queue-bulk-actions .btn-small {
    min-height: 0;
}

.booking-actions {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    max-width: 100%;
}

.booking-actions-primary {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 0.35rem;
    align-items: stretch;
    max-width: 100%;
}

.booking-actions-primary .btn-small,
.booking-actions-menu-panel .btn-small {
    width: 100%;
    justify-content: flex-start;
    text-align: left;
}

.booking-actions-menu-panel .booking-modify-btn.is-disabled,
.booking-actions-menu-panel .booking-modify-btn:disabled,
.booking-actions-menu-panel .booking-modify-btn[aria-disabled="true"] {
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
}

.booking-actions-danger {
    display: flex;
    justify-content: stretch;
    width: 100%;
    margin-top: 0.15rem;
}

.booking-actions-menu {
    position: relative;
    display: inline-flex;
    justify-content: flex-end;
    max-width: 100%;
}

.booking-actions-menu-toggle {
    white-space: nowrap;
}

.booking-actions-menu-panel {
    position: absolute;
    top: calc(100% + 0.25rem);
    right: 0;
    z-index: 20;
    min-width: 11.5rem;
    max-width: min(18rem, 85vw);
    padding: 0.45rem;
    border: 1px solid var(--border, #d1d5db);
    border-radius: 8px;
    background: var(--card, #fff);
    box-shadow: 0 10px 24px rgba(15, 23, 42, 0.14);
}

/* Open Actions / Reçu menus must stack above sibling table rows. */
.booking-actions-menu.is-open {
    z-index: 40;
}

.booking-actions-menu.is-open .booking-actions-menu-panel {
    display: block;
    z-index: 1200;
}

#bookings-table tbody tr.is-open,
.location-bookings-table tbody tr.is-open,
.payment-list-table tbody tr.is-open,
.payment-receipts-browse-table tbody tr.is-open,
.bookings-list > li.is-open {
    position: relative;
    z-index: 6;
}

#bookings-table td.booking-actions-cell,
.location-bookings-table td.booking-actions-cell,
#bookings-table td.payment-col,
.location-bookings-table td.payment-col {
    overflow: visible;
}

/* Unmistakable red text control (own line under primary actions / alone for cancelled). */
.booking-hard-delete-btn {
    appearance: none;
    -webkit-appearance: none;
    display: inline-block;
    background: transparent;
    border: none;
    padding: 0.2rem 0;
    margin: 0;
    color: var(--danger, #dc2626);
    font: inherit;
    font-size: 0.85rem;
    font-weight: 700;
    line-height: 1.3;
    text-align: left;
    text-decoration: underline;
    white-space: normal;
    cursor: pointer;
    width: 100%;
}

.booking-hard-delete-btn:hover,
.booking-hard-delete-btn:focus-visible {
    color: #b91c1c;
    text-decoration: underline;
    outline: none;
}

.booking-actions-cancelled .booking-hard-delete-btn {
    font-size: 0.9rem;
}

.booking-actions-cell,
.bookings-list-actions {
    white-space: normal;
    max-width: 7.5rem;
    min-width: 5.5rem;
    width: 1%;
    vertical-align: top;
}

.bookings-list-actions {
    margin-left: auto;
    flex: 0 0 auto;
    max-width: none;
    min-width: 0;
}

.bookings-table-scroll {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

/* History table: denser, wrap where useful, no sticky actions overlay. */
#bookings-table,
.location-bookings-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.9rem;
}

#bookings-table th,
#bookings-table td,
.location-bookings-table th,
.location-bookings-table td {
    padding: 0.4rem 0.5rem;
    vertical-align: top;
}

#bookings-table th,
.location-bookings-table th {
    white-space: nowrap;
}

#bookings-table td.booking-note-cell,
.location-bookings-table td.booking-note-cell {
    max-width: 10rem;
    white-space: normal;
    word-break: break-word;
}

#bookings-table .booking-sync-meta-col,
.location-bookings-table .booking-sync-meta-col {
    text-align: center;
    white-space: nowrap;
}

#bookings-table .booking-actions-col,
.location-bookings-table .booking-actions-col {
    width: 1%;
    white-space: nowrap;
}

#bookings-table tbody tr.booking-hover-detail:hover td.booking-actions-cell,
#bookings-table tbody tr:hover td.booking-actions-cell {
    background: var(--surface-muted, #f3f4f6);
}

#bookings-table tr.booking-row-cancelled td.booking-actions-cell {
    background: #f9fafb;
}

#bookings-table tbody tr.booking-payment-due td.booking-actions-cell {
    background: #fffaf0;
}

#bookings-table tbody tr.booking-payment-due:hover td.booking-actions-cell {
    background: #fff4e5;
}

html[data-theme="dark"] .booking-actions-menu-panel {
    background: var(--card);
    border-color: var(--border, #334155);
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.45);
}

html[data-theme="dark"] #bookings-table tr.booking-row-cancelled td.booking-actions-cell {
    background: var(--surface-muted, #1f2937);
}

.reschedule-slots-list {
    display: grid;
    gap: 0.85rem;
    max-height: min(50vh, 22rem);
    overflow-y: auto;
    margin: 0.75rem 0 0;
}

.reschedule-day-title {
    margin: 0 0 0.4rem;
    font-size: 0.9rem;
    color: var(--muted);
}

.reschedule-day-slots {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.reschedule-slot-btn.is-selected {
    background: var(--primary);
    color: #fff;
}

.reschedule-slots-empty {
    margin: 0;
    color: var(--muted);
}

#reschedule-dialog,
#cancel-booking-dialog,
#ip-block-dialog {
    width: min(92vw, 520px);
}

#ip-block-duration-hours {
    width: 100%;
    max-width: 12rem;
    margin-top: 0.35rem;
}

.form-hint {
    margin: 0.35rem 0 0;
    font-size: 0.8125rem;
    color: var(--muted);
}

#smtp-test-dialog {
    width: min(92vw, 640px);
}

#smtp-queue-dialog {
    width: min(96vw, 960px);
    max-height: 90vh;
    overflow: auto;
}

.smtp-queue-dialog .smtp-queue-bulk-actions {
    margin-bottom: 0.75rem;
}

.smtp-test-status {
    margin: 0 0 0.75rem;
    font-weight: 600;
}

.smtp-test-status--pending {
    color: var(--muted);
}

.smtp-test-status--success {
    color: var(--success, #1a7f37);
}

.smtp-test-status--error {
    color: var(--danger);
}

.smtp-test-log-wrap {
    max-height: min(50vh, 360px);
    overflow: auto;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #0f172a;
}

.smtp-test-log {
    margin: 0;
    padding: 0.875rem 1rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.5;
    color: #e2e8f0;
    white-space: pre-wrap;
    word-break: break-word;
}
.smtp-test-log .smtp-log-ok {
    color: #86efac;
}

.smtp-test-log .smtp-log-fail {
    color: #fca5a5;
}

.smtp-test-log .smtp-log-detail {
    color: #94a3b8;
}

.smtp-test-log .smtp-log-response {
    color: #cbd5e1;
}

.action-row {
    display: flex;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin: 1rem 0;
}

.message {
    margin-top: 0.75rem;
    color: var(--text);
}

/* Résultats de tests multi-lignes (SSRF, SCRUD CalDAV) : respecter les retours ligne. */
#ssrf-test-message,
#caldav-message,
#caldav-private-message,
#admin-message,
#cancel-booking-message {
    white-space: pre-line;
}

/* 2ᵉ calendrier privé : affichage des champs même si le JS est en retard / partiel. */
.caldav-private-2-setup:has(#caldav-private-2-enabled:checked) .caldav-private-2-fields {
    display: block;
}

.caldav-private-2-setup:has(#caldav-private-2-enabled:checked) .caldav-private-2-fields[hidden] {
    display: block;
}

.caldav-private-2-setup:not(:has(#caldav-private-2-enabled:checked)) .caldav-private-2-fields {
    display: none !important;
}

.caldav-private-2-setup:has(#caldav-private-2-reuse-main:checked) .caldav-private-2-manual-fields {
    display: none !important;
}

.caldav-private-2-setup:not(:has(#caldav-private-2-reuse-main:checked)) .caldav-private-2-manual-fields[hidden] {
    display: block;
}

/* Encadré lecture seule : contenu actuel de la whitelist automatique SSRF. */
.ssrf-auto-list {
    margin-top: 0.75rem;
    padding: 0.75rem 0.9rem;
    border: 1px solid var(--border, #d8d8d8);
    border-radius: 6px;
    background: var(--panel-muted, rgba(0, 0, 0, 0.03));
}

.ssrf-auto-list__title {
    margin: 0 0 0.35rem;
    font-weight: 600;
}

.ssrf-auto-list__entries {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: 0.25rem;
}

.ssrf-auto-list__sources {
    color: var(--muted, #666);
}

/* Bouton « Enregistrer » injecté à côté de chaque sélecteur de journalisation. */
.logging-toggle-save {
    margin-left: 0.5rem;
    vertical-align: middle;
}

.success-location-info {
    margin-top: 0.75rem;
}

.success-location-info .contact-address:first-child {
    margin-top: 0;
}

#step-success #cancel-reason-label {
    margin-top: 1.5rem;
}

.message.success {
    color: var(--success, #1a7f37);
}

.message.warning {
    color: var(--warning, #9a6700);
}

#smtp-message {
    white-space: pre-line;
}

.backup-test-message,
#backup-managed-message {
    white-space: pre-line;
}

.backup-run-progress {
    margin-top: 0.75rem;
    padding: 0.75rem 0.9rem;
    border: 1px solid var(--border, #d8d8d8);
    border-radius: 6px;
    background: var(--panel-muted, rgba(0, 0, 0, 0.03));
    color: var(--text);
}

.backup-run-progress__status {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.5rem;
}

.backup-run-progress__label {
    font-weight: 600;
    color: inherit;
}

.backup-run-progress__track {
    height: 0.45rem;
    border-radius: 999px;
    background: var(--border, #d8d8d8);
    overflow: hidden;
}

.backup-run-progress__fill {
    height: 100%;
    width: 0;
    border-radius: inherit;
    background: var(--primary, #2f6f5e);
    transition: width 0.25s ease;
}

.backup-run-progress.is-error .backup-run-progress__fill {
    background: var(--danger, #b42318);
}

.backup-run-progress.is-done .backup-run-progress__fill {
    background: var(--success, #1a7f37);
}

html[data-theme="dark"] .backup-run-progress {
    background: var(--surface-muted, #243028);
    border-color: var(--border, #3d4a42);
    color: var(--text, #f0f3f1);
}

html[data-theme="dark"] .backup-run-progress__track {
    background: rgba(255, 255, 255, 0.12);
}

html[data-theme="dark"] .backup-run-progress__fill {
    background: var(--primary, #6fbfa8);
}

html[data-theme="dark"] .backup-run-progress.is-error .backup-run-progress__fill {
    background: var(--danger, #f97066);
}

html[data-theme="dark"] .backup-run-progress.is-done .backup-run-progress__fill {
    background: var(--success, #3dd68c);
}

.backup-restore-skipped-details {
    margin-top: 0.5rem;
}

.backup-restore-skipped-details summary {
    cursor: pointer;
    color: inherit;
}

.backup-restore-skipped-list {
    margin: 0.35rem 0 0;
    padding-left: 1.25rem;
    font-size: 0.9em;
}

.backup-restore-skipped-list code {
    word-break: break-all;
}

.panel-title-row {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.panel-title-row h2 {
    margin: 0;
}

.payment-receipt-browse-actions {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    margin-left: auto;
    flex-wrap: wrap;
}

.payment-receipts-integrity-message {
    margin: 1rem 0 0.85rem;
    padding: 0.9rem 1.1rem;
    border: 1px solid var(--border, #d8d8d8);
    border-radius: 8px;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.45;
    white-space: pre-wrap;
}

.payment-receipts-integrity-message.success {
    background: #e8f5e9;
    color: #14532d;
    border-color: #86efac;
}

.payment-receipts-integrity-message.error {
    background: #fef2f2;
    color: #7f1d1d;
    border-color: #fca5a5;
}

html[data-theme="dark"] .payment-receipts-integrity-message.success {
    background: #14261c;
    color: #bbf7d0;
    border-color: #3f7a55;
}

html[data-theme="dark"] .payment-receipts-integrity-message.error {
    background: #2a1c1c;
    color: #fecaca;
    border-color: #7a3a3a;
}

.payment-receipts-integrity-message.warning,
.payment-receipts-viewer-integrity.warning {
    background: #fff7ed;
    color: #9a3412;
    border-color: #fdba74;
}

html[data-theme="dark"] .payment-receipts-integrity-message.warning,
html[data-theme="dark"] .payment-receipts-viewer-integrity.warning {
    background: #2a2118;
    color: #fed7aa;
    border-color: #9a6b32;
}

.payment-receipts-integrity-message.checking,
.payment-receipts-viewer-integrity.checking {
    background: #eff6ff;
    color: #1e3a8a;
    border-color: #93c5fd;
}

html[data-theme="dark"] .payment-receipts-integrity-message.checking,
html[data-theme="dark"] .payment-receipts-viewer-integrity.checking {
    background: #152033;
    color: #bfdbfe;
    border-color: #3b5f8a;
}

.payment-receipts-browse-dialog {
    width: min(40rem, calc(100vw - 2rem));
    max-width: 100%;
}

.payment-receipts-export-dialog {
    width: min(34rem, calc(100vw - 2rem));
    max-width: 100%;
}

.payment-receipts-export-form {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.payment-receipts-export-fieldset {
    border: 1px solid var(--border, #d0d4dc);
    border-radius: 0.5rem;
    margin: 0;
    padding: 0.75rem 0.9rem 0.85rem;
}

.payment-receipts-export-fieldset legend {
    font-weight: 600;
    padding: 0 0.35rem;
}

.payment-receipts-export-options {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.4rem;
    margin-top: 0.25rem;
}

.payment-receipts-export-options--inline {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem 1.25rem;
}

.payment-receipts-export-radio {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: 0.5rem;
    margin: 0;
    min-height: 1.65rem;
    cursor: pointer;
}

.payment-receipts-export-radio input[type="radio"] {
    margin: 0;
    flex-shrink: 0;
}

.payment-receipts-export-radio span {
    line-height: 1.35;
}

.payment-receipts-export-path-input {
    width: 100%;
    box-sizing: border-box;
}

.payment-receipts-export-period[hidden],
.payment-receipts-export-dest-path[hidden],
.export-path-info[hidden],
.payment-receipts-browse-path-row[hidden] {
    display: none !important;
}

.payment-receipts-export-period {
    margin-top: 0.65rem;
    padding-top: 0.65rem;
    border-top: 1px solid var(--border, #e4e7ec);
}

.payment-receipts-export-period-fields {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.65rem 0.85rem;
}

.payment-receipts-export-period-field {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 0;
}

.payment-receipts-export-period-field .payment-receipts-export-label {
    font-weight: 500;
    padding-top: 0;
}

.payment-receipts-export-period .export-period-date-group {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    width: 100%;
}

.payment-receipts-export-period .export-period-input {
    flex: 1 1 auto;
    min-width: 0;
    width: 100%;
}

.payment-receipts-export-date-btn {
    flex: 0 0 auto;
}

.export-path-info {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.65rem;
    margin: 0.65rem 0 0;
    padding: 0.55rem 0.7rem;
    border-radius: 0.45rem;
    background: var(--surface-muted, #f4f6f9);
    border: 1px solid var(--border, #e4e7ec);
    font-size: 0.92rem;
}

.export-path-info-label {
    color: var(--muted, #5f6b7a);
    font-weight: 500;
}

.export-path-info-value {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.9em;
    word-break: break-all;
}

.payment-receipts-export-dest-path {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-top: 0.65rem;
    padding-top: 0.65rem;
    border-top: 1px solid var(--border, #e4e7ec);
}

.payment-receipts-export-dest-path .payment-receipts-export-label {
    font-weight: 500;
    padding-top: 0;
}

.payment-receipts-export-dest-webdav-hint {
    margin: 0;
}

.payment-receipts-export-delete-block {
    margin-top: 0.1rem;
    padding: 0.7rem 0.8rem;
    border: 1px solid var(--border, #e4e7ec);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8f9fb);
}

.payment-receipts-export-delete {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 0.55rem;
    margin: 0;
    cursor: pointer;
}

.payment-receipts-export-delete-hint {
    margin: 0.35rem 0 0 1.55rem;
}

.payment-receipts-browse-path-row {
    display: grid;
    grid-template-columns: minmax(5.5rem, 7rem) minmax(0, 1fr);
    gap: 0.65rem 0.85rem;
    align-items: start;
    margin: 0.5rem 0 0.25rem;
}

.payment-receipts-browse-path-row .payment-receipts-export-label {
    font-weight: 500;
    padding-top: 0.45rem;
}

.payment-receipts-browse-path-row .payment-receipts-export-field {
    min-width: 0;
}

.payment-receipts-browse-local-path {
    display: block;
    word-break: break-all;
    font-size: 0.92rem;
}

.payment-receipts-browse-folder {
    margin: 0.15rem 0 0.35rem;
}

@media (max-width: 34rem) {
    .payment-receipts-export-period-fields {
        grid-template-columns: 1fr;
    }
}

.receipt-open-page {
    min-height: 100vh;
    margin: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.25rem;
}

.receipt-open-card {
    width: min(28rem, 100%);
    padding: 1.25rem 1.4rem 1.4rem;
    border-radius: 0.7rem;
    border: 1px solid var(--border, #d0d4dc);
    background: var(--surface, #fff);
}

.receipt-open-card h1 {
    margin: 0 0 1rem;
    font-size: 1.15rem;
}

.receipt-open-meta {
    margin: 0 0 1rem;
    display: grid;
    gap: 0.75rem;
}

.receipt-open-meta div {
    margin: 0;
}

.receipt-open-meta dt {
    margin: 0;
    font-size: 0.82rem;
    color: var(--muted, #5f6b7a);
    font-weight: 500;
}

.receipt-open-meta dd {
    margin: 0.2rem 0 0;
    font-size: 1.05rem;
    font-weight: 600;
}

.receipt-open-hash.is-checking {
    color: var(--muted, #5f6b7a);
    font-weight: 500;
}

.receipt-open-hash.is-ok {
    color: var(--success, #157a3a);
}

.receipt-open-hash.is-nok,
.receipt-open-hash.is-error {
    color: var(--danger, #b42318);
}

.receipt-open-card .btn-primary {
    display: inline-flex;
    margin-top: 0.35rem;
}

.receipt-open-card .btn-primary[hidden],
.receipt-open-card .message[hidden] {
    display: none !important;
}

.payment-receipts-viewer-dialog {
    width: min(52rem, calc(100vw - 1.25rem));
    max-width: 100%;
    max-height: min(94vh, 56rem);
    overflow: auto;
}

.payment-receipts-viewer-meta {
    margin: 0.25rem 0 0.5rem;
    color: var(--muted);
    font-size: 0.95rem;
}

.payment-receipts-viewer-integrity {
    margin: 0.35rem 0 0.65rem;
    padding: 0.75rem 0.95rem;
    border: 1px solid var(--border, #d8d8d8);
    border-radius: 8px;
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.4;
}

.payment-receipts-viewer-integrity.success {
    background: #e8f5e9;
    color: #14532d;
    border-color: #86efac;
}

html[data-theme="dark"] .payment-receipts-viewer-integrity.success {
    background: #14261c;
    color: #bbf7d0;
    border-color: #3f7a55;
}

.payment-receipts-viewer-restore {
    margin: 0.35rem 0 0.55rem;
    padding: 0.55rem 0.7rem;
    border-radius: 0.45rem;
    border: 1px dashed var(--border, #d0d4dc);
    background: var(--surface-muted, #f4f6f9);
}

.payment-receipts-viewer-restore-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    margin-top: 0.4rem;
}

.payment-receipts-viewer-actions {
    flex-wrap: wrap;
}

.payment-receipts-viewer-frame-wrap {
    margin: 0.5rem 0;
    border: 1px solid var(--border, #d0d4dc);
    background: #fff;
    width: 100%;
    height: min(60vh, 28rem);
    min-height: 20rem;
}

.payment-receipts-viewer-frame-wrap:not([hidden]) {
    display: block;
}

.payment-receipts-viewer-frame {
    width: 100%;
    height: 100%;
    min-height: 20rem;
    border: 0;
    display: block;
    background: #f7f8fa;
}

.payment-receipts-viewer-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin: 0.75rem 0 0.25rem;
    flex-wrap: wrap;
}

.payment-receipts-viewer-nav-btn {
    min-height: 3rem;
    min-width: 8.5rem;
    padding: 0.75rem 1rem;
    font-size: 1rem;
}

.payment-receipts-viewer-counter {
    flex: 1 1 auto;
    text-align: center;
    font-variant-numeric: tabular-nums;
    font-weight: 600;
}

.admin-log-scroll-wrap--payment-receipts {
    max-height: 16rem;
    margin: 0.75rem 0;
}

.panel-location-label {
    color: var(--muted);
    font-size: 0.95rem;
    font-weight: 400;
}

.panel-location-label::before {
    content: '·';
    margin: 0 0.45rem;
    color: var(--muted);
}

.panel-subtitle {
    margin: 0.35rem 0 0.75rem;
}

.panel-header-row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 0.75rem;
}

.panel-header-row .panel-subtitle {
    margin-bottom: 0;
}

.panel-header-actions {
    display: flex;
    align-items: flex-end;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.admin-advanced-section {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    margin-bottom: 1.25rem;
    scroll-margin-top: 1.25rem;
}

.admin-nested-section {
    border: 1px solid var(--border);
    border-radius: 10px;
    margin: 0 0 1rem;
    padding: 0.15rem 0.85rem 0.85rem;
    background: color-mix(in srgb, var(--card) 88%, var(--border));
}

.admin-nested-section > summary {
    list-style: none;
    cursor: pointer;
    padding: 0.85rem 0.15rem;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    user-select: none;
}

.admin-nested-section > summary::-webkit-details-marker {
    display: none;
}

.admin-advanced-summary {
    list-style: none;
    cursor: pointer;
    padding: 1.25rem;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    user-select: none;
}

/*
 * Chromium: display:flex on <summary> can open-then-close on mouse click
 * (touch often OK). Route hits to the summary itself; re-enable controls.
 */
.admin-advanced-summary > *,
.admin-advanced-section > summary > * {
    pointer-events: none;
}

.admin-advanced-summary a,
.admin-advanced-summary button,
.admin-advanced-summary input,
.admin-advanced-summary select,
.admin-advanced-summary textarea,
.admin-advanced-summary label,
.admin-advanced-section > summary a,
.admin-advanced-section > summary button,
.admin-advanced-section > summary input,
.admin-advanced-section > summary select,
.admin-advanced-section > summary textarea,
.admin-advanced-section > summary label {
    pointer-events: auto;
}

.admin-advanced-summary::-webkit-details-marker {
    display: none;
}

.admin-advanced-summary::marker {
    content: "";
}

.admin-advanced-title {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--text);
}

.level-match-badge {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    margin-left: 0.15rem;
    padding: 0.15rem 0.45rem;
    border: 1px solid var(--border);
    border-radius: 0.35rem;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.2;
    vertical-align: middle;
    white-space: nowrap;
}

.level-match-badge--ok {
    background: #f0fdf4;
    color: #166534;
    border-color: #bbf7d0;
}

.level-match-badge--custom {
    background: #fff7ed;
    color: #9a3412;
    border-color: #fed7aa;
}

.level-match-badge__compare {
    appearance: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    font-weight: 700;
    text-decoration: underline;
    cursor: pointer;
}

.level-match-badge__compare:hover,
.level-match-badge__compare:focus-visible {
    opacity: 0.85;
}

.level-preset-current-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.12rem 0.55rem;
    border: 1px solid var(--border);
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
}

.level-preset-current-badge--secure,
.level-preset-current-badge--high,
.level-preset-current-badge--standard,
.level-preset-current-badge--elevated,
.level-preset-current-badge--full {
    background: #ecfdf5;
    color: #166534;
    border-color: #bbf7d0;
}

.level-preset-current-badge--full {
    background: #d1fae5;
    color: #14532d;
    border-color: #86efac;
}

.level-preset-current-badge--normal,
.level-preset-current-badge--minimal {
    background: #f8fafc;
    color: #334155;
    border-color: #cbd5e1;
}

.level-preset-current-badge--weak,
.level-preset-current-badge--low,
.level-preset-current-badge--off {
    background: #fff1f2;
    color: #9f1239;
    border-color: #fecdd3;
}

.level-preset-current-badge--custom {
    background: #fffbeb;
    color: #92400e;
    border-color: #fde68a;
}

html[data-theme="dark"] .level-preset-current-badge--secure,
html[data-theme="dark"] .level-preset-current-badge--high,
html[data-theme="dark"] .level-preset-current-badge--standard,
html[data-theme="dark"] .level-preset-current-badge--elevated,
html[data-theme="dark"] .level-preset-current-badge--full {
    background: rgba(22, 101, 52, 0.22);
    color: #86efac;
    border-color: rgba(134, 239, 172, 0.35);
}

html[data-theme="dark"] .level-preset-current-badge--full {
    background: rgba(20, 83, 45, 0.35);
    color: #bbf7d0;
    border-color: rgba(134, 239, 172, 0.5);
}

html[data-theme="dark"] .level-preset-current-badge--normal,
html[data-theme="dark"] .level-preset-current-badge--minimal {
    background: rgba(51, 65, 85, 0.35);
    color: #cbd5e1;
    border-color: rgba(148, 163, 184, 0.35);
}

html[data-theme="dark"] .level-preset-current-badge--weak,
html[data-theme="dark"] .level-preset-current-badge--low,
html[data-theme="dark"] .level-preset-current-badge--off {
    background: rgba(159, 18, 57, 0.22);
    color: #fda4af;
    border-color: rgba(253, 164, 175, 0.35);
}

html[data-theme="dark"] .level-preset-current-badge--custom {
    background: rgba(146, 64, 14, 0.22);
    color: #fcd34d;
    border-color: rgba(252, 211, 77, 0.35);
}

.level-preset-current-badge--neutral {
    background: var(--surface-muted, #f3f4f6);
    color: var(--text-muted, #6b7280);
    border-color: var(--border-color, #d1d5db);
}

html[data-theme="dark"] .level-preset-current-badge--neutral {
    background: rgba(255, 255, 255, 0.06);
    color: #94a3b8;
    border-color: rgba(148, 163, 184, 0.25);
}

.admin-advanced-title::before {
    content: "▸";
    display: inline-block;
    font-size: 0.9rem;
    color: var(--muted);
    transition: transform 0.15s ease;
}

.admin-advanced-section[open] .admin-advanced-title::before {
    transform: rotate(90deg);
}

.admin-advanced-hint {
    font-size: 0.95rem;
    color: var(--muted);
    line-height: 1.4;
    padding-left: 1.4rem;
}

.admin-advanced-content {
    padding: 0 1.25rem 1.25rem;
}

.admin-advanced-content > .panel:first-child {
    margin-top: 0;
}

.admin-advanced-content > .panel:last-child {
    margin-bottom: 0;
}

.admin-settings-details {
    margin-bottom: 1.25rem;
}

.admin-settings-details.panel {
    padding: 0;
}

/* Admin masseuse — colored left accent bars (::before avoids border shorthand conflicts) */
.panel.admin-panel-accent,
.admin-settings-details.admin-panel-accent,
.admin-advanced-section.admin-panel-accent {
    position: relative;
}

.panel.admin-panel-accent::before,
.admin-settings-details.admin-panel-accent::before,
.admin-advanced-section.admin-panel-accent::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 5px;
    background: var(--admin-panel-accent, #2563eb);
    border-radius: 12px 0 0 12px;
    pointer-events: none;
    z-index: 1;
}

.admin-panel-accent--blue { --admin-panel-accent: #2563eb; }
.admin-panel-accent--green { --admin-panel-accent: #16a34a; }
.admin-panel-accent--purple { --admin-panel-accent: #7c3aed; }
.admin-panel-accent--slate { --admin-panel-accent: #64748b; }
.admin-panel-accent--slate-dark { --admin-panel-accent: #475569; }
.admin-panel-accent--amber { --admin-panel-accent: #d97706; }
.admin-panel-accent--teal { --admin-panel-accent: #0d9488; }
.admin-panel-accent--sky { --admin-panel-accent: #0284c7; }
.admin-panel-accent--indigo { --admin-panel-accent: #4f46e5; }
.admin-panel-accent--violet { --admin-panel-accent: #9333ea; }
.admin-panel-accent--cyan { --admin-panel-accent: #0891b2; }
.admin-panel-accent--lime { --admin-panel-accent: #65a30d; }
.admin-panel-accent--orange { --admin-panel-accent: #ea580c; }
.admin-panel-accent--rose { --admin-panel-accent: #e11d48; }
.admin-panel-accent--fuchsia { --admin-panel-accent: #c026d3; }
.admin-panel-accent--yellow { --admin-panel-accent: #ca8a04; }

.payment-tracking-panel.admin-panel-accent--teal.payment-tracking-panel--active {
    --admin-panel-accent: #059669;
}

.admin-settings-summary {
    list-style: none;
    cursor: pointer;
    padding: 1rem 1.25rem;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    user-select: none;
}

.admin-settings-summary > * {
    pointer-events: none;
}

.admin-settings-summary a,
.admin-settings-summary button,
.admin-settings-summary input,
.admin-settings-summary select,
.admin-settings-summary textarea,
.admin-settings-summary label {
    pointer-events: auto;
}

.admin-settings-summary::-webkit-details-marker {
    display: none;
}

.admin-settings-summary::marker {
    content: "";
}

.admin-settings-summary-main {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 0;
    flex: 1;
    padding-left: 1.25rem;
    position: relative;
}

.admin-settings-summary-main::before {
    content: "▸";
    position: absolute;
    left: 0;
    top: 0.15rem;
    font-size: 0.85rem;
    color: var(--muted);
    transition: transform 0.15s ease;
}

.admin-settings-details[open] .admin-settings-summary-main::before {
    transform: rotate(90deg);
}

.admin-settings-title {
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--text);
    line-height: 1.3;
}

.admin-settings-summary-title {
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--text);
    line-height: 1.3;
}

.admin-settings-collapsed-hint {
    font-size: 0.88rem;
    color: var(--muted);
    line-height: 1.35;
}

.admin-settings-details[open] .admin-settings-collapsed-hint {
    display: none;
}

.admin-settings-status-badge {
    flex-shrink: 0;
    margin-top: 0.05rem;
}

.admin-settings-status-badge.status-muted {
    background: #f3f4f6;
    border-color: #d1d5db;
    color: #6b7280;
}

.admin-settings-content {
    padding: 0 1.25rem 1.25rem;
}

.admin-settings-details.caldav-private-scheduling-settings,
.admin-settings-details.caldav-bookings-scheduling-settings {
    margin-top: 1rem;
    border-top: 1px solid var(--border);
    border-right: 1px solid var(--border);
    border-bottom: 1px solid var(--border);
    border-radius: 10px;
    background: var(--bg, #fafafa);
}

.admin-settings-details.caldav-private-scheduling-settings .admin-settings-summary,
.admin-settings-details.caldav-bookings-scheduling-settings .admin-settings-summary {
    padding: 0.85rem 1rem;
}

.admin-settings-details.caldav-private-scheduling-settings .admin-settings-content,
.admin-settings-details.caldav-bookings-scheduling-settings .admin-settings-content {
    padding: 0 1rem 1rem;
}

.admin-settings-details.admin-selection-collapsible {
    margin-top: 1rem;
    border-top: 1px solid var(--border);
    border-right: 1px solid var(--border);
    border-bottom: 1px solid var(--border);
    border-radius: 10px;
    background: var(--bg, #fafafa);
}

.admin-settings-details.admin-selection-collapsible .admin-settings-summary {
    padding: 0.85rem 1rem;
}

.admin-settings-details.admin-selection-collapsible .admin-settings-content {
    padding: 0 1rem 1rem;
}

.admin-csv-export-archives-group {
    margin-top: 1rem;
}

.admin-csv-export-archives-group-content {
    padding-top: 0;
}

.admin-csv-export-archives-group-content > .admin-settings-details {
    margin-left: 0.75rem;
    margin-bottom: 0.75rem;
}

.admin-csv-export-archives-group-content > .admin-settings-details:last-child {
    margin-bottom: 0;
}

.admin-csv-export-archives-group-content > .admin-settings-details.panel {
    box-shadow: none;
}

.admin-csv-export-archives-group-content > .csv-archives-block {
    margin-top: 0;
}

.admin-csv-export-archives-group-content > .admin-settings-details + .admin-settings-details {
    margin-top: 0.75rem;
}

.admin-technical-sections-toolbar {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 1rem;
}

.admin-advanced-content > .admin-advanced-section {
    margin-bottom: 1rem;
}

.admin-advanced-content > .admin-advanced-section:last-child {
    margin-bottom: 0;
}

.error {
    color: var(--danger);
}

.link-muted {
    color: var(--muted);
}

.link-muted:hover,
.link-muted:focus-visible {
    color: var(--primary);
}

/* Dark theme: readable panels, forms, topbar links, muted copy */
html[data-theme="dark"] .topbar-actions > .link-muted {
    color: var(--text);
}

html[data-theme="dark"] .topbar-actions > .link-muted:hover,
html[data-theme="dark"] .topbar-actions > .link-muted:focus-visible {
    color: var(--primary);
}

html[data-theme="dark"] .panel,
html[data-theme="dark"] .admin-advanced-section,
html[data-theme="dark"] .admin-technical-section,
html[data-theme="dark"] details.admin-advanced-section,
html[data-theme="dark"] .settings-form {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .field-hint,
html[data-theme="dark"] .form-hint,
html[data-theme="dark"] .hint,
html[data-theme="dark"] .muted,
html[data-theme="dark"] .schedule-group-desc,
html[data-theme="dark"] .admin-advanced-summary-desc,
html[data-theme="dark"] .admin-advanced-hint,
html[data-theme="dark"] .panel-subtitle,
html[data-theme="dark"] .location-auto-hint,
html[data-theme="dark"] .location-seo-summary,
html[data-theme="dark"] .location-seo-summary li,
html[data-theme="dark"] .geoloc-cache-option-hint,
html[data-theme="dark"] .cron-task-prereq-hint,
html[data-theme="dark"] .cron-task-queue-readiness-hint,
html[data-theme="dark"] .cron-dsm-callout__note,
html[data-theme="dark"] .cron-task-guide__platform-note,
html[data-theme="dark"] .upload-security-card__public-hint,
html[data-theme="dark"] .upload-security-card__defaults-summary,
html[data-theme="dark"] .upload-security-card__protections-label,
html[data-theme="dark"] .upload-security-card__where-label,
html[data-theme="dark"] .public-file-meta__row dt,
html[data-theme="dark"] .booking-validation-rule-hint,
html[data-theme="dark"] p,
html[data-theme="dark"] .topbar p,
html[data-theme="dark"] small {
    color: var(--muted);
}

html[data-theme="dark"] h1,
html[data-theme="dark"] h2,
html[data-theme="dark"] h3,
html[data-theme="dark"] label,
html[data-theme="dark"] .checkbox-label,
html[data-theme="dark"] .settings-checkbox,
html[data-theme="dark"] .radio-label,
html[data-theme="dark"] .toggle-switch,
html[data-theme="dark"] .toggle-switch__label,
html[data-theme="dark"] .settings-subheading,
html[data-theme="dark"] .admin-advanced-summary-title,
html[data-theme="dark"] .admin-advanced-title,
html[data-theme="dark"] .admin-settings-summary-title,
html[data-theme="dark"] .schedule-advanced-summary,
html[data-theme="dark"] .schedule-group-title,
html[data-theme="dark"] .public-file-card__title,
html[data-theme="dark"] .public-file-meta__row dd,
html[data-theme="dark"] summary {
    color: var(--text);
}

html[data-theme="dark"] input[type="text"],
html[data-theme="dark"] input[type="tel"],
html[data-theme="dark"] input[type="password"],
html[data-theme="dark"] input[type="email"],
html[data-theme="dark"] input[type="number"],
html[data-theme="dark"] input[type="date"],
html[data-theme="dark"] input[type="url"],
html[data-theme="dark"] input[type="time"],
html[data-theme="dark"] input[type="search"],
html[data-theme="dark"] select,
html[data-theme="dark"] textarea {
    background: var(--input-bg);
    color: var(--input-text);
    border-color: var(--border);
}

html[data-theme="dark"] input::placeholder,
html[data-theme="dark"] textarea::placeholder {
    color: #8a948c;
    opacity: 1;
}

html[data-theme="dark"] .btn-secondary {
    background: var(--surface-muted);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .btn-primary {
    color: #121612;
}

html[data-theme="dark"] .btn-outline {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

/* Captcha refresh stays a light chip next to the captcha image: dark icon on light bg. */
html[data-theme="dark"] .btn-captcha-refresh {
    background: #e5e7eb;
    color: #1f2937;
    border-color: #9ca3af;
}

html[data-theme="dark"] .btn-captcha-refresh:hover {
    background: #d1d5db;
    color: #111827;
    border-color: #6b7280;
}

html[data-theme="dark"] .btn-captcha-refresh:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

html[data-theme="dark"] .lang-dropdown-toggle,
html[data-theme="dark"] button.night-mode-toggle,
html[data-theme="dark"] .night-mode-toggle {
    background: var(--surface-muted);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .site-image-library__item,
html[data-theme="dark"] .site-image-hero-preview {
    background: var(--surface-muted);
    border-color: var(--border);
    color: var(--text);
}

html[data-theme="dark"] .site-image-library__item.is-selected {
    background: #2c3a32;
    border-color: var(--primary);
}

html[data-theme="dark"] .site-image-library__name {
    color: var(--muted);
}

html[data-theme="dark"] table,
html[data-theme="dark"] .admin-log-scroll-wrap,
html[data-theme="dark"] .csv-preview-table,
html[data-theme="dark"] .payment-list-table,
html[data-theme="dark"] .app-access-log-table,
html[data-theme="dark"] .booking-audit-log-table,
html[data-theme="dark"] .admin-action-log-table,
html[data-theme="dark"] .access-log-table,
html[data-theme="dark"] .email-log-table,
html[data-theme="dark"] .admin-log-table,
html[data-theme="dark"] .logs-viewer-files-table,
html[data-theme="dark"] .logs-viewer-data-table,
html[data-theme="dark"] .security-level-compare-table,
html[data-theme="dark"] .security-stats-table {
    color: var(--text);
    border-color: var(--border);
    background: var(--card);
}

html[data-theme="dark"] th,
html[data-theme="dark"] td {
    color: var(--text);
    border-bottom-color: var(--border);
}

html[data-theme="dark"] th {
    color: var(--muted);
}

html[data-theme="dark"] .admin-log-scroll-wrap thead th,
html[data-theme="dark"] .logs-viewer-data-table thead th,
html[data-theme="dark"] .logs-viewer-files-table thead th {
    background: var(--card);
    color: var(--muted);
}

html[data-theme="dark"] dialog {
    background: var(--card);
    color: var(--text);
    border: 1px solid var(--border);
}

html[data-theme="dark"] dialog::backdrop {
    background: rgba(0, 0, 0, 0.65);
}

html[data-theme="dark"] .badge,
html[data-theme="dark"] .wizard-step {
    background: var(--surface-muted);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .message {
    color: var(--text);
}

/* Next-slot banner: keep readable contrast on sage surface (overrides .message). */
html[data-theme="dark"] .message.client-slots-next-notice,
html[data-theme="dark"] .client-slots-next-notice {
    background: var(--slots-sage-soft, #2a332e);
    border-color: var(--slots-sage-border, #5a6b5e);
    color: var(--slots-ink, #f0f3f1);
}

html[data-theme="dark"] .client-slots-next-hint {
    color: var(--slots-ink, #f0f3f1);
}

html[data-theme="dark"] a {
    color: var(--primary);
}

html[data-theme="dark"] .link-muted {
    color: var(--muted);
}

/* Dark theme: keep light-tint status panels readable (surface + ink) */
html[data-theme="dark"] .client-slots-list {
    --slots-sage: #a3b9a1;
    --slots-sage-soft: #2a332e;
    --slots-sage-border: #5a6b5e;
    --slots-ink: #f0f3f1;
}

html[data-theme="dark"] .payment-pending-panel,
html[data-theme="dark"] .seo-faq-item,
html[data-theme="dark"] .massage-card,
html[data-theme="dark"] .security-header-param,
html[data-theme="dark"] .security-header-param--readonly,
html[data-theme="dark"] .ics-preview-card,
html[data-theme="dark"] .bookings-list li,
html[data-theme="dark"] .french-date-calendar-popup,
html[data-theme="dark"] .cms-preview-frame,
html[data-theme="dark"] .cms-preview-meta,
html[data-theme="dark"] .cms-preview-footer,
html[data-theme="dark"] .cms-preview-placeholder,
html[data-theme="dark"] .upload-security-card__header,
html[data-theme="dark"] .upload-security-card__where,
html[data-theme="dark"] .maintenance-bar,
html[data-theme="dark"] .caldav-health-banner,
html[data-theme="dark"] .smtp-health-banner,
html[data-theme="dark"] .smtp-queue-health-banner,
html[data-theme="dark"] .webdav-health-banner,
html[data-theme="dark"] .pdf-health-banner,
html[data-theme="dark"] .selective-purge-card,
html[data-theme="dark"] .auth-card,
html[data-theme="dark"] .topbar,
html[data-theme="dark"] .site-footer,
html[data-theme="dark"] .client-slot-pill,
html[data-theme="dark"] .wizard-step:not(.is-active):not(.is-done) {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .payment-pending-panel,
html[data-theme="dark"] .security-header-param--readonly,
html[data-theme="dark"] .cms-preview-frame,
html[data-theme="dark"] .cms-preview-footer,
html[data-theme="dark"] .upload-security-card__header,
html[data-theme="dark"] .maintenance-bar,
html[data-theme="dark"] .bookings-list li,
html[data-theme="dark"] .caldav-health-banner,
html[data-theme="dark"] .smtp-health-banner,
html[data-theme="dark"] .smtp-queue-health-banner,
html[data-theme="dark"] .webdav-health-banner,
html[data-theme="dark"] .pdf-health-banner {
    background: var(--surface-muted);
}

html[data-theme="dark"] .security-header-param__value,
html[data-theme="dark"] .security-header-param__value code,
html[data-theme="dark"] .security-header-reference,
html[data-theme="dark"] .seo-faq-item p,
html[data-theme="dark"] .seo-faq-item li,
html[data-theme="dark"] .seo-faq-transport,
html[data-theme="dark"] .seo-faq-directions,
html[data-theme="dark"] .payment-earnings-pie-legend .payment-earnings-chart-swatch {
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.22);
}

html[data-theme="dark"] .payment-earnings-bar-value-delta.is-up {
    color: #7dcea0;
}

html[data-theme="dark"] .payment-earnings-bar-value-delta.is-down {
    color: #f5b7b1;
}

html[data-theme="dark"] .payment-earnings-chart-legend-label,
html[data-theme="dark"] .payment-earnings-chart-legend-value {
    color: #f0f3f1;
}

html[data-theme="dark"] .payment-earnings-bar-count-num {
    color: #071828;
    text-shadow: 0 0 4px rgba(255, 255, 255, 0.55);
}

html[data-theme="dark"] .payment-earnings-bar-count-unit {
    color: #071828;
    background: none;
    text-shadow: 0 0 4px rgba(255, 255, 255, 0.4);
}

html[data-theme="dark"] .payment-earnings-bar-count-cell.is-short .payment-earnings-bar-count-unit {
    color: var(--text);
    background: none;
    text-shadow: none;
}

html[data-theme="dark"] .payment-earnings h4,
html[data-theme="dark"] .payment-earnings-loading,
html[data-theme="dark"] .payment-earnings-comparison,
html[data-theme="dark"] .payment-due-hint,
html[data-theme="dark"] .payment-due-loading,
html[data-theme="dark"] .payment-pending-hint,
html[data-theme="dark"] .payment-pending-loading,
html[data-theme="dark"] .maintenance-bar-status,
html[data-theme="dark"] .maintenance-bar-details,
html[data-theme="dark"] th {
    color: var(--muted);
}

html[data-theme="dark"] .payment-pending-header h3,
html[data-theme="dark"] .payment-pending-summary,
html[data-theme="dark"] .payment-due-header h3,
html[data-theme="dark"] .security-header-param__name,
html[data-theme="dark"] .seo-faq-item summary,
html[data-theme="dark"] .seo-faq-location-subheading,
html[data-theme="dark"] .upload-security-card__title,
html[data-theme="dark"] .upload-security-card__where-text,
html[data-theme="dark"] .cms-preview-h1,
html[data-theme="dark"] .cms-preview-block h2,
html[data-theme="dark"] .cms-preview-meta-card strong {
    color: var(--text);
}

html[data-theme="dark"] .payment-due-panel {
    background: #2a2618;
    border-color: #c9a227;
    color: var(--text);
}

html[data-theme="dark"] .payment-due-summary {
    color: #e8c878;
}

html[data-theme="dark"] .payment-due-table tbody tr,
html[data-theme="dark"] #bookings-table tbody tr.booking-payment-due {
    background: #2a2618;
}

html[data-theme="dark"] .payment-due-table tbody tr:hover,
html[data-theme="dark"] #bookings-table tbody tr.booking-payment-due:hover {
    background: #342e1c;
}

html[data-theme="dark"] .payment-pending-row--overdue {
    background: #2a1c1c;
}

html[data-theme="dark"] .payment-pending-row--overdue:hover {
    background: #3a2424;
}

html[data-theme="dark"] .maintenance-bar--active {
    background: #2a2618;
    border-color: #c9a227;
    color: var(--text);
}

html[data-theme="dark"] .maintenance-bar--active .maintenance-bar-status {
    color: #e8c878;
}

html[data-theme="dark"] .caldav-health-ok,
html[data-theme="dark"] .smtp-health-ok,
html[data-theme="dark"] .smtp-queue-health-ok,
html[data-theme="dark"] .webdav-health-ok,
html[data-theme="dark"] .pdf-health-ok {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .caldav-health-nok,
html[data-theme="dark"] .smtp-health-nok,
html[data-theme="dark"] .smtp-queue-health-nok,
html[data-theme="dark"] .webdav-health-nok,
html[data-theme="dark"] .pdf-health-nok,
html[data-theme="dark"] .booking-issues-nok,
html[data-theme="dark"] .full-health-check-panel--nok {
    background: #2a1c1c;
    border-color: #7a3a3a;
    color: #f0a8a8;
}

html[data-theme="dark"] .logs-retention-level-banner {
    background: #2a2618;
    color: #e8c878;
}

html[data-theme="dark"] .danger-zone-panel {
    background: #2a1c1c;
    border-color: #7a3a3a;
    color: var(--text);
}

html[data-theme="dark"] .security-level-panel {
    background: #2a2618;
    border-color: #c9a227;
    color: var(--text);
}

html[data-theme="dark"] .full-health-check-panel,
html[data-theme="dark"] .booking-issues-panel,
html[data-theme="dark"] .admin-info-card,
html[data-theme="dark"] .info-box,
html[data-theme="dark"] .settings-fieldset,
html[data-theme="dark"] .communications-preview-card,
html[data-theme="dark"] .manual-booking-conflict-details,
html[data-theme="dark"] .selection-bookings li,
html[data-theme="dark"] .site-image-library__item,
html[data-theme="dark"] .site-image-hero-preview,
html[data-theme="dark"] .schedule-empty-state,
html[data-theme="dark"] .ip-suspicion-info-panel,
html[data-theme="dark"] .upload-security-card,
html[data-theme="dark"] .cookie-config-card,
html[data-theme="dark"] details.admin-settings-details,
html[data-theme="dark"] .admin-settings-details.panel {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .full-health-check-panel,
html[data-theme="dark"] .booking-issues-panel {
    background: var(--surface-muted);
}

html[data-theme="dark"] code.security-header-reference,
html[data-theme="dark"] .security-header-param__value code {
    color: var(--text);
}

html[data-theme="dark"] .wizard-step.is-done {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .wizard-step.is-clickable:hover {
    background: #243528;
    border-color: #5a8a68;
    color: #b7e0bf;
}

html[data-theme="dark"] .bookings-list li.booking-row-cancelled,
html[data-theme="dark"] #bookings-table tr.booking-row-cancelled {
    background: var(--surface-muted);
}

html[data-theme="dark"] .url-port-field-wrap--mirror input.url-port-field-active,
html[data-theme="dark"] .payment-receipts-viewer-frame-wrap,
html[data-theme="dark"] .communications-preview-frame,
html[data-theme="dark"] .communications-preview-subject-card,
html[data-theme="dark"] .communications-preview-html-frame,
html[data-theme="dark"] .communications-preview-text,
html[data-theme="dark"] .admin-log-scroll-wrap {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .communications-preview-subject-label,
html[data-theme="dark"] .communications-preview-lang {
    color: var(--muted);
}

html[data-theme="dark"] .full-health-check-panel--ok {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .slot-reason-toast {
    background: rgba(248, 250, 252, 0.96);
    color: #0f172a;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
}

html[data-theme="dark"] .booking-cancel-reason-trigger,
html[data-theme="dark"] .booking-cancel-reason-popover,
html[data-theme="dark"] .communications-template-visual,
html[data-theme="dark"] .upload-security-type-chip,
html[data-theme="dark"] .admin-auto-refresh-select,
html[data-theme="dark"] .log-table-filter__text-row .log-table-filter__mode,
html[data-theme="dark"] .log-table-filter__text-row .log-table-filter__text,
html[data-theme="dark"] .ics-preview-content {
    background: var(--card);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .ics-preview-content,
html[data-theme="dark"] .communications-preview-text {
    background: var(--surface-muted);
}

html[data-theme="dark"] .booking-cancel-reason-trigger {
    color: var(--muted);
}

html[data-theme="dark"] .url-port-field-wrap--mirror input.url-port-field-active {
    background: var(--input-bg);
}

/* Dark theme: nested light panels / tinted callouts (contrast pass) */
html[data-theme="dark"] .booking-validation-conditional-rules,
html[data-theme="dark"] .booking-validation-evening-rule,
html[data-theme="dark"] .availability-mode-option,
html[data-theme="dark"] .availability-mode-option-stack--with-rules,
html[data-theme="dark"] .schedule-preview,
html[data-theme="dark"] .schedule-advanced,
html[data-theme="dark"] .location-auto-block,
html[data-theme="dark"] .location-parking-row,
html[data-theme="dark"] .location-seo-generate-block,
html[data-theme="dark"] .location-seo-summary,
html[data-theme="dark"] .public-file-card,
html[data-theme="dark"] details.public-file-card,
html[data-theme="dark"] .public-file-card__summary,
html[data-theme="dark"] .public-file-card__body,
html[data-theme="dark"] .htaccess-panel,
html[data-theme="dark"] .htaccess-diff-pre,
html[data-theme="dark"] .htaccess-api-alert,
html[data-theme="dark"] .upload-security-card__defaults-summary,
html[data-theme="dark"] .upload-security-card__public-hint,
html[data-theme="dark"] .upload-security-type__editor,
html[data-theme="dark"] .upload-security-level-banner,
html[data-theme="dark"] .backup-warning,
html[data-theme="dark"] .danger-zone-warning,
html[data-theme="dark"] .logging-level-warning,
html[data-theme="dark"] .cron-dsm-callout,
html[data-theme="dark"] .cron-ssh-advanced,
html[data-theme="dark"] .cron-task-readiness,
html[data-theme="dark"] .cron-task-guide,
html[data-theme="dark"] .cron-task-command-block,
html[data-theme="dark"] .cron-script-test-panel,
html[data-theme="dark"] .admin-geo-countries-list__item,
html[data-theme="dark"] .admin-country-list__item,
html[data-theme="dark"] .geoloc-cache-nested,
html[data-theme="dark"] .api-rate-limit-category,
html[data-theme="dark"] .post-reset-restore-scope-card,
html[data-theme="dark"] .post-reset-restore-source-card,
html[data-theme="dark"] .captcha-display,
html[data-theme="dark"] .payment-receipts-export-delete-block,
html[data-theme="dark"] .settings-fieldset {
    background: var(--surface-muted);
    color: var(--text);
    border-color: var(--border);
}

html[data-theme="dark"] .schedule-preview {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .schedule-preview p,
html[data-theme="dark"] .schedule-preview .field-hint {
    color: #9dd4a8;
}

html[data-theme="dark"] .schedule-timeline-labels,
html[data-theme="dark"] .schedule-timeline-labels span {
    color: var(--muted);
}

html[data-theme="dark"] .schedule-advanced {
    background: var(--surface-muted);
}

html[data-theme="dark"] .schedule-advanced-summary,
html[data-theme="dark"] .schedule-advanced .schedule-group-desc,
html[data-theme="dark"] .schedule-advanced label,
html[data-theme="dark"] .schedule-advanced .field-hint {
    color: var(--text);
}

html[data-theme="dark"] .schedule-advanced .field-hint,
html[data-theme="dark"] .schedule-advanced .schedule-group-desc {
    color: var(--muted);
}

html[data-theme="dark"] .schedule-work-day {
    background: var(--surface-muted);
    border-color: var(--border);
    color: var(--muted);
}

html[data-theme="dark"] .schedule-work-day.is-active {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .booking-validation-conditional-rules {
    background: var(--surface-muted);
    border-color: var(--border);
    color: var(--text);
}

html[data-theme="dark"] .booking-validation-check-row,
html[data-theme="dark"] .booking-validation-check-row span,
html[data-theme="dark"] .booking-validation-same-day-toggle,
html[data-theme="dark"] .booking-validation-evening-toggle,
html[data-theme="dark"] .availability-mode-option,
html[data-theme="dark"] .availability-mode-option-text,
html[data-theme="dark"] .availability-mode-option-text strong,
html[data-theme="dark"] .availability-mode-option-text span {
    color: var(--text);
}

html[data-theme="dark"] .availability-mode-option-text span,
html[data-theme="dark"] .booking-validation-rule-hint,
html[data-theme="dark"] .availability-mode-status {
    color: var(--muted);
}

html[data-theme="dark"] .availability-mode-option:has(input:checked) {
    background: #243528;
    border-color: var(--primary);
}

html[data-theme="dark"] .location-seo-summary,
html[data-theme="dark"] .info-box,
html[data-theme="dark"] .admin-info-card,
html[data-theme="dark"] .seo-faq-directions,
html[data-theme="dark"] .ip-suspicion-info-panel {
    background: #1e2e24;
    border: 1px solid #3d6b4f;
    border-radius: 0.5rem;
    padding: 0.75rem 1rem;
    color: var(--text);
}

html[data-theme="dark"] .location-seo-summary li,
html[data-theme="dark"] .info-box li,
html[data-theme="dark"] .admin-info-card li,
html[data-theme="dark"] .contact-location-list li,
html[data-theme="dark"] .info-box p,
html[data-theme="dark"] .admin-info-card p,
html[data-theme="dark"] .info-box .field-hint,
html[data-theme="dark"] .admin-info-card .field-hint {
    color: var(--muted);
}

html[data-theme="dark"] .contact-address-label,
html[data-theme="dark"] .contact-location-list {
    color: var(--text);
}

html[data-theme="dark"] .backup-warning,
html[data-theme="dark"] .danger-zone-warning,
html[data-theme="dark"] .upload-security-level-banner {
    background: #2a1c1c;
    border-color: #7a3a3a;
    color: #f0a8a8;
}

html[data-theme="dark"] .backup-warning p,
html[data-theme="dark"] .backup-warning li,
html[data-theme="dark"] .backup-warning .field-hint,
html[data-theme="dark"] .danger-zone-warning p,
html[data-theme="dark"] .upload-security-level-banner p {
    color: #f0a8a8;
}

html[data-theme="dark"] .logging-level-warning,
html[data-theme="dark"] .cron-dsm-callout {
    background: #1a2433;
    border-color: #3d5a80;
    color: var(--text);
}

html[data-theme="dark"] .cron-dsm-callout__lead,
html[data-theme="dark"] .cron-dsm-callout-steps,
html[data-theme="dark"] .cron-dsm-callout-steps li,
html[data-theme="dark"] .logging-level-warning {
    color: var(--text);
}

html[data-theme="dark"] .cron-dsm-callout__note,
html[data-theme="dark"] .logging-level-warning .field-hint {
    color: var(--muted);
}

html[data-theme="dark"] .cron-task-readiness--ready {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .cron-task-readiness--pending {
    background: #2a2618;
    border-color: #c9a227;
    color: #e8c878;
}

html[data-theme="dark"] .cron-task-readiness-badge--ok,
html[data-theme="dark"] .cron-task-results-status--success {
    background: #1e2e24;
    color: #9dd4a8;
}

html[data-theme="dark"] .cron-task-readiness-badge--warning,
html[data-theme="dark"] .cron-task-results-status--warning {
    background: #2a2618;
    color: #e8c878;
}

html[data-theme="dark"] .cron-task-readiness-badge--nok,
html[data-theme="dark"] .cron-task-results-status--error {
    background: #2a1c1c;
    color: #f0a8a8;
}

html[data-theme="dark"] .cron-task-readiness-badge--waiting {
    background: #2a2f35;
    color: #c5ccd4;
}

html[data-theme="dark"] .cron-test-all-results__item {
    background: var(--surface-muted);
    border-color: var(--border);
    color: var(--text);
}

html[data-theme="dark"] .cron-test-all-results__item--current {
    background: #2a2618;
    border-color: #c9a227;
    color: #e8c878;
}

html[data-theme="dark"] .cron-test-all-results__name {
    color: inherit;
}

html[data-theme="dark"] .cron-task-card.cron-task-card--test-current {
    outline-color: #c9a227;
}

html[data-theme="dark"] .public-file-card,
html[data-theme="dark"] details.public-file-card {
    background: var(--card);
}

html[data-theme="dark"] .public-file-card__summary {
    background: var(--surface-muted);
}

html[data-theme="dark"] .public-file-card__badge {
    background: var(--surface-muted);
    color: var(--text);
    border: 1px solid var(--border);
}

html[data-theme="dark"] .public-file-card__badge--ok {
    background: #1e2e24;
    color: #9dd4a8;
    border-color: #3d6b4f;
}

html[data-theme="dark"] .public-file-card__badge--dynamic {
    background: #2a2618;
    color: #e8c878;
    border-color: #c9a227;
}

html[data-theme="dark"] .upload-security-card__defaults-summary {
    background: var(--surface-muted);
    border-style: dashed;
    color: var(--muted);
}

html[data-theme="dark"] .upload-security-card__public-hint {
    background: #1a2433;
    border-color: #3d5a80;
    color: #c5d4e8;
}

html[data-theme="dark"] .upload-security-type__editor {
    background: var(--surface-muted);
}

html[data-theme="dark"] .upload-security-type-chip__badge {
    color: #93c5fd;
}

html[data-theme="dark"] .admin-geo-countries-list__code {
    background: #1a2433;
    border-color: #3d5a80;
    color: #93c5fd;
}

html[data-theme="dark"] .status-badge.status-ok,
html[data-theme="dark"] .status-badge.status-nok,
html[data-theme="dark"] .status-badge.status-missing,
html[data-theme="dark"] .status-badge.status-muted,
html[data-theme="dark"] .status-badge.status-pending,
html[data-theme="dark"] .status-badge.status-due,
html[data-theme="dark"] .status-badge.status-empty,
html[data-theme="dark"] .status-badge.status-cancelled,
html[data-theme="dark"] .status-badge.status-abandon {
    background: var(--surface-muted);
    border-color: var(--border);
    color: var(--text);
}

html[data-theme="dark"] .status-badge.status-ok {
    background: #1e2e24;
    border-color: #3d6b4f;
    color: #9dd4a8;
}

html[data-theme="dark"] .status-badge.status-nok {
    background: #2a1c1c;
    border-color: #7a3a3a;
    color: #f0a8a8;
}

html[data-theme="dark"] .status-badge.status-pending,
html[data-theme="dark"] .status-badge.status-due {
    background: #3a2a12;
    border-color: #d97706;
    color: #fdba74;
}

html[data-theme="dark"] .status-badge.status-cancelled {
    background: #2a1c1c;
    border-color: #7a3a3a;
    color: #f0a8a8;
}

html[data-theme="dark"] .post-reset-restore-intro,
html[data-theme="dark"] .post-reset-restore-card-hint,
html[data-theme="dark"] .maintenance-hint,
html[data-theme="dark"] .maintenance-bar-details summary,
html[data-theme="dark"] .full-health-check-run-at,
html[data-theme="dark"] .full-health-check-section-message {
    color: var(--muted);
}

html[data-theme="dark"] .post-reset-restore-scope-card:has(input:checked),
html[data-theme="dark"] .post-reset-restore-source-card:has(input:checked) {
    background: #1e2e24;
    border-color: var(--primary);
}

.auth-page {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 1rem;
}

.auth-card {
    width: min(100%, 420px);
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1.5rem;
    display: grid;
    gap: 1rem;
}

.auth-card form {
    display: grid;
    gap: 1rem;
}

.login-ip-display {
    margin: -0.5rem 0 0;
    font-size: 0.8125rem;
    color: var(--muted);
}

.login-flash-ip-intel {
    display: grid;
    gap: 0.65rem;
    margin: 0.25rem 0 0.75rem;
}

.login-flash-ip-intel-list {
    margin: 0;
    display: grid;
    gap: 0.35rem;
}

.login-flash-ip-intel-row {
    display: grid;
    grid-template-columns: minmax(6rem, 8rem) 1fr;
    gap: 0.5rem;
    font-size: 0.875rem;
}

.login-flash-ip-intel-row dt {
    margin: 0;
    color: var(--text-muted, #6b7280);
    font-weight: 600;
}

.login-flash-ip-intel-row dd {
    margin: 0;
}

.login-flash-ip-intel-results {
    padding: 0.75rem;
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
}

html[data-theme="dark"] .login-flash-ip-intel-results {
    background: rgba(255, 255, 255, 0.04);
}

dialog {
    border: none;
    border-radius: 12px;
    padding: 1.25rem;
    width: min(92vw, 420px);
    box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
}

dialog::backdrop {
    background: rgba(15, 23, 42, 0.45);
}

.communications-preview-dialog {
    width: min(96vw, 760px);
    max-height: 90vh;
    overflow: auto;
}

.communications-preview-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}

.communications-preview-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.2rem 0.6rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    background: #e2e8f0;
    color: #334155;
}

.communications-preview-badge--client {
    background: #dbeafe;
    color: #1d4ed8;
}

.communications-preview-badge--admin {
    background: #fce7f3;
    color: #be185d;
}

.communications-preview-lang {
    display: inline-flex;
    align-items: center;
    padding: 0.15rem 0.45rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 4px;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: #64748b;
}

.communications-preview-subject-card {
    margin: 0 0 0.5rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 8px;
    background: var(--card);
    color: var(--text);
}

.communications-preview-subject-label {
    display: block;
    margin-bottom: 0.25rem;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #64748b;
}

.communications-preview-subject-line {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.35;
    word-break: break-word;
    color: var(--text, #0f172a);
}

.communications-preview-sample-note {
    margin: 0 0 0.75rem;
}

.communications-preview-body {
    min-height: 320px;
}

.communications-preview-dialog__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.communications-preview-dialog__header h2 {
    margin: 0;
    font-size: 1.125rem;
}

.communications-preview-subject {
    margin: 0 0 0.75rem;
    word-break: break-word;
}

.communications-preview-tabs {
    display: flex;
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}

.communications-preview-tab.is-active,
.btn-secondary.communications-preview-tab.is-active {
    background: var(--primary, #2563eb);
    color: #fff;
    border-color: transparent;
}

.communications-preview-html-frame {
    width: 100%;
    min-height: 320px;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 8px;
    background: var(--card);
}

.communications-preview-text,
.ics-preview-content {
    margin: 0;
    padding: 0.75rem;
    max-height: 420px;
    overflow: auto;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 8px;
    background: var(--surface-muted);
    color: var(--text);
    font-size: 0.8125rem;
    line-height: 1.45;
    white-space: pre-wrap;
    word-break: break-word;
}
.communications-preview-actions,
.communications-edit-actions {
    white-space: nowrap;
}

.communications-template-dialog {
    width: min(96vw, 760px);
}

.communications-template-fields {
    display: grid;
    gap: 0.85rem;
    margin: 0.75rem 0 1rem;
    max-height: min(55vh, 520px);
    overflow: auto;
}

.communications-template-field label {
    display: block;
    margin-bottom: 0.35rem;
    font-weight: 600;
    font-size: 0.875rem;
}

.communications-template-visual {
    min-height: 4.5rem;
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--card);
    color: var(--text);
    line-height: 1.5;
}

.communications-template-visual:focus {
    outline: 2px solid rgba(37, 99, 235, 0.35);
    outline-offset: 1px;
}

.communications-template-raw {
    width: 100%;
    min-height: 4.5rem;
    padding: 0.65rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.45;
    resize: vertical;
}

.communications-template-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    margin-bottom: 0.5rem;
}

.communications-template-ics-hint {
    margin: 0.15rem 0 0.35rem;
    padding: 0.55rem 0.7rem;
    border-left: 3px solid #93c5fd;
    background: #f8fafc;
}

.btn-secondary.communications-template-lang-btn.is-active,
.btn-secondary.communications-template-mode-btn.is-active,
.communications-template-lang-btn.is-active,
.communications-template-mode-btn.is-active {
    background: var(--primary, #2563eb);
    color: #fff;
    border-color: transparent;
}

.btn-secondary.communications-template-lang-btn.is-active:hover,
.btn-secondary.communications-template-mode-btn.is-active:hover,
.communications-template-lang-btn.is-active:hover,
.communications-template-mode-btn.is-active:hover {
    background: var(--primary-dark, #1d4ed8);
    color: #fff;
}

.ics-preview-dialog {
    width: min(96vw, 680px);
}

.ics-preview-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-bottom: 1rem;
}

.ics-preview-control-group {
    display: inline-flex;
    gap: 0.35rem;
}

.btn-secondary.ics-preview-lang-btn.is-active,
.btn-secondary.ics-preview-audience-btn.is-active,
.ics-preview-lang-btn.is-active,
.ics-preview-audience-btn.is-active {
    background: var(--primary, #2563eb);
    color: #fff;
    border-color: transparent;
}

.btn-secondary.ics-preview-lang-btn.is-active:hover,
.btn-secondary.ics-preview-audience-btn.is-active:hover,
.ics-preview-lang-btn.is-active:hover,
.ics-preview-audience-btn.is-active:hover {
    background: var(--primary-dark, #1d4ed8);
    color: #fff;
}

.ics-preview-visual {
    margin-bottom: 1rem;
}

.ics-preview-card {
    display: flex;
    gap: 1rem;
    padding: 1rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 12px;
    background: var(--card);
    color: var(--text);
    box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}

.ics-preview-card__date {
    flex: 0 0 4.5rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 0.75rem 0.5rem;
    border-radius: 10px;
    background: linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%);
    color: #fff;
    text-align: center;
    line-height: 1.1;
}

.ics-preview-card__weekday {
    font-size: 0.6875rem;
    font-weight: 600;
    text-transform: capitalize;
    opacity: 0.92;
}

.ics-preview-card__day {
    font-size: 1.75rem;
    font-weight: 700;
    margin: 0.15rem 0;
}

.ics-preview-card__month {
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: capitalize;
    opacity: 0.92;
}

.ics-preview-card__body {
    flex: 1;
    min-width: 0;
}

.ics-preview-card__title {
    margin: 0 0 0.75rem;
    font-size: 1.05rem;
    line-height: 1.35;
    word-break: break-word;
}

.ics-preview-card__details {
    margin: 0;
    display: grid;
    gap: 0.65rem;
}

.ics-preview-card__detail {
    display: flex;
    gap: 0.65rem;
    align-items: flex-start;
}

.ics-preview-card__detail-icon {
    flex: 0 0 1.5rem;
    margin: 0;
    font-size: 1rem;
    line-height: 1.4;
    text-align: center;
}

.ics-preview-card__detail dd {
    margin: 0;
    min-width: 0;
}

.ics-preview-card__detail-label {
    display: block;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #64748b;
}

.ics-preview-card__detail-value {
    display: block;
    font-size: 0.9375rem;
    line-height: 1.4;
    word-break: break-word;
}

.ics-preview-card__detail-meta {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.8125rem;
    color: #64748b;
}

.ics-preview-card__description {
    margin-top: 0.85rem;
    padding-top: 0.85rem;
    border-top: 1px solid var(--border, #e2e8f0);
}

.ics-preview-card__description-title {
    margin: 0 0 0.5rem;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #64748b;
}

.ics-preview-card__description-list {
    margin: 0;
    padding-left: 1.1rem;
    display: grid;
    gap: 0.35rem;
    font-size: 0.875rem;
    line-height: 1.45;
    color: #334155;
}

.ics-preview-card__description-sections {
    display: grid;
    gap: 0.85rem;
}

.ics-preview-card__description-section-title {
    margin: 0 0 0.35rem;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #64748b;
}

.ics-preview-card__description-lines {
    display: grid;
    gap: 0.25rem;
}

.ics-preview-card__description-line {
    margin: 0;
    font-size: 0.875rem;
    line-height: 1.45;
    color: #334155;
}

.ics-preview-card__location-text {
    margin: 0;
}

.ics-preview-source {
    margin-top: 0.5rem;
}

.ics-preview-source summary {
    cursor: pointer;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--primary, #2563eb);
    margin-bottom: 0.5rem;
}

.ics-preview-source[open] summary {
    margin-bottom: 0.75rem;
}

@media (max-width: 540px) {
    .ics-preview-card {
        flex-direction: column;
    }

    .ics-preview-card__date {
        flex-direction: row;
        flex: none;
        gap: 0.5rem;
        justify-content: flex-start;
        padding: 0.65rem 0.85rem;
    }

    .ics-preview-card__day {
        font-size: 1.25rem;
        margin: 0;
    }
}

.settings-actions-inline {
    margin-top: 0.5rem;
}

.dialog-actions {
    display: flex;
    justify-content: flex-end;
    gap: 0.75rem;
    margin-top: 1rem;
}

.slot-label {
    margin: 0.5rem 0 1rem;
    color: var(--text);
    font-weight: 600;
}

.manual-booking-conflict-details {
    margin: 0.75rem 0 0;
    padding: 0.75rem 1rem;
    background: #fef2f2;
    border: 1px solid #fecaca;
    border-radius: 8px;
    display: grid;
    gap: 0.65rem;
}

.manual-booking-conflict-row {
    display: grid;
    grid-template-columns: minmax(7rem, 9rem) 1fr;
    gap: 0.75rem;
    align-items: start;
}

.manual-booking-conflict-row dt {
    margin: 0;
    font-weight: 600;
    color: var(--muted);
}

.manual-booking-conflict-row dd {
    margin: 0;
    color: var(--text);
    white-space: pre-wrap;
    word-break: break-word;
}
/*
 * Selection actions — legend colors + white labels.
 * Compound selectors must beat:
 *   .btn-secondary { color: var(--text) }                         (0,1,0)
 *   html[data-theme="dark"] .btn-secondary { color: var(--text) } (0,2,1)
 * Single-class rules (e.g. .btn-legend-available) lose to the dark-theme
 * override and can tie with day-mode .btn-secondary — leaving dark ink
 * on colored backgrounds in mode jour.
 */
.action-row > .btn-secondary.btn-manual-booking,
.action-row > .btn-secondary.location-action-manual-booking,
.action-row > #action-manual-booking,
html[data-theme="dark"] .action-row > .btn-secondary.btn-manual-booking,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-manual-booking,
html[data-theme="dark"] .action-row > #action-manual-booking {
    background: var(--manual-booking);
    border-color: var(--manual-booking);
    color: #fff;
}

.action-row > .btn-secondary.btn-manual-booking:hover,
.action-row > .btn-secondary.location-action-manual-booking:hover,
.action-row > #action-manual-booking:hover,
html[data-theme="dark"] .action-row > .btn-secondary.btn-manual-booking:hover,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-manual-booking:hover,
html[data-theme="dark"] .action-row > #action-manual-booking:hover {
    background: #6d28d9;
    border-color: #6d28d9;
    color: #fff;
}

.action-row > .btn-secondary.btn-legend-available,
.action-row > .btn-secondary.location-action-available,
.action-row > #action-available,
html[data-theme="dark"] .action-row > .btn-secondary.btn-legend-available,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-available,
html[data-theme="dark"] .action-row > #action-available {
    background: var(--available);
    border-color: var(--available);
    color: #fff;
}

.action-row > .btn-secondary.btn-legend-available:hover,
.action-row > .btn-secondary.location-action-available:hover,
.action-row > #action-available:hover,
html[data-theme="dark"] .action-row > .btn-secondary.btn-legend-available:hover,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-available:hover,
html[data-theme="dark"] .action-row > #action-available:hover {
    filter: brightness(0.92);
    color: #fff;
}

.action-row > .btn-secondary.btn-legend-blocked,
.action-row > .btn-secondary.location-action-blocked,
.action-row > #action-blocked,
html[data-theme="dark"] .action-row > .btn-secondary.btn-legend-blocked,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-blocked,
html[data-theme="dark"] .action-row > #action-blocked {
    background: var(--blocked);
    border-color: var(--blocked);
    color: #fff;
}

.action-row > .btn-secondary.btn-legend-blocked:hover,
.action-row > .btn-secondary.location-action-blocked:hover,
.action-row > #action-blocked:hover,
html[data-theme="dark"] .action-row > .btn-secondary.btn-legend-blocked:hover,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-blocked:hover,
html[data-theme="dark"] .action-row > #action-blocked:hover {
    filter: brightness(0.92);
    color: #fff;
}

.action-row > .btn-danger.btn-legend-booked,
.action-row > .btn-danger.location-action-cancel,
.action-row > #action-cancel,
html[data-theme="dark"] .action-row > .btn-danger.btn-legend-booked,
html[data-theme="dark"] .action-row > .btn-danger.location-action-cancel,
html[data-theme="dark"] .action-row > #action-cancel {
    background: var(--booked);
    border-color: var(--booked);
    color: #fff;
}

.action-row > .btn-danger.btn-legend-booked:hover,
.action-row > .btn-danger.location-action-cancel:hover,
.action-row > #action-cancel:hover,
html[data-theme="dark"] .action-row > .btn-danger.btn-legend-booked:hover,
html[data-theme="dark"] .action-row > .btn-danger.location-action-cancel:hover,
html[data-theme="dark"] .action-row > #action-cancel:hover {
    filter: brightness(0.92);
    color: #fff;
}

/* « Créneau VM » — same visual language as night-work manual legend (green + orange circle). */
.action-row > .btn-secondary.btn-creneau-vm,
.action-row > .btn-secondary.location-action-available-manual,
.action-row > #action-available-manual,
html[data-theme="dark"] .action-row > .btn-secondary.btn-creneau-vm,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-available-manual,
html[data-theme="dark"] .action-row > #action-available-manual {
    background: var(--available);
    border-color: var(--available);
    color: #fff;
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
}

.action-row > .btn-secondary.btn-creneau-vm::before,
.action-row > .btn-secondary.location-action-available-manual::before,
.action-row > #action-available-manual::before,
html[data-theme="dark"] .action-row > .btn-secondary.btn-creneau-vm::before,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-available-manual::before,
html[data-theme="dark"] .action-row > #action-available-manual::before {
    content: "";
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    flex: 0 0 auto;
    background: var(--available);
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
}

.action-row > .btn-secondary.btn-creneau-vm:hover,
.action-row > .btn-secondary.location-action-available-manual:hover,
.action-row > #action-available-manual:hover,
html[data-theme="dark"] .action-row > .btn-secondary.btn-creneau-vm:hover,
html[data-theme="dark"] .action-row > .btn-secondary.location-action-available-manual:hover,
html[data-theme="dark"] .action-row > #action-available-manual:hover {
    filter: brightness(0.92);
    color: #fff;
}

/* VM orange outline must win over night-work-none/block red when both classes exist. */
.slot-pill.event-night-work-manual,
.fc-event.event-night-work-manual.event-available {
    box-shadow: inset 0 0 0 2px rgba(251, 146, 60, 0.95);
    outline: 2px dashed rgba(251, 146, 60, 0.95);
    outline-offset: -2px;
}

/* Selection blue must stay obvious over VM orange ring (keep orange inset). */
.slot-pill.event-night-work-manual.is-selected,
.fc .fc-event.event-night-work-manual.is-selected,
.fc-event.event-night-work-manual.is-selected {
    outline: 3px solid #2563eb !important;
    outline-offset: 0;
    box-shadow:
        inset 0 0 0 2px rgba(251, 146, 60, 0.95),
        0 0 0 2px rgba(37, 99, 235, 0.35);
}

/* Same for weekly yellow marker if outline/box-shadow were overridden. */
.slot-pill.event-weekly-weekday.is-selected:not(.event-night-work-manual),
.fc .fc-event.event-weekly-weekday.is-selected:not(.event-night-work-manual),
.fc-event.event-weekly-weekday.is-selected:not(.event-night-work-manual) {
    outline: 3px solid #2563eb !important;
    outline-offset: 0;
    box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.35);
}

#manual-booking-conflict-dialog {
    width: min(92vw, 520px);
}

.bookings-list {
    list-style: none;
    margin: 1rem 0 0;
    padding: 0;
    display: grid;
    gap: 0.5rem;
}

.bookings-list li {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.5rem 1rem;
    padding: 0.75rem 1rem;
    background: var(--surface-muted);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--text);
}

.bookings-list-time {
    font-weight: 600;
    min-width: 9rem;
}

.bookings-list-name {
    font-weight: 600;
}

.bookings-list-phone {
    color: var(--muted);
}

.bookings-list-phone a {
    color: var(--primary);
}

.bookings-list-empty {
    color: var(--muted);
    background: transparent;
    border: none;
    padding: 0;
}

.admin-calendar-placeholder,
.admin-calendar-loading {
    color: var(--muted);
    margin: 1.5rem 0;
    text-align: center;
}

.selection-bookings {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0;
    display: grid;
    gap: 0.35rem;
}

.selection-bookings li {
    padding: 0.5rem 0.75rem;
    background: #fef2f2;
    border: 1px solid #fecaca;
    border-radius: 8px;
    color: var(--text);
    font-size: 0.95rem;
}

.selection-booking-note {
    display: block;
    margin-top: 0.25rem;
    color: var(--muted);
    font-size: 0.9rem;
    font-style: italic;
}

.bookings-list-note {
    display: inline-block;
    max-width: 100%;
    color: var(--muted);
    font-size: 0.9rem;
    font-style: italic;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.booking-hover-detail {
    cursor: help;
}

.booking-hover-detail:hover {
    background: #f3f4f6;
}

html[data-theme="dark"] .booking-hover-detail:hover {
    background: var(--surface-muted, #1f2937);
    color: var(--text);
}

html[data-theme="dark"] #bookings-table tbody tr.booking-hover-detail:hover td.booking-actions-cell,
html[data-theme="dark"] #bookings-table tbody tr:hover td.booking-actions-cell {
    background: var(--surface-muted, #1f2937);
}

.booking-note-cell {
    max-width: 14rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--muted);
    font-style: italic;
}

.booking-audit-details,
.admin-action-details,
.app-access-user-agent,
.app-access-referer {
    max-width: 28rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 0.9rem;
    line-height: 1.45;
    color: var(--muted);
}

.booking-audit-log-table td,
.admin-action-log-table td,
.app-access-log-table td {
    vertical-align: top;
}

.log-table-filters,
.app-access-log-filters {
    margin-bottom: 0.75rem;
}

.log-table-filters__toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0 0 0.45rem;
    padding: 0.2rem 0.15rem;
    border: 0;
    background: transparent;
    color: var(--text);
    font: inherit;
    font-size: 0.9rem;
    font-weight: 600;
    cursor: pointer;
}

.log-table-filters__toggle:hover,
.log-table-filters__toggle:focus-visible {
    color: var(--accent, #0b5cab);
}

.log-table-filters__toggle-chevron::before {
    content: '▾';
    display: inline-block;
    width: 1em;
    transition: transform 0.15s ease;
}

.log-table-filters.is-collapsed .log-table-filters__toggle-chevron::before {
    transform: rotate(-90deg);
}

.log-table-filters.is-collapsed .log-table-filters__panel {
    display: none;
}

.log-table-filters__grid,
.app-access-log-filters__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 0.75rem;
}

th.log-table-sortable {
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
}

th.log-table-sortable:hover,
th.log-table-sortable:focus-visible {
    color: var(--accent, #0b5cab);
}

th.log-table-sortable.is-sorted-asc::after {
    content: ' ▲';
    font-size: 0.75em;
    opacity: 0.85;
}

th.log-table-sortable.is-sorted-desc::after {
    content: ' ▼';
    font-size: 0.75em;
    opacity: 0.85;
}

.log-table-filter,
.app-access-log-filter {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.log-table-filter__label,
.app-access-log-filter__label {
    font-size: 0.85rem;
    font-weight: 600;
}

.log-table-filter__select,
.log-table-filter__text,
.app-access-log-filter__select,
.app-access-log-filter__text {
    width: 100%;
}

.log-table-filter__text-row {
    display: flex;
    gap: 0.35rem;
    align-items: center;
}

.log-table-filter__text-row .log-table-filter__mode,
.log-table-filter__text-row .log-table-filter__text {
    box-sizing: border-box;
    min-width: 0;
    padding: 0.45rem 0.55rem;
    font-size: 0.9rem;
    line-height: 1.25;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    color: var(--text);
    font: inherit;
}

.log-table-filter__text-row .log-table-filter__mode {
    flex: 0 0 auto;
    min-width: 8.5rem;
    max-width: 45%;
}

.log-table-filter__text-row .log-table-filter__text {
    flex: 1 1 auto;
    min-width: 0;
}

.log-table-filters__actions,
.app-access-log-filters__actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-top: 0.75rem;
}

.log-table-filters__status,
.app-access-log-filters__status {
    margin: 0;
}

.log-table-filters__enable {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0 0.85rem 0.45rem 0;
    font-size: 0.9rem;
    font-weight: 600;
    cursor: pointer;
}

.log-table-filters__exclude-my-ip {
    margin: 0;
    font-size: 0.9rem;
    font-weight: 500;
    white-space: nowrap;
}

.log-table-filters.is-disabled .log-table-filters__toggle {
    opacity: 0.45;
    cursor: not-allowed;
}

.admin-table-bulk-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.45rem 0.6rem;
    margin: 0.4rem 0 0.65rem;
}

.admin-table-bulk-count {
    margin: 0;
}

th.admin-row-select-col,
td.admin-row-select-col {
    width: 2.1rem;
    min-width: 2.1rem;
    text-align: center;
    vertical-align: middle;
}

td.admin-row-select-col input.admin-row-select {
    margin: 0;
    vertical-align: middle;
}

.app-access-ip-actions {
    white-space: nowrap;
}

.egress-host-authorized-badge {
    display: inline-block;
    margin-left: 0.5rem;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    color: #166534;
    background: #dcfce7;
}

.egress-report-row--authorized [data-egress-report-action] {
    color: #166534;
    font-weight: 600;
}

.outbound-log-url-cell .egress-host-authorized-badge {
    vertical-align: middle;
}

.outbound-log-egress-cell .egress-host-authorized-badge {
    margin-left: 0;
}

.app-access-ip-actions .ip-blocked-badge {
    display: inline-block;
    margin-right: 0.5rem;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    color: #991b1b;
    background: #fee2e2;
}

.app-access-ip-actions .btn-small + .btn-small,
.app-access-ip-actions .ip-blocked-badge + .btn-small {
    margin-left: 0;
}

.ip-overview-table td,
.ip-overview-actions,
.ip-overview-status,
.ip-overview-reason {
    vertical-align: top;
}

.ip-overview-reason .btn-link,
.ip-blocked-list-table .btn-link {
    padding: 0;
    border: 0;
    background: none;
    color: var(--link-color, #2563eb);
    font: inherit;
    text-align: left;
    text-decoration: underline;
    cursor: pointer;
}

.ip-overview-reason .btn-link:hover,
.ip-blocked-list-table .btn-link:hover {
    color: var(--link-hover-color, #1d4ed8);
}

.ip-block-detail-dialog {
    width: min(36rem, calc(100vw - 2rem));
    max-height: calc(100vh - 2rem);
    overflow: auto;
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    padding: 1rem 1.1rem;
}

.ip-block-detail-dialog__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.75rem;
}

.ip-block-detail-dialog__header h2 {
    margin: 0;
    font-size: 1.1rem;
}

.ip-block-detail-list {
    margin: 0;
}

.ip-block-detail-row {
    display: grid;
    grid-template-columns: minmax(9rem, 38%) 1fr;
    gap: 0.5rem 1rem;
    padding: 0.45rem 0;
    border-bottom: 1px solid var(--border-color, #e5e7eb);
}

.ip-block-detail-row:last-child {
    border-bottom: 0;
}

.ip-block-detail-row dt {
    margin: 0;
    font-weight: 600;
    color: var(--text-muted, #4b5563);
}

.ip-block-detail-row dd {
    margin: 0;
}

.ip-overview-actions {
    white-space: nowrap;
}

.security-stats-hint {
    margin-bottom: 1rem;
}

.security-stats-grid {
    display: grid;
    gap: 1rem;
    margin-bottom: 0.5rem;
}

@media (min-width: 900px) {
    .security-stats-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .security-stats-grid .security-stats-card--wide {
        grid-column: 1 / -1;
    }
}

.security-stats-card {
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
    padding: 0.85rem 1rem;
}

.security-stats-card h3 {
    margin: 0 0 0.65rem;
    font-size: 1rem;
}

.security-stats-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.9rem;
}

.security-stats-table th,
.security-stats-table td {
    padding: 0.4rem 0.5rem;
    border-bottom: 1px solid var(--border-color, #e5e7eb);
    text-align: left;
    vertical-align: top;
}

.security-stats-table th {
    font-weight: 600;
    color: var(--text-muted, #6b7280);
    font-size: 0.8rem;
}

.security-stats-table tr:last-child td,
.security-stats-table tr:last-child th {
    border-bottom: none;
}

.security-stats-table .security-stat-near-limit {
    color: #b45309;
    font-weight: 600;
}

.security-stats-category-label {
    font-weight: 600;
    color: var(--text-color, #1f2937);
}

.storage-overview-toolbar {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 0.6rem;
}

.storage-overview-grid {
    display: grid;
    gap: 0.75rem;
}

@media (min-width: 900px) {
    .storage-overview-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.storage-overview-compare {
    grid-column: 1 / -1;
    display: grid;
    gap: 0.75rem;
    min-width: 0;
}

@media (min-width: 900px) {
    .storage-overview-compare {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: stretch;
    }
}

.storage-overview-compare-hint {
    grid-column: 1 / -1;
    margin: 0;
}

.storage-overview-alignment {
    grid-column: 1 / -1;
    margin: 0;
    padding: 0.65rem 0.8rem;
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
    min-width: 0;
}

.storage-overview-alignment h4 {
    margin: 0 0 0.25rem;
    font-size: 0.92rem;
}

.storage-overview-align {
    margin: 0.45rem 0 0;
}

.storage-overview-align p {
    margin: 0;
    font-size: 0.88rem;
}

.storage-overview-align--ok .storage-overview-align-status {
    color: var(--success, #047857);
    font-weight: 600;
}

.storage-overview-align--gap .storage-overview-align-status {
    color: var(--danger, #b42318);
    font-weight: 600;
}

.storage-overview-align-samples {
    margin: 0.25rem 0 0;
    padding-left: 1.1rem;
    font-size: 0.78rem;
    color: var(--text-muted, #6b7280);
}

.storage-overview-align-samples code {
    word-break: break-all;
}

html[data-theme="dark"] .storage-overview-alignment {
    background: var(--card, #1f2a27);
    border-color: var(--border, #33413d);
}

.storage-overview-card {
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
    padding: 0.75rem 0.9rem;
    min-width: 0;
    overflow: hidden;
}

.storage-overview-card--compare {
    display: flex;
    flex-direction: column;
    height: 100%;
}

.storage-overview-card h3 {
    margin: 0 0 0.4rem;
    font-size: 0.95rem;
}

.storage-overview-card p,
.storage-overview-row {
    margin: 0.2rem 0;
    font-size: 0.9rem;
}

.storage-overview-row {
    display: grid;
    grid-template-columns: minmax(7.5rem, 32%) minmax(0, 1fr) auto;
    gap: 0.35rem 0.5rem;
    align-items: start;
    min-width: 0;
}

.storage-overview-row-label {
    min-width: 0;
}

.storage-overview-meta {
    color: var(--text-muted, #6b7280);
    font-size: 0.85rem;
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.storage-overview-mismatch {
    color: var(--danger, #b42318);
    font-weight: 700;
    line-height: 1.2;
}

.storage-overview-row--mismatch .storage-overview-meta {
    color: var(--text-color, #1f2937);
}

.storage-overview-link {
    display: inline-block;
    margin-top: 0.35rem;
}

.storage-overview-paths {
    grid-column: 1 / -1;
    margin-top: 0.15rem;
}

.storage-overview-paths summary {
    cursor: pointer;
    font-weight: 600;
}

.storage-overview-paths h4 {
    margin: 0.7rem 0 0.25rem;
    font-size: 0.82rem;
}

.storage-overview-path-list {
    margin: 0;
    padding-left: 1.1rem;
    font-size: 0.8rem;
}

.storage-overview-path-list li {
    margin: 0.15rem 0;
}

.storage-overview-path-label {
    color: var(--muted);
}

.storage-overview-path {
    font-size: 0.78rem;
    word-break: break-all;
}

html[data-theme="dark"] .storage-overview-card {
    background: var(--card, #1f2a27);
    border-color: var(--border, #33413d);
}

.email-log-stats-grid {
    margin-bottom: 0.75rem;
}

.email-log-stat-card {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border-color, #d1d5db);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
}

.email-log-stat-label {
    font-size: 0.85rem;
    color: var(--text-muted, #6b7280);
}

.email-log-stat-value {
    font-size: 1.35rem;
    line-height: 1.2;
}

.email-log-stat-value--compact {
    font-size: 0.95rem;
    font-weight: 600;
}

.perf-debug-zones-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.25rem;
    margin-bottom: 1rem;
}

.perf-debug-zone {
    border: 1px solid var(--border-subtle, rgba(0, 0, 0, 0.12));
    border-radius: 10px;
    padding: 1rem 1rem 0.85rem;
    background: var(--panel-bg, transparent);
}

.perf-debug-zone-title {
    margin: 0 0 0.75rem;
    font-size: 1.05rem;
    font-weight: 600;
}

.perf-debug-zone-inner {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
    gap: 1rem;
    align-items: start;
}

.perf-debug-zone-config,
.perf-debug-zone-stats {
    min-width: 0;
}

.perf-debug-compare-title {
    margin: 0.85rem 0 0.35rem;
    font-size: 0.95rem;
    font-weight: 600;
}

@media (max-width: 1200px) {
    .perf-debug-zones-row {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 900px) {
    .perf-debug-zone-inner {
        grid-template-columns: 1fr;
    }
}

.perf-debug-panel {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.perf-debug-level-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem 1rem;
}

.perf-debug-level-select-label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    font-weight: 600;
    min-width: min(100%, 16rem);
}

.perf-debug-level-select {
    min-width: 14rem;
    max-width: 100%;
}

.perf-debug-level-summary {
    margin: 0.5rem 0 0.65rem;
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border-subtle, rgba(0, 0, 0, 0.12));
    border-radius: 8px;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.perf-debug-level-summary-label {
    margin: 0 0 0.35rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text);
}

.perf-debug-level-summary-list {
    margin: 0;
    padding: 0 0 0 1rem;
    font-size: 0.875rem;
    color: var(--text);
    line-height: 1.45;
}

.perf-debug-level-summary-item {
    margin-bottom: 0.45rem;
}

.perf-debug-level-summary-item:last-child {
    margin-bottom: 0;
}

.perf-debug-level-summary-item-label {
    display: block;
    font-weight: 600;
}

.perf-debug-level-summary-item-purpose {
    display: block;
    margin-top: 0.1rem;
    font-size: 0.82rem;
    color: var(--muted);
    line-height: 1.35;
}

.perf-debug-table-purpose-hint {
    margin: 0.15rem 0 0.5rem;
    max-width: 72ch;
}

.perf-debug-level-summary-list[hidden] {
    display: none;
}

.perf-debug-compare-inline {
    margin-top: 0.25rem;
}

.perf-debug-compare-hint-touch {
    margin-top: -0.35rem;
}

.perf-debug-compare-table-wrap {
    margin-top: 0.35rem;
}

.perf-debug-compare-table .perf-debug-compare-col--current {
    background: rgba(59, 130, 246, 0.08);
    box-shadow: inset 0 0 0 1px rgba(59, 130, 246, 0.22);
}

html[data-theme="dark"] .perf-debug-compare-table .perf-debug-compare-col--current {
    background: rgba(96, 165, 250, 0.12);
    box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.28);
}

.perf-debug-param-hint-wrap {
    position: relative;
    display: inline-flex;
    align-items: center;
    max-width: 100%;
}

.perf-debug-param-hint-trigger {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: left;
    cursor: help;
    max-width: 100%;
}

.perf-debug-param-hint-trigger:focus-visible {
    outline: 2px solid var(--accent, #3b82f6);
    outline-offset: 2px;
    border-radius: 4px;
}

.perf-debug-param-hint-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 1rem;
    height: 1rem;
    border-radius: 50%;
    border: 1px solid currentColor;
    color: var(--muted);
    font-size: 0.62rem;
    font-weight: 700;
    font-style: italic;
    line-height: 1;
}

.perf-debug-param-hint-popover {
    position: absolute;
    z-index: 90;
    top: calc(100% + 0.35rem);
    left: 0;
    display: none;
    min-width: 14rem;
    max-width: min(22rem, calc(100vw - 2rem));
    padding: 0.55rem 0.65rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    box-shadow: 0 4px 16px rgba(15, 23, 42, 0.14);
    color: var(--text);
    font-size: 0.82rem;
    line-height: 1.45;
    font-weight: 400;
    pointer-events: none;
    white-space: normal;
}

.perf-debug-param-hint-popover p {
    margin: 0 0 0.45rem;
}

.perf-debug-param-hint-popover p:last-child {
    margin-bottom: 0;
}

.perf-debug-param-hint-popover-label {
    display: block;
    margin-bottom: 0.12rem;
    font-weight: 600;
    color: var(--muted);
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.02em;
}

.perf-debug-param-hint-wrap.is-open .perf-debug-param-hint-popover,
.perf-debug-param-hint-wrap:focus-within .perf-debug-param-hint-popover {
    display: block;
}

@media (hover: hover) and (pointer: fine) {
    .perf-debug-param-hint-wrap:hover .perf-debug-param-hint-popover {
        display: block;
    }
}

.perf-debug-custom-toggle-item {
    display: flex;
    align-items: flex-start;
    gap: 0.35rem;
}

.perf-debug-param-hint-trigger--icon-only {
    padding: 0.1rem;
}

.perf-debug-custom-toggle-label {
    flex: 1 1 auto;
    align-items: flex-start;
}

.perf-debug-custom-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: 0.35rem 1rem;
}

.perf-debug-custom-title,
.perf-debug-subtitle {
    margin: 0;
    font-size: 1rem;
}

.perf-debug-settings-row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 1rem;
}

.perf-debug-slow-threshold {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 10rem;
}

.perf-debug-slow-threshold input {
    width: 7rem;
}

.perf-debug-activation-days {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-top: 0.65rem;
    max-width: 14rem;
}

.perf-debug-activation-days input {
    width: 6rem;
}

.perf-debug-compare-actions {
    margin: 0.5rem 0 0.75rem;
}

.perf-debug-compare-actions .btn-secondary {
    width: 100%;
}

.perf-debug-ip-filter,
.perf-debug-user-filter,
.perf-debug-hide-self-label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.85rem;
    min-width: 12rem;
}

.perf-debug-hide-self-hint {
    margin: 0 0 0.5rem;
    font-size: 0.8rem;
}

.perf-debug-auto-refresh-hint {
    font-size: 0.75rem;
    max-width: 14rem;
    line-height: 1.3;
}

.perf-debug-ip-filter-input,
.perf-debug-user-filter-input {
    max-width: 16rem;
}

.perf-debug-journey-hint {
    margin: 0 0 0.5rem;
    flex: 1 1 100%;
}

.perf-debug-actions {
    flex-wrap: wrap;
    gap: 0.5rem;
}

.perf-debug-summary-wrap,
.perf-debug-detail-wrap {
    border-top: 1px solid var(--border-color, #d1d5db);
    padding-top: 1rem;
}

.perf-debug-summary-grid {
    grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
}

.perf-debug-detail-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.5rem;
}

.perf-debug-detail-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 0.75rem;
    margin-left: auto;
}

.perf-debug-subtitle-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem 0.75rem;
    margin-bottom: 0.35rem;
}

.perf-debug-subtitle-row .perf-debug-subtitle {
    margin: 0;
}

.perf-debug-part-refresh-actions {
    margin-left: 0;
}

.perf-debug-slow-only-label {
    margin: 0;
    margin-right: 0.25rem;
    white-space: nowrap;
}

.perf-debug-table-wrap {
    max-height: 32rem;
    overflow: auto;
}

.perf-debug-table .perf-debug-row--slow td {
    background: rgba(245, 158, 11, 0.12);
}

.perf-debug-recommendations-panel {
    margin: 0.5rem 0 1rem;
    padding: 1rem 1.1rem;
    border: 1px solid var(--border-subtle, rgba(0, 0, 0, 0.12));
    border-radius: 10px;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.perf-debug-recommendations-panel__header {
    margin-bottom: 0.75rem;
}

.perf-debug-recommendations-panel__header .perf-debug-subtitle {
    margin: 0 0 0.25rem;
}

.perf-debug-recommendations-body {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.perf-debug-recommendations-section-title {
    margin: 0 0 0.5rem;
    font-size: 0.92rem;
    font-weight: 600;
}

.perf-debug-recommendations-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 18rem), 1fr));
    gap: 0.65rem;
}

.perf-debug-recommendation-card {
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border-subtle, rgba(0, 0, 0, 0.1));
    border-radius: 8px;
    background: var(--panel-bg, #fff);
}

html[data-theme="dark"] .perf-debug-recommendation-card {
    background: rgba(255, 255, 255, 0.04);
}

.perf-debug-recommendation-card__header {
    margin-bottom: 0.35rem;
    font-size: 0.88rem;
}

.perf-debug-recommendation-card__source,
.perf-debug-recommendation-card__reco {
    margin: 0.35rem 0 0;
    font-size: 0.82rem;
    line-height: 1.4;
}

.perf-debug-issues-cell {
    max-width: 28rem;
    white-space: normal;
    line-height: 1.35;
    font-size: 0.82rem;
}

.perf-debug-stat-card--action {
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.perf-debug-stat-card--action:hover,
.perf-debug-stat-card--action:focus-visible {
    border-color: var(--accent, #2563eb);
    box-shadow: 0 0 0 1px var(--accent, #2563eb);
    outline: none;
}

.perf-debug-stat-card-link {
    display: block;
    margin-top: 0.35rem;
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--accent, #2563eb);
}

.perf-debug-issues-digest {
    margin-top: 0.75rem;
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.perf-debug-issues-digest-header {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
}

.perf-debug-issues-digest-title {
    margin: 0;
    font-size: 0.92rem;
    font-weight: 600;
}

.perf-debug-issue-card {
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border-subtle, rgba(0, 0, 0, 0.12));
    border-radius: 8px;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.perf-debug-issue-card__header {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.35rem 0.75rem;
    margin-bottom: 0.35rem;
}

.perf-debug-issue-card__kind {
    font-size: 0.9rem;
}

.perf-debug-issue-card__count {
    font-size: 0.78rem;
    color: var(--muted);
}

.perf-debug-issue-card__example,
.perf-debug-issue-card__paths,
.perf-debug-issue-card__text {
    margin: 0.2rem 0;
    font-size: 0.82rem;
    line-height: 1.4;
}

.perf-debug-issue-card__label {
    margin: 0.45rem 0 0.1rem;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: var(--muted);
}

.perf-debug-issue-card__recommendation {
    color: var(--text);
}

.perf-debug-row-filter-banner {
    margin: 0.35rem 0 0.65rem;
}

.perf-debug-security-hint {
    margin: 0.15rem 0 0.45rem;
    font-size: 0.78rem;
}

.perf-debug-check--high {
    color: inherit;
}

.perf-debug-check--high .perf-debug-check-name {
    color: #dc2626;
    font-weight: 700;
}

.perf-debug-check-name {
    font-weight: 600;
}

.perf-debug-check-high-badge {
    display: inline-block;
    margin-left: 0.25rem;
    padding: 0.05rem 0.35rem;
    border-radius: 4px;
    font-size: 0.72rem;
    font-weight: 700;
    color: #991b1b;
    background: rgba(220, 38, 38, 0.15);
}

.perf-debug-check-recommendation {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.78rem;
    color: var(--muted);
    line-height: 1.35;
}

.perf-debug-recommendation-card--high .perf-debug-check-name {
    color: #dc2626;
}

html[data-theme="dark"] .perf-debug-check--high .perf-debug-check-name,
html[data-theme="dark"] .perf-debug-recommendation-card--high .perf-debug-check-name {
    color: #f87171;
}

html[data-theme="dark"] .perf-debug-check-high-badge {
    color: #fecaca;
    background: rgba(248, 113, 113, 0.2);
}

.perf-debug-checks-list,
.perf-debug-issues-list,
.perf-debug-outbound-list {
    margin: 0;
    padding-left: 1rem;
    font-size: 0.85rem;
}

.perf-debug-check-meta {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.78rem;
    color: var(--muted);
    word-break: break-all;
    line-height: 1.35;
}

.perf-debug-check-meta code {
    font-size: 0.76rem;
}

.perf-debug-sample-detail {
    margin-top: 0.75rem;
    padding: 0.85rem 1rem;
    border-radius: 0.375rem;
    border: 1px solid var(--border-color, #d1d5db);
    background: var(--surface-muted, #f9fafb);
    font-size: 0.85rem;
    max-height: 36rem;
    overflow: auto;
    word-break: break-word;
}

.perf-debug-sample-detail__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.5rem;
}

.perf-debug-sample-detail__head-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.perf-debug-sample-detail__title {
    margin: 0;
    font-size: 0.95rem;
    font-weight: 600;
}

.perf-debug-dual-panel {
    display: grid;
    gap: 0.85rem;
}

.perf-debug-dual-panel__block {
    padding: 0.65rem 0.75rem;
    border-radius: 0.35rem;
    border: 1px solid var(--border-color, #e5e7eb);
    background: var(--surface, #fff);
}

.perf-debug-dual-panel__title {
    margin: 0 0 0.15rem;
    font-size: 0.82rem;
    font-weight: 600;
}

.perf-debug-dual-panel__hint {
    margin: 0 0 0.45rem;
}

.perf-debug-dual-panel__body {
    min-width: 0;
}

.perf-debug-sample-detail__json {
    margin: 0;
    padding: 0.55rem 0.65rem;
    max-height: 16rem;
    overflow: auto;
    border-radius: 0.3rem;
    background: rgba(0, 0, 0, 0.04);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.74rem;
    line-height: 1.4;
    white-space: pre-wrap;
}

.perf-debug-journey-timeline {
    margin: 0.25rem 0 0;
    padding-left: 1.15rem;
    line-height: 1.45;
}

.perf-debug-journey-timeline li + li {
    margin-top: 0.25rem;
}

.perf-debug-sample-detail__copy-status {
    margin-top: 0.55rem;
}

.perf-debug-sample-detail__label {
    margin: 0.65rem 0 0.2rem;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7280);
}

.perf-debug-sample-detail__text {
    margin: 0;
    line-height: 1.45;
}

.perf-debug-sample-detail__reason,
.perf-debug-sample-detail__recommendation {
    font-weight: 500;
}

.perf-debug-sample-detail__breakdown {
    margin-top: 0.35rem;
    color: var(--text-muted, #6b7280);
    font-size: 0.8rem;
}

.perf-debug-table .perf-debug-row--active td,
.perf-debug-table .perf-debug-journey-row--active td {
    outline: 1px solid rgba(59, 130, 246, 0.45);
    outline-offset: -1px;
}

html[data-theme="dark"] .perf-debug-table .perf-debug-row--slow td {
    background: rgba(245, 158, 11, 0.18);
}

html[data-theme="dark"] .perf-debug-sample-detail {
    background: rgba(255, 255, 255, 0.04);
}

html[data-theme="dark"] .perf-debug-dual-panel__block {
    background: rgba(255, 255, 255, 0.03);
    border-color: rgba(255, 255, 255, 0.1);
}

html[data-theme="dark"] .perf-debug-sample-detail__json {
    background: rgba(0, 0, 0, 0.25);
}

.perf-debug-security-card {
    grid-column: 1 / -1;
}

.perf-debug-security-card .perf-debug-checks-list code {
    display: none;
}

.perf-debug-security-card .perf-debug-checks-list li::before {
    content: none;
}

.email-log-table td,
.email-log-type-table td {
    vertical-align: top;
}

.logs-retention-ov-jump {
    color: inherit;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 0.15em;
}

.logs-retention-ov-jump:hover,
.logs-retention-ov-jump:focus {
    color: var(--accent, #1d4ed8);
}

.logs-retention-jump-flash {
    animation: logs-retention-jump-flash 1.6s ease-out;
}

@keyframes logs-retention-jump-flash {
    0%,
    20% {
        box-shadow: 0 0 0 3px rgba(29, 78, 216, 0.35);
    }
    100% {
        box-shadow: none;
    }
}

.ip-overview-actions .ip-blocked-badge,
.ip-overview-status .ip-blocked-badge,
.ip-overview-status .ip-own-badge,
.app-access-ip-actions .ip-own-badge {
    display: inline-block;
    margin-right: 0.5rem;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
}

.ip-overview-status .ip-protected-badge,
.app-access-ip-actions .ip-protected-badge {
    display: inline-block;
    margin-right: 0.5rem;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    color: #166534;
    background: #dcfce7;
}

.ip-overview-status .ip-blocked-badge,
.ip-overview-actions .ip-blocked-badge {
    color: #991b1b;
    background: #fee2e2;
}

.ip-overview-status .ip-own-badge,
.app-access-ip-actions .ip-own-badge {
    color: #1e40af;
    background: #dbeafe;
}

.ip-manual-block-row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 1rem;
    margin-top: 0.75rem;
}

.ip-manual-block-field {
    flex: 1 1 16rem;
    min-width: 12rem;
}

.ip-manual-block-field input {
    width: 100%;
    margin-top: 0.35rem;
}

.table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
}

.admin-log-scroll-wrap {
    --admin-log-visible-rows: 10;
    --admin-log-row-height: 2.75rem;
    max-height: calc(var(--admin-log-row-height) * (var(--admin-log-visible-rows) + 1));
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.journal-load-more-wrap {
    display: flex;
    justify-content: center;
    margin: 0.75rem 0 0;
}

.journal-load-more-wrap[hidden] {
    display: none;
}

.journal-load-more-btn {
    min-width: 10rem;
}

.admin-log-scroll-wrap--app-access {
    --admin-log-visible-rows: 18;
    --admin-log-row-height: 2.5rem;
    max-height: min(70vh, calc(var(--admin-log-row-height) * (var(--admin-log-visible-rows) + 1)));
}

/* Vue simple (défaut) vs tableau complet — checkbox par section */
.log-table-density-host:not([data-full-view="1"]) .log-col-full-only,
.log-table-density-host:not([data-full-view="1"]) .log-table-filter[data-full-only="1"] {
    display: none !important;
}

/* Tableaux unifiés : largeur au contenu (évite colonnes « — » étirées à 100%) */
.log-table-density-host table.app-access-log-table,
.log-table-density-host table.booking-audit-log-table,
.log-table-density-host table.admin-action-log-table,
.log-table-density-host table.access-log-table,
.log-table-density-host table.active-sessions-table,
.log-table-density-host table.ip-overview-table,
.log-table-density-host table.security-alert-token-table {
    width: max-content;
    min-width: 100%;
    table-layout: auto;
}

/* Colonnes compactes : ne pas absorber l’espace restant */
.log-table-density-host .unified-log-col--datetime,
.log-table-density-host .unified-log-col--type,
.log-table-density-host .unified-log-col--client_kind,
.log-table-density-host .unified-log-col--username,
.log-table-density-host .unified-log-col--country,
.log-table-density-host .unified-log-col--score,
.log-table-density-host .unified-log-col--user_score,
.log-table-density-host .unified-log-col--requests,
.log-table-density-host .unified-log-col--bytes_in,
.log-table-density-host .unified-log-col--bytes_out {
    width: 1%;
    white-space: nowrap;
}

.log-table-density-host .unified-log-col--info,
.log-table-density-host .unified-log-col--details {
    max-width: 28rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.log-table-density-host .unified-log-user-score,
.log-table-density-host td.unified-log-user-score {
    white-space: nowrap;
    word-break: keep-all;
}

.log-table-density-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0;
    font-size: 0.9rem;
    font-weight: 500;
    color: var(--text);
    cursor: pointer;
    user-select: none;
    flex-direction: row;
}

.log-table-density-toggle input {
    margin: 0;
    width: auto;
}

.ip-access-client-kind {
    display: inline-block;
    font-size: 0.85em;
    font-weight: 600;
    white-space: nowrap;
}

.ip-access-client-kind--human {
    color: #1f6b3a;
}

.ip-access-client-kind--robot {
    color: #5a6472;
}

.ip-access-client-kind--ai {
    color: #0b5cab;
}

.ip-access-client-kind--scanner {
    color: #a12828;
}

.ip-access-client-kind--hosting {
    color: #8a5a12;
}

.ip-access-client-kind--unknown {
    color: var(--muted);
}

html[data-theme="dark"] .ip-access-client-kind--human {
    color: #7dcea0;
}

html[data-theme="dark"] .ip-access-client-kind--robot {
    color: #aeb6bf;
}

html[data-theme="dark"] .ip-access-client-kind--ai {
    color: #7fb3d5;
}

html[data-theme="dark"] .ip-access-client-kind--scanner {
    color: #f1948a;
}

html[data-theme="dark"] .ip-access-client-kind--hosting {
    color: #e0b56a;
}

.admin-log-scroll-wrap thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    background: var(--card);
    box-shadow: 0 1px 0 var(--border);
}

.admin-log-scroll-wrap--payment-pending {
    max-height: 18rem;
}

.admin-log-scroll-wrap--payment-due {
    --admin-log-visible-rows: 4;
}

.admin-log-scroll-wrap--payment-list {
    --admin-log-visible-rows: 5;
}

.upcoming-bookings-scroll {
    --admin-log-visible-rows: 7;
}

.table-wrap.admin-log-scroll-wrap.bookings-table-scroll {
    --admin-log-visible-rows: 15;
    --admin-log-header-height: 3rem;
    /* Extra height for stacked hard-delete action under primary buttons. */
    --admin-log-body-row-height: 4.75rem;
    --bookings-table-scroll-height: calc(
        var(--admin-log-header-height)
        + var(--admin-log-body-row-height) * var(--admin-log-visible-rows)
    );
    height: var(--bookings-table-scroll-height);
    min-height: var(--bookings-table-scroll-height);
    max-height: var(--bookings-table-scroll-height);
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}

.table-wrap.admin-log-scroll-wrap.bookings-table-scroll .booking-status-cell .booking-cancelled-meta {
    display: inline-flex;
    margin-top: 0;
}

.upcoming-bookings-scroll {
    /* Room for primary actions + hard-delete row on each booking card. */
    --upcoming-list-row-height: 5.25rem;
    --upcoming-list-gap: 0.5rem;
    max-height: calc(
        var(--upcoming-list-row-height) * var(--admin-log-visible-rows)
        + var(--upcoming-list-gap) * (var(--admin-log-visible-rows) - 1)
    );
    margin-top: 1rem;
    overflow-x: auto;
}

.upcoming-bookings-scroll .bookings-list {
    margin-top: 0;
}

.export-period-content .export-period-controls {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.75rem;
    margin: 0;
}

.export-period-fields {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1rem;
}

.export-period-fields label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.92rem;
}

.export-period-input {
    min-width: 8.5rem;
}

.csv-preview-dialog {
    width: min(96vw, 960px);
    max-height: 90vh;
}

.csv-preview-table-wrap {
    max-height: min(60vh, 520px);
    overflow: auto;
    margin-top: 0.75rem;
}

.csv-preview-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.875rem;
}

.csv-preview-table th,
.csv-preview-table td {
    border: 1px solid var(--border);
    padding: 0.45rem 0.6rem;
    text-align: left;
    vertical-align: top;
    white-space: nowrap;
}

.csv-preview-table th {
    position: sticky;
    top: 0;
    background: #f3f4f6;
    z-index: 1;
}

.csv-preview-empty {
    margin-top: 0.75rem;
}

.export-period-actions {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
}

.export-delete-label {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 0.5rem;
    font-size: 0.92rem;
    margin: 0;
    cursor: pointer;
}

.export-delete-label input[type="checkbox"] {
    width: 1.1rem;
    height: 1.1rem;
    min-width: 0;
    margin: 0.15rem 0 0;
    flex-shrink: 0;
}

.csv-archives-block {
    margin-top: 1rem;
}

.admin-advanced-section.csv-archives-block > summary {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}

.csv-archives-summary-title {
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
}

.csv-archives-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--muted);
    font-size: 0.92rem;
    font-weight: 400;
    flex-shrink: 0;
}

.csv-archives-toggle-label-hide {
    display: none;
}

.csv-archives-block[open] .csv-archives-toggle-label-show {
    display: none;
}

.csv-archives-block[open] .csv-archives-toggle-label-hide {
    display: inline;
}

.csv-archives-toggle-chevron::before {
    content: "▸";
    display: inline-block;
    font-size: 0.85rem;
    transition: transform 0.15s ease;
}

.csv-archives-block[open] .csv-archives-toggle-chevron::before {
    transform: rotate(90deg);
}

.csv-archives-content > .field-hint:first-child {
    margin-top: 0;
}

.csv-archives-browser {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 0.85rem 1rem 1rem;
    margin: 0 0 1.25rem;
    background: var(--surface-muted, transparent);
}

.csv-archives-browser-title,
.csv-archives-create-title {
    margin: 0 0 0.35rem;
    font-size: 1rem;
    font-weight: 600;
}

.csv-archives-create-title {
    margin-top: 0.25rem;
}

.csv-archives-refresh-btn {
    margin: 0.25rem 0 0.75rem;
}

.csv-archives-path {
    margin: 0.35rem 0 0.5rem;
    font-size: 0.92rem;
}

.csv-archives-file-list {
    margin: 0;
    padding-left: 0;
    list-style: none;
    font-size: 0.92rem;
}

.csv-archives-file-list li + li {
    margin-top: 0.45rem;
}

.csv-archives-file-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.65rem;
}

.csv-archives-file-name {
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    font-size: 0.92em;
    word-break: break-all;
}

.csv-archives-bundle-item {
    list-style: none;
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 0.45rem 0.65rem;
    background: var(--surface, transparent);
}

.csv-archives-bundle-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.6rem;
    margin-bottom: 0.35rem;
}

.csv-archives-bundle {
    margin: 0;
}

.csv-archives-bundle-summary {
    cursor: pointer;
}

.csv-archives-bundle-title {
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    font-size: 0.92em;
    word-break: break-all;
}

.csv-archives-bundle-zip {
    margin-left: auto;
}

.csv-archives-bundle-files {
    margin: 0.45rem 0 0.15rem 1rem;
    padding-left: 1rem;
}

.csv-archives-download-link {
    margin-left: auto;
    font-family: inherit;
    word-break: normal;
}

.csv-archives-empty {
    margin: 0 0 0.75rem;
}

.payment-list {
    margin-top: 1rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

.payment-list h3 {
    margin: 0 0 0.75rem;
    font-size: 1rem;
}

.payment-list-loading {
    margin: 0;
    color: var(--text-muted, #5a6472);
    font-size: 0.92rem;
}

.payment-list-table th,
.payment-list-table td {
    white-space: nowrap;
}

.payment-list-table td:first-child {
    white-space: normal;
    min-width: 6rem;
}

table {
    width: 100%;
    border-collapse: collapse;
}

th, td {
    text-align: left;
    padding: 0.75rem;
    border-bottom: 1px solid var(--border);
}

th {
    font-size: 0.9rem;
    color: var(--muted);
}

.settings-form {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    margin-top: 1rem;
}

.admin-settings-details .settings-form > .btn-primary[type="submit"] {
    align-self: flex-start;
    width: auto;
}

.admin-readonly-field {
    background: var(--surface-muted, #f4f4f5);
    color: var(--muted);
    cursor: default;
}

.admin-readonly-field:focus {
    outline: none;
    box-shadow: none;
}

.reminder-settings-groups {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.75rem;
    max-width: 48rem;
}

.reminder-settings-toggles {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
    margin: 0.75rem 0 0;
}

.reminder-settings-toggles > .checkbox-label {
    margin: 0;
}

.reminder-settings-summary-time-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem 1.25rem;
    width: 100%;
    max-width: 100%;
}

.reminder-settings-summary-time-row > .checkbox-label {
    margin: 0;
}

/* Legacy aliases — panel now uses .reminder-settings-toggles */
.reminder-settings-recipients {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
    margin: 0.75rem 0 0;
}

.reminder-settings-daily-summary-row {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
    width: 100%;
    margin-top: 0.35rem;
}

.reminder-settings-daily-summary-row .checkbox-label {
    margin: 0;
}

.reminder-settings-daily-time {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
}

.reminder-settings-daily-time[hidden] {
    display: none;
}

.reminder-settings-daily-time label {
    margin: 0;
    white-space: nowrap;
}

.reminder-settings-daily-time .time-input-24h {
    width: auto;
    max-width: 6rem;
    font-size: 0.9rem;
    padding: 0.2rem 0.35rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.reminder-settings-send-if-empty {
    margin: 0;
}

.reminder-settings-send-if-empty[hidden] {
    display: none;
}

.reminder-settings-form[hidden] {
    display: none;
}

.reminder-settings-weekly-summary-options {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.5rem 0 0.75rem;
    padding: 0.75rem 0 0 0.25rem;
    border-top: 1px solid var(--border);
}

.reminder-settings-weekly-summary-options[hidden] {
    display: none;
}

.reminder-settings-weekly-mode {
    border: 0;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.reminder-settings-weekly-mode legend {
    font-size: 0.9rem;
    font-weight: 600;
    margin-bottom: 0.15rem;
}

.reminder-settings-weekly-mode-option {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.reminder-settings-weekly-summary-options .radio-label,
.reminder-settings-weekly-summary-options .checkbox-label {
    margin: 0;
}

.reminder-settings-weekly-send-day {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.35rem;
    width: auto;
    max-width: 100%;
    margin-left: 1.6rem;
}

.reminder-settings-weekly-send-day[hidden] {
    display: none;
}

.reminder-settings-weekly-send-day select {
    width: auto;
    max-width: 100%;
    min-width: 12rem;
}

.reminder-settings-group {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.reminder-settings-group label > select {
    width: 100%;
    min-width: 0;
}

.reminder-settings-group .reminder-timing-field[hidden] {
    display: none;
}

@media (max-width: 800px) {
    .reminder-settings-groups {
        grid-template-columns: 1fr;
    }
}

.smtp-recipient-groups {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1rem;
    margin-bottom: 0.5rem;
}

.smtp-recipient-group {
    min-width: 0;
    margin: 0;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.smtp-recipient-group legend {
    font-weight: 600;
    color: var(--text);
    padding: 0 0.25rem;
}

.smtp-recipient-group label > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

@media (max-width: 640px) {
    .smtp-recipient-groups {
        grid-template-columns: 1fr;
    }
}

.settings-subheading {
    margin: 1.25rem 0 0.75rem;
    font-size: 1rem;
    font-weight: 600;
}

.settings-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 1rem;
}

.email-link-audience-grid {
    align-items: start;
}

.email-link-audience-grid > .settings-fieldset {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.email-link-tokens-form .time-input-24h {
    width: 100%;
    max-width: 8rem;
    min-width: 5.5rem;
    font: inherit;
    font-size: 0.95rem;
    padding: 0.65rem 0.75rem;
    box-sizing: border-box;
}

.email-link-tokens-form .email-link-sublegend {
    margin: 0.35rem 0 0;
    font-weight: 600;
}

.email-link-tokens-form .settings-fieldset .settings-grid {
    gap: 0.75rem;
}

/* Scoped readability for Communications → email link tokens only */
.email-link-tokens-layout {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.email-link-tokens-layout .email-link-tokens-intro {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    margin: 0;
    line-height: 1.55;
}

.email-link-tokens-layout .email-link-tokens-intro p {
    margin: 0;
    line-height: 1.55;
}

.email-link-tokens-layout .email-link-tokens-global {
    margin: 0;
    padding-bottom: 0.35rem;
}

.email-link-tokens-layout .email-link-audience-grid {
    gap: 1.35rem;
}

.email-link-tokens-layout .email-link-audience-card {
    gap: 1.15rem;
    padding: 1.1rem 1.15rem 1.25rem;
    border-radius: 12px;
}

.email-link-tokens-layout .settings-fieldset legend {
    font-size: 1.02rem;
    font-weight: 700;
    color: var(--text, #0f172a);
    letter-spacing: 0.01em;
    padding: 0 0.15rem;
}

.email-link-tokens-layout .email-link-param-group {
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
    margin: 0;
    padding: 0.95rem 1rem 1.05rem;
    border: 1px solid var(--border, rgba(148, 163, 184, 0.35));
    border-radius: 10px;
    background: var(--surface-muted, #f3f4f6);
}

.email-link-tokens-layout .email-link-param-group + .email-link-param-group {
    margin-top: 0.15rem;
}

.email-link-tokens-layout .email-link-sublegend {
    margin: 0;
    padding: 0 0 0.55rem;
    border-bottom: 1px solid var(--border, rgba(148, 163, 184, 0.45));
    font-size: 0.92rem;
    font-weight: 600;
    line-height: 1.35;
    color: var(--text, #0f172a);
}

.email-link-tokens-layout .email-link-section-summary {
    margin: 0;
    padding: 0.55rem 0.7rem;
    border-radius: 8px;
    background: var(--surface-elevated, var(--surface-muted, #2a332e));
    border: 1px solid var(--border, rgba(148, 163, 184, 0.35));
    color: var(--text, #0f172a);
    font-size: 0.9rem;
    font-weight: 500;
    line-height: 1.45;
}

.email-link-tokens-layout .email-link-param-fields {
    gap: 1.15rem 1rem;
}

.email-link-tokens-layout .email-link-input-with-hint {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.55rem 0.75rem;
    width: 100%;
}

.email-link-tokens-layout .email-link-input-with-hint > input {
    width: auto;
    min-width: 5.5rem;
    max-width: 8rem;
    flex: 0 0 auto;
}

.email-link-tokens-layout .email-link-live-hint {
    flex: 1 1 10rem;
    min-width: 0;
    color: var(--muted, #64748b);
    font-size: 0.88rem;
    font-weight: 500;
    line-height: 1.35;
}

.email-link-tokens-layout .settings-fieldset label {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
    margin: 0;
    font-weight: 500;
    line-height: 1.35;
}

.email-link-tokens-layout .email-link-field-hint {
    display: block;
    margin-top: 0.15rem;
    line-height: 1.55;
}

.email-link-tokens-layout .email-link-tokens-preview {
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    margin-top: 0.25rem;
    padding: 0.95rem 1.05rem;
    border: 1px solid var(--border, rgba(148, 163, 184, 0.35));
    border-radius: 10px;
}

.email-link-tokens-layout .email-link-preview-heading {
    margin: 0;
    padding-bottom: 0.35rem;
    border-bottom: 1px solid var(--border, rgba(148, 163, 184, 0.4));
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--text, #0f172a);
}

html[data-theme="dark"] .email-link-tokens-layout .settings-fieldset legend,
html[data-theme="dark"] .email-link-tokens-layout .email-link-sublegend,
html[data-theme="dark"] .email-link-tokens-layout .email-link-preview-heading {
    color: var(--text);
}

html[data-theme="dark"] .email-link-tokens-layout .email-link-param-group {
    background: var(--surface-muted, #2a332e);
}

html[data-theme="dark"] .email-link-tokens-layout .email-link-section-summary {
    background: var(--surface-elevated, #243029);
}

html[data-theme="dark"] .email-link-tokens-layout .email-link-live-hint {
    color: var(--muted, #94a3b8);
}

.settings-grid label > input:not([type="checkbox"]),
.settings-grid label > .phone-input-group,
.settings-grid label > select,
.settings-grid label > textarea,
.settings-full > input:not([type="checkbox"]),
.settings-full > select,
.settings-full > textarea {
    width: 100%;
    min-width: 0;
}

/* Compact numeric inputs (short max-attempts style, not full-width). */
.settings-input-compact {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.35rem;
    max-width: 14rem;
}

.settings-input-compact > input[type="number"] {
    width: 4.5rem;
    min-width: 4.5rem;
    max-width: 4.5rem;
    box-sizing: border-box;
}

.bruteforce-admin-layers {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin: 0.5rem 0 1rem;
}

.bruteforce-admin-layers .security-mode-fieldset {
    margin: 0;
}

.bruteforce-admin-layer-fields {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 1rem 1.5rem;
}

.bruteforce-admin-layers .field-hint {
    margin: 0.5rem 0 0;
    max-width: 28rem;
}

.ip-challenge-max-attempts-fields {
    margin-top: 0.65rem;
}

.ip-challenge-max-attempts-fields .field-hint {
    margin-top: 0.35rem;
    max-width: 28rem;
}

label > .phone-input-group,
.details-form label > .phone-input-group,
#manual-booking-dialog .phone-input-group {
    width: 100%;
    min-width: 0;
}

#manual-booking-dialog .manual-booking-time-label {
    display: block;
    font-weight: 600;
    margin-bottom: 0.35rem;
}

#manual-booking-dialog .manual-booking-time-group {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

#manual-booking-dialog .manual-booking-time-group select {
    min-width: 5.5rem;
    flex: 0 1 auto;
}

#manual-booking-dialog .manual-booking-time-separator {
    color: var(--muted);
    font-weight: 600;
    user-select: none;
}

#manual-booking-dialog .manual-booking-date-group {
    display: flex;
    align-items: stretch;
    width: 100%;
    max-width: 16rem;
    position: relative;
}

.date-field-with-calendar,
.export-period-date-group,
.manual-booking-date-group {
    display: flex;
    align-items: stretch;
    width: 100%;
    max-width: 16rem;
    position: relative;
}

.generate-date-controls .date-field-with-calendar,
.export-period-fields .date-field-with-calendar {
    max-width: 11rem;
}

#payment-dialog .date-field-with-calendar {
    max-width: 14rem;
}

.payment-receipts-export-period .date-field-with-calendar {
    max-width: 100%;
}

#manual-booking-dialog .manual-booking-date-group input[type="text"],
.date-field-with-calendar input[type="text"] {
    flex: 1;
    min-width: 0;
    border-radius: 8px 0 0 8px;
}

#manual-booking-dialog .manual-booking-date-picker-btn,
.date-field-calendar-btn,
.manual-booking-date-picker-btn,
.payment-receipts-export-date-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: 2.75rem;
    min-height: 2.75rem;
    padding: 0.7rem 0.75rem;
    border-radius: 0 8px 8px 0;
    border: 1px solid var(--border);
    border-left: none;
    background: var(--bg);
    color: var(--muted);
    cursor: pointer;
}

#manual-booking-dialog .manual-booking-date-picker-btn:hover,
.date-field-calendar-btn:hover,
.manual-booking-date-picker-btn:hover,
.payment-receipts-export-date-btn:hover {
    background: #eef2f7;
    color: var(--text);
}

#manual-booking-dialog .manual-booking-date-picker-icon,
.date-field-calendar-icon,
.manual-booking-date-picker-icon {
    display: block;
}

#manual-booking-dialog .manual-booking-date-picker-hidden,
.date-field-picker-hidden,
.manual-booking-date-picker-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.french-date-calendar-popup {
    position: absolute;
    top: calc(100% + 0.35rem);
    left: 0;
    z-index: 30;
    width: min(18rem, calc(100vw - 2rem));
    padding: 0.75rem;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--card);
    color: var(--text);
    box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12);
}

.french-date-calendar-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.65rem;
}

.french-date-calendar-title {
    flex: 1;
    text-align: center;
    font-weight: 600;
    color: var(--text);
    text-transform: capitalize;
}

.french-date-calendar-nav {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2rem;
    min-height: 2rem;
    padding: 0;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--bg);
    color: var(--muted);
    cursor: pointer;
}

.french-date-calendar-nav:hover {
    background: #eef2f7;
    color: var(--text);
}

.french-date-calendar-weekdays,
.french-date-calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 0.2rem;
}

.french-date-calendar-weekdays {
    margin-bottom: 0.35rem;
}

.french-date-calendar-weekday {
    text-align: center;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--muted);
}

.french-date-calendar-day {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
    min-height: 2rem;
    padding: 0;
    border: 1px solid transparent;
    border-radius: 8px;
    background: transparent;
    color: var(--text);
    font: inherit;
    cursor: pointer;
}

.french-date-calendar-day:hover {
    background: #eef2f7;
}

.french-date-calendar-day.is-today {
    border-color: var(--primary);
    color: var(--primary);
    font-weight: 600;
}

.french-date-calendar-day.is-selected {
    background: var(--primary);
    border-color: var(--primary);
    color: #fff;
}

.french-date-calendar-day.is-selected:hover {
    background: var(--primary-dark);
    border-color: var(--primary-dark);
}

.french-date-calendar-day-empty {
    visibility: hidden;
    pointer-events: none;
}

.phone-input-group {
    display: flex;
    align-items: stretch;
    width: 100%;
    min-width: 0;
}

.phone-input-prefix {
    display: flex;
    align-items: center;
    padding: 0 0.75rem;
    background: var(--bg);
    border: 1px solid var(--border);
    border-right: none;
    border-radius: 8px 0 0 8px;
    color: var(--muted);
    font-weight: 500;
    user-select: none;
    flex-shrink: 0;
}

.phone-input-group input[type="tel"] {
    flex: 1;
    min-width: 0;
    border-radius: 0 8px 8px 0;
}

.settings-full {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    max-width: 480px;
}

.backup-cron-scopes-fieldset,
.backup-manual-scopes-fieldset {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border);
    border-radius: 8px;
}

#backup-config-form .admin-backup-scope-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 1.25rem 1.5rem;
    align-items: start;
}

#backup-config-form .admin-backup-scope-col {
    min-width: 0;
}

#backup-config-form .backup-cron-scopes-fieldset,
#backup-config-form .backup-manual-scopes-fieldset {
    margin: 0;
    max-width: none;
}

.backup-transfer-toolbar {
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
    align-items: center;
}

.backup-transfer-toolbar .backup-transfer-integrity-label {
    display: inline-flex;
    align-items: center;
    margin: 0;
    flex: 1 1 100%;
}

@media (min-width: 720px) {
    .backup-transfer-toolbar .backup-transfer-integrity-label {
        flex: 0 1 auto;
        margin-left: 0.25rem;
    }
}

.backup-select-col {
    width: 2.5rem;
    text-align: center;
    vertical-align: middle;
}

.backup-select-col input[type="checkbox"] {
    margin: 0;
}

@media (max-width: 900px) {
    #backup-config-form .admin-backup-scope-row {
        grid-template-columns: 1fr;
    }
}

.backup-cron-scopes-fieldset .checkbox-label + .checkbox-label,
.backup-manual-scopes-fieldset .checkbox-label + .checkbox-label {
    margin-top: 0.35rem;
}

.backup-cron-scope-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.65rem;
    margin-top: 0.45rem;
}

.backup-cron-scope-row .backup-cron-scope-check {
    margin: 0;
    min-width: 8.5rem;
    flex: 1 1 8.5rem;
}

.backup-cron-freq-label,
.backup-cron-freq-extra {
    margin: 0;
}

.backup-cron-freq-extra {
    display: none;
    align-items: center;
    gap: 0.35rem;
    font-size: 0.9rem;
}

.backup-cron-freq-extra.is-visible {
    display: inline-flex;
}

.backup-cron-freq-mode,
.backup-cron-freq-interval-select,
.backup-cron-freq-weekday-select,
.backup-cron-freq-monthday-select,
.backup-sched-mode,
.backup-sched-interval,
.backup-sched-weekday,
.backup-sched-monthday {
    max-width: 12.5rem;
    font: inherit;
}

.backup-periodic-verify-grid {
    display: grid;
    grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.65rem 1rem;
    align-items: start;
    margin: 0.5rem 0 0.75rem;
}

.backup-periodic-verify-grid__head {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-muted, #666);
}

.backup-periodic-verify-grid__row-label {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-muted, #666);
    padding-top: 0.35rem;
}

.backup-periodic-verify-grid__cell {
    min-width: 0;
}

.backup-sched-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 0.5rem;
    align-items: center;
}

.backup-sched-extra {
    display: none;
}

.backup-sched-extra.is-visible {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    font-size: 0.85rem;
}

.backup-periodic-depth {
    margin: 1rem 0 0.5rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--border, rgba(148, 163, 184, 0.35));
}

.backup-periodic-depth__title {
    margin: 0 0 0.25rem;
    font-size: 0.95rem;
    font-weight: 600;
}

.backup-periodic-depth-grid {
    display: grid;
    grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.65rem 1rem;
    align-items: start;
    margin: 0.5rem 0 0.25rem;
}

.backup-periodic-depth-grid__head,
.backup-periodic-depth-grid__row-label {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-muted, #666);
}

.backup-periodic-depth-grid__row-label {
    padding-top: 0.35rem;
}

.backup-periodic-depth-controls {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.4rem 0.55rem;
    align-items: center;
    min-width: 0;
}

.backup-periodic-depth-mode {
    flex: 1 1 auto;
    max-width: 13rem;
    min-width: 0;
    width: auto;
    font: inherit;
}

.backup-periodic-depth-params {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.35rem 0.5rem;
    flex: 0 0 auto;
    min-width: 0;
}

.backup-periodic-depth-extra {
    display: none;
    font-size: 0.85rem;
}

.backup-periodic-depth-extra.is-visible {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    gap: 0.3rem;
    flex: 0 0 auto;
    margin: 0;
    white-space: nowrap;
}

.backup-periodic-depth-extra input[type="number"] {
    width: 4.25rem;
    min-width: 4.25rem;
    max-width: 4.25rem;
    padding: 0.4rem 0.45rem;
    font: inherit;
}

@media (max-width: 900px) {
    .backup-periodic-depth-controls {
        flex-wrap: wrap;
    }
}

@media (max-width: 720px) {
    .backup-periodic-verify-grid {
        grid-template-columns: 1fr;
    }

    .backup-periodic-verify-grid__corner,
    .backup-periodic-verify-grid__head {
        display: none;
    }

    .backup-periodic-verify-grid__row-label {
        margin-top: 0.5rem;
    }

    .backup-periodic-depth-grid {
        grid-template-columns: 1fr;
    }

    .backup-periodic-depth-grid__corner,
    .backup-periodic-depth-grid__head {
        display: none;
    }

    .backup-periodic-depth-grid__row-label {
        margin-top: 0.5rem;
    }
}

.backup-lock-col {
    width: 2.5rem;
    text-align: center;
    vertical-align: middle;
}

.backup-lock-indicator.is-locked {
    font-size: 0.95rem;
    line-height: 1;
}

.backup-row-locked code {
    font-weight: 600;
}

.backup-stats-locations {
    display: grid;
    gap: 0.75rem;
    margin: 0.35rem 0 0.75rem;
    min-width: 0;
}

@media (min-width: 1100px) {
    .backup-stats-locations {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: start;
    }
}

.backup-inventory-panels {
    margin: 0;
    min-width: 0;
}

.backup-inventory-stats-panel {
    margin: 0.25rem 0 0.85rem;
    padding: 0.75rem 0.9rem;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--card);
}

.backup-stats-heading {
    margin: 0 0 0.25rem;
    font-size: 1rem;
}

.backup-stats-cards {
    margin: 0.65rem 0 0.75rem;
}

.backup-stats-table-wrap {
    margin: 0 0 0.75rem;
}

.backup-stats-table th,
.backup-stats-table td {
    white-space: nowrap;
}

.backup-inventory-overview,
.backup-inventory-stats {
    margin: 0.35rem 0;
}

.backup-inventory-overview summary,
.backup-inventory-stats summary {
    cursor: pointer;
    font-weight: 600;
}

.backup-inventory-path,
.backup-inventory-total {
    margin: 0.35rem 0;
    font-size: 0.85rem;
}

.backup-inventory-types {
    margin: 0.25rem 0 0;
    padding-left: 1.2rem;
    font-size: 0.85rem;
}

.backup-inventory-types li {
    margin: 0.15rem 0;
}

.backup-evo-figure {
    margin: 0.65rem 0 0.85rem;
}

.backup-evo-figure figcaption {
    font-size: 0.82rem;
    font-weight: 600;
    margin: 0 0 0.25rem;
}

.backup-evo-chart-wrap {
    display: flex;
    align-items: flex-end;
    gap: 0.35rem;
    margin: 0.2rem 0 0;
}

.backup-evo-y-axis {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    flex: 0 0 2.75rem;
    height: 4.75rem;
    padding: 0.05rem 0;
    font-size: 0.65rem;
    line-height: 1.1;
    color: var(--muted);
    text-align: right;
}

.backup-evo-svg {
    flex: 1 1 auto;
    display: block;
    width: 100%;
    height: 6rem;
    overflow: visible;
}

.backup-evo-grid {
    stroke: rgba(127, 127, 127, 0.22);
    stroke-width: 1;
    vector-effect: non-scaling-stroke;
}

html[data-theme="dark"] .backup-evo-grid {
    stroke: rgba(255, 255, 255, 0.12);
}

.backup-evo-bar-svg {
    fill: #0969da;
}

html[data-theme="dark"] .backup-evo-bar-svg {
    fill: #58a6ff;
}

.backup-evo-bar-delta {
    fill: #ffffff;
    font-weight: 700;
    pointer-events: none;
}

.backup-evo-bar-date {
    fill: var(--muted);
    pointer-events: none;
}

.backup-evo-axis {
    display: flex;
    justify-content: space-between;
    margin: 0.15rem 0 0;
    font-size: 0.72rem;
    color: var(--muted);
}

.backup-evo-empty,
.backup-evo-truncated {
    margin: 0.15rem 0;
}

.backup-managed-table-wrap {
    width: 100%;
    /* Keep ~5 archive rows visible; older ones remain reachable by scroll. */
    --backup-managed-visible-rows: 5;
    --backup-managed-header-height: 2.75rem;
    --backup-managed-row-height: 4rem;
    max-height: calc(
        var(--backup-managed-header-height)
        + var(--backup-managed-row-height) * var(--backup-managed-visible-rows)
    );
    overflow-x: auto;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.backup-managed-table {
    width: 100%;
    table-layout: auto;
    font-size: 0.875rem;
}

.backup-managed-table th,
.backup-managed-table td {
    padding: 0.45rem 0.5rem;
    vertical-align: middle;
}

.backup-managed-table thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    font-size: 0.8125rem;
    white-space: nowrap;
    background: var(--card);
    box-shadow: 0 1px 0 var(--border);
}

html[data-theme="dark"] .backup-managed-table-wrap thead th {
    background: var(--card);
    color: var(--muted);
}

.backup-managed-table .backup-col-filename {
    min-width: 0;
    max-width: 14rem;
}

.backup-managed-table .backup-col-filename code {
    display: block;
    font-size: 0.78rem;
    line-height: 1.35;
    word-break: break-word;
}

.backup-managed-table .backup-col-date,
.backup-managed-table .backup-col-size,
.backup-managed-table .backup-col-source {
    white-space: nowrap;
}

.backup-managed-table .backup-col-integrity .status-badge,
.backup-managed-table .backup-col-source .backup-source-badge {
    font-size: 0.72rem;
    padding: 0.12rem 0.4rem;
}

.backup-managed-table .backup-col-actions {
    min-width: 0;
    width: 1%;
}

.backup-managed-table .backup-row-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
    justify-content: flex-start;
}

.backup-managed-table .backup-action-group .btn-small {
    padding: 0.25rem 0.4rem;
    font-size: 0.78rem;
    line-height: 1.2;
}

.backup-managed-table .queue-actions {
    flex-wrap: wrap;
    justify-content: flex-start;
    white-space: normal;
}

@media (max-width: 1180px) {
    .backup-managed-table .backup-col--optional {
        display: none;
    }
}

@media (max-width: 900px) {
    .backup-managed-table .backup-col-date {
        font-size: 0.78rem;
    }

    .backup-managed-table .backup-col-filename {
        max-width: 10rem;
    }
}

@media (max-width: 640px) {
    .backup-managed-table {
        font-size: 0.8125rem;
    }

    .backup-managed-table .backup-row-actions {
        flex-direction: column;
        align-items: stretch;
    }

    .backup-managed-table .backup-action-group {
        width: 100%;
        flex-wrap: wrap;
    }
}

.backup-integrity-actions {
    gap: 0.5rem;
}

.backup-encryption-password-field {
    max-width: min(100%, 24rem);
}

.backup-encryption-password-field .backup-encryption-password-input {
    width: 100%;
    max-width: 24rem;
}

.backup-encrypt-on-create-fieldset {
    max-width: 640px;
}

.backup-encrypt-grid {
    display: grid;
    grid-template-columns: minmax(5rem, auto) minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.5rem 1rem;
    align-items: center;
    margin: 0.5rem 0 0.75rem;
}

.backup-encrypt-grid__corner {
    display: block;
}

.backup-encrypt-grid__head {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-muted, #666);
}

.backup-encrypt-grid__row-label {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-muted, #666);
}

.backup-encrypt-grid__cell {
    margin: 0;
}

@media (max-width: 520px) {
    .backup-encrypt-grid {
        grid-template-columns: 1fr 1fr;
    }

    .backup-encrypt-grid__corner,
    .backup-encrypt-grid__head:first-of-type {
        display: none;
    }

    .backup-encrypt-grid__row-label {
        grid-column: 1 / -1;
        margin-top: 0.35rem;
    }
}

.settings-span-full {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    grid-column: 1 / -1;
    max-width: none;
}

.url-port-field-wrap {
    position: relative;
    width: 100%;
}

.url-port-field-wrap input[type="url"] {
    width: 100%;
    min-width: 0;
}

.url-port-field-wrap--mirror input.url-port-field-active {
    color: transparent;
    caret-color: var(--text, #1a1a1a);
    background: #fff;
}

.url-port-field-mirror {
    position: absolute;
    inset: 0;
    padding: 0.65rem 0.75rem;
    border: 1px solid transparent;
    border-radius: 8px;
    font: inherit;
    line-height: normal;
    white-space: nowrap;
    overflow: hidden;
    pointer-events: none;
    color: var(--text, #1a1a1a);
}

.url-port-implicit-hint {
    margin: 0;
}

.caldav-server-intro {
    margin: 0 0 0.35rem;
}

.caldav-server-grid {
    grid-template-columns: minmax(0, 0.75fr) minmax(0, 2fr) minmax(0, 0.85fr) minmax(0, 1.4fr);
    gap: 0.75rem 1rem;
    align-items: start;
}

.caldav-server-grid > label {
    align-self: start;
}

.caldav-hostname-stack {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 0;
}

.webdav-path-stack {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    min-width: 0;
}

.webdav-path-stack > label > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

.caldav-hostname-stack > label > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

.caldav-hostname-extra {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.caldav-hostname-extra label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.caldav-hostname-extra label > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

.caldav-hostname-extra .field-hint,
.caldav-hostname-extra .dns-resolve-status {
    margin: 0;
}

.caldav-resolve-row {
    margin: 0;
}

.caldav-url-preview {
    margin: 0.1rem 0 0;
}

.caldav-calendar-grid {
    gap: 0.75rem 1rem;
}

.caldav-calendar-grid label {
    min-width: 0;
}

/* ——— Proxy settings (admin technical) ——— */

.proxy-settings-server-intro {
    margin: 0 0 0.35rem;
}

.proxy-settings-server-grid {
    grid-template-columns: minmax(0, 1fr) 120px;
    gap: 0.75rem 1rem;
    align-items: start;
}

.proxy-settings-hostname-label,
.proxy-settings-port-label {
    align-self: start;
    min-width: 0;
}

.proxy-settings-port-label > input:not([type="checkbox"]) {
    width: 100%;
    max-width: 120px;
    min-width: 0;
}

.proxy-settings-resolve-block {
    grid-column: 1;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 0;
}

.proxy-settings-resolve-block label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.proxy-settings-resolve-block label > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

.proxy-settings-resolve-block .field-hint,
.proxy-settings-resolve-block .dns-resolve-status {
    margin: 0;
}

.proxy-settings-resolve-row {
    margin: 0;
}

.proxy-settings-auth-grid {
    gap: 0.75rem 1rem;
}

.proxy-settings-ca-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.proxy-settings-ca-card {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
}

.proxy-settings-ca-card-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.35rem 0.75rem;
}

.proxy-settings-ca-card-title {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--text);
}

.proxy-settings-ca-present {
    margin: 0;
    font-size: 0.85rem;
}

.proxy-settings-file-field {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem;
}

.proxy-settings-file-input {
    position: absolute;
    width: 0.1px;
    height: 0.1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.proxy-settings-file-trigger {
    margin: 0;
    cursor: pointer;
}

.proxy-settings-ca-remove {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    align-self: flex-start;
    margin: 0;
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--danger, #b42318);
    cursor: pointer;
}

.proxy-settings-ca-remove input[type="checkbox"] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}

.proxy-settings-ca-remove:has(input:checked) {
    text-decoration: line-through;
    opacity: 0.75;
}

.proxy-settings-ca-meta {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.proxy-settings-ca-meta-list {
    display: grid;
    gap: 0.45rem 0.75rem;
    margin: 0;
}

.proxy-settings-ca-meta-row {
    display: grid;
    grid-template-columns: minmax(5.5rem, 7rem) minmax(0, 1fr);
    gap: 0.35rem 0.75rem;
    align-items: start;
}

.proxy-settings-ca-meta-row dt {
    margin: 0;
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--text-muted, #6b7280);
}

.proxy-settings-ca-meta-row dd {
    margin: 0;
    font-size: 0.88rem;
    color: var(--text);
    word-break: break-word;
}

.proxy-settings-ca-expiry--expired {
    color: var(--danger, #b42318);
    font-weight: 600;
}

.proxy-settings-ca-details {
    margin: 0;
    font-size: 0.88rem;
}

.proxy-settings-ca-details > summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--link, #2563eb);
    list-style: none;
}

.proxy-settings-ca-details > summary::-webkit-details-marker {
    display: none;
}

.proxy-settings-ca-details[open] > summary {
    margin-bottom: 0.45rem;
}

.proxy-settings-ca-meta-list--details {
    padding-left: 0.25rem;
}

.proxy-settings-ca-fingerprint {
    font-size: 0.78rem;
    word-break: break-all;
}

.proxy-settings-ca-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.proxy-settings-ca-upload-name {
    margin: 0;
    font-size: 0.85rem;
}

.proxy-settings-ca-upload-status {
    margin: 0;
    font-size: 0.88rem;
}

.cert-manager {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.75rem 0 1rem;
}

.cert-manager-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.cert-manager-empty {
    margin: 0;
}

.cert-manager-card {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
}

.cert-manager-card-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.75rem;
}

.cert-manager-card-title {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--text);
}

.cert-manager-present {
    margin: 0;
    font-size: 0.85rem;
}

.cert-manager-expired-badge {
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--danger, #b42318);
}

.cert-manager-meta {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.cert-manager-meta-list {
    display: grid;
    gap: 0.45rem 0.75rem;
    margin: 0;
}

.cert-manager-meta-row {
    display: grid;
    grid-template-columns: minmax(5.5rem, 7rem) minmax(0, 1fr);
    gap: 0.35rem 0.75rem;
    align-items: start;
}

.cert-manager-meta-row dt {
    margin: 0;
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--text-muted, #6b7280);
}

.cert-manager-meta-row dd {
    margin: 0;
    font-size: 0.88rem;
    color: var(--text);
    word-break: break-word;
}

.cert-manager-expiry--expired {
    color: var(--danger, #b42318);
    font-weight: 600;
}

.cert-manager-details {
    margin: 0;
    font-size: 0.88rem;
}

.cert-manager-details > summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--link, #2563eb);
    list-style: none;
}

.cert-manager-details > summary::-webkit-details-marker {
    display: none;
}

.cert-manager-details[open] > summary {
    margin-bottom: 0.45rem;
}

.cert-manager-meta-list--details {
    padding-left: 0.25rem;
}

.cert-manager-fingerprint {
    font-size: 0.78rem;
    word-break: break-all;
}

.cert-manager-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.cert-manager-add {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.cert-manager-add-row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.75rem 1rem;
}

.cert-manager-type-label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    font-size: 0.88rem;
}

.cert-manager-type-select {
    min-width: 12rem;
}

.cert-manager-file-field {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem;
}

.cert-manager-file-input {
    position: absolute;
    width: 0.1px;
    height: 0.1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.cert-manager-file-trigger {
    margin: 0;
    cursor: pointer;
}

.cert-manager-upload-name,
.cert-manager-upload-status,
.cert-manager-card-status {
    margin: 0;
    font-size: 0.88rem;
}

.proxy-settings-bypass {
    max-width: none;
}

.proxy-settings-bypass > textarea {
    width: 100%;
    min-width: 0;
}

.proxy-settings-test-panel {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f9fafb);
}

.proxy-settings-test-title {
    margin: 0;
}

.proxy-settings-test-grid {
    gap: 0.75rem 1rem;
}

.proxy-settings-test-actions {
    margin: 0;
}

.proxy-settings-navigate-url {
    min-width: 0;
}

.proxy-settings-navigate-url > input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

@media (max-width: 768px) {
    .proxy-settings-server-grid {
        grid-template-columns: 1fr;
    }

    .proxy-settings-port-label > input:not([type="checkbox"]) {
        max-width: none;
    }

    .proxy-settings-resolve-block {
        grid-column: 1 / -1;
    }
}

.settings-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    align-items: center;
    justify-content: flex-start;
}

/* Test/action left, Enregistrer (submit) pinned right when both are present */
.settings-actions:has(> .btn-secondary[type="button"]) > .btn-primary[type="submit"],
.settings-actions:has(> div .btn-secondary[type="button"]) > .btn-primary[type="submit"] {
    margin-left: auto;
}

@media (max-width: 480px) {
    .settings-actions:has(> .btn-secondary[type="button"]) > .btn-primary[type="submit"],
    .settings-actions:has(> div .btn-secondary[type="button"]) > .btn-primary[type="submit"] {
        margin-left: 0;
    }
}

.email-test-actions {
    margin-top: 0.25rem;
}

.location-address-row {
    display: grid;
    grid-template-columns: minmax(0, 2.2fr) minmax(4.5rem, 0.65fr) minmax(0, 1fr);
    gap: 1rem;
    align-items: end;
    max-width: none;
    grid-column: 1 / -1;
}

.location-address-row label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 0;
}

@media (max-width: 720px) {
    .location-address-row {
        grid-template-columns: 1fr;
    }
}

.contact-access-instructions {
    margin: 0.35rem 0 0;
    color: var(--text-muted, #5c5c5c);
    font-size: 0.95rem;
    line-height: 1.45;
}

.location-auto-block {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    padding: 0.5rem 0.65rem;
    margin-bottom: 0.15rem;
    background: var(--surface-muted, #f9fafb);
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 0.85rem;
}

.location-auto-row {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.5rem;
}

.location-form .location-auto-row .location-auto-checkbox {
    display: inline-flex;
    flex: 0 0 auto;
    flex-direction: row;
    align-items: center;
    width: auto;
    gap: 0.4rem;
    font-weight: 400;
    font-size: 0.85rem;
    margin: 0;
    min-width: 0;
}

.location-form .location-auto-row .location-auto-checkbox input[type="checkbox"] {
    margin: 0;
    flex-shrink: 0;
}

.location-auto-row .btn-secondary {
    flex: 0 0 auto;
    align-self: center;
    margin: 0;
}

.connect-host-row {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.5rem;
}

.connect-host-row input {
    flex: 1;
    min-width: 0;
}

.connect-host-row .btn-secondary {
    flex: 0 0 auto;
    margin: 0;
}

.dns-resolve-status.success,
.connect-host-resolve-status.success {
    color: var(--success, #2e7d32);
}

.dns-resolve-status.error,
.connect-host-resolve-status.error {
    color: var(--danger, #c62828);
}

.dns-resolve-status.pending,
.connect-host-resolve-status.pending {
    color: var(--text-muted, #6b7280);
}

.location-auto-hint {
    margin: 0;
    font-size: 0.8rem;
    color: var(--text-muted, #6b7280);
}

.location-auto-block .location-status {
    margin: 0;
    font-size: 0.8rem;
}

.location-parkings-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.5rem 0;
}

.location-parking-row {
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface-muted, #f9fafb);
}

.location-parking-row-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.5rem;
}

.location-parking-row-title {
    font-size: 0.85rem;
    font-weight: 600;
}

.location-parking-fields {
    display: grid;
    gap: 0.5rem;
}

.location-parking-fields label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.85rem;
}

.location-parking-types {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
}

.location-parking-types-label {
    font-size: 0.85rem;
    color: var(--text-muted, #6b7280);
}

.location-parking-add-btn {
    margin-top: 0.25rem;
}

/* Location form (Gestion Massage → Localisation) */
.location-form {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
    margin-top: 0;
}

.location-form .location-section {
    gap: 1rem;
}

.location-form label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 0;
}

.location-field-full,
.location-field-optional {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    width: 100%;
    max-width: none;
}

.location-field-optional {
    max-width: 36rem;
    font-size: 0.95rem;
}

.location-meta-row,
.location-coords-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.25rem;
}

.location-form .location-address-row {
    align-items: start;
}

.location-map-preview {
    min-height: 280px;
}

.location-map-preview iframe {
    min-height: 280px;
    height: 280px;
    aspect-ratio: auto;
}

.location-maps-advanced {
    border: none;
    padding: 0;
}

.location-maps-advanced-summary {
    cursor: pointer;
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--muted);
    list-style: none;
    padding: 0.25rem 0;
}

.location-maps-advanced-summary::-webkit-details-marker {
    display: none;
}

.location-maps-advanced-summary::before {
    content: "▸ ";
}

.location-maps-advanced[open] .location-maps-advanced-summary::before {
    content: "▾ ";
}

.location-seo-advanced {
    margin-top: 0.25rem;
}

.cms-location-seo-block {
    margin-bottom: 1.25rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid var(--border-color, #e2e8f0);
}

.cms-location-seo-block[hidden] {
    display: none !important;
}

.location-seo-advanced label + label {
    margin-top: 1rem;
}

.location-seo-generate-block {
    margin-top: 1.25rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border-color, #e2e8f0);
}

.location-seo-actions {
    margin-top: 0.75rem;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.location-seo-summary {
    margin: 0.75rem 0 0;
    padding-left: 1.25rem;
    font-size: 0.92rem;
    color: var(--text-muted, #64748b);
}

.location-seo-summary li + li {
    margin-top: 0.25rem;
}

.cms-seo-settings-details {
    margin-top: 1rem;
}

.cms-seo-sitemap-fieldset {
    margin-top: 0.75rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
}

.cms-seo-sitemap-grid {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
}

.cms-seo-sitemap-row {
    display: grid;
    grid-template-columns: minmax(6rem, auto) minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.65rem 0.75rem;
    align-items: end;
}

.cms-seo-sitemap-script {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.85rem;
    color: var(--text-muted, #5c6670);
    padding-bottom: 0.65rem;
}

.location-seo-summary-title {
    list-style: none;
    margin-left: -1.25rem;
    font-weight: 600;
    color: inherit;
}

.location-seo-summary-hint {
    list-style: disc;
    margin-top: 0.5rem;
}

.location-status:not([hidden]) {
    margin: 0;
    padding: 0.35rem 0 0;
}

.location-preview-transport:empty {
    display: none;
}

.btn-compact {
    padding: 0.45rem 0.85rem;
    font-size: 0.9rem;
}

@media (max-width: 720px) {
    .location-meta-row,
    .location-coords-row {
        grid-template-columns: 1fr;
    }
}

.field-hint.success {
    color: var(--success, #1a7f37);
}

.field-hint.error {
    color: var(--danger, #b42318);
}

.checkbox-label,
.radio-label {
    flex-direction: row;
    align-items: center;
    gap: 0.5rem;
    font-weight: 500;
}

.checkbox-label input[type="checkbox"],
.radio-label input[type="radio"] {
    width: 1.1rem;
    height: 1.1rem;
    min-width: 0;
    margin: 0;
    flex-shrink: 0;
}

.settings-grid .checkbox-label {
    align-self: center;
}

.field-hint {
    font-size: 0.85rem;
    font-weight: 400;
    color: var(--muted);
    line-height: 1.4;
}

.caldav-private-sync-toggle-label {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.9rem;
    font-weight: 500;
    margin: 0;
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
    flex-shrink: 0;
}

.caldav-private-sync-toggle-label input[type="checkbox"] {
    width: 1rem;
    height: 1rem;
    min-width: 0;
    margin: 0;
    flex-shrink: 0;
}

.caldav-private-sync-toggle-text {
    line-height: 1.3;
}

.caldav-private-sync-block {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.caldav-private-sync-block .field-hint {
    margin: 0;
}

.caldav-private-sync-intro {
    margin-top: 2.8em;
}

.caldav-private-sync-start-hint {
    margin-bottom: 1.4em;
}

.caldav-private-sync-settings {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.75rem;
}

.caldav-private-sync-end-group {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.35rem;
    padding-left: 1.5rem;
}

.caldav-private-sync-end-label {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    font-size: 0.9rem;
    font-weight: 500;
    margin: 0;
}

.caldav-private-sync-block .date-field-with-calendar {
    max-width: 11rem;
}

.caldav-private-sync-end-hint {
    margin: 0;
    text-align: left;
    max-width: 18rem;
}

.caldav-private-sync-action {
    margin-top: 0.5rem;
}

.caldav-private-scheduling-settings,
.caldav-bookings-scheduling-settings {
    margin-top: 0.75rem;
}

@media (max-width: 640px) {
    .caldav-private-sync-end-hint {
        max-width: none;
    }
}

input.input-default-value {
    color: var(--muted);
}

.admin-advanced-section > summary {
    list-style: none;
    cursor: pointer;
    padding: 1.25rem;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    user-select: none;
}

.admin-advanced-section > summary::-webkit-details-marker {
    display: none;
}

.admin-advanced-summary-title {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--text);
}

.admin-advanced-summary-title::before {
    content: "▸";
    display: inline-block;
    font-size: 0.9rem;
    color: var(--muted);
    transition: transform 0.15s ease;
}

.admin-advanced-section[open] > summary .admin-advanced-summary-title::before {
    transform: rotate(90deg);
}

.admin-advanced-summary-desc {
    font-size: 0.95rem;
    color: var(--muted);
    line-height: 1.4;
    padding-left: 1.4rem;
}

.schedule-form {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.schedule-preview {
    margin: 0;
    padding: 0.85rem 1rem;
    border-radius: 0.5rem;
    background: #f0fdf4;
    border: 1px solid #bbf7d0;
    color: #166534;
    font-size: 0.95rem;
    line-height: 1.5;
    white-space: pre-line;
}

.schedule-preview:empty {
    display: none;
}

.schedule-timeline {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.schedule-timeline-bar {
    display: flex;
    height: 0.65rem;
    border-radius: 999px;
    overflow: hidden;
    background: var(--border);
}

.schedule-timeline-segment {
    min-width: 0;
    flex-grow: 1;
}

.schedule-timeline-morning {
    background: #86efac;
}

.schedule-timeline-lunch {
    background: #fde68a;
}

.schedule-timeline-afternoon {
    background: #93c5fd;
}

.schedule-timeline-labels {
    display: flex;
    justify-content: space-between;
    gap: 0.5rem;
    font-size: 0.8rem;
    color: var(--muted);
}

.schedule-timeline-labels span:nth-child(2) {
    text-align: center;
}

.schedule-group {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    padding: 1rem 0;
    border-top: 1px solid var(--border);
}

.schedule-group:first-of-type {
    border-top: none;
    padding-top: 0;
}

.schedule-group-title {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--text);
}

.schedule-group-desc {
    margin: 0;
    font-size: 0.9rem;
    color: var(--muted);
    line-height: 1.4;
}

.schedule-time-row,
.schedule-lunch-row {
    grid-template-columns: repeat(2, minmax(200px, 1fr));
}

.schedule-field-narrow {
    max-width: 320px;
}

.schedule-work-days {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

/* Override global `label { flex-direction: column }` so chips stay compact. */
.schedule-work-day {
    position: relative;
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    min-width: 2.75rem;
    padding: 0.45rem 0.55rem;
    border: 1px solid var(--border);
    border-radius: 0.45rem;
    background: var(--card, #fff);
    color: var(--muted);
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.1;
    cursor: pointer;
    user-select: none;
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

/*
 * Keep the checkbox in the a11y tree but out of hit-testing.
 * Clicks hit the <label> once (avoids absolute inset/opacity double-toggle).
 */
.schedule-work-day input[type="checkbox"] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
    opacity: 0;
    pointer-events: none;
}

.schedule-work-day:hover {
    border-color: #86efac;
    color: var(--text);
}

.schedule-work-day.is-active {
    background: #f0fdf4;
    border-color: #86efac;
    color: #166534;
}

.schedule-work-day:focus-within {
    outline: 2px solid #2563eb;
    outline-offset: 1px;
}

.schedule-advanced {
    border: 1px dashed var(--border);
    border-radius: 0.5rem;
    padding: 0.75rem 1rem;
    background: #fafafa;
}

.schedule-advanced-summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--text);
    list-style: none;
    user-select: none;
}

.schedule-advanced-summary::-webkit-details-marker {
    display: none;
}

.schedule-advanced-summary::before {
    content: "▸ ";
    color: var(--muted);
}

.schedule-advanced[open] .schedule-advanced-summary::before {
    content: "▾ ";
}

.schedule-advanced .schedule-group-desc {
    margin-top: 0.75rem;
}

.schedule-advanced .settings-grid {
    margin-top: 0.75rem;
}

@media (max-width: 640px) {
    .schedule-time-row,
    .schedule-lunch-row {
        grid-template-columns: 1fr;
    }

    .schedule-field-narrow {
        max-width: none;
    }
}

.backup-warning {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid #fecaca;
    border-radius: 0.5rem;
    background: #fef2f2;
    color: #991b1b;
    font-size: 0.95rem;
}

.backup-scope-block {
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--border);
}

.backup-scope-block:first-of-type {
    margin-top: 0.75rem;
    padding-top: 0;
    border-top: none;
}

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.danger-zone-panel {
    border: 2px solid #fecaca;
    border-radius: 0.75rem;
    background: #fffafb;
}

.security-level-panel {
    border-color: #fde68a;
    background: #fffbeb;
}

.level-presets-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1.25rem;
    align-items: start;
}

.level-preset-panel__title {
    margin: 0 0 0.5rem;
    font-size: 1.1rem;
}

.logging-level-panel {
    border: 2px solid #bfdbfe;
    border-radius: 0.75rem;
    background: #eff6ff;
}

.logging-level-warning {
    margin: 0 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid #bfdbfe;
    border-radius: 0.5rem;
    background: #dbeafe;
    color: #1e40af;
    font-size: 0.95rem;
}

@media (max-width: 900px) {
    .level-presets-grid {
        grid-template-columns: 1fr;
    }
}

.danger-zone-warning {
    margin: 0 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid #fecaca;
    border-radius: 0.5rem;
    background: #fef2f2;
    color: #991b1b;
    font-size: 0.95rem;
}

.security-level-mismatch-intro {
    margin: 0 0 0.35rem;
}

.security-level-mismatch-details {
    margin: 0 0 1rem 1.1rem;
    padding: 0;
    color: #7f1d1d;
    font-size: 0.92rem;
}

.security-level-mismatch-details li {
    margin: 0.2rem 0;
}

.security-level-mismatch-details a.security-level-mismatch-link {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.security-level-mismatch-details a.security-level-mismatch-link:hover,
.security-level-mismatch-details a.security-level-mismatch-link:focus-visible {
    color: #991b1b;
}

.danger-zone-action {
    margin-top: 1.25rem;
    padding-top: 1.25rem;
    border-top: 1px solid #fecaca;
}

.danger-zone-action:first-of-type {
    margin-top: 0.5rem;
    padding-top: 0;
    border-top: none;
}

.danger-zone-action h3 {
    margin: 0 0 0.35rem;
    font-size: 1.05rem;
}

.danger-zone-action--critical {
    border-top-width: 2px;
    border-top-color: #f87171;
}

.danger-zone-separator {
    margin: 1.75rem 0 0;
    padding: 0;
    border: 0;
    border-top: 4px solid #dc2626;
    height: 0;
}

.danger-zone-separator + .danger-zone-action {
    margin-top: 1.25rem;
    padding-top: 0;
    border-top: none;
}

.selective-purge-section-hint {
    margin: 0 0 0.5rem;
    font-size: 0.8rem;
    line-height: 1.35;
}

.selective-purge-danger-legend {
    margin: 0 0 0.45rem;
    font-size: 0.78rem;
    line-height: 1.35;
    color: var(--danger, #b42318);
}

.selective-purge-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem;
    margin: 0.35rem 0 0.65rem;
}

.selective-purge-toolbar .btn-secondary {
    padding: 0.35rem 0.7rem;
    font-size: 0.85rem;
}

.selective-purge-global-scope-label {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.5rem;
    margin: 0;
    margin-left: auto;
    font-size: 0.82rem;
    font-weight: 500;
    color: var(--muted);
}

.selective-purge-global-scope {
    box-sizing: border-box;
    min-width: 12rem;
    max-width: 100%;
    height: 1.85rem;
    padding: 0.15rem 0.4rem;
    font-size: 0.8rem;
    line-height: 1.2;
}

.selective-purge-groups {
    display: grid;
    gap: 0.4rem;
    margin: 0.5rem 0 0.75rem;
}

.selective-purge-card {
    border: 1px solid var(--border, #d8dee9);
    border-radius: 0.4rem;
    background: var(--surface, #fff);
    overflow: hidden;
}

.selective-purge-card__summary {
    cursor: pointer;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.65rem;
    padding: 0.45rem 0.65rem;
    background: var(--surface-muted, #f8fafc);
    border-bottom: 1px solid transparent;
}

.selective-purge-card__summary > * {
    pointer-events: none;
}

.selective-purge-card__summary a,
.selective-purge-card__summary button,
.selective-purge-card__summary input,
.selective-purge-card__summary label {
    pointer-events: auto;
}

.selective-purge-card[open] > .selective-purge-card__summary {
    border-bottom-color: var(--border, #d8dee9);
}

.selective-purge-card__summary::-webkit-details-marker {
    display: none;
}

.selective-purge-card__summary::before {
    content: '▸';
    display: inline-block;
    width: 0.85rem;
    color: var(--muted);
    flex-shrink: 0;
    transition: transform 0.12s ease;
}

.selective-purge-card[open] > .selective-purge-card__summary::before {
    transform: rotate(90deg);
}

.selective-purge-card__title {
    font-weight: 600;
    font-size: 0.95rem;
}

.selective-purge-card__group-hint {
    color: var(--muted);
    font-size: 0.75rem;
    line-height: 1.3;
    flex: 1 1 12rem;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.selective-purge-card__body {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 0.15rem;
    padding: 0.4rem 0.55rem 0.5rem;
}

@media (min-width: 900px) {
    .selective-purge-card__body {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: 1rem;
        row-gap: 0.15rem;
    }
}

.selective-purge-option-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 9.75rem;
    align-items: center;
    column-gap: 0.5rem;
    row-gap: 0;
    min-width: 0;
    min-height: 1.85rem;
    padding: 0.12rem 0.1rem;
    border: none;
    border-radius: 0;
    background: transparent;
    box-sizing: border-box;
}

.selective-purge-option-row--warning .selective-purge-option__label {
    color: var(--danger, #b42318);
}

.selective-purge-fieldset {
    border: 1px solid var(--border, #d8dee9);
    border-radius: 0.5rem;
    margin: 0;
    padding: 0.75rem 1rem;
    display: grid;
    gap: 0.35rem;
}

.selective-purge-fieldset legend {
    font-weight: 600;
    padding: 0 0.35rem;
}

.selective-purge-option {
    margin: 0;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
    font-size: 0.9rem;
    font-weight: 500;
}

.selective-purge-option__label {
    min-width: 0;
    line-height: 1.25;
    overflow-wrap: anywhere;
}

.selective-purge-option--warning > span:first-of-type {
    color: var(--danger, #b42318);
}

.selective-purge-option-hint {
    margin: 0;
    padding-left: 1.6rem;
}

.selective-purge-scope-label {
    margin: 0;
    padding-left: 1.6rem;
    font-size: 0.9rem;
    color: var(--muted);
}

.selective-purge-scope {
    box-sizing: border-box;
    margin: 0;
    width: 100%;
    max-width: none;
    min-width: 0;
    height: 1.7rem;
    padding: 0.15rem 0.35rem;
    font-size: 0.8rem;
    line-height: 1.2;
    justify-self: stretch;
}

.selective-purge-scope--empty {
    visibility: hidden;
    pointer-events: none;
}

.selective-purge-actions {
    margin-top: 0.5rem;
}

.selective-purge-dialog-list {
    margin: 0.5rem 0 1rem 1.25rem;
    color: var(--muted);
}

@media (max-width: 559px) {
    .selective-purge-global-scope-label {
        margin-left: 0;
        width: 100%;
    }

    .selective-purge-global-scope {
        flex: 1 1 auto;
        min-width: 0;
    }

    .selective-purge-option-row {
        grid-template-columns: minmax(0, 1fr);
        align-items: stretch;
        row-gap: 0.2rem;
        min-height: 0;
        padding: 0.2rem 0.1rem;
    }

    .selective-purge-scope {
        width: calc(100% - 1.5rem);
        margin-left: 1.5rem;
        height: 1.85rem;
    }

    .selective-purge-scope--empty {
        display: none;
    }

    .selective-purge-card__group-hint {
        white-space: normal;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
}

.security-level-fieldset {
    border: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: 0.5rem;
}

.security-level-option {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.security-level-summary {
    margin: 1rem 0;
}

.security-level-summary-list {
    margin: 0.5rem 0 0 1.25rem;
    color: var(--muted);
}

.security-level-compare-dialog {
    border: none;
    border-radius: 0.75rem;
    padding: 1.25rem;
    max-width: min(72rem, calc(100vw - 2rem));
    width: calc(100% - 2rem);
}

.security-level-compare-dialog::backdrop {
    background: rgba(15, 23, 42, 0.45);
}

.security-level-compare-dialog__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.security-level-compare-dialog__header h3 {
    margin: 0;
    font-size: 1.15rem;
}

.security-level-compare-dialog__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem;
}

.security-level-compare-table-wrap {
    margin-top: 0.75rem;
    max-height: min(70vh, 42rem);
    overflow: auto;
    border: 1px solid var(--border, #e5e7eb);
    border-radius: 0.5rem;
}

.security-level-compare-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.92rem;
}

.security-level-compare-table thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    background: #f8fafc;
    border-bottom: 1px solid var(--border, #e5e7eb);
    padding: 0.65rem 0.75rem;
    text-align: left;
    white-space: nowrap;
}

/* Level column headers: Sécurisée/Élevé, Normal, Faible, Personnalisée */
.security-level-compare-table thead th:nth-child(2) {
    background: #ecfdf5;
    color: #166534;
}

.security-level-compare-table thead th:nth-child(3) {
    background: #f8fafc;
    color: #334155;
}

.security-level-compare-table thead th:nth-child(4) {
    background: #fff1f2;
    color: #9f1239;
}

.security-level-compare-table thead th:nth-child(5),
.security-level-compare-table thead th.security-level-compare-col-custom {
    background: #fffbeb;
    color: #92400e;
}

.security-level-compare-table .security-level-compare-cell--custom {
    background: #fffbeb;
    color: #78350f;
}

.security-level-compare-edit,
.security-level-compare-edit-input {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    max-width: 100%;
}

.security-level-compare-edit-input {
    min-width: 4.5rem;
    max-width: 11rem;
    padding: 0.25rem 0.4rem;
    border: 1px solid var(--border, #d1d5db);
    border-radius: 0.35rem;
    background: #fff;
    color: inherit;
    font: inherit;
}

.security-level-compare-custom-hint {
    margin: 0.75rem 0 0;
}

.security-level-compare-table tbody th,
.security-level-compare-table tbody td {
    border-bottom: 1px solid var(--border, #e5e7eb);
    padding: 0.55rem 0.75rem;
    vertical-align: top;
}

.security-level-compare-param {
    min-width: 14rem;
    font-weight: 500;
    text-align: left;
}

.security-level-compare-cell {
    white-space: nowrap;
}

.security-level-compare-section-row th {
    background: #f1f5f9;
    color: #334155;
    font-size: 0.85rem;
    font-weight: 700;
    letter-spacing: 0.02em;
    text-transform: uppercase;
}

.security-level-compare-row--regression .security-level-compare-param {
    font-weight: 600;
}

.security-level-compare-table .security-level-compare-cell--good {
    background: #f0fdf4;
    color: #166534;
}

.security-level-compare-table .security-level-compare-cell--regression {
    background: #fff1f2;
    color: #9f1239;
    font-weight: 600;
}

.security-level-compare-table .security-level-compare-cell--na {
    background: #f8fafc;
    color: #64748b;
    font-style: italic;
    font-weight: 400;
}

.security-level-compare-table .security-level-compare-cell--on {
    background: #f0fdf4;
    color: #166534;
}

.security-level-compare-table .security-level-compare-cell--off {
    background: #f8fafc;
    color: #64748b;
}

/* Dark theme: keep semantic tints (do not flatten all cells to --card) */
html[data-theme="dark"] .security-level-compare-table-wrap {
    background: var(--card);
    border-color: var(--border);
}

html[data-theme="dark"] .security-level-compare-table thead th {
    background: var(--card);
    color: var(--muted);
    box-shadow: 0 1px 0 var(--border);
}

html[data-theme="dark"] .security-level-compare-table thead th:nth-child(2) {
    background: #1e2e24;
    color: #9dd4a8;
}

html[data-theme="dark"] .security-level-compare-table thead th:nth-child(3) {
    background: var(--surface-muted, #1e293b);
    color: var(--text);
}

html[data-theme="dark"] .security-level-compare-table thead th:nth-child(4) {
    background: #2a1a22;
    color: #f9a8d4;
}

html[data-theme="dark"] .security-level-compare-table thead th:nth-child(5),
html[data-theme="dark"] .security-level-compare-table thead th.security-level-compare-col-custom {
    background: #2a2618;
    color: #e8c878;
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--custom {
    background: #2a2618;
    color: #e8c878;
}

html[data-theme="dark"] .security-level-compare-edit-input {
    background: var(--card);
    border-color: var(--border);
    color: var(--text);
}

/* Borders/text only — never force cell background (would hide --good/--regression/--na) */
html[data-theme="dark"] .security-level-compare-table tbody th,
html[data-theme="dark"] .security-level-compare-table tbody td {
    color: var(--text);
    border-bottom-color: var(--border);
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-section-row th {
    background: var(--surface-muted);
    color: var(--muted);
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-param {
    background: var(--card);
    color: var(--text);
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--good {
    background: #1e2e24;
    color: #9dd4a8;
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--regression {
    background: #2a1a22;
    color: #f9a8d4;
    font-weight: 600;
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--na {
    background: var(--surface-muted);
    color: var(--muted);
    font-style: italic;
    font-weight: 400;
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--on {
    background: #1e2e24;
    color: #9dd4a8;
}

html[data-theme="dark"] .security-level-compare-table .security-level-compare-cell--off {
    background: var(--surface-muted, #1e293b);
    color: var(--text, #e2e8f0);
}

html[data-theme="dark"] .security-level-compare-table tbody td {
    background: var(--card);
    color: var(--text);
}

html[data-theme="dark"] .security-level-compare-table tbody th.security-level-compare-param {
    background: var(--card);
    color: var(--text);
}

html[data-theme="dark"] .perf-debug-compare-table-wrap {
    background: var(--card);
    border-color: var(--border);
}

html[data-theme="dark"] .level-match-badge--ok {
    background: #1e2e24;
    color: #9dd4a8;
    border-color: #2f4a3a;
}

html[data-theme="dark"] .level-match-badge--custom {
    background: #2a2618;
    color: #e8c878;
    border-color: #4a4030;
}

#maintenance-confirm-dialog,
#maintenance-full-reset-dialog {
    border: none;
    border-radius: 0.75rem;
    padding: 1.25rem;
    max-width: 32rem;
    width: calc(100% - 2rem);
}

#post-reset-restore-dialog {
    border: none;
    border-radius: 0.75rem;
    padding: 0;
    max-width: 36rem;
    width: calc(100% - 2rem);
}

#maintenance-confirm-dialog::backdrop,
#maintenance-full-reset-dialog::backdrop,
#post-reset-restore-dialog::backdrop {
    background: rgba(15, 23, 42, 0.45);
}

#maintenance-confirm-input,
#maintenance-full-reset-confirm-input,
#maintenance-full-reset-password {
    width: 100%;
    margin: 0.35rem 0 0.75rem;
}

.post-reset-restore-header {
    padding: 1.25rem 1.25rem 0.5rem;
}

.post-reset-restore-header h2 {
    margin: 0 0 0.35rem;
}

.post-reset-restore-intro {
    margin: 0;
    color: #64748b;
    font-size: 0.95rem;
}

.post-reset-restore-step {
    padding: 0 1.25rem 1rem;
}

.post-reset-restore-step-title {
    margin: 0 0 0.75rem;
    font-size: 1rem;
}

.post-reset-restore-scopes,
.post-reset-restore-sources,
.post-reset-restore-webdav-auth {
    border: none;
    margin: 0 0 1rem;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.post-reset-restore-scope-card,
.post-reset-restore-source-card {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 0.65rem;
    background: #f8fafc;
    cursor: pointer;
}

.post-reset-restore-scope-card:has(input:checked),
.post-reset-restore-source-card:has(input:checked) {
    border-color: var(--primary, #0f766e);
    background: #ecfdf5;
}

.post-reset-restore-card-body {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.post-reset-restore-card-title {
    font-weight: 600;
}

.post-reset-restore-card-hint {
    color: #64748b;
    font-size: 0.85rem;
    line-height: 1.35;
}

.post-reset-restore-panel {
    margin-bottom: 0.75rem;
}

.post-reset-restore-backup-select,
.post-reset-restore-password,
.post-reset-restore-webdav-url,
.post-reset-restore-webdav-username,
.post-reset-restore-webdav-password-field {
    width: 100%;
    margin: 0.35rem 0 0.75rem;
}

.post-reset-restore-verify-tls {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0.5rem 0 0.75rem;
    cursor: pointer;
}

.post-reset-restore-actions {
    padding: 0 1.25rem 1.25rem;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.post-reset-restore-auth-option {
    margin: 0;
}

input[type="file"] {
    padding: 0.5rem 0;
    border: none;
    font: inherit;
}

@media (max-width: 700px) {
    .topbar {
        flex-direction: column;
        padding: 1rem 1rem 1.1rem;
        padding-left: max(1rem, env(safe-area-inset-left, 0px));
        padding-right: max(1rem, env(safe-area-inset-right, 0px));
        gap: 0.85rem;
    }

    .topbar-actions {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 0.5rem;
        width: 100%;
        max-width: 100%;
        align-items: stretch;
        justify-content: stretch;
        overflow: visible;
    }

    .topbar-actions > .link-muted {
        display: flex;
        align-items: center;
        justify-content: center;
        box-sizing: border-box;
        width: 100%;
        min-width: 0;
        min-height: 44px;
        padding: 0.65rem 0.7rem;
        font-size: 0.8125rem;
        line-height: 1.25;
        text-align: center;
        border: 1px solid var(--border);
        border-radius: 0.75rem;
        background: var(--surface-muted);
        white-space: normal;
        overflow-wrap: anywhere;
        word-break: break-word;
        hyphens: auto;
    }

    .topbar-actions > .link-muted:hover,
    .topbar-actions > .link-muted:focus-visible {
        background: var(--control-hover-bg);
        border-color: var(--control-hover-border);
        color: var(--primary);
    }

    /* Odd last nav link alone on a row → full width (keeps grid even) */
    .topbar-actions:has(> .topbar-nav-end) > .link-muted:nth-last-child(2):nth-child(odd),
    .topbar-actions:not(:has(> .topbar-nav-end)) > .link-muted:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }

    /* Utility row: lang + night always last, fixed control sizes */
    .topbar-actions > .topbar-nav-end {
        grid-column: 1 / -1;
        display: flex;
        align-items: center;
        justify-content: flex-end;
        gap: 0.5rem;
        width: 100%;
        margin-left: 0;
        margin-top: 0.15rem;
    }

    .topbar-actions > .topbar-nav-end > .night-mode-toggle,
    .topbar-actions > .topbar-nav-end > button.night-mode-toggle {
        box-sizing: border-box;
        width: 44px;
        height: 44px;
        min-width: 44px;
        max-width: 44px;
        min-height: 44px;
        max-height: 44px;
        flex: 0 0 44px;
        border-radius: 0.75rem;
    }

    .topbar-actions > .topbar-nav-end > .lang-dropdown {
        display: flex;
        justify-content: flex-end;
        align-items: stretch;
        width: auto;
        margin-top: 0;
    }

    .topbar-actions > .topbar-nav-end > .lang-dropdown .lang-dropdown-toggle {
        width: auto;
        min-height: 44px;
        font-size: 0.8125rem;
        padding: 0.55rem 0.75rem;
        border-radius: 0.75rem;
    }

    .topbar-actions > .topbar-nav-end > .lang-dropdown .lang-label {
        font-size: 0.8125rem;
    }

    input[type="text"],
    input[type="tel"],
    input[type="password"],
    input[type="email"],
    input[type="number"],
    input[type="date"],
    input[type="url"],
    select,
    textarea {
        min-width: 100%;
    }
}

.api-rate-limit-categories,
.api-rate-limit-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 1rem;
    margin-top: 1rem;
    align-items: stretch;
}

.api-rate-limit-category {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    height: 100%;
    min-width: 0;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: var(--surface, #fff);
}

.api-rate-limit-category__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    flex-shrink: 0;
}

.api-rate-limit-category__name {
    margin: 0;
    font-size: 0.95rem;
    font-weight: 600;
}

.api-rate-limit-category__enabled {
    margin: 0;
    font-size: 0.85rem;
}

.api-rate-limit-endpoints {
    margin: 0;
    font-size: 0.8rem;
    line-height: 1.4;
    color: var(--text-muted, #5c6670);
    word-break: break-word;
    flex-shrink: 0;
}

.technical-rate-limit-fields-hint {
    margin-top: 0.75rem;
}

.api-rate-limit-dynamic-hint {
    margin: 0;
    font-size: 0.82rem;
    /* Absorbe la hauteur variable (endpoints / texte) pour aligner les champs en bas. */
    flex: 1 1 auto;
    min-height: 2.6em;
}

.api-rate-limit-category__fields {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
    gap: 0.65rem 0.75rem;
    margin-top: auto;
    padding-top: 0.35rem;
    align-items: start;
    flex-shrink: 0;
    min-width: 0;
}

.api-rate-limit-category__fields label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    margin: 0;
    min-width: 0;
    font-size: 0.85rem;
}

.api-rate-limit-category__fields input[type="number"],
.api-rate-limit-category__fields select {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    padding: 0.4rem 0.5rem;
    font-size: 0.875rem;
}

.api-rate-limit-window-inline {
    display: flex;
    gap: 0.35rem;
    align-items: stretch;
    min-width: 0;
    max-width: 100%;
    width: 100%;
}

.api-rate-limit-window-inline input[type="number"] {
    flex: 0 1 3.5rem;
    width: 3.5rem;
    min-width: 2.75rem;
    max-width: 3.75rem;
}

.api-rate-limit-window-inline select {
    flex: 1 1 0;
    min-width: 0;
    max-width: 100%;
    width: 0;
}

.api-rate-limit-category > .threshold-proposal-hint {
    margin-top: 0.15rem;
    flex-shrink: 0;
}

.threshold-proposal-panel {
    margin: 0.75rem 0 0.5rem;
    padding: 0.65rem 0.85rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    background: var(--panel-muted-bg, rgba(0, 0, 0, 0.02));
}

.threshold-proposal-panel .settings-actions {
    margin-top: 0.5rem;
}

.threshold-proposal-hint {
    display: block;
    margin-top: 0.2rem;
    font-size: 0.78rem;
    line-height: 1.35;
    color: var(--text-muted, #5c6670);
}

@media (max-width: 640px) {
    .api-rate-limit-category__fields {
        grid-template-columns: 1fr;
    }
}

.api-rate-limit-master-off {
    opacity: 0.72;
}

.api-rate-limit-stats {
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--border-color, #e5e7eb);
}

.api-rate-limit-stats-table tr.security-stat-near-limit td {
    color: #b45309;
}

.api-rate-limit-stats-table tr.security-stat-near-limit td:first-child,
.api-rate-limit-stats-table tr.security-stat-near-limit td:nth-child(4),
.api-rate-limit-stats-table tr.security-stat-near-limit td:nth-child(6) {
    font-weight: 600;
}

.anti-dos-settings {
    margin-top: 0.75rem;
}

.anti-dos-fields {
    margin-top: 0.5rem;
}

.technical-anti-dos-fields-hint {
    margin-top: 0.35rem;
}

.cookie-config-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
    margin-top: 1rem;
    grid-column: 1 / -1;
}

@media (max-width: 960px) {
    .cookie-config-grid {
        grid-template-columns: 1fr;
    }
}

.cookie-config-grid .security-header-param {
    height: 100%;
}

.security-headers-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 1rem;
    margin-top: 1rem;
}

.security-header-param {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 1rem;
    border: 1px solid var(--border);
    border-radius: 0.5rem;
    background: var(--surface);
    color: var(--text);
}

.security-header-param--readonly {
    background: var(--surface-muted);
    opacity: 0.92;
}

.security-header-param__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
}

.security-header-param__name {
    margin: 0;
    font-size: 0.95rem;
    font-weight: 600;
}

.security-header-param__badge {
    font-size: 0.75rem;
    font-weight: 500;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.security-header-param__value {
    margin: 0;
    font-size: 0.82rem;
    line-height: 1.45;
    word-break: break-word;
}

.security-header-param__value code {
    display: block;
    white-space: pre-wrap;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.security-header-reference {
    display: block;
    margin-top: 0.35rem;
    white-space: pre-wrap;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.78rem;
}

.security-header-param__control textarea {
    width: 100%;
    min-height: 5.5rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.82rem;
}

.security-header-param__control select {
    max-width: 100%;
}

.security-header-param__hint {
    margin: 0;
}

.security-header-param__control {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin-top: 0.25rem;
}

.security-header-param__control .settings-full {
    max-width: none;
}

.security-header-param--wide {
    grid-column: 1 / -1;
}

.security-header-param--wide .security-header-param__control > .settings-full {
    max-width: none;
}

.security-header-param__csrf-scopes {
    margin-top: 0.25rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--border-muted, rgba(0, 0, 0, 0.08));
}

.security-header-param__csrf-scopes-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 1rem 2.5rem;
    margin-top: 0.25rem;
}

.security-header-param__csrf-scopes-col {
    display: flex;
    flex-direction: column;
    gap: 0.875rem;
    min-width: 0;
}

.security-header-param__csrf-scopes-col .settings-full {
    max-width: none;
}

@media (max-width: 700px) {
    .security-header-param__csrf-scopes-grid {
        grid-template-columns: 1fr;
        gap: 0.875rem;
    }
}

.public-files-panel {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.public-file-card {
    padding: 1rem 1.25rem;
    border: 1px solid var(--border-muted, rgba(0, 0, 0, 0.08));
    border-radius: 8px;
    background: var(--surface-elevated, #fff);
}

details.public-file-card {
    padding: 0;
    overflow: hidden;
}

.public-file-card__summary {
    cursor: pointer;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem 1rem;
    padding: 0.75rem 1rem;
    background: var(--surface-muted, #f8fafc);
    border-bottom: 1px solid transparent;
}

.public-file-card__summary > * {
    pointer-events: none;
}

.public-file-card__summary a,
.public-file-card__summary button,
.public-file-card__summary input,
.public-file-card__summary label {
    pointer-events: auto;
}

details.public-file-card[open] > .public-file-card__summary {
    border-bottom-color: var(--border-muted, rgba(0, 0, 0, 0.08));
}

.public-file-card__summary::-webkit-details-marker {
    display: none;
}

.public-file-card__summary::before {
    content: '▸';
    display: inline-block;
    width: 0.85rem;
    color: var(--muted, #666);
    flex-shrink: 0;
    transition: transform 0.12s ease;
}

details.public-file-card[open] > .public-file-card__summary::before {
    transform: rotate(90deg);
}

.public-file-card__title {
    font-weight: 600;
    font-size: 1rem;
    flex: 1 1 auto;
    min-width: 0;
}

.public-file-card__body {
    padding: 0.85rem 1.25rem 1.15rem;
}

.public-file-card__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem 1rem;
    margin-bottom: 0.5rem;
}

.public-file-card__badge {
    font-size: 0.8125rem;
    padding: 0.2rem 0.55rem;
    border-radius: 999px;
    background: rgba(0, 0, 0, 0.06);
    color: var(--text-muted, #666);
}

.public-file-card__badge--ok {
    background: rgba(34, 139, 34, 0.12);
    color: #1f6b1f;
}

.public-file-card__badge--dynamic {
    background: rgba(214, 137, 16, 0.14);
    color: #8a5a00;
}

.public-file-meta {
    display: grid;
    gap: 0.35rem;
    margin: 0.75rem 0 1rem;
}

.public-file-meta__row {
    display: grid;
    grid-template-columns: minmax(8rem, 11rem) minmax(0, 1fr);
    gap: 0.5rem 1rem;
    align-items: baseline;
}

.public-file-meta__row dt {
    margin: 0;
    font-size: 0.875rem;
    color: var(--text-muted, #666);
}

.public-file-meta__row dd {
    margin: 0;
    min-width: 0;
    word-break: break-word;
}

.public-file-editor {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.875rem;
    line-height: 1.45;
    min-height: 14rem;
}

.public-file-actions {
    margin-top: 0.75rem;
}

.public-file-backups {
    margin-top: 1rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--border-muted, rgba(0, 0, 0, 0.08));
}

.public-file-backups > summary {
    cursor: pointer;
    font-weight: 600;
    margin-bottom: 0.5rem;
}

.public-file-backups-table-wrap {
    overflow-x: auto;
    margin-top: 0.5rem;
}

.public-file-backups-table {
    min-width: 28rem;
}

.public-files-advisory {
    margin-top: 0.5rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border-muted, rgba(0, 0, 0, 0.08));
}

.public-files-advisory-list {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0;
    display: grid;
    gap: 0.75rem;
}

.public-files-advisory-item {
    padding: 0.75rem 0.9rem;
    border-radius: 6px;
    background: rgba(0, 0, 0, 0.03);
}

.public-files-advisory-item__priority {
    display: inline-block;
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin-bottom: 0.25rem;
    color: var(--text-muted, #666);
}

.public-files-advisory-item--high {
    border-left: 3px solid #c0392b;
}

.public-files-advisory-item--medium {
    border-left: 3px solid #d68910;
}

.public-files-advisory-item--low {
    border-left: 3px solid #7f8c8d;
}

.public-files-advisory-item--managed {
    opacity: 0.85;
}

.public-files-advisory-item__managed {
    display: inline-block;
    margin-left: 0.5rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: #1f6b1f;
}

@media (max-width: 700px) {
    .public-file-meta__row {
        grid-template-columns: 1fr;
        gap: 0.15rem;
    }
}

.htaccess-panel {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

.htaccess-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 1rem 1.5rem;
}

.htaccess-target-select-label {
    flex: 1 1 16rem;
    margin: 0;
}

.htaccess-toolbar-actions {
    margin: 0;
}

.htaccess-warnings-list {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
}

.htaccess-warnings-item--high {
    color: var(--danger, #b42318);
}

.htaccess-warnings-item--medium {
    color: var(--warning, #b54708);
}

.htaccess-api-alert {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem 1rem;
}

.htaccess-api-alert p {
    margin: 0;
    flex: 1 1 12rem;
}

.htaccess-diff-panels {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.75rem 0;
}

.htaccess-diff-details summary {
    cursor: pointer;
    font-weight: 600;
    margin-bottom: 0.35rem;
}

.htaccess-diff-pre {
    margin: 0;
    padding: 0.75rem 1rem;
    border-radius: 6px;
    background: var(--surface-muted, #f6f7f8);
    font-size: 0.8125rem;
    line-height: 1.45;
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 14rem;
    overflow: auto;
}

.htaccess-editor {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.45;
}

.security-header-param--readonly .security-header-param__control {
    display: none;
}

#hsts-max-age-wrap.is-disabled {
    opacity: 0.55;
    pointer-events: none;
}

.anti-dos-dynamic-hint {
    margin-top: 0.5rem;
}

.anti-dos-master-off {
    opacity: 0.72;
    pointer-events: none;
}

/* Learning controls (Anti-DoS / API rate limit) — visible block when mode=learning */
#anti-dos-learning-fields:not([hidden]),
#api-rate-limit-learning-fields:not([hidden]),
#ssrf-learning-fields:not([hidden]),
#egress-learning-fields:not([hidden]) {
    margin: 0.75rem 0 1rem;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    background: var(--panel-muted-bg, rgba(0, 0, 0, 0.02));
}

#anti-dos-learning-fields[hidden],
#api-rate-limit-learning-fields[hidden],
#ssrf-learning-fields[hidden],
#egress-learning-fields[hidden] {
    display: none !important;
}

.ssrf-proposal__title,
.egress-proposal__title {
    margin: 0.85rem 0 0.35rem;
    font-weight: 600;
}

.security-mode-fieldset {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
}

.security-mode-fieldset .security-mode-select {
    display: block;
    width: 100%;
    max-width: 28rem;
    margin-top: 0.35rem;
}

.security-mode-fieldset .security-mode-legend {
    display: block;
    margin-top: 0.35rem;
}

.security-mode-options {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.25rem;
    margin-top: 0.35rem;
}

.security-mode-disabled {
    opacity: 0.72;
    pointer-events: none;
}

.checkbox-label.is-unavailable,
.settings-input-compact.is-unavailable {
    opacity: 0.55;
    cursor: not-allowed;
}

.checkbox-label.is-unavailable input {
    cursor: not-allowed;
}

.security-monitor-events__header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.security-monitor-events__header h3 {
    margin-top: 0;
}

.security-monitor-events {
    margin-bottom: 1.25rem;
}

.security-monitor-table td {
    font-size: 0.92rem;
}

/* ——— CMS admin ——— */

.cms-admin-container {
    max-width: 1400px;
}

.cms-workspace {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr);
    gap: 1.5rem;
    align-items: start;
}

.cms-workspace.cms-preview-hidden {
    grid-template-columns: 1fr;
}

.cms-workspace.cms-preview-hidden .cms-preview-panel {
    display: none;
}

.cms-editor-panel {
    padding: 1.25rem 1.5rem 1.5rem;
}

.cms-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem 1.5rem;
    align-items: flex-end;
    margin-bottom: 1.5rem;
    padding-bottom: 1.25rem;
    border-bottom: 1px solid var(--border);
}

.cms-toolbar-group {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
}

.cms-toolbar-group-grow {
    flex: 1 1 280px;
}

.cms-toolbar-label {
    font-size: 0.8rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}

.cms-page-tabs {
    margin: 0;
    flex-wrap: wrap;
}

.cms-page-tab.is-active {
    background: var(--primary);
    border-color: var(--primary);
    color: #fff;
}

.cms-locale-heading {
    margin: 0 0 1rem;
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--text);
}

.cms-en-texts-details {
    margin-top: 1.5rem;
    margin-bottom: 0;
}

.cms-page-panel-intro {
    margin-bottom: 1rem;
}

.cms-page-panel .settings-grid {
    gap: 1.25rem;
}

.cms-field {
    gap: 0.4rem;
}

.cms-field-label {
    font-weight: 600;
    color: var(--text);
}

.cms-field-input {
    min-height: 2.75rem;
    line-height: 1.45;
}

.cms-form-actions {
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--border);
}

.cms-preview-panel {
    position: sticky;
    top: 1rem;
}

.cms-preview-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.cms-preview-title {
    margin: 0 0 0.25rem;
    font-size: 1.1rem;
}

.cms-preview-subtitle {
    margin: 0;
    font-size: 0.88rem;
}

.cms-preview-badge {
    flex-shrink: 0;
    padding: 0.3rem 0.65rem;
    border-radius: 999px;
    background: #eef2ff;
    color: var(--primary-dark);
    font-size: 0.8rem;
    font-weight: 600;
}

.cms-preview-frame {
    padding: 1.25rem;
    min-height: 420px;
    background: var(--surface-muted);
    color: var(--text);
}

.cms-preview-block {
    margin-bottom: 1rem;
}

.cms-preview-block:last-child {
    margin-bottom: 0;
}

.cms-preview-block.panel,
.cms-preview-frame .panel {
    padding: 1rem 1.1rem;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 0.5rem;
}

.cms-preview-h1 {
    font-size: 1.35rem;
    line-height: 1.25;
    color: var(--text);
}

.cms-preview-lead {
    margin-top: 0.35rem;
    font-size: 0.95rem;
}

.cms-preview-block h2 {
    font-size: 1.05rem;
    margin-bottom: 0.45rem;
    color: var(--text);
}

.cms-preview-block p {
    margin-top: 0.35rem;
    font-size: 0.92rem;
    line-height: 1.5;
    color: var(--muted);
}

.cms-preview-placeholder {
    margin-top: 0.65rem !important;
    padding: 0.55rem 0.75rem;
    border: 1px dashed var(--border);
    border-radius: 0.4rem;
    background: var(--surface);
    font-size: 0.85rem !important;
    font-style: italic;
    color: var(--muted) !important;
}

.cms-preview-muted {
    opacity: 0.85;
}

.cms-preview-meta {
    padding: 0.85rem;
    border: 1px solid var(--border);
    border-radius: 0.5rem;
    background: var(--card);
    color: var(--text);
}

.cms-preview-meta-heading,
.cms-preview-footer-label {
    display: block;
    margin-bottom: 0.5rem;
    font-size: 0.8rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}

.cms-preview-meta-card {
    padding: 0.65rem 0;
    border-top: 1px solid var(--border);
}

.cms-preview-meta-card:first-of-type {
    border-top: none;
    padding-top: 0;
}

.cms-preview-meta-card strong {
    display: block;
    margin: 0.2rem 0;
    font-size: 0.95rem;
    color: var(--text);
}

.cms-preview-meta-label {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--primary-dark);
}

.cms-preview-footer {
    margin-top: 0.5rem;
    padding: 0.75rem;
    border-radius: 0.5rem;
    background: var(--surface-muted);
    color: var(--text);
}

.cms-preview-frame .seo-faq-item {
    margin-top: 0.5rem;
}

.cms-preview-frame .seo-faq-item summary {
    cursor: default;
    font-weight: 600;
    color: var(--text);
}

@media (max-width: 1080px) {
    .cms-workspace {
        grid-template-columns: 1fr;
    }

    .cms-preview-panel {
        position: static;
    }

    .cms-toolbar-preview-toggle {
        width: 100%;
    }
}

.validation-result-page .validation-result.validation-result--wide-table {
    max-width: min(100%, 56rem);
    min-width: 0;
    align-items: stretch;
    text-align: left;
    overflow: hidden;
}

.validation-result-page .validation-result.validation-result--wide-table h1 {
    text-align: center;
}

.validation-result-page .validation-result.validation-result--wide-table .log-table-density-host,
.validation-result-page .validation-result.validation-result--wide-table .sa-sessions-section {
    min-width: 0;
    max-width: 100%;
}

.validation-result-page .security-alert-token-table-wrap {
    display: block;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    margin-top: 0.35rem;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-x: contain;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

.validation-result-page .security-alert-token-table {
    width: max-content;
    min-width: 48rem;
    max-width: none;
    border-collapse: collapse;
    text-align: left;
    font-size: 0.8125rem;
    line-height: 1.35;
    table-layout: auto;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

.validation-result-page .log-table-density-host[data-full-view="1"] .security-alert-token-table {
    min-width: 78rem;
}

/* Lock every cell (Info / dernière page included) to the same size — iOS Safari
   otherwise inflates long path/URL text, and shared classes like .app-access-referer
   bump to 0.9rem. */
.validation-result-page .security-alert-token-table th,
.validation-result-page .security-alert-token-table td,
.validation-result-page .security-alert-token-table td a,
.validation-result-page .security-alert-token-table td button,
.validation-result-page .security-alert-token-table td code,
.validation-result-page .security-alert-token-table td span,
.validation-result-page .security-alert-token-table .unified-log-info,
.validation-result-page .security-alert-token-table .unified-log-details,
.validation-result-page .security-alert-token-table .unified-log-score,
.validation-result-page .security-alert-token-table .unified-log-actions,
.validation-result-page .security-alert-token-table .app-access-referer,
.validation-result-page .security-alert-token-table .app-access-user-agent,
.validation-result-page .security-alert-token-table .ip-suspicion-score-badge,
.validation-result-page .security-alert-token-table .ip-suspicion-score-badge__level,
.validation-result-page .security-alert-token-table .ip-access-client-kind,
.validation-result-page .security-alert-token-table .journal-ip-cell,
.validation-result-page .security-alert-token-table .journal-ip-cell__host,
.validation-result-page .security-alert-token-table .journal-ip-cell .btn-ip-rdap-detail {
    font-size: 0.8125rem;
    line-height: 1.35;
}

.validation-result-page .security-alert-token-table th,
.validation-result-page .security-alert-token-table td {
    padding: 0.625rem 0.75rem;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
    white-space: nowrap;
    word-break: keep-all;
    overflow-wrap: normal;
    hyphens: none;
    -webkit-hyphens: none;
}

.validation-result-page .security-alert-token-table .ip-suspicion-score-badge,
.validation-result-page .security-alert-token-table .ip-access-client-kind,
.validation-result-page .security-alert-token-table .unified-log-score {
    white-space: nowrap;
    word-break: keep-all;
    overflow-wrap: normal;
    writing-mode: horizontal-tb;
    text-orientation: mixed;
    max-width: none;
}

.validation-result-page .log-table-density-bar {
    margin: 0.5rem 0 0.65rem;
}

.validation-result-page .log-table-density-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.45rem 0.65rem;
    border: 1px solid var(--border);
    border-radius: 0.5rem;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
    font-size: 0.95rem;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.validation-result-page .log-table-density-toggle input {
    width: 1.15rem;
    height: 1.15rem;
}

.sa-ip-score-dialog {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 0;
    width: min(52rem, calc(100vw - 1.25rem));
    max-width: calc(100vw - 1.25rem);
    max-height: calc(100vh - 1.5rem);
    max-height: calc(100dvh - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px) - 1.25rem);
    margin: max(0.75rem, env(safe-area-inset-top, 0px)) auto max(0.75rem, env(safe-area-inset-bottom, 0px));
    overflow: hidden;
    box-sizing: border-box;
}

/* Closed <dialog> must stay display:none — author display:flex overrides UA hide. */
.sa-ip-score-dialog:not([open]) {
    display: none;
}

.sa-ip-score-dialog[open] {
    display: flex;
    flex-direction: column;
}

.sa-ip-score-dialog__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-shrink: 0;
    gap: 0.75rem;
    padding: 0.85rem 1.15rem 0.65rem;
    border-bottom: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    top: 0;
    z-index: 2;
}

.sa-ip-score-dialog__header h2 {
    margin: 0;
    font-size: 1.1rem;
    line-height: 1.3;
}

.sa-ip-score-dialog__body {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    margin: 0;
    padding: 0.75rem 1.15rem;
}

.sa-ip-score-dialog__footer {
    flex-shrink: 0;
    margin: 0;
    padding: 0.65rem 1.15rem max(0.85rem, env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    bottom: 0;
    z-index: 2;
}

.sa-ip-score-dialog__footer .btn-secondary {
    min-height: 2.75rem;
    min-width: 5.5rem;
    padding: 0.55rem 1rem;
}

.sa-ip-score-dialog__body .ip-suspicion-detail-context,
.sa-ip-score-dialog__body .ip-suspicion-detail-list,
.sa-ip-score-dialog__body .ip-suspicion-detail-timeline,
.sa-ip-score-dialog__body .ip-suspicion-detail-routes,
.sa-ip-score-dialog__body .ip-local-intel__findings,
.sa-ip-score-dialog__body .ip-local-intel__actions {
    margin-bottom: 0.85rem;
}

.sa-ip-score-list {
    margin: 0.35rem 0 0.75rem;
    padding-left: 1.1rem;
}

.validation-result-page .security-alert-token-table thead th {
    font-size: 0.8125rem;
    font-weight: 600;
    color: var(--muted);
    white-space: nowrap;
}

.validation-result-page .security-alert-token-table .btn-primary,
.validation-result-page .security-alert-token-table .btn-secondary,
.validation-result-page .security-alert-token-table .btn-danger,
.validation-result-page .security-alert-token-table .security-alert-token-table__action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto;
    max-width: 100%;
    padding: 0.3rem 0.55rem;
    font-size: 0.8125rem;
    line-height: 1.2;
    border-radius: 6px;
    white-space: nowrap;
    text-decoration: none;
    box-sizing: border-box;
}

.validation-result-page .security-alert-token-table .security-alert-token-table__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    align-items: center;
}

.validation-result-page .security-alert-token-table td:last-child {
    width: 1%;
    white-space: normal;
}

@media (max-width: 640px) {
    .validation-result-page .validation-result.validation-result--wide-table {
        max-width: 100%;
        padding: 1.25rem 0.75rem;
    }

    .validation-result-page .security-alert-token-table {
        min-width: 48rem;
        font-size: 0.8125rem;
        -webkit-text-size-adjust: 100%;
        text-size-adjust: 100%;
    }

    .validation-result-page .log-table-density-host[data-full-view="1"] .security-alert-token-table {
        min-width: 78rem;
    }

    .validation-result-page .security-alert-token-table-wrap {
        border: 1px solid var(--border);
        border-radius: 0.5rem;
    }
}

.ip-suspicion-detail-dialog__x {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 2.75rem;
    height: 2.75rem;
    min-width: 2.75rem;
    min-height: 2.75rem;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--surface-muted, #f8fafc);
    color: var(--text, #1f2933);
    font-size: 1.5rem;
    line-height: 1;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    touch-action: manipulation;
}

html[data-theme="dark"] .ip-suspicion-detail-dialog__x {
    background: var(--surface-muted, #1f2937);
    color: var(--text);
}

.log-table-density-bar {
    margin: 0.35rem 0 0.55rem;
}

.log-table-density-bar .log-table-density-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}

.validation-result-page {
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 1rem;
}

.validation-result-page .validation-result {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
    width: 100%;
    max-width: 32rem;
    margin: 0;
    padding: 2rem 1.75rem;
    text-align: center;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}

.validation-result-page .validation-result h1 {
    margin: 0;
    font-size: 1.5rem;
    line-height: 1.35;
    color: var(--text);
}

.validation-result-message {
    margin: 0;
    font-size: 1rem;
    line-height: 1.55;
    color: var(--muted);
}

.validation-result-message--ok {
    color: var(--success, #1a7f37);
}

.payment-record-page .payment-record-info {
    margin: 0;
    font-size: 0.95rem;
    line-height: 1.5;
}

.payment-record-page .payment-record-form {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    width: 100%;
    text-align: left;
}

.payment-record-success {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
    width: 100%;
    margin: 0;
    padding: 1.15rem 1.2rem;
    border-radius: 10px;
    border: 1px solid #b7e3c6;
    background: #e8f7ee;
    color: #17653a;
    text-align: left;
}

.payment-record-success[hidden] {
    display: none;
}

.payment-record-success-icon {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 2.35rem;
    height: 2.35rem;
    border-radius: 50%;
    background: #17653a;
    color: #fff;
    font-size: 1.3rem;
    font-weight: 700;
    line-height: 1;
}

.payment-record-success-title {
    display: block;
    margin: 0 0 0.3rem;
    font-size: 1.25rem;
    font-weight: 700;
    line-height: 1.35;
    color: #17653a;
}

.payment-record-success-detail {
    display: block;
    font-size: 0.95rem;
    line-height: 1.5;
    color: #1f5c38;
}

.payment-record-error {
    width: 100%;
    margin: 0;
    padding: 0.85rem 1rem;
    border-radius: 10px;
    border: 1px solid #f5c2c2;
    background: #fdecec;
    color: #8f1f1f;
    font-weight: 500;
    text-align: left;
}

.payment-record-error[hidden] {
    display: none;
}

.validation-result-actions {
    margin: 0.5rem 0 0;
    width: 100%;
}

.validation-result-actions .btn-secondary {
    display: inline-block;
    text-decoration: none;
    color: var(--text);
}

.payment-record-receipt-actions,
.payment-receipt-actions {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.75rem;
}

.payment-receipt-actions {
    justify-content: flex-start;
}

.payment-record-receipt-actions .btn-secondary,
.payment-receipt-actions .btn-secondary {
    display: block;
    width: 100%;
    text-align: center;
    text-decoration: none;
}

@media (max-width: 640px) {
    .validation-result-page {
        padding: 0.75rem;
    }

    .validation-result-page .validation-result {
        padding: 1.5rem 1.25rem;
        gap: 1.25rem;
    }

    .validation-result-page .validation-result h1 {
        font-size: 1.35rem;
    }

    .validation-result-actions {
        margin-top: 0.75rem;
    }

    .validation-result-actions .btn-secondary {
        display: block;
        width: 100%;
        text-align: center;
    }
}

.location-choices {
    display: grid;
    gap: 0.75rem;
}

.location-card.is-selected {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 25%, transparent);
}

.locations-admin-list {
    display: grid;
    gap: 1rem;
}

.location-admin-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1rem;
}

.location-admin-card-actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-shrink: 0;
}

.admin-location-calendar-section {
    margin-bottom: 1rem;
}

.admin-location-calendar-section > .panel {
    margin-left: 1.25rem;
    margin-right: 1.25rem;
}

.admin-location-calendar-section > .panel:last-child {
    margin-bottom: 1.25rem;
}

.admin-location-calendar-section > summary {
    cursor: pointer;
}

.cron-dsm-callout {
    margin: 1rem 0 1.5rem;
    padding: 1rem 1.25rem;
    border: 1px solid #93c5fd;
    border-radius: 0.5rem;
    background: #eff6ff;
}

.cron-dsm-callout__lead {
    margin: 0 0 0.75rem;
}

.cron-dsm-callout-steps {
    margin: 0 0 0.75rem 1.25rem;
    padding: 0;
}

.cron-dsm-callout-steps li {
    margin-bottom: 0.4rem;
}

.cron-dsm-callout__note {
    margin: 0;
}

.cron-ssh-advanced {
    margin-bottom: 1.5rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
}

.cron-ssh-advanced__summary {
    cursor: pointer;
    font-weight: 600;
}

.cron-task-guide__platform-note {
    margin: 0 0 0.75rem;
}

.cron-tasks-panel .cron-tasks-paths {
    margin-bottom: 1.5rem;
}

.cron-tasks-list {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.cron-tasks-list-toolbar {
    margin: 0;
}

.cron-test-all-progress {
    margin: 0.65rem 0 0.25rem;
}

.cron-test-all-progress__track {
    height: 0.45rem;
    border-radius: 999px;
    background: var(--border, #d8d8d8);
    overflow: hidden;
}

.cron-test-all-progress__fill {
    height: 100%;
    width: 0;
    border-radius: inherit;
    background: var(--primary, #2f6f5e);
    transition: width 0.25s ease;
}

.cron-test-all-progress.is-error .cron-test-all-progress__fill {
    background: var(--danger, #b42318);
}

.cron-test-all-progress.is-done .cron-test-all-progress__fill {
    background: var(--success, #1a7f37);
}

html[data-theme="dark"] .cron-test-all-progress__track {
    background: rgba(255, 255, 255, 0.12);
}

html[data-theme="dark"] .cron-test-all-progress__fill {
    background: var(--primary, #6fbfa8);
}

html[data-theme="dark"] .cron-test-all-progress.is-error .cron-test-all-progress__fill {
    background: var(--danger, #f97066);
}

html[data-theme="dark"] .cron-test-all-progress.is-done .cron-test-all-progress__fill {
    background: var(--success, #3dd68c);
}

.cron-test-all-results {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin: 0.75rem 0 0;
    padding: 0;
    list-style: none;
}

.cron-test-all-results__item {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.375rem;
    background: var(--surface-muted, #f8fafc);
}

.cron-test-all-results__main {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
}

.cron-test-all-results__item--current {
    border-color: #93c5fd;
    background: #eff6ff;
}

.cron-test-all-results__name {
    font-weight: 600;
}

.cron-test-all-item-progress {
    width: 100%;
}

.cron-test-all-item-progress__track {
    height: 0.28rem;
    border-radius: 999px;
    background: var(--border, #d8d8d8);
    overflow: hidden;
}

.cron-test-all-item-progress__fill {
    height: 100%;
    width: 0;
    border-radius: inherit;
    background: rgba(100, 116, 139, 0.55);
    transition: width 0.25s ease;
}

.cron-test-all-item-progress[data-state="pending"] .cron-test-all-item-progress__fill {
    background: var(--primary, #2f6f5e);
}

.cron-test-all-item-progress[data-state="pending"].is-indeterminate .cron-test-all-item-progress__fill {
    width: 40% !important;
    animation: cron-test-all-item-progress-pulse 1.1s ease-in-out infinite;
}

.cron-test-all-item-progress[data-state="ok"] .cron-test-all-item-progress__fill {
    background: var(--success, #1a7f37);
}

.cron-test-all-item-progress[data-state="warning"] .cron-test-all-item-progress__fill {
    background: #c9a227;
}

.cron-test-all-item-progress[data-state="nok"] .cron-test-all-item-progress__fill {
    background: var(--danger, #b42318);
}

@keyframes cron-test-all-item-progress-pulse {
    0% {
        transform: translateX(-60%);
    }
    100% {
        transform: translateX(220%);
    }
}

html[data-theme="dark"] .cron-test-all-item-progress__track {
    background: rgba(255, 255, 255, 0.12);
}

html[data-theme="dark"] .cron-test-all-item-progress[data-state="pending"] .cron-test-all-item-progress__fill {
    background: var(--primary, #6fbfa8);
}

html[data-theme="dark"] .cron-test-all-item-progress[data-state="ok"] .cron-test-all-item-progress__fill {
    background: var(--success, #3dd68c);
}

html[data-theme="dark"] .cron-test-all-item-progress[data-state="warning"] .cron-test-all-item-progress__fill {
    background: #e8c878;
}

html[data-theme="dark"] .cron-test-all-item-progress[data-state="nok"] .cron-test-all-item-progress__fill {
    background: var(--danger, #f97066);
}

.cron-task-card.cron-task-card--test-current {
    outline: 2px solid #93c5fd;
    outline-offset: 2px;
}

.cron-task-card {
    margin: 0;
}

.cron-task-readiness {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
}

.cron-task-readiness--ready {
    border-color: #86efac;
    background: #f0fdf4;
}

.cron-task-readiness--pending {
    border-color: #fcd34d;
    background: #fffbeb;
}

.cron-task-readiness__summary {
    margin: 0 0 0.5rem;
    font-weight: 600;
}

.cron-task-readiness__checks {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.cron-task-readiness-badge {
    display: inline-block;
    padding: 0.15rem 0.5rem;
    border-radius: 999px;
    font-size: 0.8rem;
    font-weight: 600;
}

.cron-task-readiness-badge--ok {
    background: #dcfce7;
    color: #166534;
}

.cron-task-readiness-badge--warning {
    background: #fef3c7;
    color: #92400e;
}

.cron-task-readiness-badge--nok {
    background: #fee2e2;
    color: #991b1b;
}

.cron-task-readiness-badge--waiting {
    background: #e5e7eb;
    color: #4b5563;
}

.cron-task-queue-readiness-list {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.75rem 0 1rem;
}

.cron-task-readiness__tech-title {
    margin: 0 0 0.35rem;
    font-weight: 600;
    font-size: 0.95rem;
}

.cron-task-queue-readiness-block .cron-task-readiness {
    margin: 0;
}

.cron-task-queue-readiness-hint {
    margin: 0.35rem 0 0;
}

.cron-task-prereq-hint {
    margin-top: 0.35rem;
}

.cron-task-configured-label {
    margin-top: 0.5rem;
}

.cron-task-configured-readonly {
    margin: 0.5rem 0 0;
    padding: 0.4rem 0.65rem;
    border-radius: 0.35rem;
    font-size: 0.9rem;
    font-weight: 600;
}

.cron-task-configured-readonly.is-on {
    background: #dcfce7;
    color: #166534;
}

.cron-task-configured-readonly.is-off {
    background: #fef3c7;
    color: #92400e;
}

.cron-task-results-status {
    display: inline-block;
    padding: 0.1rem 0.45rem;
    border-radius: 0.25rem;
    font-size: 0.85rem;
    font-weight: 600;
}

.cron-task-results-status--success {
    background: #dcfce7;
    color: #166534;
}

.cron-task-results-status--warning {
    background: #fef3c7;
    color: #92400e;
}

.cron-task-results-status--error {
    background: #fee2e2;
    color: #991b1b;
}

.cron-task-results-status--skipped,
.cron-task-results-status--skipped_gate,
.cron-task-results-status--skipped_outside_window,
.cron-task-results-status--skipped_already_sent,
.cron-task-results-status--skipped_feature {
    background: #fef3c7;
    color: #92400e;
}

.cron-task-results-status--never_run,
.cron-task-results-status--not_configured {
    background: #e2e8f0;
    color: #475569;
}

.cron-task-meta {
    margin: 0.75rem 0 1rem;
}

.cron-task-meta__row {
    display: grid;
    grid-template-columns: minmax(8rem, 12rem) 1fr;
    gap: 0.5rem 1rem;
    margin-bottom: 0.35rem;
}

.cron-task-meta dt {
    margin: 0;
    color: var(--muted);
    font-weight: 600;
}

.cron-task-meta dd {
    margin: 0;
}

.cron-task-path {
    word-break: break-all;
}

.cron-task-guide {
    margin-top: 1rem;
    padding: 1rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
}

.cron-task-guide__title {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
}

.cron-task-guide-steps {
    margin: 0 0 1rem 1.25rem;
    padding: 0;
}

.cron-task-guide-steps li {
    margin-bottom: 0.35rem;
}

.cron-task-command-block {
    margin-bottom: 0.75rem;
}

.cron-task-command-block__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.35rem;
}

.cron-task-command-block__label {
    font-size: 0.9rem;
    font-weight: 600;
}

.cron-task-command {
    margin: 0;
    padding: 0.75rem;
    overflow-x: auto;
    border-radius: 0.35rem;
    background: #1e293b;
    color: #f8fafc;
    font-size: 0.85rem;
    line-height: 1.45;
}

.cron-task-guide-btn.is-active,
.nginx-synology-guide-btn.is-active {
    border-color: var(--primary, #2563eb);
}

.nginx-guide-location-warn {
    margin: 0.75rem 0;
}

.nginx-snippet-command-block .nginx-snippet-pre,
.nginx-snippet-pre {
    max-height: 28rem;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-word;
}

.htaccess-blocked-dirs-panel {
    margin: 0.85rem 0 1.1rem;
    padding: 0.65rem 0.85rem;
    border: 1px solid var(--border, #d8dee9);
    border-radius: 8px;
    background: var(--surface-muted, #f8fafc);
}

.htaccess-blocked-dirs-panel > summary {
    cursor: pointer;
    list-style: none;
    font-weight: 600;
    color: var(--text);
}

.htaccess-blocked-dirs-panel > summary::-webkit-details-marker {
    display: none;
}

.htaccess-blocked-dirs-panel > summary::before {
    content: '▸';
    display: inline-block;
    width: 1rem;
    color: var(--muted);
}

.htaccess-blocked-dirs-panel[open] > summary::before {
    content: '▾';
}

.htaccess-blocked-dirs-panel--nested {
    margin-top: 0.5rem;
}

.htaccess-blocked-dirs-list {
    margin: 0.5rem 0 0.35rem;
    padding-left: 1.25rem;
    columns: 2;
    column-gap: 1.5rem;
}

.htaccess-blocked-dirs-list li {
    break-inside: avoid;
    margin: 0.2rem 0;
}

.htaccess-blocked-dirs-list code {
    font-size: 0.9em;
}

@media (max-width: 640px) {
    .htaccess-blocked-dirs-list {
        columns: 1;
    }
}

.htaccess-apache-panel {
    margin-top: 1.25rem;
}

.cron-script-dialog {
    width: min(96vw, 920px);
    max-height: 92vh;
    overflow: auto;
}

.cron-script-dialog__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.cron-script-dialog__header h2 {
    margin: 0;
}

.cron-script-file-select {
    display: block;
    width: 100%;
    max-width: 100%;
    margin: 0.35rem 0 0.75rem;
}

.cron-script-path-row {
    margin: 0 0 0.5rem;
}

.cron-script-editor {
    display: block;
    width: 100%;
    min-height: 18rem;
    max-height: min(52vh, 28rem);
    margin: 0.5rem 0 0.75rem;
    padding: 0.75rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: #0f172a;
    color: #e2e8f0;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.5;
    resize: vertical;
    box-sizing: border-box;
}

.cron-script-editor--readonly {
    opacity: 0.85;
}

.cron-script-test-panel {
    margin: 0.75rem 0 1rem;
    padding: 0.75rem;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
}

.cron-script-test-panel__title {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
}

.cron-script-test-status {
    margin: 0 0 0.5rem;
    font-weight: 600;
}

.cron-script-test-status--pending {
    color: var(--text-muted, #64748b);
}

.cron-script-test-status--success {
    color: #15803d;
}

.cron-script-test-status--warning {
    color: #b45309;
}

.cron-script-test-status--error {
    color: #b91c1c;
}

.cron-script-test-output {
    margin: 0;
    max-height: min(40vh, 18rem);
    overflow: auto;
    padding: 0.75rem;
    border-radius: 0.375rem;
    background: #0f172a;
    color: #e2e8f0;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
}
#cron-script-test-dialog,
#cron-log-dialog {
    width: min(96vw, 900px);
    max-height: 90vh;
    overflow: auto;
}

.cron-log-dialog__path-row {
    margin: 0 0 0.5rem;
}

.cron-log-status {
    margin: 0 0 0.75rem;
    font-size: 0.875rem;
    color: var(--text-muted, #64748b);
}

.cron-log-output-wrap {
    max-height: min(60vh, 28rem);
    overflow: auto;
    border: 1px solid var(--border, #d8dee4);
    border-radius: 0.5rem;
    background: #0f172a;
}

.cron-log-output {
    margin: 0;
    padding: 0.75rem;
    color: #e2e8f0;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
}

.upload-security-locations {
    display: grid;
    gap: 1rem;
    margin-top: 1rem;
}

.upload-security-intro {
    margin: 0 0 1.25rem;
    line-height: 1.55;
    color: var(--text);
}

.upload-security-footnote {
    margin-top: 1.25rem;
    font-size: 0.85rem;
}

.upload-security-cards {
    display: grid;
    gap: 1.25rem;
}

.upload-security-card {
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--card);
    overflow: hidden;
}

.upload-security-card__header {
    padding: 1rem 1.1rem;
    background: var(--surface-muted);
    border-bottom: 1px solid var(--border);
    color: var(--text);
}

.upload-security-card__title-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem 1rem;
    margin-bottom: 0.85rem;
}

.upload-security-card__title {
    margin: 0;
    font-size: 1.1rem;
    font-weight: 600;
}

.upload-security-card__master {
    margin-left: auto;
}

.upload-security-card__where {
    padding: 0.75rem 0.9rem;
    border-radius: 8px;
    background: var(--surface);
    border: 1px solid var(--border);
    color: var(--text);
}

.upload-security-card__where-label {
    margin: 0 0 0.35rem;
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--muted);
}

.upload-security-card__where-text {
    margin: 0;
    line-height: 1.5;
    color: var(--text);
}

.upload-security-card__where-links {
    margin: 0.5rem 0 0;
    font-size: 0.88rem;
    line-height: 1.45;
}

.upload-security-card__where-link {
    color: var(--primary);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.upload-security-card__where-sep {
    color: var(--muted);
}

.upload-security-card__body {
    padding: 1rem 1.1rem 1.1rem;
}

.upload-security-card__protections {
    margin-bottom: 1.1rem;
}

.upload-security-card__protections-label {
    margin: 0 0 0.65rem;
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--muted);
}

.upload-security-card__switches {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.25rem;
}

.upload-security-card__switch {
    min-width: 0;
}

.toggle-switch {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    cursor: pointer;
    user-select: none;
    font-size: 0.92rem;
    font-weight: 500;
    color: var(--text);
}

.toggle-switch input {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
    margin: 0;
    pointer-events: none;
}

.toggle-switch__track {
    position: relative;
    flex-shrink: 0;
    width: 2.35rem;
    height: 1.3rem;
    border-radius: 999px;
    background: #d1d5db;
    transition: background-color 0.15s ease;
}

.toggle-switch__track::after {
    content: "";
    position: absolute;
    top: 0.15rem;
    left: 0.15rem;
    width: 1rem;
    height: 1rem;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
    transition: transform 0.15s ease;
}

.toggle-switch input:checked + .toggle-switch__track {
    background: var(--primary);
}

.toggle-switch input:checked + .toggle-switch__track::after {
    transform: translateX(1.05rem);
}

.toggle-switch input:focus-visible + .toggle-switch__track {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.toggle-switch__label {
    line-height: 1.3;
}

.upload-security-type-list {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: flex-start;
    margin-bottom: 0.85rem;
}

.upload-security-type-list__empty {
    width: 100%;
    margin: 0;
}

.upload-security-type {
    display: flex;
    flex-direction: column;
    max-width: 100%;
}

.upload-security-type.is-editing {
    flex-basis: 100%;
    width: 100%;
}

.upload-security-type-chip {
    display: inline-flex;
    align-items: center;
    padding: 0;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--card);
    color: var(--text);
    cursor: pointer;
    font: inherit;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}

.upload-security-type-chip:hover,
.upload-security-type-chip[aria-expanded="true"] {
    border-color: var(--primary);
    background: var(--surface-muted);
}

.upload-security-type-chip__badge {
    display: inline-block;
    padding: 0.28rem 0.7rem;
    font-size: 0.86rem;
    font-weight: 600;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
    color: #1e40af;
}

.upload-security-type__editor {
    width: 100%;
    margin-top: 0.65rem;
    padding: 0.85rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #f8fafc;
    display: grid;
    gap: 0.75rem;
}

.upload-security-type__ext-field {
    display: grid;
    gap: 0.35rem;
    font-weight: 500;
    max-width: 12rem;
}

.upload-security-type__ext-field input {
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
}

.upload-security-type__advanced summary {
    cursor: pointer;
    font-weight: 600;
    font-size: 0.92rem;
    color: var(--primary);
    margin-bottom: 0.5rem;
}

.upload-security-type__advanced[open] summary {
    margin-bottom: 0.65rem;
}

.upload-security-type__remove {
    justify-self: start;
}

.upload-security-add-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.upload-security-add-row__field {
    flex: 1 1 10rem;
    min-width: 0;
    margin: 0;
}

.upload-security-add-row__field input {
    width: 100%;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
}

.upload-security-suggest-status.error {
    color: #b42318;
}

.upload-security-panel--level-disabled {
    opacity: 0.72;
}

.upload-security-level-banner {
    margin: 0 0 1rem;
    padding: 0.75rem 0.9rem;
    border-radius: 8px;
    border: 1px solid #f5c2c7;
    background: #fff5f5;
    color: #842029;
}

.upload-security-card__toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    font-weight: 600;
    font-size: 1.1rem;
    cursor: pointer;
    text-align: left;
}

.upload-security-card__toggle::before {
    content: '▸';
    display: inline-block;
    width: 1rem;
    color: var(--muted);
    transition: transform 0.15s ease;
}

.upload-security-card.is-expanded .upload-security-card__toggle::before {
    transform: rotate(90deg);
}

.upload-security-card__defaults-summary {
    margin: 0.75rem 0 0;
    padding: 0.55rem 0.7rem;
    border-radius: 6px;
    background: #f8fafc;
    border: 1px dashed var(--border);
}

.upload-security-card__use-defaults {
    margin: 0 0 1rem;
}

.upload-security-card__public-hint {
    margin: 0 0 1rem;
    padding: 0.65rem 0.8rem;
    border-radius: 8px;
    border: 1px solid #dbeafe;
    background: #eff6ff;
    color: #1e3a5f;
}

.upload-security-card--defaults .upload-security-card__custom {
    opacity: 0.55;
    pointer-events: none;
}

.upload-security-panel--level-disabled .upload-security-card__custom,
.upload-security-panel--level-disabled .upload-security-card__use-defaults,
.upload-security-panel--level-disabled .upload-security-add-row,
.upload-security-panel--level-disabled .upload-security-card__master input {
    pointer-events: none;
    opacity: 0.55;
}

.upload-security-panel--level-disabled .upload-security-card__toggle {
    pointer-events: auto;
    opacity: 1;
}

@media (max-width: 640px) {
    .upload-security-card__title-row {
        flex-direction: column;
        align-items: stretch;
    }

    .upload-security-card__master {
        margin-left: 0;
    }

    .upload-security-card__switches {
        flex-direction: column;
        align-items: stretch;
    }

    .upload-security-add-row {
        flex-direction: column;
        align-items: stretch;
    }

    .upload-security-add-row .btn-secondary {
        width: 100%;
    }
}

/* —— Session administrateur (admin technique) —— */

.admin-session-panel {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.admin-session-cookie-block {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.admin-session-lifetime-grid {
    max-width: none;
}

.admin-session-panel .settings-grid label > input[type="number"] {
    width: 5.25rem;
    min-width: 5.25rem;
    max-width: 5.25rem;
}

.settings-subsection-divider {
    margin: 1rem 0 0.85rem;
    padding: 0;
    border: 0;
    border-top: 1px solid var(--border, #e2e8f0);
    height: 0;
}

.settings-subsection-title {
    margin: 0 0 0.35rem;
    font-size: 0.98rem;
    font-weight: 600;
    color: var(--text);
}

.admin-session-subsection-desc {
    margin: 0 0 0.65rem;
}

.admin-session-subsection {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
}

.admin-session-nested-options {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin: 0.15rem 0 0 1.25rem;
    padding: 0.65rem 0 0 0.85rem;
    border-left: 2px solid var(--border, #e2e8f0);
}

.settings-fieldset,
.admin-session-fieldset {
    margin: 0;
    padding: 0.65rem 0.85rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 0.5rem;
    background: var(--surface-muted, #f8fafc);
}

#health-check-custom-panel .settings-fieldset + .settings-fieldset,
.health-check-storage-align-fieldset {
    margin-top: 1.25rem;
}

#health-check-custom-panel .health-check-storage-align-fieldset .settings-subheading {
    margin-top: 1rem;
    margin-bottom: 0.35rem;
}

#health-check-custom-panel .health-check-storage-align-fieldset .settings-subheading:first-of-type {
    margin-top: 0.5rem;
}

.settings-fieldset legend,
.admin-session-fieldset legend {
    padding: 0 0.35rem;
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--text-muted, #64748b);
}

.admin-session-radio-stack {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    margin-top: 0.35rem;
}

.admin-session-radio-option,
.admin-session-checkbox-stack {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.admin-session-option-hint {
    margin: 0 0 0 1.6rem;
    font-size: 0.82rem;
    line-height: 1.35;
}

.admin-form-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.admin-form-row--compact {
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    max-width: 28rem;
}

.admin-form-row__label {
    font-size: 0.9rem;
    font-weight: 500;
}

.admin-form-row__field {
    flex: 1 1 12rem;
    min-width: 0;
    margin: 0;
}

.admin-form-row__field select,
.admin-form-row__field input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}

.admin-geo-unknown-mode-field select {
    max-width: 100%;
}

.admin-geo-countries-editor {
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    margin-top: 0.25rem;
}

.admin-geo-countries-editor__label {
    margin: 0;
    font-size: 0.9rem;
    font-weight: 500;
}

.admin-geo-countries-add-row {
    max-width: 28rem;
    align-items: center;
}

.admin-geo-countries-add-row .btn-small {
    flex: 0 0 auto;
    align-self: center;
}

.admin-geo-countries-hint {
    margin: 0;
}

.admin-geo-countries-list,
.admin-country-list {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    margin: 0.35rem 0 0;
    padding: 0;
    list-style: none;
    max-width: 28rem;
}

.admin-geo-countries-list.is-empty {
    display: none;
}

.admin-geo-countries-list__item,
.admin-country-list__item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.65rem;
    padding: 0.4rem 0.6rem;
    border: 1px solid var(--border, #e2e8f0);
    border-radius: 0.45rem;
    background: var(--surface-muted, #f8fafc);
}

.admin-geo-countries-list__label {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    min-width: 0;
    flex: 1 1 auto;
}

.admin-geo-countries-list__code {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: 2.1rem;
    padding: 0.15rem 0.45rem;
    border-radius: 0.35rem;
    background: #e0f2fe;
    border: 1px solid #bae6fd;
    color: #0c4a6e;
    font-size: 0.78rem;
    font-weight: 700;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    letter-spacing: 0.03em;
}

.admin-geo-countries-list__name {
    font-size: 0.9rem;
    font-weight: 500;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.admin-geo-remove-country {
    flex: 0 0 auto;
    margin-left: auto;
}

.admin-session-save-actions {
    margin-top: 1.15rem;
    padding-top: 0.35rem;
}

.admin-session-geo-toggle {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.admin-session-geo-toggle .checkbox-label {
    align-self: flex-start;
}

/* —— Géolocalisation (admin technique) —— */

#geoloc-panel {
    gap: 0.65rem;
}

#geoloc-panel > .settings-full {
    max-width: 32rem;
}

.geoloc-cache-block {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    max-width: 28rem;
}

.geoloc-cache-nested {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    margin: 0 0 0 1.25rem;
    padding: 0.15rem 0 0 0.85rem;
    border-left: 2px solid var(--border, #e2e8f0);
}

.geoloc-cache-option {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.geoloc-cache-option-hint {
    margin: 0 0 0 1.6rem;
    font-size: 0.82rem;
    line-height: 1.35;
}

.geoloc-cache-ttl-field {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    max-width: 12rem;
    margin: 0;
    font-size: 0.95rem;
}

.geoloc-cache-ttl-field input[type="number"] {
    width: 100%;
    min-width: 0;
}

#geoloc-panel .admin-session-geo .admin-geo-unknown-mode-field,
#geoloc-panel .admin-session-geo .admin-geo-countries-editor {
    max-width: 28rem;
}

.admin-geoloc-actions {
    margin-top: 1.15rem;
    padding-top: 0.35rem;
}

.geoloc-panel-messages {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-top: 0.5rem;
}

.geoloc-panel-messages .message {
    margin-top: 0;
}

#geoloc-message,
#geoloc-probe-message {
    white-space: pre-line;
}

@media (max-width: 640px) {
    .admin-session-nested-options {
        margin-left: 0.5rem;
        padding-left: 0.65rem;
    }

    .admin-session-option-hint {
        margin-left: 1.35rem;
    }

    .geoloc-cache-nested {
        margin-left: 0.5rem;
        padding-left: 0.65rem;
    }

    .geoloc-cache-option-hint {
        margin-left: 1.35rem;
    }

    .admin-geo-countries-add-row,
    .admin-geo-countries-list,
    .admin-country-list {
        max-width: none;
    }

    .admin-geo-countries-add-row {
        flex-direction: column;
        align-items: stretch;
    }

    .admin-geo-countries-add-row .btn-small {
        width: 100%;
    }
}

/* —— Réservation rapide (masseuse) / jours récurrents / travail de nuit —— */
.quick-reserve-admin-controls,
.weekly-weekday-admin-controls,
.day-work-admin-controls,
.night-work-admin-controls {
    margin-bottom: 0;
}

.weekly-weekday-days {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    margin: 0.5rem 0 0.65rem;
}

.weekly-weekday-day {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.1rem;
    min-width: 2.6rem;
    padding: 0.35rem 0.4rem;
    border: 1px solid var(--border, #d1d5db);
    border-radius: 0.45rem;
    background: var(--card, #fff);
    color: var(--text);
    font: inherit;
    font-size: 0.8rem;
    line-height: 1.15;
    cursor: pointer;
    position: relative;
}

/* Mode colors on controls only (not calendar slots). */
.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-block,
.weekly-weekday-admin-controls .weekly-weekday-mode-select.is-mode-block {
    background: var(--blocked, #c4c4c4);
    border-color: #9ca3af;
    color: #1f2937;
}

.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-manual,
.weekly-weekday-admin-controls .weekly-weekday-mode-select.is-mode-manual {
    background: #ffedd5;
    border-color: rgba(251, 146, 60, 0.95);
    color: #9a3412;
}

.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-available,
.weekly-weekday-admin-controls .weekly-weekday-mode-select.is-mode-available {
    background: var(--available, #7cb87c);
    border-color: #4d8f4d;
    color: #14532d;
}

.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-block .weekly-weekday-day-mode,
.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-manual .weekly-weekday-day-mode,
.weekly-weekday-admin-controls .weekly-weekday-day.is-mode-available .weekly-weekday-day-mode {
    color: inherit;
    font-weight: 600;
    opacity: 0.9;
}

.weekly-weekday-day.is-selected {
    outline: 2px solid #2563eb;
    outline-offset: 1px;
}

.weekly-weekday-admin-controls.is-weekly-weekday-busy {
    cursor: wait;
}

.weekly-weekday-admin-controls.is-weekly-weekday-busy .weekly-weekday-day:disabled,
.weekly-weekday-admin-controls.is-weekly-weekday-busy select:disabled {
    opacity: 0.62;
    cursor: wait;
}

#calendar.is-calendar-refresh-busy,
.location-calendar.is-calendar-refresh-busy,
.slots-stack-view.is-calendar-refresh-busy,
.fc.is-calendar-refresh-busy {
    position: relative;
    cursor: wait;
    pointer-events: none;
}

#calendar.is-calendar-refresh-busy::after,
.location-calendar.is-calendar-refresh-busy::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 20;
    border-radius: 0.5rem;
    background: rgba(15, 23, 42, 0.12);
    pointer-events: none;
}

.weekly-weekday-day-label {
    font-weight: 650;
}

.weekly-weekday-day-mode {
    font-size: 0.68rem;
    color: #6b7280;
}

.weekly-weekday-day.is-tooltip-open::after,
.weekly-weekday-mode-hint.is-tooltip-open::after {
    content: attr(data-tooltip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 0.35rem);
    transform: translateX(-50%);
    z-index: 5;
    min-width: 9rem;
    max-width: 14rem;
    padding: 0.35rem 0.55rem;
    border-radius: 6px;
    background: #111827;
    color: #fff;
    font-size: 0.75rem;
    font-weight: 500;
    line-height: 1.35;
    text-align: center;
    white-space: normal;
    pointer-events: none;
}

.weekly-weekday-editor {
    display: grid;
    gap: 0.35rem;
    margin-bottom: 0.35rem;
}

.weekly-weekday-editor-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
    gap: 0.5rem;
}

.weekly-weekday-editor-row select {
    width: 100%;
}

@media (max-width: 640px) {
    .weekly-weekday-editor-row {
        grid-template-columns: 1fr;
    }
}

.work-detection-mode-options {
    margin-top: 0.65rem;
}

.day-work-keyword-fields.is-disabled,
.night-work-keyword-field.is-disabled {
    opacity: 0.55;
}

.night-work-fields-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.35rem 1.5rem;
    margin-top: 0.5rem;
    align-items: end;
}

.night-work-field {
    display: grid;
    gap: 0.35rem;
    min-width: 0;
}

.night-work-field label {
    display: block;
}

.night-work-field input {
    width: 100%;
    min-width: 0;
}

.night-work-admin-controls .admin-settings-content > .field-hint {
    margin-top: 0.35rem;
}

.night-work-policy-options {
    margin-top: 0.85rem;
}

.night-work-from-slot-field {
    margin-top: 0.75rem;
}

.night-work-from-slot-field select {
    width: auto;
    min-width: 5.5rem;
    max-width: 8rem;
}

.night-work-from-slot-field.is-disabled,
.night-work-from-slot-field.is-disabled label,
.night-work-from-slot-field.is-disabled .field-hint {
    opacity: 0.55;
}

.night-work-from-slot-field.is-disabled select:disabled {
    cursor: not-allowed;
    background: var(--input-disabled-bg, #eef0f3);
    color: var(--muted, #6b7280);
}

.night-work-policy-save-row {
    margin-top: 0.85rem;
}

@media (max-width: 640px) {
    .night-work-fields-row {
        grid-template-columns: 1fr;
    }
}

.quick-reserve-shortcut-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.quick-reserve-page .quick-reserve-toolbar {
    display: grid;
    gap: 0.85rem;
    margin-bottom: 1rem;
}

.quick-reserve-page .quick-reserve-field {
    display: grid;
    gap: 0.35rem;
    font-weight: 600;
}

.quick-reserve-page .quick-reserve-field select,
.quick-reserve-page .quick-reserve-field input {
    font-weight: 400;
    width: 100%;
    max-width: 28rem;
}

.quick-reserve-code {
    background: var(--bg, #f4f4f5);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 0.75rem 1rem;
    overflow-x: auto;
    font-size: 0.875rem;
}

.qr-confirm-dialog {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 0;
    max-width: min(100%, 420px);
}

.qr-confirm-dialog::backdrop {
    background: rgba(15, 23, 42, 0.45);
}

.qr-confirm-form {
    display: grid;
    gap: 1rem;
    padding: 1.25rem;
}

.qr-confirm-form h2 {
    margin: 0;
    font-size: 1.15rem;
}

.manual-booking-inline {
    max-width: 32rem;
}

.manual-booking-inline h2 {
    margin-top: 0;
}

.ipsum-settings-panel,
.ipsum-settings,
.ipsum-panel-messages,
.abuseipdb-settings-panel,
.abuseipdb-settings,
.abuseipdb-panel-messages {
    margin-top: 1rem;
}

/* Mode / API key controls stay clickable; only nested settings dim when off. */
.ipsum-settings-panel__controls,
.abuseipdb-settings-panel__controls {
    position: relative;
    z-index: 1;
    pointer-events: auto;
}

.ipsum-settings-panel--disabled .ipsum-settings,
.abuseipdb-settings-panel--disabled .abuseipdb-settings {
    opacity: 0.72;
    pointer-events: none;
}

.abuseipdb-settings-panel--disabled .abuseipdb-settings-panel__controls,
.abuseipdb-settings-panel--disabled #abuseipdb-mode,
.abuseipdb-settings-panel--disabled #abuseipdb-api-key,
.abuseipdb-settings-panel--disabled .abuseipdb-mode-label {
    pointer-events: auto;
}

.ipsum-settings.ipsum-master-off,
.abuseipdb-settings.abuseipdb-master-off {
    display: none;
}

#ipsum-mode,
#ipsum-level,
#abuseipdb-mode {
    width: auto;
    max-width: 18rem;
    min-width: 0;
    pointer-events: auto;
}

.unified-log-abuseipdb {
    line-height: 1.25;
}

.unified-log-abuseipdb-meta {
    display: block;
    margin-top: 0.2rem;
    font-size: 0.85em;
    opacity: 0.85;
}

.unified-log-abuseipdb-meta--intel {
    opacity: 0.75;
}

.ipsum-actions,
.ipsum-cron-guide-actions,
.reverse-dns-actions {
    margin-top: 0.75rem;
}

.ip-filter-section-save {
    margin-top: 2rem;
}

.ipsum-level-descriptions {
    margin: 0.5rem 0 1rem;
    padding-left: 1.25rem;
}

.reverse-dns-settings-panel {
    margin-top: 1.5rem;
}

.journal-ip-cell {
    display: inline-flex;
    flex-direction: column;
    gap: 0.15rem;
    align-items: flex-start;
}

.journal-ip-cell--with-rdap {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.35rem;
}

.journal-ip-cell__main {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.1rem;
}

.journal-ip-cell__score {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem;
    margin-top: 0.15rem;
    max-width: 100%;
}

.journal-ip-cell__score .ip-suspicion-score-badge {
    font-size: 0.75rem;
}

.security-monitor-table .journal-ip-cell__score .unified-log-feed-badge {
    white-space: nowrap;
}

.security-monitor-table .security-monitor-ip-status--blocked {
    display: inline-block;
    padding: 0.15rem 0.45rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
    color: #991b1b;
    background: #fee2e2;
}

.security-monitor-table .security-monitor-ip-status--none {
    color: var(--muted, #5c6570);
}

.journal-ip-cell .btn-ip-rdap-detail,
.journal-ip-cell .btn-ip-ptr-retry {
    align-self: flex-start;
    padding: 0.15rem 0.4rem;
    font-size: 0.75rem;
    line-height: 1.2;
}

.journal-ip-cell__ptr-status {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.75rem;
    line-height: 1.25;
    opacity: 0.9;
    color: var(--muted, #5c6570);
}

.journal-ip-cell__ptr-status.is-error {
    color: var(--danger, #b42318);
    opacity: 1;
}

.unified-log-abuseipdb-status--unchecked {
    opacity: 0.85;
    font-style: italic;
}

.unified-log-feed-badge {
    position: relative;
    cursor: help;
    gap: 0.2em;
}

.unified-log-feed-badge__feed {
    font-weight: 600;
    letter-spacing: 0.01em;
    opacity: 0.92;
}

.unified-log-feed-badge__value {
    font-weight: 500;
}

.unified-log-feed-badge:focus-visible,
.unified-log-feed-badge.is-tooltip-open {
    outline: 2px solid var(--focus-ring, #2563eb);
    outline-offset: 2px;
}

.unified-log-feed-badge.is-tooltip-open::after,
.unified-log-feed-badge:focus-visible::after {
    content: attr(data-tooltip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 0.3rem);
    transform: translateX(-50%);
    z-index: 6;
    padding: 0.25rem 0.45rem;
    border-radius: 5px;
    background: #111827;
    color: #fff;
    font-size: 0.7rem;
    font-weight: 600;
    font-style: normal;
    line-height: 1.3;
    white-space: nowrap;
    pointer-events: none;
}

.unified-log-ipsum,
.unified-log-abuseipdb {
    white-space: nowrap;
}

.logs-dossier-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.logs-dossier-access-list {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
    max-height: 22rem;
    overflow: auto;
}

.logs-dossier-card__all-access {
    margin-top: 0.75rem;
}

.logs-dossier-panel .logs-dossier-filters {
    margin: 0.75rem 0;
}

.logs-dossier-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin: 0.5rem 0 0.75rem;
}

.logs-dossier-results {
    display: grid;
    gap: 0.85rem;
    margin-top: 0.75rem;
}

.logs-dossier-card {
    padding: 0.85rem 1rem;
    border: 1px solid var(--border, #d7dde3);
    border-radius: 0.65rem;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.logs-dossier-card--suspect {
    border-color: #fcd34d;
    background: rgba(217, 119, 6, 0.08);
}

.logs-dossier-card--malicious {
    border-color: #fca5a5;
    background: rgba(220, 38, 38, 0.06);
}

.logs-dossier-card--ok {
    border-color: #86efac;
    background: rgba(22, 163, 74, 0.06);
}

.logs-dossier-card__head {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.5rem;
    align-items: baseline;
}

.logs-dossier-card__head h3 {
    margin: 0;
    font-size: 1.05rem;
}

.logs-dossier-card__verdict {
    margin: 0;
    font-size: 0.9rem;
    color: var(--muted, #5b6770);
}

.logs-dossier-card__meta {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
    gap: 0.45rem 1rem;
    margin: 0.65rem 0;
}

.logs-dossier-card__meta dt {
    margin: 0;
    font-size: 0.8rem;
    color: var(--muted, #64748b);
}

.logs-dossier-card__meta dd {
    margin: 0.1rem 0 0;
}

.logs-dossier-card__actions {
    margin-top: 0.65rem;
}

.journal-ip-cell__host {
    font-size: 0.82em;
    color: var(--text-muted, #64748b);
}

.ip-rdap-detail-dialog {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1rem 1.15rem;
    width: min(36rem, calc(100vw - 1.25rem));
    max-height: calc(100vh - 1.5rem);
    overflow: auto;
}

.ip-rdap-detail-dialog__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 0.75rem;
}

.ip-rdap-detail-list {
    display: grid;
    grid-template-columns: minmax(7rem, 11rem) 1fr;
    gap: 0.35rem 0.75rem;
    margin: 0.75rem 0 0;
}

.ip-rdap-detail-list dt {
    margin: 0;
    color: var(--muted, #64748b);
    font-size: 0.875rem;
}

.ip-rdap-detail-list dd {
    margin: 0;
    word-break: break-word;
}

.rdap-settings-panel {
    margin-top: 1.5rem;
}

.admin-session-threat-feed-stack {
    display: grid;
    gap: 0.35rem;
    margin-top: 0.75rem;
}

.ip-suspicion-info-panel,
.ip-suspicion-threshold-list {
    margin: 0.75rem 0 1rem;
}

.ip-suspicion-threshold-list {
    padding-left: 1.25rem;
}

.ip-suspicion-score-badge {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    border: 1px solid var(--border);
    border-radius: 999px;
    padding: 0.15rem 0.55rem;
    font-size: 0.85rem;
    background: var(--surface-muted, #f8fafc);
    cursor: pointer;
    white-space: nowrap;
    writing-mode: horizontal-tb;
    max-width: none;
}

td.unified-log-score,
.unified-log-score {
    white-space: nowrap;
    word-break: keep-all;
}

.ip-suspicion-score-badge__level {
    font-size: 0.75rem;
    opacity: 0.85;
}

.ip-suspicion-score-badge--none,
.ip-suspicion-score-badge--low,
.ip-suspicion-score-badge--ok {
    background: #ecfdf5;
    border-color: #86efac;
    color: #166534;
}

.ip-suspicion-score-badge--medium,
.ip-suspicion-score-badge--suspect {
    background: #fffbeb;
    border-color: #fcd34d;
    color: #92400e;
}

.ip-suspicion-score-badge--high,
.ip-suspicion-score-badge--malicious {
    background: #fef2f2;
    border-color: #fca5a5;
    color: #991b1b;
}

.ip-suspicion-legitimacy-pill {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    margin: 0.35rem 0 0.75rem;
    padding: 0.4rem 0.85rem;
    border: 1px solid transparent;
    border-radius: 999px;
    font-size: 0.95rem;
    font-weight: 600;
    line-height: 1.3;
}

.ip-suspicion-legitimacy-pill::before {
    content: '';
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    background: currentColor;
    flex-shrink: 0;
}

.ip-suspicion-legitimacy-pill--ok {
    background: #ecfdf5;
    border-color: #86efac;
    color: #166534;
}

.ip-suspicion-legitimacy-pill--suspect {
    background: #fffbeb;
    border-color: #fcd34d;
    color: #92400e;
}

.ip-suspicion-legitimacy-pill--malicious {
    background: #fef2f2;
    border-color: #fca5a5;
    color: #991b1b;
}

/* Dark mode: keep badge/pill text readable (avoid pale bg + light text). */
html[data-theme="dark"] .ip-suspicion-score-badge--none,
html[data-theme="dark"] .ip-suspicion-score-badge--low,
html[data-theme="dark"] .ip-suspicion-score-badge--ok,
html[data-theme="dark"] .ip-suspicion-legitimacy-pill--ok {
    background: rgba(22, 163, 74, 0.22);
    border-color: #4ade80;
    color: #bbf7d0;
}

html[data-theme="dark"] .ip-suspicion-score-badge--medium,
html[data-theme="dark"] .ip-suspicion-score-badge--suspect,
html[data-theme="dark"] .ip-suspicion-legitimacy-pill--suspect {
    background: rgba(217, 119, 6, 0.28);
    border-color: #fbbf24;
    color: #fde68a;
}

html[data-theme="dark"] .ip-suspicion-score-badge--high,
html[data-theme="dark"] .ip-suspicion-score-badge--malicious,
html[data-theme="dark"] .ip-suspicion-legitimacy-pill--malicious {
    background: rgba(220, 38, 38, 0.28);
    border-color: #f87171;
    color: #fecaca;
}

html[data-theme="dark"] .ip-suspicion-score-badge--disabled {
    background: rgba(148, 163, 184, 0.18);
    border-color: #94a3b8;
    color: #e2e8f0;
}

.ip-suspicion-score-badge--disabled {
    background: #f3f4f6;
    border-color: #d1d5db;
    color: #6b7280;
    cursor: pointer;
}

.ip-suspicion-info-panel--disabled,
.ip-suspicion-settings.ip-suspicion-master-off {
    opacity: 0.72;
}

.ip-suspicion-disabled-notice {
    margin: 0.5rem 0;
}

.ip-blocked-import-export-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    margin: 0.75rem 0;
}

.ip-filter-import-field {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0;
}

.ip-suspicion-detail-dialog {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 0;
    max-width: min(72rem, calc(100vw - 1.5rem));
    width: 100%;
    max-height: calc(100vh - 1.5rem);
    max-height: calc(100dvh - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px) - 1.25rem);
    margin: max(0.75rem, env(safe-area-inset-top, 0px)) auto max(0.75rem, env(safe-area-inset-bottom, 0px));
    overflow: hidden;
    box-sizing: border-box;
}

.ip-suspicion-detail-dialog:not([open]) {
    display: none;
}

.ip-suspicion-detail-dialog[open] {
    display: flex;
    flex-direction: column;
}

.ip-suspicion-detail-dialog__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-shrink: 0;
    gap: 0.75rem;
    margin: 0;
    padding: 0.85rem 1.25rem 0.65rem;
    border-bottom: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    top: 0;
    z-index: 2;
}

.ip-suspicion-detail-dialog__header h2 {
    margin: 0;
    font-size: 1.15rem;
    line-height: 1.3;
}

.ip-suspicion-detail-dialog__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    justify-content: flex-end;
}

.ip-suspicion-detail-dialog__actions .btn-small {
    min-height: 2.5rem;
    padding: 0.45rem 0.75rem;
}

.ip-suspicion-detail-dialog__scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: 0.75rem 1.25rem 1rem;
}

.ip-suspicion-detail-dialog__footer {
    flex-shrink: 0;
    margin: 0;
    padding: 0.65rem 1.25rem max(0.85rem, env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    bottom: 0;
    z-index: 2;
}

.ip-suspicion-detail-dialog__footer .btn-secondary {
    min-height: 2.75rem;
    min-width: 5.5rem;
    padding: 0.55rem 1rem;
}

@media (max-width: 640px) {
    .ip-suspicion-detail-dialog__header,
    .sa-ip-score-dialog__header {
        align-items: flex-start;
    }

    .ip-suspicion-detail-dialog__header h2,
    .sa-ip-score-dialog__header h2 {
        flex: 1 1 auto;
        min-width: 0;
        padding-top: 0.35rem;
    }

    .ip-suspicion-detail-dialog__actions {
        flex: 1 1 100%;
        justify-content: flex-start;
    }

    .ip-suspicion-detail-dialog__x {
        margin-left: auto;
    }
}

.ip-suspicion-detail-list {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0;
}

.ip-suspicion-detail-list > .ip-suspicion-detail-list__item {
    margin: 0 0 0.55rem;
}

.ip-suspicion-detail-item__meta {
    margin: 0.35rem 0 0.5rem;
    padding-left: 1rem;
    list-style: disc;
    color: var(--muted, #5b6770);
    font-size: 0.92em;
}

.ip-suspicion-detail-item__meta li {
    margin: 0.15rem 0;
}

.ip-suspicion-detail-context {
    margin: 0.75rem 0 0;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border, #d7dde3);
    border-radius: 0.5rem;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.ip-suspicion-detail-context__section {
    margin: 0;
    padding: 0;
}

.ip-suspicion-detail-context__section + .ip-suspicion-detail-context__section {
    margin-top: 0.85rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--border, #d7dde3);
}

.ip-suspicion-detail-context__section-title {
    margin: 0 0 0.4rem;
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--muted, #5b6770);
}

.ip-suspicion-detail-context__row {
    display: grid;
    grid-template-columns: minmax(8rem, 34%) 1fr;
    gap: 0.35rem 0.75rem;
    margin: 0.35rem 0;
}

.ip-suspicion-detail-context__row dt {
    margin: 0;
    color: var(--muted, #5b6770);
    font-weight: 600;
}

.ip-suspicion-detail-context__row dd {
    margin: 0;
    word-break: break-word;
}

html[data-theme="dark"] .ip-suspicion-detail-context__section + .ip-suspicion-detail-context__section {
    border-top-color: rgba(148, 163, 184, 0.28);
}

html[data-theme="dark"] .ip-suspicion-detail-context__section-title {
    color: #94a3b8;
}

.ip-suspicion-detail-timeline {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0 0 0 0.35rem;
    border-left: 2px solid var(--border, #c9d2da);
}

.ip-suspicion-detail-timeline__item {
    position: relative;
    display: grid;
    grid-template-columns: 0.9rem 1fr;
    gap: 0.55rem;
    margin: 0 0 0.85rem;
    padding-left: 0.35rem;
}

.ip-suspicion-detail-timeline__marker {
    width: 0.65rem;
    height: 0.65rem;
    margin-top: 0.3rem;
    margin-left: -0.72rem;
    border-radius: 50%;
    background: #64748b;
    box-shadow: 0 0 0 3px rgba(100, 116, 139, 0.15);
}

.ip-suspicion-detail-timeline__item--info .ip-suspicion-detail-timeline__marker,
.ip-suspicion-detail-list__item--info .ip-local-intel__finding-dot {
    background: #16a34a;
    box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.15);
}

.ip-suspicion-detail-timeline__item--warn .ip-suspicion-detail-timeline__marker,
.ip-suspicion-detail-list__item--warn .ip-local-intel__finding-dot {
    background: #d97706;
    box-shadow: 0 0 0 3px rgba(217, 119, 6, 0.15);
}

.ip-suspicion-detail-timeline__item--danger .ip-suspicion-detail-timeline__marker,
.ip-suspicion-detail-list__item--danger .ip-local-intel__finding-dot {
    background: #dc2626;
    box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);
}

.ip-suspicion-detail-list__item {
    display: grid;
    grid-template-columns: 0.7rem 1fr;
    gap: 0.45rem;
    align-items: start;
}

.ip-suspicion-detail-list__item .ip-local-intel__finding-dot {
    margin-top: 0.4rem;
}

.ip-suspicion-detail-timeline__when {
    color: var(--muted, #5b6770);
    font-size: 0.9em;
}

.ip-suspicion-detail-timeline__title {
    margin-top: 0.1rem;
}

.active-sessions-score .btn-ip-suspicion-reset,
.ip-overview-actions .btn-ip-suspicion-reset {
    margin-left: 0.35rem;
    vertical-align: middle;
}

.ip-suspicion-detail-narrative,
.ip-suspicion-detail-routes,
.ip-suspicion-detail-recent {
    margin: 0.35rem 0 0.85rem;
    padding-left: 1.15rem;
}

@media (min-width: 960px) {
    .ip-suspicion-detail-dialog__body {
        display: grid;
        grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
        gap: 0.35rem 1.75rem;
        align-items: start;
    }

    .ip-suspicion-detail-dialog__body > .ip-suspicion-detail-span-full {
        grid-column: 1 / -1;
    }
}

.ip-suspicion-detail-narrative li,
.ip-suspicion-detail-routes li,
.ip-suspicion-detail-recent li {
    margin: 0.25rem 0;
}

.ip-suspicion-detail-routes code,
.ip-suspicion-detail-recent code {
    font-size: 1em;
}

/* Synthesis / lead text: same size as surrounding body (not tiny field-hint). */
.ip-suspicion-detail-lead,
.ip-suspicion-detail-dialog .ip-local-intel__summary,
#user-suspicion-detail-intro,
#user-suspicion-detail-period-stats,
#ip-suspicion-detail-intro,
#ip-suspicion-detail-period-stats {
    font-size: 1rem;
    line-height: 1.45;
    color: var(--text, #1f2937);
}

.ip-suspicion-detail-dialog .ip-suspicion-detail-context__row dd,
.ip-suspicion-detail-dialog .ip-suspicion-detail-routes li,
.ip-suspicion-detail-dialog .ip-suspicion-detail-recent li,
.ip-suspicion-detail-dialog .user-suspicion-activity__body {
    font-size: 1rem;
}

.ip-suspicion-detail-dialog code {
    font-size: 1em;
    font-family: ui-monospace, "Cascadia Mono", "Segoe UI Mono", Consolas, monospace;
}

.user-suspicion-detail-activities {
    list-style: none;
    padding-left: 0;
}

.user-suspicion-activity {
    display: grid;
    grid-template-columns: 0.7rem 1fr;
    gap: 0.55rem;
    align-items: start;
    margin: 0.4rem 0;
}

.user-suspicion-activity__body {
    min-width: 0;
    word-break: break-word;
}

.user-suspicion-activity--info .ip-local-intel__finding-dot {
    background: #16a34a;
}

.user-suspicion-activity--warn .ip-local-intel__finding-dot {
    background: #d97706;
}

.user-suspicion-activity--danger .ip-local-intel__finding-dot {
    background: #dc2626;
}

.ip-suspicion-detail-recommendation {
    margin: 0.65rem 0 0;
    padding: 0.65rem 0.85rem;
    border-left: 3px solid var(--accent, #2f6f5e);
    background: rgba(47, 111, 94, 0.08);
    color: var(--text, #1f2933);
    font-size: 0.95em;
}

.ip-suspicion-detail-recommendation--ok {
    border-left-color: #16a34a;
    background: rgba(22, 163, 74, 0.08);
}

.ip-suspicion-detail-recommendation--suspect {
    border-left-color: #d97706;
    background: rgba(217, 119, 6, 0.1);
}

.ip-suspicion-detail-recommendation--malicious {
    border-left-color: #dc2626;
    background: rgba(220, 38, 38, 0.08);
}

.ip-suspicion-detail-period {
    display: flex;
    flex-wrap: wrap;
    gap: 0.65rem 1rem;
    align-items: flex-end;
    margin: 0.35rem 0 0.85rem;
    padding: 0.65rem 0.85rem;
    border: 1px solid var(--border, #d7dde3);
    border-radius: 0.65rem;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.ip-suspicion-detail-period label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.9rem;
    margin: 0;
}

.ip-suspicion-detail-period__select,
.ip-suspicion-detail-period input[type="text"] {
    min-width: 10rem;
}

.ip-suspicion-detail-period__custom.is-disabled {
    opacity: 0.55;
}

.ip-suspicion-detail-all-access-wrap {
    margin: 0.65rem 0 0.35rem;
}

.ip-access-all-dialog {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 0;
    max-width: min(56rem, calc(100vw - 1.5rem));
    width: 100%;
    max-height: calc(100vh - 1.5rem);
    max-height: calc(100dvh - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px) - 1.25rem);
    margin: max(0.75rem, env(safe-area-inset-top, 0px)) auto max(0.75rem, env(safe-area-inset-bottom, 0px));
    overflow: hidden;
    box-sizing: border-box;
}

.ip-access-all-dialog:not([open]) {
    display: none;
}

.ip-access-all-dialog[open] {
    display: flex;
    flex-direction: column;
}

.ip-access-all-dialog__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-shrink: 0;
    gap: 0.75rem;
    margin: 0;
    padding: 0.85rem 1.15rem 0.65rem;
    border-bottom: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    top: 0;
    z-index: 2;
}

.ip-access-all-dialog__header h2 {
    margin: 0;
    font-size: 1.1rem;
    line-height: 1.3;
}

.ip-access-all-dialog__scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: 0.75rem 1.15rem 1rem;
}

.ip-access-all-dialog__footer {
    flex-shrink: 0;
    margin: 0;
    padding: 0.65rem 1.15rem max(0.85rem, env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--border, #d7dde3);
    background: var(--card, #fff);
    position: sticky;
    bottom: 0;
    z-index: 2;
}

.ip-access-all-dialog__footer .btn-secondary {
    min-height: 2.75rem;
    min-width: 5.5rem;
    padding: 0.55rem 1rem;
}

.ip-access-all-list {
    margin: 0.35rem 0 0;
    padding: 0;
    list-style: none;
}

.ip-access-all-list__item {
    margin: 0;
    padding: 0.55rem 0;
    border-bottom: 1px solid var(--border, #d7dde3);
    font-size: 0.95rem;
    line-height: 1.4;
    word-break: break-word;
}

.ip-access-all-list__item:last-child {
    border-bottom: none;
}

.user-access-all-ip-filter {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.65rem 0.85rem;
    margin: 0.35rem 0 0.75rem;
}

.user-access-all-ip-filter label {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.9rem;
    min-width: min(12rem, 100%);
}

.user-access-all-ip-filter input,
.user-access-all-ip-filter select {
    min-width: 10rem;
}

.user-access-ip-input {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.user-access-all-table {
    width: 100%;
    font-size: 0.92rem;
}

.user-access-all-table th,
.user-access-all-table td {
    vertical-align: top;
    padding: 0.4rem 0.5rem;
}

@media (max-width: 640px) {
    .ip-access-all-dialog__header {
        align-items: flex-start;
    }

    .ip-access-all-dialog__header h2 {
        flex: 1 1 auto;
        min-width: 0;
        padding-top: 0.35rem;
    }

    .user-access-all-ip-filter {
        flex-direction: column;
        align-items: stretch;
    }

    .user-access-all-ip-filter input,
    .user-access-all-ip-filter select {
        min-width: 0;
        width: 100%;
    }
}

.ip-suspicion-detail-summary,
.ip-suspicion-detail-full {
    margin: 0.5rem 0 1rem;
}

.ip-suspicion-detail-summary {
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--border, #d7dde3);
}

.ip-local-intel {
    margin: 0.75rem 0 1rem;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border, #d7dde3);
    border-radius: 0.65rem;
    background: var(--surface-muted, rgba(0, 0, 0, 0.03));
}

.ip-local-intel--summary {
    margin-top: 0.5rem;
}

.ip-suspicion-detail-rdap {
    margin-top: 0.75rem;
    padding-top: 0.65rem;
    border-top: 1px solid var(--border, #d7dde3);
}

.ip-suspicion-detail-abuseipdb {
    margin-top: 0.85rem;
}

.ip-suspicion-detail-rdap__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.35rem;
}

.ip-suspicion-detail-rdap__head .settings-subheading {
    margin: 0;
}

.sa-ip-score-rdap {
    margin-top: 1rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--border, #d7dde3);
}

.sa-ip-score-rdap__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.35rem;
}

.ip-local-intel--ok {
    border-color: #86efac;
    background: rgba(22, 163, 74, 0.06);
}

.ip-local-intel--suspect {
    border-color: #fcd34d;
    background: rgba(217, 119, 6, 0.08);
}

.ip-local-intel--malicious {
    border-color: #fca5a5;
    background: rgba(220, 38, 38, 0.06);
}

.ip-local-intel__summary {
    margin: 0.25rem 0 0.35rem;
    font-weight: 600;
}

.ip-local-intel__meta {
    margin: 0 0 0.65rem;
}

.ip-local-intel__findings,
.ip-local-intel__actions {
    margin: 0.35rem 0 0.65rem;
    padding: 0;
    list-style: none;
}

.ip-local-intel__finding {
    display: grid;
    grid-template-columns: 0.7rem 1fr;
    gap: 0.55rem;
    align-items: start;
    margin: 0.35rem 0;
}

.ip-local-intel__finding-body {
    min-width: 0;
}

.ip-local-intel__finding-details {
    margin: 0.25rem 0 0;
    padding-left: 1rem;
    list-style: disc;
    color: var(--muted, #5b6770);
    font-size: 0.92em;
}

.ip-local-intel__finding-details li {
    margin: 0.15rem 0;
}

.ip-local-intel__finding-details code,
.user-suspicion-detail-uas code,
.user-suspicion-detail-ua {
    display: inline-block;
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.user-suspicion-detail-ua-meta {
    color: var(--muted, #5b6770);
    font-size: 0.92em;
    list-style: circle;
    margin-left: 0.35rem;
}

.ip-local-intel__finding-dot {
    width: 0.55rem;
    height: 0.55rem;
    margin-top: 0.35rem;
    border-radius: 50%;
    background: #64748b;
}

.ip-local-intel__finding--info .ip-local-intel__finding-dot {
    background: #16a34a;
}

.ip-local-intel__finding--warn .ip-local-intel__finding-dot {
    background: #d97706;
}

.ip-local-intel__finding--danger .ip-local-intel__finding-dot {
    background: #dc2626;
}

.ip-local-intel__actions li {
    margin: 0.25rem 0;
    padding-left: 0;
    position: relative;
}

.ip-suspicion-detail-history {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
    color: var(--muted, #5b6770);
    font-size: 0.92em;
}

.ip-suspicion-detail-history li {
    margin: 0.25rem 0;
}

.ip-blocked-list-row--highlight {
    outline: 2px solid var(--accent, #2f6f5e);
    outline-offset: -2px;
    background: rgba(47, 111, 94, 0.08);
}

/* —— Setup wizard (admin-setup-wizard.php) —— */
body.wizard-page {
    margin: 0;
    min-height: 100vh;
    background:
        radial-gradient(1200px 500px at 10% -10%, rgba(47, 111, 94, 0.12), transparent 60%),
        linear-gradient(180deg, #f4f7f5 0%, #eef2f0 100%);
    color: var(--text, #1f2933);
}

.wizard-topbar {
    display: flex;
    justify-content: space-between;
    gap: 1.5rem;
    align-items: flex-start;
    padding: 1.5rem clamp(1rem, 3vw, 2.5rem) 0.75rem;
}

.wizard-topbar h1 {
    margin: 0 0 0.35rem;
    font-size: clamp(1.45rem, 2.4vw, 1.9rem);
}

.wizard-topbar p {
    margin: 0;
    max-width: 42rem;
    color: var(--muted, #52606d);
}

.wizard-topbar-links {
    display: flex;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.wizard-container {
    max-width: 920px;
    margin: 0 auto;
    padding: 0.5rem clamp(1rem, 3vw, 2.5rem) 3rem;
}

.wizard-maintenance-banner,
.wizard-resume-banner {
    margin: 0 0 1rem;
    padding: 0.85rem 1rem;
    border-radius: 10px;
    border: 1px solid rgba(180, 120, 40, 0.35);
    background: rgba(250, 220, 150, 0.28);
}

.wizard-progress-header {
    margin-bottom: 1rem;
}

.wizard-progress-label {
    margin: 0 0 0.5rem;
    font-weight: 600;
}

.wizard-progress {
    height: 0.55rem;
    border-radius: 999px;
    background: rgba(15, 40, 35, 0.08);
    overflow: hidden;
}

.wizard-progress-bar {
    height: 100%;
    width: 12.5%;
    border-radius: inherit;
    background: linear-gradient(90deg, #2f6f5e, #3f8f78);
    transition: width 0.25s ease;
}

.wizard-page .wizard-step.panel {
    display: block;
    margin: 0 0 1rem;
    padding: 1.25rem 1.35rem;
    border-radius: 14px;
    border: 1px solid var(--border, #d9e2ec);
    background: #fff;
    box-shadow: 0 10px 28px rgba(20, 40, 35, 0.05);
}

.wizard-page .wizard-step[hidden] {
    display: none !important;
}

.wizard-welcome-list {
    margin: 0.75rem 0 1rem;
    padding-left: 1.2rem;
}

.wizard-step-warning {
    padding: 0.75rem 0.9rem;
    border-radius: 8px;
    background: rgba(180, 60, 40, 0.08);
    border: 1px solid rgba(180, 60, 40, 0.25);
}

.wizard-step-ok {
    padding: 0.75rem 0.9rem;
    border-radius: 8px;
    background: rgba(47, 111, 94, 0.08);
    border: 1px solid rgba(47, 111, 94, 0.25);
}

.wizard-nav {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    flex-wrap: wrap;
    margin-top: 1.25rem;
}

.wizard-restore-alt {
    margin-top: 1rem;
}

html[data-theme="dark"] body.wizard-page {
    background:
        radial-gradient(1000px 420px at 12% -8%, rgba(95, 158, 140, 0.16), transparent 55%),
        linear-gradient(180deg, #1b2421 0%, #151b19 100%);
}

html[data-theme="dark"] .wizard-page .wizard-step.panel {
    background: #1f2a27;
    border-color: #33413d;
}

/* Page e-mail « Autoriser ou ignorer » : cartes empilées, boutons toujours visibles
   (le tableau min-width: 48rem les poussait hors écran sur mobile). */
.security-alert-outbound-manage-list {
    list-style: none;
    margin: 1rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
}

.security-alert-outbound-manage-card {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    padding: 0.9rem 1rem;
    border: 1px solid var(--border, #d7dde3);
    border-radius: 0.65rem;
    background: var(--card, #fff);
}

.security-alert-outbound-manage-card__meta {
    min-width: 0;
}

.security-alert-outbound-manage-card__meta p {
    margin: 0 0 0.2rem;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.security-alert-outbound-manage-card__section {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--muted, #5c6770);
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.security-alert-outbound-manage-card__host {
    font-size: 1.05rem;
    font-weight: 600;
}

.security-alert-outbound-manage-card__purpose,
.security-alert-outbound-manage-card__ip,
.security-alert-outbound-manage-card__status {
    font-size: 0.9rem;
    color: var(--muted, #5c6770);
}

.security-alert-outbound-manage-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.security-alert-outbound-manage-card__actions form {
    margin: 0;
    flex: 1 1 10rem;
}

.security-alert-outbound-manage-card__actions button {
    width: 100%;
    min-height: 2.75rem;
    padding: 0.55rem 0.85rem;
    white-space: normal;
}

html[data-theme="dark"] .security-alert-outbound-manage-card {
    background: var(--card, #1f2a27);
    border-color: var(--border, #33413d);
}
