/*
 * Modus Customer Commerce UI — logged-in portal
 * Dashboard summary cards, service/invoice tables, ticket conversation,
 * knowledge base article. Reskins the real Bootstrap classes already used by
 * Index/Invoice/Order/Support/Servicedomain/Servicehosting client templates.
 */

body.dashboard,
body.mc-portal-body {
    background:
        linear-gradient(180deg, #f5f8fd 0%, #f8fafc 42%, #f7f8fb 100%);
}

body.dashboard .mc-container--portal,
body.mc-portal-body .mc-container--portal {
    max-width: min(var(--mc-portal-max), 100%);
    padding-block: var(--mc-space-6) var(--mc-space-10);
}

body.dashboard .mc-header--portal,
body.mc-portal-body .mc-header--portal {
    margin-bottom: var(--mc-space-6);
    border: 1px solid rgba(225, 229, 236, 0.85);
    border-radius: var(--mc-radius-lg);
    background: rgba(255, 255, 255, 0.86);
    box-shadow: 0 14px 44px rgba(11, 16, 32, 0.06);
}

body.dashboard .mc-content-frame > .row,
body.mc-portal-body .mc-content-frame > .row {
    --bs-gutter-x: var(--mc-space-6);
    --bs-gutter-y: var(--mc-space-6);
}

/* ---- Portal navigation ---- */
body.dashboard .mc-sidebar,
body.mc-portal-body .mc-sidebar {
    position: sticky;
    top: calc(72px + var(--mc-space-6));
    padding: var(--mc-space-5);
    border-color: rgba(199, 211, 232, 0.75);
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(247, 250, 255, 0.95) 100%);
    box-shadow: 0 18px 46px rgba(11, 16, 32, 0.08);
}

body.dashboard .mc-sidebar .list-group,
body.mc-portal-body .mc-sidebar .list-group {
    display: flex;
    flex-direction: column;
    gap: var(--mc-space-1);
}

body.dashboard .mc-sidebar .list-group-item,
body.mc-portal-body .mc-sidebar .list-group-item {
    min-height: 44px;
    border-radius: var(--mc-radius-sm) !important;
    color: var(--mc-text-secondary);
}

body.dashboard .mc-sidebar .list-group-item.active,
body.mc-portal-body .mc-sidebar .list-group-item.active {
    background: linear-gradient(180deg, #eef4ff 0%, #e8f0ff 100%);
    color: var(--mc-color-primary-700);
    box-shadow: inset 3px 0 0 var(--mc-color-primary-600);
}

body.dashboard .mc-sidebar .list-group-item:hover,
body.dashboard .mc-sidebar .list-group-item:focus-visible,
body.mc-portal-body .mc-sidebar .list-group-item:hover,
body.mc-portal-body .mc-sidebar .list-group-item:focus-visible {
    background: var(--mc-color-primary-50);
    color: var(--mc-color-primary-700);
}

/* ---- Unpaid invoice banner: top-of-dashboard, high-visibility Pay Now ----
   Two severities, not one. An invoice that isn't due yet is a reminder, not
   a demand — using the same red/danger treatment for both trains customers
   to tune out the red state and feels punitive for something they haven't
   actually failed to do yet. Only a genuinely overdue invoice (due date has
   passed) gets the red --overdue variant; anything still on time gets the
   calmer, informative --upcoming variant while still keeping a Pay Now. */
.mc-unpaid-banner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--mc-space-4);
    margin-bottom: var(--mc-space-6);
    padding: var(--mc-space-5) var(--mc-space-6);
    border-radius: var(--mc-radius-md);
}

