/*
 * Portail VIVALDI v0.23.3 — couverture complète des thèmes privés.
 *
 * Cette feuille remplace, uniquement dans le portail connecté, les anciennes
 * couleurs fixes par les variables du thème. Le site public reste indépendant.
 */

body.portal-body {
    --portal-on-primary: var(--theme-on-primary, #ffffff);
    --portal-on-secondary: var(--theme-on-secondary, #ffffff);
}

body.portal-body .portal-sidebar {
    background: color-mix(in srgb, var(--surface) 98%, transparent);
}

body.portal-body .sidebar-user:hover {
    border-color: var(--violet-100);
}

body.portal-body .avatar {
    border: 1px solid var(--violet-100);
    background: linear-gradient(145deg, var(--violet-100), var(--violet-100));
}

body.portal-body .sidebar-nav__item.is-active {
    background: linear-gradient(90deg, var(--violet-100), var(--violet-50));
}

body.portal-body .sidebar-nav__item small {
    background: var(--surface-soft);
}

body.portal-body .sidebar-message {
    border: 1px solid var(--violet-100);
}

body.portal-body .sidebar-message::after {
    background: linear-gradient(145deg, rgba(15, 89, 169, 0.12), color-mix(in srgb, var(--violet-600) 14%, transparent));
}

body.portal-body .sidebar-message span {
    color: var(--red-700);
}

body.portal-body .portal-header {
    background: color-mix(in srgb, var(--surface) 92%, transparent);
    box-shadow: 0 4px 24px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .page-icon {
    box-shadow: 0 8px 20px color-mix(in srgb, var(--violet-700) 25%, transparent);
}

body.portal-body .icon-button:hover,
body.portal-body .header-help:hover,
body.portal-body .account-button:hover {
    border-color: var(--violet-100);
}

body.portal-body button,
body.portal-body .button {
    box-shadow: 0 7px 16px color-mix(in srgb, var(--violet-700) 16%, transparent);
}

body.portal-body button:hover,
body.portal-body .button:hover {
    box-shadow: 0 10px 22px color-mix(in srgb, var(--violet-700) 22%, transparent);
}

body.portal-body .button--secondary {
    border-color: var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .button--secondary:hover {
    background: var(--violet-100);
}

body.portal-body .button--danger:hover,
body.portal-body .button--danger:focus {
    background: var(--red-700);
}

body.portal-body input:hover,
body.portal-body select:hover,
body.portal-body textarea:hover {
    border-color: var(--line-strong);
}

body.portal-body input:focus,
body.portal-body select:focus,
body.portal-body textarea:focus {
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--violet-600) 9%, transparent);
}

body.portal-body fieldset {
    background: var(--surface-soft);
}

body.portal-body .notice {
    color: var(--ink-700);
    background: var(--violet-50);
}

body.portal-body .success {
    border-color: var(--green-100);
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .warning {
    border-color: var(--orange-100);
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .error {
    border-color: var(--red-100);
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body th {
    background: var(--surface-soft);
}

body.portal-body tbody tr:hover td {
    background: var(--surface-soft);
}

body.portal-body .status-badge,
body.portal-body .account-status,
body.portal-body .document-status {
    background: var(--surface-soft);
}

body.portal-body .status-badge--pending,
body.portal-body .account-status--invitation_to_send,
body.portal-body .account-status--invitation_sent,
body.portal-body .document-status--pending_validation {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .status-badge--validated,
body.portal-body .account-status--active,
body.portal-body .document-status--validated {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .status-badge--refused,
body.portal-body .account-status--disabled {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .status-badge--ended,
body.portal-body .document-status--archived {
    color: var(--ink-600);
    background: var(--surface-soft);
}

body.portal-body .account-status--suspended,
body.portal-body .account-status--security_locked,
body.portal-body .account-status--renewal_only {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .document-status--draft {
    color: var(--blue-700);
    background: var(--blue-100);
}

body.portal-body .document-card,
body.portal-body .directory-card {
    box-shadow: 0 5px 16px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .document-card:hover,
body.portal-body .directory-card:hover {
    border-color: var(--violet-100);
}

body.portal-body .action-panel--danger {
    border-color: var(--red-100);
    background: var(--red-100);
}

body.portal-body .quick-action {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .module-card {
    border: 1px dashed var(--line);
    background: var(--surface-soft);
}

body.portal-body .dashboard-footer-alert {
    border: 1px solid var(--blue-100);
    color: var(--blue-700);
    background: var(--blue-100);
}

body.portal-body .dashboard-footer-alert--warning {
    border-color: var(--orange-100);
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .auth-body,
body.portal-body .public-body {
    background: radial-gradient(circle at 10% 10%, color-mix(in srgb, var(--violet-600) 12%, transparent), transparent 32%),
        radial-gradient(circle at 90% 85%, rgba(7, 87, 165, 0.11), transparent 30%),
        var(--surface-soft);
}

body.portal-body .auth-visual {
    background: linear-gradient(145deg, rgba(8, 63, 115, 0.98), rgba(7, 95, 168, 0.94)),
        var(--violet-900);
}

body.portal-body .auth-visual::before,
body.portal-body .auth-visual::after {
    background: color-mix(in srgb, var(--surface) 7%, transparent);
}

body.portal-body .auth-visual__logo {
    background: color-mix(in srgb, var(--surface) 96%, transparent);
}

body.portal-body .auth-benefit span {
    background: color-mix(in srgb, var(--surface) 13%, transparent);
}

body.portal-body .auth-card {
    background: color-mix(in srgb, var(--surface) 96%, transparent);
}

body.portal-body .public-header {
    background: color-mix(in srgb, var(--surface) 94%, transparent);
}

body.portal-body .public-hero__icon {
    background: color-mix(in srgb, var(--surface) 12%, transparent);
}

@media (max-width: 760px) {
        body.portal-body .mobile-nav {
        background: color-mix(in srgb, var(--surface) 96%, transparent);
    }

        body.portal-body .mobile-nav__item--primary {
        box-shadow: 0 9px 23px color-mix(in srgb, var(--violet-700) 30%, transparent);
    }

}

body.portal-body .account-menu__logout button:hover {
    background: var(--red-100);
}

body.portal-body .page-icon--green {
    background: linear-gradient(145deg, var(--green-700), var(--green-700));
}

body.portal-body .page-icon--blue {
    background: linear-gradient(145deg, var(--blue-700), var(--blue-700));
}

body.portal-body .page-icon--orange {
    background: linear-gradient(145deg, var(--orange-700), var(--orange-700));
}

body.portal-body .page-icon--slate {
    background: linear-gradient(145deg, var(--ink-600), var(--ink-700));
}

body.portal-body .portal-page-card .detail-section {
    box-shadow: 0 4px 16px color-mix(in srgb, var(--ink-950) 2%, transparent);
}

body.portal-body .portal-page-card .filter-panel,
body.portal-body .portal-page-card .filters {
    border-color: var(--line);
    background: linear-gradient(180deg, var(--surface-soft), var(--surface-soft));
}

body.portal-body .portal-page-card .table-wrapper {
    box-shadow: 0 5px 18px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .filter-toggle {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .filter-toggle:hover {
    background: var(--violet-100);
}

@media (max-width: 760px) {
        body.portal-body .responsive-table tr {
        box-shadow: 0 5px 16px color-mix(in srgb, var(--ink-950) 4%, transparent);
    }

}

body.portal-body .page-icon--teal {
    background: linear-gradient(145deg, var(--green-700), var(--green-700));
}

body.portal-body .page-icon--rose {
    background: linear-gradient(145deg, var(--violet-600), var(--violet-800));
}

body.portal-body .personal-summary__item {
    background: linear-gradient(180deg, var(--surface), var(--surface-soft));
}

body.portal-body .personal-document-title__icon {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .personal-warning {
    border-color: var(--orange-100);
    background: var(--orange-100);
}

body.portal-body .family-card,
body.portal-body .member-card,
body.portal-body .request-card,
body.portal-body .conflict-card {
    box-shadow: 0 7px 24px color-mix(in srgb, var(--ink-950) 6%, transparent);
}

body.portal-body .family-card__icon {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .conflict-card {
    border-color: var(--red-100);
}

body.portal-body .badge--warning {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .page-icon--rose {
    background: linear-gradient(145deg, var(--red-700), var(--red-700));
}

body.portal-body .page-icon--teal {
    background: linear-gradient(145deg, var(--green-700), var(--green-700));
}

body.portal-body .page-icon--gold {
    background: linear-gradient(145deg, var(--orange-700), var(--orange-700));
}

body.portal-body .workspace-switcher__button,
body.portal-body .workspace-switcher--single {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .workspace-switcher__button:hover {
    background: var(--violet-50);
}

body.portal-body .workspace-switcher__option button:hover:not(:disabled) {
    background: var(--violet-50);
}

body.portal-body .workspace-switcher__option button:disabled {
    background: var(--violet-100);
}

body.portal-body .workspace-switcher__option button > span:first-child {
    background: var(--violet-100);
}

body.portal-body .header-workspace {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .workspace-toast {
    border: 1px solid var(--green-100);
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .workspace-card {
    box-shadow: 0 8px 25px color-mix(in srgb, var(--ink-950) 6%, transparent);
}

body.portal-body .workspace-card.is-active {
    border-color: var(--violet-500);
    background: linear-gradient(180deg, var(--violet-50), var(--violet-100));
}

body.portal-body .dashboard-workspace-banner {
    border: 1px solid var(--violet-100);
    background: linear-gradient(90deg, var(--violet-50), var(--surface));
}

body.portal-body .finance-metric {
    box-shadow: 0 7px 22px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .badge--finance-unpriced,
body.portal-body .badge--finance-unpaid {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--finance-partial,
body.portal-body .badge--payment-pending {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--finance-paid,
body.portal-body .badge--finance-exempt,
body.portal-body .badge--payment-confirmed {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .badge--payment-cancelled {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .document-status-inline span.is-ready {
    color: var(--green-700);
}

body.portal-body .workspace-required-notice {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .finance-metrics > article,
body.portal-body .finance-record-grid > article {
    background: linear-gradient(180deg, var(--surface), var(--violet-50));
    box-shadow: 0 6px 18px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .role-separation-notice {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .role-separation-notice > span {
    background: var(--violet-100);
}

body.portal-body .document-status-inline span.is-ready {
    color: var(--green-700);
}

body.portal-body .accounting-threshold-warning {
    border-left: 4px solid var(--orange-700);
}

body.portal-body .accounting-account-grid article {
    background: linear-gradient(180deg, var(--surface), var(--surface-soft));
}

body.portal-body .accounting-account-grid article b {
    color: var(--green-700);
}

body.portal-body .accounting-alert-list li strong {
    background: var(--violet-100);
}

body.portal-body .accounting-balance-list li b {
    color: var(--green-700);
}

body.portal-body .allocation-row {
    background: var(--surface-soft);
}

body.portal-body .badge--accounting-draft {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--accounting-posted {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .badge--accounting-cancelled {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .amount-positive {
    color: var(--green-700);
}

body.portal-body .amount-negative {
    color: var(--red-700);
}

body.portal-body .event-card,
body.portal-body .public-event-card {
    box-shadow: 0 8px 24px color-mix(in srgb, var(--ink-950) 6%, transparent);
}

body.portal-body .event-card__date {
    color: var(--violet-800);
    background: var(--violet-50);
}

body.portal-body .registration-card {
    box-shadow: 0 6px 18px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .registration-card__actions {
    background: var(--surface-soft);
}

body.portal-body .participant-chip-list span {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .badge--event-project,
body.portal-body .badge--event-draft {
    color: var(--violet-800);
    background: var(--violet-50);
}

body.portal-body .badge--event-validated,
body.portal-body .badge--event-preparation {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .badge--event-ongoing {
    color: var(--blue-700);
    background: var(--blue-100);
}

body.portal-body .badge--event-completed,
body.portal-body .badge--event-archived {
    color: var(--ink-700);
    background: var(--surface-soft);
}

body.portal-body .badge--event-refused,
body.portal-body .badge--event-cancelled {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .badge--event-postponed {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--registration-submitted,
body.portal-body .badge--volunteer-offered {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--registration-waitlisted {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .badge--registration-approved,
body.portal-body .badge--registration-confirmed,
body.portal-body .badge--volunteer-accepted {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .badge--registration-rejected,
body.portal-body .badge--registration-cancelled,
body.portal-body .badge--registration-expired,
body.portal-body .badge--volunteer-declined,
body.portal-body .badge--volunteer-withdrawn {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .badge--registration-cancellation_requested {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .public-body {
    background: var(--surface-soft);
}

body.portal-body .public-hero {
    background: linear-gradient(135deg, var(--violet-800), var(--violet-700) 58%, var(--violet-500));
}

body.portal-body .public-event-card__date {
    color: var(--violet-800);
    background: var(--violet-50);
}

body.portal-body .public-event-detail,
body.portal-body .public-form-card {
    box-shadow: 0 12px 34px color-mix(in srgb, var(--ink-950) 7%, transparent);
}

body.portal-body .public-event-detail__date {
    color: var(--violet-800);
    background: var(--violet-50);
}

body.portal-body .communication-stat,
body.portal-body .log-stat {
    box-shadow: 0 6px 18px color-mix(in srgb, var(--ink-950) 4%, transparent);
}

body.portal-body .log-stat--warning {
    border-color: var(--orange-100);
    background: var(--orange-100);
}

body.portal-body .log-stat--error {
    border-color: var(--red-100);
    background: var(--red-100);
}

body.portal-body .log-level--info {
    color: var(--blue-700);
    background: var(--blue-100);
}

body.portal-body .log-level--warning {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .log-level--error {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .log-status--new {
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body .log-status--acknowledged {
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .log-status--resolved {
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .log-details {
    background: var(--surface-soft);
}

body.portal-body .log-details pre {
    color: var(--blue-100);
    background: var(--ink-900);
}

body.portal-body .communication-item {
    background: var(--surface);
}

body.portal-body .gallery-admin-card {
    background: var(--surface);
}

body.portal-body .gallery-admin-card img {
    background: var(--surface-soft);
}

body.portal-body .contact-thread__item {
    background: var(--surface);
}

body.portal-body .contact-thread__item--internal {
    border-color: var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .contact-thread__item--reply {
    border-color: var(--green-100);
    background: var(--green-100);
}

body.portal-body .profile-admin-sidebar {
    background: var(--surface-soft);
}

body.portal-body .profile-list__item:hover,
body.portal-body .profile-list__item.is-active {
    background: var(--surface);
}

body.portal-body .permission-module {
    background: var(--surface);
}

body.portal-body .permission-module__header {
    background: var(--surface-soft);
}

body.portal-body .permission-card {
    background: var(--surface);
}

body.portal-body .permission-card:hover {
    border-color: var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .permission-card--sensitive {
    border-left: 4px solid var(--orange-700);
}

body.portal-body .permission-card code {
    color: var(--violet-800);
}

body.portal-body .permission-card em {
    color: var(--orange-700);
}

body.portal-body .actions--sticky {
    background: color-mix(in srgb, var(--surface) 96%, transparent);
}

body.portal-body .profile-access-preview {
    border: 1px solid var(--border-color, var(--line));
}

body.portal-body .profile-access-preview__item {
    background: var(--surface);
    border: 1px solid var(--border-color, var(--line));
}

body.portal-body .help-profile-note {
    border: 1px solid var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .help-section__icon {
    background: var(--violet-100);
}

body.portal-body .help-links a:hover,
body.portal-body .help-links a:focus-visible {
    border-color: var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .help-tip {
    border: 1px solid var(--blue-100);
    background: var(--surface-soft);
}

body.portal-body .sidebar-nav__count {
    background: var(--color-danger, var(--red-700));
}

body.portal-body .sidebar-nav__item.is-active .sidebar-nav__count {
    background: var(--surface);
    color: var(--color-primary, var(--violet-700));
}

body.portal-body .work-queue-stat {
    border: 1px solid var(--border-color, var(--line));
    background: var(--surface-soft, var(--surface-soft));
}

body.portal-body .work-queue-stat span {
    color: var(--text-muted, var(--ink-600));
}

body.portal-body .work-queue-stat--urgent {
    border-color: var(--red-100);
    background: var(--red-100);
}

body.portal-body .work-queue-stat--high {
    border-color: var(--orange-100);
    background: var(--orange-100);
}

body.portal-body .work-queue-result-heading span,
body.portal-body .work-queue-table td small {
    color: var(--text-muted, var(--ink-600));
}

body.portal-body .work-queue-priority {
    background: var(--surface-soft);
}

body.portal-body .work-queue-priority--urgent {
    background: var(--red-100);
    color: var(--red-700);
}

body.portal-body .work-queue-priority--high {
    background: var(--orange-100);
    color: var(--orange-700);
}

body.portal-body .work-queue-priority--normal {
    background: var(--blue-100);
    color: var(--blue-700);
}

body.portal-body .work-queue-priority--low {
    background: var(--green-100);
    color: var(--green-700);
}

body.portal-body .work-queue-overdue {
    color: var(--red-700) !important;
}

body.portal-body .notice--soft {
    background: var(--surface-soft);
}

body.portal-body .header-search__form input {
    background: var(--surface);
}

body.portal-body .header-search__popover {
    background: var(--surface);
}

body.portal-body .global-search-suggestion {
    border-bottom: 1px solid var(--line);
}

body.portal-body .global-search-suggestion:hover,
body.portal-body .global-search-suggestion:focus,
body.portal-body .global-search-suggestion.is-active {
    background: var(--violet-50);
}

body.portal-body .global-search-suggestion__icon {
    background: var(--violet-100);
}

body.portal-body .global-search-popover__all {
    background: var(--violet-50);
}

body.portal-body .global-search-popover__all:hover {
    background: var(--violet-50);
}

body.portal-body .global-search-domains a span {
    background: var(--surface-soft);
}

body.portal-body .global-search-domains a:hover,
body.portal-body .global-search-domains a.is-active {
    background: var(--violet-50);
}

body.portal-body .global-search-result {
    background: var(--surface);
}

body.portal-body .global-search-result--disabled {
    background: var(--surface-soft);
}

body.portal-body .global-search-result__icon {
    background: var(--violet-100);
}

@media (max-width: 760px) {
        body.portal-body .header-search__toggle {
        background: var(--surface);
    }

        body.portal-body .header-search__form {
        background: var(--surface);
    }

}

body.portal-body .confirmation-code {
    background: var(--surface-muted, var(--surface-soft));
}

body.portal-body .error-text {
    color: var(--danger, var(--red-700));
}

body.portal-body .mfa-qr {
    border: 1px solid var(--border, var(--line));
    background: var(--surface);
}

body.portal-body .mfa-secret {
    background: var(--violet-50);
    color: var(--violet-900);
}

body.portal-body .recovery-code-grid code {
    border: 1px dashed var(--violet-500);
    background: var(--surface);
}

body.portal-body .danger-zone {
    border: 1px solid var(--red-100);
    background: var(--red-100);
}

body.portal-body .header-notifications__count {
    background: var(--red-700);
}

body.portal-body .notification-card--high .notification-card__marker {
    background: var(--orange-700);
}

body.portal-body .notification-card--critical .notification-card__marker {
    background: var(--red-700);
}

body.portal-body .notification-priority--high {
    background: var(--orange-100);
    color: var(--orange-700);
}

body.portal-body .notification-priority--critical {
    color: var(--red-700);
}

body.portal-body.portal-sidebar--dark .sidebar-nav__item:hover,
body.portal-body.portal-sidebar--dark .sidebar-nav__section:hover {
    background: color-mix(in srgb, var(--surface) 8%, transparent);
}

body.portal-body.portal-sidebar--dark .sidebar-nav__item.is-active {
    background: color-mix(in srgb, var(--surface) 13%, transparent);
}

body.portal-body.portal-sidebar--dark .sidebar-message {
    background: color-mix(in srgb, var(--surface) 7%, transparent);
}

body.portal-body .portal-sidebar {
    border-right-color: var(--line);
    background: var(--portal-sidebar-bg, var(--surface));
}

body.portal-body .portal-header {
    border-bottom-color: var(--line);
    background: var(--portal-header-bg, var(--surface));
    box-shadow: 0 4px 24px color-mix(in srgb, var(--ink-950) 8%, transparent);
}

body.portal-body .sidebar-nav__item.is-active {
    color: var(--portal-sidebar-active-text, var(--violet-800));
    background: var(--portal-sidebar-active-bg, var(--violet-100));
    box-shadow: inset 3px 0 0 var(--violet-600);
}

body.portal-body .sidebar-nav__item:hover,
body.portal-body .sidebar-nav__section:hover,
body.portal-body .sidebar-nav__section:focus-visible {
    color: var(--portal-sidebar-active-text, var(--violet-800));
    background: var(--portal-sidebar-hover-bg, var(--violet-50));
}

body.portal-body .page-icon,
body.portal-body .portal-content .button:not(.button--secondary):not(.button--danger),
body.portal-body .portal-content button:not([class]) {
    color: var(--portal-on-primary);
}

body.portal-body .button--secondary {
    border-color: var(--violet-100);
    color: var(--violet-800);
    background: var(--violet-50);
}

body.portal-body .button--secondary:hover {
    color: var(--violet-900);
    background: var(--violet-100);
}

body.portal-body input:focus,
body.portal-body select:focus,
body.portal-body textarea:focus {
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--violet-600) 16%, transparent);
}

body.portal-body .notice {
    border-color: var(--violet-100);
    color: var(--ink-700);
    background: var(--violet-50);
}

body.portal-body .success {
    border-color: color-mix(in srgb, var(--green-700) 28%, var(--surface));
    color: var(--green-700);
    background: var(--green-100);
}

body.portal-body .warning {
    border-color: color-mix(in srgb, var(--orange-700) 28%, var(--surface));
    color: var(--orange-700);
    background: var(--orange-100);
}

body.portal-body .error {
    border-color: color-mix(in srgb, var(--red-700) 28%, var(--surface));
    color: var(--red-700);
    background: var(--red-100);
}

body.portal-body th {
    background: var(--surface-soft);
}

body.portal-body tbody tr:hover td {
    background: var(--violet-50);
}

body.portal-body .status-badge,
body.portal-body .account-status,
body.portal-body .document-status {
    color: var(--ink-700);
    background: var(--surface-soft);
}

@media (prefers-color-scheme: dark) {
    body.portal-body.portal-theme--system .portal-header,
    body.portal-body.portal-theme--system .portal-sidebar {
        border-color: var(--line);
    }
}

/* v0.28.0 — finition compacte du thème privé */
body.portal-body .portal-sidebar,
body.portal-body .portal-header,
body.portal-body .portal-content > .card,
body.portal-body .document-card,
body.portal-body .directory-card {
    box-shadow: none;
}

body.portal-body .portal-header {
    box-shadow: 0 2px 12px color-mix(in srgb, var(--ink-950) 3%, transparent);
}

body.portal-body .page-icon,
body.portal-body button,
body.portal-body .button {
    box-shadow: 0 3px 9px color-mix(in srgb, var(--violet-700) 14%, transparent);
}

body.portal-body button:hover,
body.portal-body .button:hover {
    box-shadow: 0 5px 12px color-mix(in srgb, var(--violet-700) 18%, transparent);
}

body.portal-body .sidebar-nav__item.is-active {
    background: var(--portal-sidebar-active-bg, var(--violet-50));
}

body.portal-body .quick-action,
body.portal-body .button--secondary,
body.portal-body .notice {
    border-color: var(--violet-100);
    background: var(--violet-50);
}

body.portal-body .auth-body,
body.portal-body .public-body {
    background:
        radial-gradient(circle at 10% 10%, color-mix(in srgb, var(--violet-600) 8%, transparent), transparent 30%),
        radial-gradient(circle at 90% 85%, color-mix(in srgb, var(--blue-700) 7%, transparent), transparent 28%),
        var(--surface-soft);
}
