/* Composants transversaux du Portail client. */
body.portal-page {
    --portal-radius-card: 1.2rem;
    --portal-radius-soft: 1rem;
    --portal-card-padding: 1.15rem;
}

body.portal-page .portal-card,
body.portal-page .portal-card-soft,
body.portal-page .portal-validation-card,
body.portal-page .portal-contact-item,
body.portal-page .portal-document-link,
body.portal-page .portal-invoice-row,
body.portal-page .portal-info-item {
    border: 1px solid var(--portal-border) !important;
    box-shadow: var(--portal-shadow-soft) !important;
}
body.portal-page .portal-card {
    border-radius: var(--portal-radius-card) !important;
    background: var(--portal-card) !important;
    color: var(--portal-dark) !important;
}
body.portal-page .portal-card-soft,
body.portal-page .portal-validation-card,
body.portal-page .portal-contact-item,
body.portal-page .portal-document-link,
body.portal-page .portal-invoice-row,
body.portal-page .portal-info-item {
    border-radius: var(--portal-radius-soft) !important;
    background: #fff !important;
}
body.portal-page .portal-card-soft,
body.portal-page .portal-info-item {
    background: linear-gradient(180deg, #fff, #f8fafc) !important;
}
body.portal-page .portal-info-item {
    min-width: 0;
    padding: .92rem 1rem;
    color: var(--portal-dark) !important;
}
body.portal-page .portal-card.p-4 {
    padding: var(--portal-card-padding) !important;
}
body.portal-page .portal-section-title,
body.portal-page h1,
body.portal-page h2,
body.portal-page h3 {
    letter-spacing: -.02em;
}
body.portal-page .portal-info-label,
body.portal-page .portal-table thead th,
body.portal-page .portal-validation-meta {
    color: var(--portal-muted) !important;
}
body.portal-page .portal-info-value,
body.portal-page .portal-address,
body.portal-page .portal-table,
body.portal-page .portal-card-soft,
body.portal-page .portal-contact-item,
body.portal-page .portal-validation-card {
    font-size: .94rem;
    line-height: 1.45;
}
body.portal-page .portal-table > :not(caption) > * > * {
    padding-top: .72rem;
    padding-bottom: .72rem;
}
body.portal-page .portal-table strong,
body.portal-page .portal-invoice-row strong,
body.portal-page .portal-validation-title,
body.portal-page .portal-document-link {
    font-weight: 600;
}
body.portal-page .form-label {
    color: #334155;
    font-size: .9rem;
    font-weight: 650;
}
body.portal-page .form-control,
body.portal-page .form-select,
body.portal-page textarea.form-control {
    border-color: rgba(17,24,39,.13);
    box-shadow: none;
    font-size: .95rem;
    line-height: 1.45;
    font-weight: 500;
}
body.portal-page .form-select-lg,
body.portal-page .form-control-lg { font-size: .98rem; }
body.portal-page .form-control:focus,
body.portal-page .form-select:focus {
    border-color: rgba(237,27,52,.42);
    box-shadow: 0 0 0 .2rem rgba(237,27,52,.10);
}
@media (max-width: 767.98px) {
    body.portal-page { --portal-card-padding: .95rem; }
}

/* Synthèse d’accueil orientée actions client. */
body.portal-page .portal-client-action-card {
    background: linear-gradient(180deg, #fff, #fbfcfe);
}
body.portal-page .portal-action-main {
    border-left: .32rem solid var(--portal-primary) !important;
}
body.portal-page .portal-action-icon {
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    color: #fff;
    background: var(--portal-primary);
    box-shadow: 0 .55rem 1.2rem rgba(237,27,52,.18);
}
body.portal-page .portal-summary-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .85rem;
}
body.portal-page .portal-summary-card {
    border: 1px solid var(--portal-border);
    border-radius: var(--portal-radius-soft);
    background: #fff;
    padding: 1rem;
    box-shadow: var(--portal-shadow-soft);
}
body.portal-page .portal-summary-value {
    font-size: 1.35rem;
    line-height: 1.1;
    font-weight: 750;
    letter-spacing: -.03em;
    color: #111827;
    margin: .25rem 0;
}
@media (max-width: 575.98px) {
    body.portal-page .portal-summary-grid { grid-template-columns: 1fr; }
}

/* Dossier client plus lisible : situation et listes compactes. */
body.portal-page .portal-dossier-summary {
    border: 1px solid rgba(237, 27, 52, .12) !important;
    background: linear-gradient(180deg, #fff, #fff7f8) !important;
}
body.portal-page .portal-action-mini {
    display: flex;
    gap: .9rem;
    align-items: flex-start;
}
body.portal-page .portal-action-icon-sm {
    width: 2.25rem;
    height: 2.25rem;
    font-size: .9rem;
}
body.portal-page .portal-action-title {
    font-weight: 750;
    letter-spacing: -.02em;
    color: #111827;
    margin-bottom: .25rem;
}
body.portal-page .portal-summary-grid-compact {
    gap: .65rem;
}
body.portal-page .portal-summary-card-compact {
    padding: .78rem .85rem;
}
body.portal-page .portal-summary-card-compact .portal-summary-value {
    font-size: 1.12rem;
}
body.portal-page .portal-compact-list {
    display: grid;
    gap: .7rem;
}
body.portal-page .portal-compact-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1.15rem;
    padding: 1.05rem 1.15rem;
    border: 1px solid var(--portal-border);
    border-radius: var(--portal-radius-soft);
    background: #fff;
    box-shadow: var(--portal-shadow-soft);
}
body.portal-page .portal-compact-title {
    font-weight: 700;
    color: #111827;
    letter-spacing: -.01em;
}

body.portal-page .portal-compact-item-rich {
    align-items: flex-start;
}
body.portal-page .portal-compact-main {
    flex: 1 1 auto;
}
body.portal-page .portal-compact-description {
    margin-top: .25rem;
    line-height: 1.45;
}
body.portal-page .portal-compact-meta {
    display: flex;
    flex-wrap: wrap;
    gap: .55rem 1.15rem;
    margin-top: .65rem;
    color: var(--portal-muted);
    font-size: .875rem;
    line-height: 1.45;
}
body.portal-page .portal-compact-meta span {
    display: inline-flex;
    align-items: center;
    min-width: 0;
    white-space: nowrap;
}
body.portal-page .portal-compact-item-rich .portal-action-group {
    gap: .45rem;
}
body.portal-page .portal-validation-card-muted {
    background: #fbfcfe;
    box-shadow: none;
}
body.portal-page .portal-details-panel {
    border: 1px solid var(--portal-border);
    border-radius: var(--portal-radius-soft);
    background: #fff;
    padding: .8rem 1rem;
}
body.portal-page .portal-details-panel > summary {
    cursor: pointer;
    font-weight: 700;
    color: #111827;
}
@media (max-width: 767.98px) {
    body.portal-page .portal-compact-item {
        align-items: flex-start;
        flex-direction: column;
    }
    body.portal-page .portal-compact-item .portal-action-group {
        justify-content: flex-start !important;
    }
    body.portal-page .portal-compact-meta {
        gap: .5rem .9rem;
    }
    body.portal-page .portal-compact-meta span {
        white-space: normal;
    }
}

/* Accessibilité et états d'interaction communs. */
.portal-skip-link {
    position: fixed;
    top: .75rem;
    left: .75rem;
    z-index: 2000;
    padding: .72rem 1rem;
    border-radius: .8rem;
    background: #fff;
    color: var(--portal-dark);
    box-shadow: var(--portal-shadow);
    transform: translateY(-160%);
    transition: transform .15s ease;
}

.portal-skip-link:focus { transform: translateY(0); }
#portal-main-content:focus { outline: none; }

body.portal-page :where(a, button, input, select, textarea, summary):focus-visible {
    outline: 0;
    box-shadow: var(--portal-focus-ring) !important;
}

.portal-feedback {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: start;
    gap: .75rem;
    margin-bottom: 1rem;
    padding: .92rem 1rem;
    border: 1px solid transparent;
    border-radius: 1rem;
    font-weight: 650;
    line-height: 1.45;
    overflow-wrap: anywhere;
}

.portal-feedback > i { margin-top: .17rem; }
.portal-feedback:focus { outline: 2px solid currentColor; outline-offset: 2px; }
.portal-feedback-success { color: var(--portal-success); background: var(--portal-success-soft); border-color: #cce8d8; }
.portal-feedback-warning { color: var(--portal-warning); background: var(--portal-warning-soft); border-color: #efdca3; }
.portal-feedback-danger { color: var(--portal-danger); background: var(--portal-danger-soft); border-color: #efc8cf; }
.portal-feedback-info { color: var(--portal-info); background: var(--portal-info-soft); border-color: #d4e2ed; }

body.portal-page .alert-danger { color: var(--portal-danger); background: var(--portal-danger-soft); border-color: #efc8cf; }
body.portal-page .alert-warning { color: var(--portal-warning); background: var(--portal-warning-soft); border-color: #efdca3; }
body.portal-page .alert-success { color: var(--portal-success); background: var(--portal-success-soft); border-color: #cce8d8; }
body.portal-page .alert-info { color: var(--portal-info); background: var(--portal-info-soft); border-color: #d4e2ed; }

body.portal-page :where(.form-control, .form-select)[aria-invalid="true"] {
    border-color: var(--portal-danger) !important;
    box-shadow: 0 0 0 .2rem rgba(180, 35, 53, .12) !important;
}

body.portal-page .btn,
body.portal-page .form-control,
body.portal-page .form-select,
body.portal-page summary {
    min-height: 44px;
}

body.portal-page .btn-lg,
body.portal-page .form-control-lg,
body.portal-page .form-select-lg {
    min-height: 52px;
}

body.portal-page .btn-primary {
    background-color: var(--portal-primary-action) !important;
    border-color: var(--portal-primary-action) !important;
    color: #fff !important;
    box-shadow: 0 8px 18px rgba(207, 21, 43, .18);
}

body.portal-page .btn-primary:hover,
body.portal-page .btn-primary:focus {
    background-color: var(--portal-primary-ink) !important;
    border-color: var(--portal-primary-ink) !important;
}

body.portal-page .btn-primary:hover {
    transform: translateY(-1px);
    box-shadow: 0 10px 22px rgba(207, 21, 43, .23);
}

body.portal-page .btn {
    align-items: center;
    justify-content: center;
    line-height: 1.2;
}

body.portal-page a.btn,
body.portal-page button.btn { display: inline-flex; }

body.portal-page .btn > i {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    line-height: 1;
}

body.portal-page .btn > span { line-height: 1.2; }

.portal-is-loading {
    position: relative;
    pointer-events: none;
    opacity: .8;
}

.portal-is-loading::after {
    content: "";
    display: inline-block;
    width: 1rem;
    height: 1rem;
    margin-left: .55rem;
    vertical-align: -.16rem;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: portal-spin .7s linear infinite;
}

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

.portal-js-ready .portal-reveal { opacity: 0; transform: translateY(7px); }
.portal-js-ready .portal-page-ready .portal-reveal {
    opacity: 1;
    transform: none;
    transition: opacity .22s ease var(--portal-reveal-delay, 0ms), transform .22s ease var(--portal-reveal-delay, 0ms);
}

body.portal-page details > summary {
    cursor: pointer;
    user-select: none;
    border-radius: .75rem;
}

body.portal-page details > summary::marker { color: var(--portal-primary); }
body.portal-page details[open] > summary { margin-bottom: .75rem; }