.mc-unpaid-banner--overdue {
    border: 1px solid rgba(201, 42, 42, 0.28);
    background: linear-gradient(180deg, #fff5f5 0%, #fff0f0 100%);
    box-shadow: 0 16px 42px rgba(201, 42, 42, 0.08);
}

.mc-unpaid-banner--upcoming {
    border: 1px solid var(--mc-color-primary-100);
    background: var(--mc-color-primary-50);
    box-shadow: 0 16px 42px rgba(43, 79, 245, 0.06);
}

.mc-unpaid-banner-info {
    display: flex;
    align-items: center;
    gap: var(--mc-space-4);
    min-width: 0;
}

.mc-unpaid-banner-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 44px;
    height: 44px;
    border-radius: 999px;
    color: var(--mc-color-white);
}

.mc-unpaid-banner--overdue .mc-unpaid-banner-icon {
    background: var(--mc-color-danger);
}

.mc-unpaid-banner--upcoming .mc-unpaid-banner-icon {
    background: var(--mc-color-primary-600);
}

.mc-unpaid-banner-title {
    display: block;
    font-size: var(--mc-text-base);
    font-weight: 800;
}

.mc-unpaid-banner--overdue .mc-unpaid-banner-title {
    color: var(--mc-color-danger);
}

.mc-unpaid-banner--upcoming .mc-unpaid-banner-title {
    color: var(--mc-color-primary-800);
}

.mc-unpaid-banner-amount {
    display: block;
    color: var(--mc-text-secondary);
    font-size: var(--mc-text-sm);
    font-weight: 600;
}

.mc-unpaid-banner-action {
    flex: 0 0 auto;
    white-space: nowrap;
}

@media (max-width: 767.98px) {
    .mc-unpaid-banner {
        flex-direction: column;
        align-items: stretch;
        text-align: center;
    }

    .mc-unpaid-banner-info {
        justify-content: center;
    }

    .mc-unpaid-banner-action {
        width: 100%;
    }
}

/* ---- Dashboard summary cards ---- */
.mc-dashboard {
    display: flex;
    flex-direction: column;
    gap: var(--mc-space-6);
}

.mc-dashboard > .row {
    --bs-gutter-x: var(--mc-space-6);
    --bs-gutter-y: var(--mc-space-6);
}

.mc-dashboard > .row + .row {
    margin-top: 0;
}

.dashboard .card {
    border-radius: var(--mc-radius-md);
}

.mc-dashboard .card {
    height: 100%;
    overflow: hidden;
    border-color: rgba(199, 211, 232, 0.7);
    background: rgba(255, 255, 255, 0.94);
    box-shadow: 0 16px 42px rgba(11, 16, 32, 0.07);
}

.mc-dashboard .card:hover {
    box-shadow: 0 20px 56px rgba(11, 16, 32, 0.10);
}

.mc-dashboard .card .card-header {
    min-height: 74px;
    padding: var(--mc-space-5) var(--mc-space-6);
    background: linear-gradient(180deg, #f8fbff 0%, #eef5ff 100%);
    border-bottom: 1px solid rgba(199, 211, 232, 0.7);
}

.mc-dashboard .card .card-header h6 {
    font-family: var(--mc-font-display);
    font-size: var(--mc-text-lg);
    font-weight: 800;
    color: var(--mc-text-primary);
}

.mc-dashboard .card .card-header .py-2 {
    padding-block: 0 !important;
    display: flex;
    flex-wrap: wrap;
    gap: var(--mc-space-2);
    justify-content: flex-end;
}

.mc-dashboard .card .card-body {
    padding: var(--mc-space-6);
}

.mc-dashboard .card .card-body.p-1 {
    padding: var(--mc-space-3) !important;
}

.mc-dashboard .card .card-body > .row {
    row-gap: var(--mc-space-2);
}

.mc-dashboard dt {
    color: var(--mc-text-secondary);
    font-size: var(--mc-text-sm);
    letter-spacing: 0;
}

.dashboard dt {
    font-weight: 600;
}

.mc-dashboard dd,
.dashboard dd {
    font-variant-numeric: tabular-nums;
}

.mc-dashboard dd {
    margin-bottom: 0;
    color: var(--mc-text-primary);
    font-weight: 650;
}

.mc-dashboard .mc-dashboard-amount-due {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--mc-space-4);
    margin-top: var(--mc-space-2);
    padding-top: var(--mc-space-4);
    border-top: 1px solid var(--mc-border-subtle);
}

