/* Shared Booker / Entertainer presentation. Page-specific task layouts stay with their owners. */
.nk-body:is(.portal-booker, .portal-entertainer) {
    --portal-accent: #5B8060;
    --portal-accent-hover: #48684C;
    --portal-action: #5B8060; /* was #567A5B, retired in style guide v3.1 */
    --portal-text: #EDEDED;
    --portal-muted: #B5B5B5;
    --portal-radius: 8px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .page-title {
    font-size: 22px !important; /* style guide: 22px phone, 24px tablet, 28px desktop */
    line-height: 1.25 !important;
    color: var(--portal-text) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .nk-block-desc p {
    color: var(--portal-muted) !important;
}
/* One metric for main tabs, including button-based Enquiries and link-based Reviews. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link,
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a {
    position: relative;
    box-sizing: border-box;
    min-height: 44px;
    font-size: 13px !important;
    font-weight: 700 !important;
    line-height: 20px !important;
    padding-top: 12px !important;
    padding-bottom: 12px !important;
    color: var(--portal-muted) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link span,
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link .icon {
    color: inherit !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link.active,
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a.is-active {
    color: var(--portal-text) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link.active .icon {
    color: var(--portal-accent) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link::after {
    background: var(--portal-accent) !important;
    height: 3px !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs {
    margin-bottom: 0;
    padding: 0 16px;
    background: #242427;
    border: 1px solid var(--portal-border, #3C3C3C);
    border-radius: 8px 8px 0 0;
    gap: 20px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a {
    border: 0;
    padding-inline: 0;
    flex: 0 0 auto;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a.is-active::after {
    content: '';
    position: absolute;
    inset: auto 0 0;
    height: 3px;
    background: var(--portal-accent);
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-review-list > .card:first-child {
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.btn, .cx-bookings-action, .cx-team-btn, .cx-super-btn) {
    border-radius: var(--portal-radius) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.btn-primary, .portal-button--primary),
.nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-settings .btn[title="Save profile changes"],
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-actions .btn-primary {
    background: var(--portal-accent) !important;
    border-color: var(--portal-accent) !important;
    color: #FFF !important;
    min-height: 44px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.btn-primary, .portal-button--primary):hover {
    background: var(--portal-accent-hover) !important;
    border-color: var(--portal-accent-hover) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(button, a, input, select, textarea):focus-visible {
    outline: 2px solid #9DBCA2 !important;
    outline-offset: 3px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-search input {
    min-height: 44px;
    padding-right: 44px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-search-clear {
    right: 0;
    width: 44px;
    height: 44px;
    color: var(--portal-muted);
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-search input:focus {
    border-color: var(--portal-accent) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-empty, .cx-review-empty) {
    min-height: 190px;
    padding: 32px 16px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
    text-align: center;
    color: var(--portal-muted);
}
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-empty, .cx-review-empty) > .icon {
    font-size: 32px;
    color: var(--portal-accent);
    margin: 0;
}
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-empty, .cx-review-empty) p {
    font-size: 14px;
    line-height: 1.5;
    margin: 0;
    color: var(--portal-muted);
}
/* A list with no rows at all shows only its empty state, never column headings over nothing (Felix
   2026-10-17, U12). Events, Enquiries, Bookings and Financials now match Quotes and Invoices. A search
   with no matches keeps its headings, because the rows are still there, only hidden. */
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-table-wrap:not(:has(.nk-tb-item:not(.nk-tb-head))) { display: none !important; }
/* An optional menu section has no heading when it contains no destinations. */
.portal-menu__assistant-heading:not(:has(~ .nk-menu-item)) { display: none !important; }
/* U150 (Felix 2026-10-21): the agency mark and name, moved out of inline styles. The name is cut with
   "..." so it never runs past its card or cell; the full name is in the tooltip. */
.portal-agency { display: inline-flex; align-items: center; gap: 8px; min-width: 0; max-width: 100%; vertical-align: middle; }
.portal-agency__mark { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 6px; overflow: hidden; box-sizing: border-box; }
.portal-agency__mark--logo { padding: 2px; border: 1px solid rgba(255,255,255,.18); background: #FFFFFF; }
.portal-agency__mark--logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.portal-agency__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.portal-agency__fallback {
    border: 1px solid rgba(255,255,255,.14);
    background: rgba(91,128,96,.22) !important;
    color: #DCE8DE;
    font-size: 11px;
    font-weight: 700;
    line-height: 1;
}
.portal-reference { max-width: 22ch; font-size: 12px; text-transform: none; letter-spacing: normal; }
.portal-reference summary { min-height: 44px; display: list-item; padding-block: 12px; line-height: 20px; cursor: pointer; text-decoration: underline; }
.portal-reference code { display: block; overflow-wrap: anywhere; white-space: normal; color: var(--portal-muted); }
/* Skills shares the portal frame, rather than nesting a second centred app shell. */
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page,
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page :is(.nk-main, .nk-wrap, .nk-content, .nk-auth-body) {
    width: 100%; max-width: none; min-height: 0; margin: 0; padding: 0; flex: initial;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-page-head {
    display: flex; align-items: center; gap: 12px; padding: 0 !important; margin: 0 0 24px !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-shell { padding: 20px !important; min-height: 0 !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills h3 { font-size: 16px !important; }
@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .nk-content .page-title { font-size: 24px !important; }
    .nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-fin-tabs .nav-link,
    .nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a {
        min-height: 55px; font-size: 14px !important; padding-top: 17px !important; padding-bottom: 18px !important;
    }
    /* Booking-only priority columns; Events reuses the outer class but has its own four-column table. */
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table { display: block; min-width: 968px; width: 100%; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-item {
        display: grid; grid-template-columns: 170px 180px 150px minmax(180px,1fr) minmax(180px,1fr) 54px 54px;
        width: 100%; min-width: 0;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-col {
        display: flex !important; align-items: center; padding: 12px 8px !important; min-width: 0 !important; width: auto !important; max-width: none !important;
        white-space: normal !important; position: static !important; box-shadow: none !important; background: transparent !important;
        overflow-wrap: anywhere;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-col:is(:nth-child(1),:nth-child(3),:nth-child(4),:nth-child(5),:nth-child(7)) { display: none !important; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .cx-bookings-action { white-space: normal; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .cx-sort-button { white-space: normal; text-align: left; }
}
@media (min-width: 992px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .nk-content .page-title { font-size: 28px !important; }
}
@media (min-width: 1400px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-item {
        grid-template-columns: 48px 160px minmax(160px,1.4fr) 170px 150px minmax(200px,1fr) minmax(120px,1fr) 52px 52px;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-col:is(:nth-child(1),:nth-child(4)) { display: flex !important; }
}
@media (max-width: 767.98px) {
    .nk-body.portal-entertainer .cx-ent-listings .cx-listings-head-mobile__title-top { align-items: flex-start; }
    .nk-body.portal-entertainer .cx-ent-listings .cx-listings-head-mobile__title-top .page-title { font-size: 22px !important; }
    .nk-body.portal-entertainer .cx-ent-listings .cx-listings-head-mobile__count { margin: -12px 0 0 46px; text-align: left; font-size: 12px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-settings :is(.btn, .cx-copy-button, .cx-settings-tabs-arrow, .cx-financial-subtabs [role="tab"]) {
        min-width: 44px; min-height: 44px; height: auto;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-settings :is(input:not([type="checkbox"]):not([type="radio"]),select,textarea) { font-size: 16px !important; min-height: 44px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabs-arrow { width: 44px; height: 44px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-page-head { margin-bottom: 16px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-shell { padding: 16px !important; }
}

/* Events share the bookings wrapper, but keep Event, Type, Event Date and Stage in their own four-column grid. */
@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-fin-table {
        display: block;
        width: 100%;
        min-width: 0;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-fin-table .nk-tb-item {
        display: grid;
        grid-template-columns: minmax(220px, 1.5fr) minmax(140px, 0.9fr) minmax(180px, 1.2fr) minmax(150px, 1fr);
        width: 100%;
        min-width: 0;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-fin-table .nk-tb-col {
        display: flex !important;
        align-items: center;
        min-width: 0 !important;
        width: auto !important;
        max-width: none !important;
        white-space: normal !important;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-fin-table .nk-tb-item > .nk-tb-col {
        padding: 14px 12px !important;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-rose-events__row > .nk-tb-col:first-child {
        align-items: flex-start;
        flex-direction: column;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-rose-event-link {
        display: block;
        max-width: 100%;
        overflow-wrap: anywhere;
    }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-events .cx-rose-events__row > .nk-tb-col:first-child > .sub-text {
        display: block;
        margin-top: 4px;
    }
}

.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page .nk-block-middle { margin: 0 !important; padding: 0 !important; }

/* The Skills wizard is intentionally standalone; retain comfortable page insets. */
.nk-body:is(.portal-booker, .portal-entertainer) > .cx-skills-wizard-page { padding: 24px 14px !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-page-head .page-title { font-size: 22px !important; line-height: 1.25 !important; color: var(--portal-text) !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .portal-button--primary { background: var(--portal-accent) !important; color: #fff !important; border-radius: 8px !important; min-height: 44px; }
@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) > .cx-skills-wizard-page { padding: 32px !important; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-page-head .page-title { font-size: 24px !important; }
}
@media (min-width: 992px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-page-head .page-title { font-size: 28px !important; }
}

@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-item :is(.cx-bookings-agreement-col, .cx-agent-view-col) { background: transparent !important; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table :is(.cx-bookings-actions, .cx-bookings-action) { max-width: 100%; min-width: 0; white-space: normal !important; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .cx-bookings-action { overflow-wrap: normal; }
}

@media (min-width: 992px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-bookings:not(.cx-rose-events) .cx-fin-table .nk-tb-col:is(:nth-child(2),:nth-child(6),:nth-child(8)) > span { white-space: nowrap !important; }
}

.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a > span { height: 20px; min-width: 20px; padding: 0 6px; line-height: 20px; font-size: 11px; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-review-tabs a > .icon { line-height: 20px; }

/* The slightly darker button fill keeps small white labels above 4.5:1 contrast. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.btn-primary, .portal-button--primary, .cx-calendar__block-cta) {
    background: var(--portal-action) !important;
    border-color: var(--portal-action) !important;
    color: #fff !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    min-height: 44px;
    border-radius: 8px !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.btn-primary, .portal-button--primary, .cx-calendar__block-cta):hover {
    background: var(--portal-accent-hover) !important;
    border-color: var(--portal-accent-hover) !important;
}

/* A composed field gets one focus ring around its complete rounded boundary. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.cx-unified-search, .cx-unified-thread-search__field, .cx-unified-compose-field):focus-within {
    outline: none;
    outline-offset: 0;
    border-color: #9DBCA2;
    box-shadow: none;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.cx-unified-search, .cx-unified-thread-search__field, .cx-unified-compose-field) :is(input, textarea) {
    outline: none !important;
    box-shadow: none !important;
    border: 0 !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-compose-field textarea { line-height: 22px; }
/* Space neighbouring choices, and distinguish the selected event from hover. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__menu {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 8px;
    scroll-padding-block: 8px;
    border-color: var(--portal-border, #3C3C3C);
    border-radius: 8px;
    background: var(--portal-surface, #252525);
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__menu > :is(button, .cx-unified-event-picker__heading) { flex-shrink: 0; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__menu button {
    border: 1px solid transparent;
    border-radius: 8px;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__menu button:hover:not(.is-active) { background: #343434; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__menu button.is-active {
    border-color: #6F9675;
    background: #304034;
    color: #FFFFFF;
}
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-picker__option-copy small { color: var(--portal-muted, #B5B5B5); line-height: 1.4; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-message__bubble mark { background: #426149; color: #FFFFFF; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-message.is-conversation-search-current .cx-unified-message__bubble {
    outline-color: #9DBCA2;
    box-shadow: 0 0 0 5px rgba(157,188,162,.12);
}

/* Enquiry drawers use the same surface, type and controls as portal dialogs. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info { background: var(--portal-surface, #252525); border-color: var(--portal-border, #3C3C3C); }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info__head { padding: 12px 20px; gap: 12px; background: var(--portal-surface-raised, #2B2B2B); border-color: var(--portal-border, #3C3C3C); }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info__head h3 { font-size: 18px; font-weight: 700; line-height: 1.3; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info__close { width: 44px; height: 44px; flex: 0 0 44px; border: 1px solid #656565; border-radius: 8px; background: transparent; color: var(--portal-text, #EDEDED); }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info__body { padding: 20px; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-detail-list dt,
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-event-detail-summary__status { color: var(--portal-muted, #B5B5B5); font-size: 12px; line-height: 1.5; letter-spacing: .03em; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-detail-list dd { color: var(--portal-text, #EDEDED); font-size: 14px; line-height: 1.5; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info a { color: #B4D4B9 !important; text-decoration: underline; text-underline-offset: 3px; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content .cx-unified-info a:hover { color: #DCEBDF !important; }

/* Theme gap utilities also set spacer heights; content groups must size naturally. */
.nk-body:is(.portal-booker, .portal-entertainer) .nk-content :is(.d-flex, .d-inline-flex, .d-grid):is(.gap-0, .gap-1, .gap-2, .gap-3, .gap-4, .gap-5),
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form :is(.d-flex, .d-inline-flex, .d-grid):is(.gap-0, .gap-1, .gap-2, .gap-3, .gap-4, .gap-5) { height: auto; }

/* Review, create and edit quote dialogs share one portal treatment. */
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-help-popover { --bs-popover-bg: var(--portal-surface-raised, #2B2B2B); --bs-popover-border-color: #656565; --bs-popover-body-color: var(--portal-text, #EDEDED); --bs-popover-header-bg: var(--portal-surface-raised, #2B2B2B); --bs-popover-header-color: var(--portal-text, #EDEDED); }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-help-popover .popover-body { color: var(--portal-text, #EDEDED); }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) {
    color: var(--portal-text, #EDEDED);
    background: var(--portal-surface, #252525) !important;
    border: 1px solid var(--portal-border, #3C3C3C);
    border-radius: 8px;
    overflow: hidden;
}
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) :is(.modal-header, .modal-footer) {
    padding: 16px 20px;
    gap: 12px;
    align-items: center;
    border-color: var(--portal-border, #3C3C3C);
    background: var(--portal-surface-raised, #2B2B2B);
}
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .modal-body { padding: 20px; background: var(--portal-surface, #252525); font-size: 14px; line-height: 1.5; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .modal-title { color: var(--portal-text, #EDEDED) !important; font-size: 20px; line-height: 1.3; overflow-wrap: anywhere; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .btn-close {
    box-sizing: border-box;
    width: 44px;
    height: 44px;
    flex: 0 0 44px;
    padding: 0;
    margin: 0;
    border-radius: 8px;
    background-position: center;
    opacity: 1;
    filter: invert(1);
}
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .btn-close:focus-visible { filter: none; background-color: #EDEDED; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .modal-footer > * { margin: 0; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer .cx-booker-quote-actions { margin: 0 !important; align-items: center; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions summary.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; list-style: none; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions summary.btn::-webkit-details-marker { display: none; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer:has(details[open]) { max-height: 50dvh; overflow-y: auto; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer .cx-booker-quote-actions:has(details[open]),
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer details[open] { flex: 1 1 100%; min-width: 0; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact { padding: 12px 14px; border-radius: 8px; background: var(--portal-surface-raised, #2B2B2B); }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact > .text-soft { color: var(--portal-muted, #B5B5B5) !important; font-size: 12px; letter-spacing: .03em; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact > .text-soft::before { display: none; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact > strong { font-size: 14px; line-height: 1.5; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact--total { border-color: #6F9675; background: #304034; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__fact--total > strong { font-size: 18px; }
/* The editor's form must pass the height constraint through to its scrolling body. */
.nk-body:is(.portal-booker, .portal-entertainer) .modal-dialog-scrollable .modal-content > form:has(.cx-entertainer-quote-form) { display: flex; flex-direction: column; min-height: 0; max-height: 100%; overflow: hidden; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form { --cx-quote-control-bg: var(--portal-surface-raised, #2B2B2B); --cx-quote-control-border: #656565; min-height: 0; overflow-y: auto; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form :is(.cx-quote-fixed-card, .cx-quote-breakdown, .cx-quote-form-section--package) { padding: 16px; border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; background: var(--portal-surface-raised, #2B2B2B); }
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-entertainer-quote-form, .cx-quote-review-modal) :is(.form-control, .form-select) { min-height: 44px; border-radius: 8px; border-color: #656565 !important; background-color: var(--portal-surface-raised, #2B2B2B) !important; color: var(--portal-text, #EDEDED) !important; color-scheme: dark; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .btn-outline-light { border-color: #858585 !important; color: var(--portal-text, #EDEDED) !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) .btn-outline-light:hover { background: #3C3C3C !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form .form-label.small { color: var(--portal-muted, #B5B5B5) !important; font-size: 12px; letter-spacing: .03em; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form :is(.btn, .cx-quote-remove-link) { min-height: 44px; min-width: 44px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form .cx-quote-form-section > .d-flex { flex-wrap: wrap; gap: 12px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form .cx-quote-check { display: flex; align-items: center; gap: 8px; min-height: 44px; cursor: pointer; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form .cx-quote-check input { width: 18px; height: 18px; flex: 0 0 18px; margin: 0; accent-color: #6F9675; color-scheme: dark; }
@media (max-width: 575.98px) {
    .nk-body:is(.portal-booker, .portal-entertainer) .modal-content:is(.cx-quote-review-modal, :has(.cx-entertainer-quote-form)) :is(.modal-header, .modal-body, .modal-footer) { padding: 16px; }
    .nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-entertainer-quote-form, .cx-quote-review-modal) :is(input, select, textarea) { font-size: 16px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer :is(.cx-booker-quote-actions, details, summary.btn) { width: 100%; }
}

/* Portal metrics: same visual role, same dimensions. Details use the page-header scale. */
.nk-body:is(.portal-booker, .portal-entertainer) {
    --portal-title-size: 22px;
    --portal-page-icon-size: 40px;
    --portal-page-glyph-size: 20px;
    --portal-modal-title-size: 20px;
    --portal-section-title-size: 16px;
    --portal-control-icon-size: 18px;
    --portal-label-size: 14px;
    --portal-section-gap: 24px;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-page-icon {
    flex: 0 0 var(--portal-page-icon-size);
    width: var(--portal-page-icon-size) !important;
    height: var(--portal-page-icon-size) !important;
    border-radius: 8px !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-page-icon > :is(.icon, svg) {
    width: var(--portal-page-glyph-size) !important;
    height: var(--portal-page-glyph-size) !important;
    font-size: var(--portal-page-glyph-size) !important;
    line-height: 1 !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.page-title, .cx-rose-event-detail__header h1) {
    font-family: 'Satoshi Variable', 'Satoshi', sans-serif !important;
    font-size: var(--portal-title-size) !important;
    font-weight: 600 !important;
    line-height: 1.25 !important;
    letter-spacing: normal;
    overflow-wrap: anywhere;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-event-detail__header { align-items: flex-start; gap: 12px; margin-bottom: 24px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-rose-event-detail__header p { margin-top: 6px; font-size: 14px; line-height: 1.5; }
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-rose-event-detail__section-title, .cx-rose-event-enquiries__header h2) { font-family: inherit; font-size: 16px; line-height: 24px; font-weight: 600; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-tabs .nav-link > .icon { width: 18px; height: 18px; flex: 0 0 18px; font-size: 18px !important; line-height: 18px !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__header h2 { font: 600 20px/26px 'Satoshi Variable', 'Satoshi', sans-serif; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__header p:not(.cx-event-create-dialog__eyebrow) { font-size: 14px; line-height: 21px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__eyebrow { font-size: 12px !important; line-height: 18px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__close .icon { width: 18px; height: 18px; font-size: 18px; line-height: 18px; }
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-event-create-dialog__header, .cx-event-create-dialog__body, .cx-event-create-dialog__footer) { padding: 16px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-fieldset { border-radius: 8px; margin-bottom: 24px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-fieldset legend { font-size: 16px; line-height: 24px; font-weight: 600; }
.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-event-create-field, .cx-event-type-picker) label { font-size: 14px; line-height: 21px; font-weight: 600; }
@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) { --portal-title-size: 24px; --portal-page-icon-size: 40px; --portal-page-glyph-size: 20px; }
    .nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-event-create-dialog__header, .cx-event-create-dialog__body, .cx-event-create-dialog__footer) { padding: 20px 24px; }
    .nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-fieldset { padding: 20px; }
}
@media (min-width: 992px) {
    .nk-body:is(.portal-booker, .portal-entertainer) { --portal-title-size: 28px; }
}

/* Batch 2 (style guide v3 s.2): one font. Many templates set Figtree inline; inside the
   portal everything uses Satoshi. Icon fonts (.ni / .icon) keep their own font. */
.nk-body:is(.portal-booker,.portal-entertainer) :where(h1,h2,h3,h4,h5,h6,p,span,strong,b,em,i,div,a,button,label,li,dt,dd,small,legend,th,td,input,select,textarea,option):not(.icon):not(.ni) {
    font-family: 'Satoshi Variable', 'Satoshi', sans-serif !important;
}

/* Batch 2 (style guide v3 s.6): one text-box style. Settings boxes were 36px and bluish;
   Create / Edit event boxes were 46px with a lighter border. Both now match search and quote fields. */
.nk-body:is(.portal-booker,.portal-entertainer) .cx-settings-card :is(input.form-control, select.form-control, select.form-select, textarea.form-control),
.nk-body .cx-event-create-dialog :is(.cx-event-create-field, .cx-event-type-picker) :is(input:not([type=checkbox]):not([type=radio]), select, textarea) {
    box-sizing: border-box !important;
    background: var(--portal-surface-raised, #2B2B2B) !important;
    border: 1px solid #474747 !important;
    border-radius: 8px !important;
    color: var(--portal-text, #EDEDED) !important;
    font-size: 16px !important;
}
.nk-body:is(.portal-booker,.portal-entertainer) .cx-settings-card :is(input.form-control, select.form-control, select.form-select),
.nk-body .cx-event-create-dialog :is(.cx-event-create-field, .cx-event-type-picker) :is(input:not([type=checkbox]):not([type=radio]), select) {
    height: 44px !important;
    min-height: 44px !important;
    padding-top: 10px !important;
    padding-bottom: 10px !important;
    line-height: 22px !important;
}
@media (min-width: 768px) {
    .nk-body:is(.portal-booker,.portal-entertainer) .cx-settings-card :is(input.form-control, select.form-control, select.form-select, textarea.form-control),
    .nk-body .cx-event-create-dialog :is(.cx-event-create-field, .cx-event-type-picker) :is(input:not([type=checkbox]):not([type=radio]), select, textarea) {
        font-size: 14px !important;
    }
}
.nk-body:is(.portal-booker,.portal-entertainer) .cx-settings-card :is(input.form-control, select.form-control, select.form-select, textarea.form-control):focus,
.nk-body .cx-event-create-dialog :is(.cx-event-create-field, .cx-event-type-picker) :is(input, select, textarea):focus {
    border-color: var(--portal-accent, #5B8060) !important;
}

/* A pop-up keeps its place once open and grows downwards (portal-consistency.js, Felix 2026-10-16). */
.nk-body:is(.portal-booker, .portal-entertainer) .modal-dialog.portal-modal-anchored { align-items: flex-start !important; justify-content: flex-start !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-dialog.portal-modal-anchored::before { display: none !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-dialog.portal-modal-anchored > .modal-content { margin-top: var(--portal-modal-offset, 0px) !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .modal-dialog.modal-dialog-scrollable.portal-modal-anchored > .modal-content { max-height: calc(100% - var(--portal-modal-offset, 0px)) !important; }

/* Account menu (D8 and U41, Felix 2026-10-17): your name, email and the side you are on, on every
   screen size, and "Switch to ..." for accounts that are both a booker and an entertainer. */
.nk-body:is(.portal-booker, .portal-entertainer, .portal-admin) .user-dropdown .dropdown-inner.cx-account-who {
    padding: 16px 28px 14px !important;
    border-bottom: 1px solid rgba(255,255,255,0.06);
}
.nk-body .cx-account-who__name,
.nk-body .cx-mobile-account-card__name { color: var(--portal-text, #EDEDED); font: 600 14px/20px 'Satoshi Variable','Satoshi',sans-serif; }
.nk-body .cx-account-who__email,
.nk-body .cx-mobile-account-card__email {
    margin-top: 2px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    color: var(--portal-muted, #B5B5B5); font: 400 12px/18px 'Satoshi Variable','Satoshi',sans-serif;
}
.nk-body .cx-account-side {
    display: inline-flex; align-items: center; gap: 6px; height: 28px; margin-top: 8px; padding: 0 10px;
    border: 1px solid #354A39; border-radius: 6px; background: #242C25;
    color: var(--portal-text, #EDEDED); font: 600 12px/1 'Satoshi Variable','Satoshi',sans-serif; letter-spacing: 0;
}
.nk-body .cx-account-side .icon { font-size: 14px; color: #9DBCA2; }
.nk-body .cx-account-side > span { color: var(--portal-text, #EDEDED) !important; font: inherit !important; }
.nk-body .cx-account-switch { margin: 0; }
/* The switch is a form button (it changes your session), drawn like the menu links beside it. */
.nk-body .user-dropdown .cx-account-switch button {
    display: flex; align-items: center; width: 100%; min-height: 44px; padding: 10px 28px;
    border: 0; border-radius: 0; background: transparent; cursor: pointer; text-align: left;
    color: #C9C9C9; font: 500 14px/22px 'Satoshi Variable','Satoshi',sans-serif; letter-spacing: 0.03em;
    transition: background 0.12s ease, color 0.12s ease;
}
.nk-body .user-dropdown .cx-account-switch button .icon { width: 24px; font-size: 18px; color: #9A9A9A; transition: color 0.12s ease; }
.nk-body .user-dropdown .cx-account-switch button:hover { color: #FFFFFF; background: rgba(255,255,255,0.06); }
.nk-body .user-dropdown .cx-account-switch button:hover .icon { color: #FFFFFF; }
.nk-body .cx-account-switch button:focus-visible { outline: 2px solid #9DBCA2; outline-offset: -2px; }
.nk-body .cx-mobile-account-links .cx-account-switch button {
    display: flex; align-items: center; gap: 0.75rem; width: 100%; min-height: 48px; padding: 0.75rem 0.875rem;
    border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; background: #242427; cursor: pointer; text-align: left;
    color: var(--portal-text, #EDEDED); font: 400 14px/1.65 'Satoshi Variable','Satoshi',sans-serif;
}
.nk-body .cx-mobile-account-links .cx-account-switch button .icon { color: #9A9A9A; font-size: 1rem; }

/* Felix 2026-10-17: a field's name is a heading, not a link. The old theme (dashboard.css) gives every
   <label> the hand cursor, so labels such as "Total price for this booking" looked clickable. Labels
   that tick a box or pick an option keep the hand. Kept at the theme's own low weight, so any more
   specific pointer rule (a choice card, a custom checkbox) still wins. */
:where(.nk-body) label { cursor: default; }
:where(.nk-body) label:where(:has(input[type="checkbox"], input[type="radio"]), .custom-control-label, .form-check-label, .portal-quote-choice),
:where(.nk-body) :where(input[type="checkbox"], input[type="radio"]) + label { cursor: pointer; }

/* Felix 2026-10-17: the bell works like Apple's. An unread item has the attention dot (the same
   colour as the dot on the bell and the Messages badges) and brighter words; a read item is quieter.
   Only colour changes, so nothing re-wraps, and the dot keeps its space when the item is read. */
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item .nk-notification-content { flex: 1 1 auto; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item__dot { flex: 0 0 8px; align-self: center; width: 8px; height: 8px; margin-left: 12px; border-radius: 50%; background: var(--cx-portal-attention, #DB5869); visibility: hidden; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item.is-unread .cx-bell-item__dot { visibility: visible; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item .nk-notification-text { color: var(--portal-muted, #B5B5B5) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item .nk-notification-text b { color: var(--portal-text, #EDEDED); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item.is-unread .nk-notification-text { color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-item.is-unread .nk-notification-text b { color: #FFFFFF; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-foot { padding: 0 !important; border-top: 1px solid #333333; text-align: center; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-foot a { display: flex; align-items: center; justify-content: center; min-height: 44px; color: var(--portal-text, #EDEDED); font-size: 13px; font-weight: 600; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-bell-foot a:hover { background: var(--portal-surface-raised, #2B2B2B); }

/* A page opened to show a pop-up (View quote, View booking, Open in Quotes) appears with the pop-up
   already open (Felix 2026-10-18: no flash of the page first). The page stays hidden until the pop-up
   is ready, and that first opening has no fade or slide. If the pop-up can't open, the page shows
   anyway after a moment. See app/components/portal/open-popup-on-load.blade.php. */
html.cx-popup-preopen body { visibility: hidden; animation: cx-popup-preopen-reveal 0s linear 1.5s forwards; }
@keyframes cx-popup-preopen-reveal { to { visibility: visible; } }
html.cx-popup-instant :is(.modal, .modal .modal-dialog, .modal-backdrop) { transition: none !important; }

/* U207 (Felix 2026-10-21): the one "Load more" under every list (app.components.portal.load-more):
   "Showing 50 of 120 bookings" over one centred button; full width on phones like every phone button. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-load-more { display: flex; flex-direction: column; align-items: center; gap: 8px; margin: 0; padding: 16px 0 0; text-align: center; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-load-more__count { margin: 0; color: #9A9A9A !important; font-size: 13px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-load-more__error { margin: 0; color: #E58C86 !important; font-size: 13px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-load-more__button { min-width: 200px; min-height: 44px; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-load-more__button { width: 100%; }
}