.mc-dashboard-amount-due__label,
.mc-dashboard-amount-due__value {
    line-height: 1.25;
}

.mc-dashboard-amount-due__label {
    color: var(--mc-text-secondary);
    font-size: var(--mc-text-sm);
    font-weight: 700;
}

.mc-dashboard-amount-due__value {
    margin-left: auto;
    font-size: var(--mc-text-lg);
    font-variant-numeric: tabular-nums;
    font-weight: 800;
    text-align: right;
}

.mc-dashboard-amount-due--owing .mc-dashboard-amount-due__value {
    color: var(--mc-color-warning);
}

.mc-dashboard-amount-due--clear .mc-dashboard-amount-due__value {
    color: var(--mc-color-success);
}

.mc-dashboard .list-group-flush .list-group-item {
    border: 1px solid transparent;
    border-radius: var(--mc-radius-sm) !important;
    padding: var(--mc-space-4);
}

.mc-dashboard .list-group-flush .list-group-item:hover,
.mc-dashboard .list-group-flush .list-group-item:focus-visible {
    border-color: var(--mc-color-primary-100);
    background: var(--mc-color-primary-50);
}

.mc-dashboard .card-body .d-flex.justify-content-center {
    min-height: 48px;
    align-items: center;
    color: var(--mc-text-secondary);
}

.mc-dashboard .btn-sm {
    border-radius: var(--mc-radius-sm);
}

.mc-dashboard .btn-primary {
    background: linear-gradient(180deg, var(--mc-color-primary-500) 0%, var(--mc-color-primary-600) 100%);
    border-color: var(--mc-color-primary-600);
    box-shadow: 0 10px 22px rgba(43, 79, 245, 0.22);
}

.mc-dashboard .btn-dark {
    background: rgba(238, 242, 247, 0.8);
    border-color: rgba(199, 211, 232, 0.8);
}

body.dashboard .mc-showcase-banner,
body.mc-portal-body .mc-showcase-banner {
    margin: 0 0 var(--mc-space-1);
    box-shadow: inset 0 0 0 1px rgba(189, 206, 255, 0.25);
}

body.dashboard .mc-footer--portal,
body.mc-portal-body .mc-footer--portal {
    margin-top: var(--mc-space-8) !important;
    border-color: rgba(225, 229, 236, 0.8);
    background: rgba(255, 255, 255, 0.72);
}

/* ---- Data tables (invoices, services, orders) ---- */
.table-responsive .table {
    --bs-table-border-color: var(--mc-border-subtle);
}

.table-hover > tbody > tr:hover > * {
    background-color: var(--mc-color-primary-50);
}

/* ---- Invoice pay action ---- */
.btn-success {
    background: var(--mc-color-success);
    border-color: var(--mc-color-success);
}

/* ---- Support ticket conversation ---- */
.card.border-primary {
    border-color: var(--mc-color-primary-300) !important;
    background: var(--mc-color-primary-50);
}

.card.border-primary .card-header {
    background: transparent;
}

/* ---- Knowledge base article ---- */
.kb-article-content {
    max-width: 82ch;
    font-size: var(--mc-text-base);
    line-height: 1.7;
}

.kb-article-content pre,
.kb-article-content code {
    font-family: var(--mc-font-mono);
}

/* ---- Service / domain detail danger zone ---- */
.mc-danger-zone {
    border: 1px solid var(--mc-color-danger);
    border-radius: var(--mc-radius-md);
    padding: var(--mc-space-5);
    background: var(--mc-color-danger-bg);
}

.mc-danger-zone .mc-danger-zone-title {
    color: var(--mc-color-danger);
    font-weight: 700;
}
