/* Shared portal surfaces, based on Account Settings: charcoal, 8px corners,
   quiet borders and 16px section headings. Semantic status colours stay distinct. */
.nk-body:is(.portal-booker, .portal-entertainer) {
    --portal-surface: #252525;
    --portal-surface-raised: #2B2B2B;
    --portal-border: var(--portal-border, #3C3C3C);
    --portal-total: #75BD7E; /* money totals: stronger green, Felix 2026-10-15 (was #AFCAB2) */
    --portal-section-surface: #303030;
    --portal-section-border: #595959;
    --portal-section-padding: 16px;
    --portal-dialog-padding: 16px;
}
/* A row owns its complete background, including sticky action cells. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-table, .nk-tb-list) .nk-tb-item:not(.nk-tb-head) { --portal-row-bg: #242424; background: var(--portal-row-bg) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-table, .nk-tb-list) .nk-tb-item:not(.nk-tb-head):is(:hover, :focus-within) { --portal-row-bg: var(--portal-section-surface, #303030); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-table, .nk-tb-list) .nk-tb-item:not(.nk-tb-head) > .nk-tb-col { background: var(--portal-row-bg) !important; box-shadow: none !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-fin-table, .nk-tb-list) .nk-tb-head > .nk-tb-col { background: var(--portal-surface-raised, #2B2B2B) !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .nk-tb-item[tabindex]:focus-visible { outline: 2px solid #9DBCA2; outline-offset: -2px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-table .nk-tb-col { vertical-align: middle; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-enquiries .cx-fin-row > .nk-tb-col { display: flex !important; align-items: center; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-row .cx-status-badge { margin-block: 0 !important; }

/* Keep the first action in a stable slot whether a row has one or many actions. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quick-actions {
    display: flex; align-items: center; justify-content: flex-start !important;
    gap: 8px !important; flex-wrap: wrap; width: 100%; min-width: 0;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-ent-enquiries, .cx-booker-enquiries) .cx-agent-view-col { text-align: left !important; justify-content: flex-start !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quick-actions .btn {
    display: inline-flex; flex: 0 0 44px; width: 44px !important; height: 44px !important;
    min-width: 44px !important; min-height: 44px !important; padding: 0 !important;
    align-items: center; justify-content: center; border-radius: 8px !important;
    background: var(--portal-surface-raised) !important; border: 1px solid #656565 !important; color: var(--portal-text, #EDEDED) !important;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quick-actions form { margin: 0; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quick-actions .btn:is(:hover, :focus-visible) { background: #383838 !important; border-color: #8B8B8B !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quick-actions .btn::before { display: none; }

/* Neutral headings and links; green remains for selection, primary actions and totals. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.text-primary, .text-primary-alt, .cx-enquiry-detail__eyebrow) { color: var(--portal-muted) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) a.text-primary { color: var(--portal-text) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-page-icon { background: #242C25 !important; border-color: #354A39 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-page-icon em { background-image: none !important; color: #9DBCA2 !important; -webkit-text-fill-color: #9DBCA2 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .nk-menu-item.active > .nk-menu-link { border-color: #526C56 !important; background: #303A31 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.nk-menu-badge, .cx-unified-badge) { background: #505050 !important; color: #FFF !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-dashboard-reviews__metric.has-attention :is(.cx-dashboard-reviews__value, .cx-dashboard-reviews__meta) { color: #D8BC83 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.btn-danger, .btn-outline-danger, .portal-action--danger) { color: var(--portal-text, #EDEDED) !important; background: var(--portal-surface-raised, #2B2B2B) !important; border-color: #9B635D !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.btn-danger, .btn-outline-danger, .portal-action--danger):is(:hover, :focus-visible) { background: #3B2F2D !important; }

/* Opening a decline form is a secondary action. The final confirm retains its warning border. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline summary { justify-content: flex-start; gap: 12px 20px; color: var(--portal-muted); font-size: 14px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline-label {
    display: inline-flex; align-items: center; gap: 8px; min-height: 44px;
    padding: 10px 14px; border: 1px solid #656565; border-radius: 8px;
    background: var(--portal-surface-raised); color: var(--portal-text) !important; font-size: 13px; font-weight: 600;
}
.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline summary:is(:hover, :focus-visible) .cx-enquiry-detail__decline-label { background: #383838; border-color: #8B8B8B; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline-label .icon { font-size: 18px; line-height: 18px; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline[open] summary .ni-cross { transform: none; }
.nk-body:is(.portal-booker, .portal-entertainer) summary:focus-visible { outline: 2px solid #9DBCA2 !important; outline-offset: 3px; }

/* Shared modal chrome also covers Account Settings, booking and enquiry dialogs. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content {
    background: var(--portal-surface) !important; color: var(--portal-text); border: 1px solid var(--portal-border) !important;
    border-radius: 8px; box-shadow: 0 16px 48px #0005;
    font-family: 'Satoshi Variable', 'Satoshi', sans-serif;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content :is(.modal-header, .modal-footer) { padding: 16px; background: var(--portal-surface-raised) !important; border-color: var(--portal-border) !important; gap: 12px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content .modal-body { padding: 16px; background: var(--portal-surface) !important; font-size: 14px; line-height: 1.5; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content .modal-title { font-family: inherit; font-size: 20px; font-weight: 600; line-height: 1.3; color: var(--portal-text); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-body .card > .card-inner { padding: 16px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-body :is(h6, .cx-booking-detail__section-title) { font-family: inherit; font-size: 16px; font-weight: 600; line-height: 24px; color: var(--portal-text); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-body > .card.card-bordered,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-section, .cx-quote-form-section, .cx-quote-fixed-card, .cx-quote-breakdown) {
    background: var(--portal-section-surface); border: 1px solid var(--portal-section-border); border-radius: 8px; box-shadow: none;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-section, .cx-quote-form-section, .cx-quote-breakdown) { padding: 16px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-section__title, .cx-quote-form-section h6) {
    display: flex; align-items: center; gap: 10px; margin: 0 0 8px;
    color: var(--portal-text) !important; font-family: 'Satoshi Variable', 'Satoshi', sans-serif;
    font-size: 16px !important; font-weight: 600; line-height: 24px; letter-spacing: normal; text-transform: none;
}
.nk-body:is(.portal-booker, .portal-entertainer) .portal-section__title > .icon { flex: 0 0 18px; font-size: 18px; line-height: 18px; color: var(--portal-muted); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-form-section > .d-flex { padding-bottom: 12px; margin-bottom: 16px !important; border-bottom: 1px solid #444; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-form-section .text-soft.small { font-size: 13px; line-height: 20px; color: var(--portal-muted) !important; }
.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-context { margin-bottom: 20px; }
.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-context > .row { margin-top: 0; }
.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-message { margin-top: 24px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-time-slot { background: var(--portal-surface, #252525); border: 1px solid #484848; border-radius: 8px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-total { padding-top: 16px !important; margin-top: 16px !important; border-color: #526C56 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-total > strong { color: var(--portal-total) !important; font-size: 18px; line-height: 26px; }
.nk-body:is(.portal-booker, .portal-entertainer) .portal-quote-total > strong span { font: inherit; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-breakdown > .d-flex { gap: 16px; padding-block: 4px; align-items: baseline; }
.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-breakdown > .d-flex > strong { flex-shrink: 0; text-align: right; }
@media (min-width: 768px) {
    .nk-body:is(.portal-booker, .portal-entertainer) { --portal-section-padding: 20px; --portal-dialog-padding: 20px 24px; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content :is(.modal-header, .modal-body, .modal-footer) { padding: 20px 24px; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-section, .cx-quote-form-section, .cx-quote-breakdown) { padding: 20px; }
}

/* Create event is the shared section reference. Apply this only to actual
   content groups, never to every field, status or nested row. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .portal-quote-context, .cx-team-drawer__body > section,
    .cx-team-drawer-section, .cx-booking-detail__grid,
    .cx-unified-info__body > .cx-unified-detail-list,
    .cx-calendar__dialog-body [data-block-form] > .form-group
) {
    min-width: 0; padding: var(--portal-section-padding);
    background: var(--portal-section-surface); border: 1px solid var(--portal-section-border);
    border-radius: 8px; margin-block: 0 24px; box-shadow: none;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .cx-team-drawer-section h3, .cx-invite-drawer__section-title,
    .cx-booking-detail__section-title, .cx-quote-review-modal .card h6
) { font: 600 16px/24px 'Satoshi Variable', 'Satoshi', sans-serif; color: var(--portal-text); margin-bottom: 12px; }

/* Custom calendar, messaging, listing and account layers share the modal
   palette and title scale. Keep their existing scroll/focus/close behaviour. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .cx-calendar__dialog-card, .cx-team-drawer, .cx-message-safety__panel,
    .cx-category-browser-panel, .cx-attribute-browser-panel, .cx-location-travel-panel,
    .cx-banking-dialog, .cx-super-dialog, .cx-booker-invoicing-dialog, .cx-booker-abn-dialog
) { background: var(--portal-surface) !important; color: var(--portal-text); font-family: 'Satoshi Variable', 'Satoshi', sans-serif; border-radius: 8px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .cx-team-drawer__header, .cx-calendar__dialog-header, .cx-unified-info__head
) { padding: var(--portal-dialog-padding); background: var(--portal-surface-raised); border-bottom: 1px solid var(--portal-section-border); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .cx-team-drawer__body, .cx-calendar__dialog-body, .cx-unified-info__body,
    .cx-message-safety__panel
) { padding: var(--portal-dialog-padding); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .cx-team-drawer__header h2, .cx-calendar__dialog-header h5,
    .cx-unified-info__head h3, .cx-message-safety__head h3,
    .cx-category-browser-panel h5, .cx-attribute-browser-panel h5,
    .cx-location-travel-panel h5, .cx-banking-dialog h6,
    .cx-super-head h6, .cx-booker-invoicing-dialog h6, .cx-booker-abn-dialog h6
) { font: 600 20px/26px 'Satoshi Variable', 'Satoshi', sans-serif !important; letter-spacing: normal !important; color: var(--portal-text) !important; overflow-wrap: anywhere; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-message-safety__head {
    margin: 0 0 20px; padding-bottom: 16px; border-bottom: 1px solid var(--portal-section-border);
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-message-safety__panel form {
    background: var(--portal-section-surface); border: 1px solid var(--portal-section-border);
    border-radius: 8px; padding: var(--portal-section-padding);
}
/* Close buttons are always visible controls, including older Bootstrap modals. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .modal-content .btn-close, .modal-content > .close, .cx-calendar__close,
    .cx-banking-dialog button[title="Close"], .cx-super-close,
    .cx-booker-invoicing-dialog button[title="Close"], .cx-booker-abn-dialog button[title="Close"]
) {
    box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
    flex: 0 0 44px; width: 44px; height: 44px; min-height: 44px;
    margin: 0; padding: 0 !important; border: 1px solid #656565 !important;
    border-radius: 8px; background-color: var(--portal-surface-raised) !important;
    background-position: center; background-size: 18px; color: #E58C86 !important; opacity: 1;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.modal-content .btn-close, .cx-calendar__close):focus-visible { outline: 2px solid #9DBCA2; outline-offset: 2px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail__download {
    background: var(--portal-action) !important; border-color: var(--portal-action) !important; color: #FFF !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail__download:hover { background: var(--portal-accent-hover, #48684C) !important; }

/* Informational notices share the portal's neutral surface. Keep warning,
   error and success variants separate so their meaning is preserved. */
.nk-body:is(.portal-booker, .portal-entertainer) :is(.alert-info, .alert-light) {
    color: var(--portal-text);
    background: var(--portal-surface-raised);
    border: 1px solid #565656;
    border-radius: var(--portal-radius);
    font-size: 14px;
    line-height: 1.5;
}
.nk-body:is(.portal-booker, .portal-entertainer) :is(.alert-info, .alert-light) :is(small, strong, .alert-heading) { color: inherit; font-size: inherit; }
.nk-body:is(.portal-booker, .portal-entertainer) :is(.alert-info, .alert-light) a:not(.btn):not(.portal-action) {
    color: var(--portal-text); text-decoration: underline; text-underline-offset: 3px;
}
.nk-body:is(.portal-booker, .portal-entertainer) :is(.alert-info, .alert-light) hr { border-color: #565656; }

/* Reviews page styles live in portal-reviews.css (rebuilt 2026-10-16). Stars are pink
   #DB5770 there, the same as the public website; the old green star rule is gone. */
/* Booker actions need room for the whole action group, just like entertainer rows. */
.nk-body.nk-body.portal-booker .cx-booker-enquiries .cx-fin-table .cx-booker-actions-col {
    width: 234px; min-width: 234px; max-width: none; flex-basis: auto;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-fin-table .cx-enquiry-quick-actions {
    flex-wrap: nowrap; width: max-content;
}
/* Felix's shared cross-icon treatment, including remove-fee and cancel controls. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(button, a, summary) :is(.ni-cross, .ni-cross-circle, .ni-cross-sm, .lucide-x),
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-remove-link,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) button:is([aria-label^="Close"], [aria-label^="Remove"]) svg {
    color: #E58C86 !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .btn-close {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23e58c86'%3E%3Cpath d='M2.15 2.15a.5.5 0 0 1 .7 0L8 7.29l5.15-5.14a.5.5 0 0 1 .7.7L8.71 8l5.14 5.15a.5.5 0 0 1-.7.7L8 8.71l-5.15 5.14a.5.5 0 0 1-.7-.7L7.29 8 2.15 2.85a.5.5 0 0 1 0-.7z'/%3E%3C/svg%3E") !important;
    filter: none !important;
}

/* Account forms use the same section and header/footer hierarchy as Create event. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-banking-dialog, .cx-super-dialog, .cx-booker-invoicing-dialog, .cx-booker-abn-dialog) {
    border: 1px solid var(--portal-section-border) !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-logo, .cx-super-brand, .portal-account-brand) { display: none; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-head, .cx-super-head, .portal-account-head) {
    position: relative; padding: var(--portal-dialog-padding) !important; padding-right: 76px !important;
    margin: 0 !important; background: var(--portal-surface-raised); border-bottom: 1px solid var(--portal-section-border);
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-head, .cx-super-head, .portal-account-head) :is(h6, p) { text-align: left !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-head, .cx-super-head, .portal-account-head) button[title="Close"] { top: 16px !important; right: 16px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-dialog, .cx-super-dialog) {
    display: flex; flex-direction: column; padding: 0 !important; overflow: hidden;
    max-height: calc(100dvh - 64px) !important; height: auto;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-body, .cx-super-body) {
    flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: var(--portal-dialog-padding);
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-actions, .cx-super-actions) {
    flex: 0 0 auto; padding: var(--portal-dialog-padding); margin: 0 !important;
    background: var(--portal-surface-raised); border-top: 1px solid var(--portal-section-border);
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-head, .cx-super-head, .cx-super-progress) { flex: 0 0 auto; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-body > .portal-section, .cx-super-section) {
    padding: var(--portal-section-padding); margin: 0 0 24px !important;
    border: 1px solid var(--portal-section-border); border-radius: 8px; background: var(--portal-section-surface);
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-invoicing-body > .portal-section:last-child { margin-bottom: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-invoicing-body .portal-section > div > div[style*="text-transform: uppercase"] {
    font-size: 14px !important; line-height: 21px; text-transform: none !important; letter-spacing: normal !important; color: #D0D0D0 !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-banking-dialog:not(.cx-communications-dialog) { padding: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-banking-dialog > .portal-section { margin: 20px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-account-actions { padding: var(--portal-dialog-padding); border-top: 1px solid var(--portal-section-border); background: var(--portal-surface-raised); }
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-overlay, .cx-super-overlay) { padding: 16px 12px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-dialog, .cx-super-dialog) { max-height: calc(100dvh - 32px) !important; }
}

.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-overlay, .cx-super-overlay) { padding: 32px 16px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-actions, .cx-super-actions) { padding: var(--portal-dialog-padding) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-invoicing-type-options > label:has(input:checked) { background: #304034 !important; border-color: #9DBCA2 !important; color: #FFF !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-invoicing-type-options > label:has(input:focus-visible) { outline: 2px solid #C8E0CC; outline-offset: 2px; }
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-booker-invoicing-overlay, .cx-super-overlay) { padding: 16px 12px !important; }
}

/* Legacy account verification and photo dialogs share the same visual controls. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-legacy-dialog {
    background: var(--portal-surface) !important; color: var(--portal-text); border: 1px solid var(--portal-section-border) !important;
    border-radius: 8px; max-height: 80dvh; overflow-y: auto !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-legacy-head {
    background: var(--portal-surface-raised); padding: var(--portal-dialog-padding) !important;
    border-bottom: 1px solid var(--portal-section-border); gap: 12px;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-legacy-head h6 { font: 600 20px/26px 'Satoshi Variable','Satoshi',sans-serif !important; text-align: left !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-password-overlay .portal-legacy-dialog { padding: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-pw-form { margin: 20px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-legacy-dialog, .cx-banking-dialog) button[title="Close"] {
    display: inline-flex; flex: 0 0 44px; align-items: center; justify-content: center;
    width: 44px; height: 44px; min-height: 44px; padding: 0 !important;
    border: 1px solid #656565 !important; border-radius: 8px; background: var(--portal-surface-raised, #2B2B2B) !important; color: #E58C86 !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-communications-dialog { padding-top: 76px !important; }
/* Banking pop-up spacing comes from the shared pop-up position rule at the end of this file. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-banking-overlay .cx-banking-dialog { max-height: calc(100dvh - 64px); overflow-y: auto; }

.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content:has(> .close) > .modal-header { padding-right: 76px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-content > .close { top: 16px; right: 16px; }

/* Quote choices: one clear equipment answer and separate booker requirements. */
.nk-body .cx-entertainer-quote-form .portal-quote-equipment {
    min-width: 0; margin: 20px 0 0; padding: 20px 0 0; border: 0; border-top: 1px solid var(--portal-section-border, #484848);
}
.nk-body .cx-entertainer-quote-form :is(.portal-quote-equipment, .portal-quote-question) > legend {
    float: none; width: auto; margin: 0 0 8px; padding: 0; font-size: 14px; font-weight: 600; line-height: 22px; color: var(--portal-text, #eee);
}
.nk-body .cx-entertainer-quote-form .portal-quote-required {
    margin-left: 8px; font-size: 12px; font-weight: 400; color: var(--portal-muted, #bbb);
}
.nk-body .cx-entertainer-quote-form .portal-quote-choices { display: flex; gap: 10px; }
.nk-body .cx-entertainer-quote-form .portal-quote-choices--stacked { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
.nk-body .cx-entertainer-quote-form .portal-quote-choice {
    display: flex; align-items: center; gap: 10px; min-width: 0; min-height: 44px; margin: 0;
    padding: 11px 14px; border: 1px solid var(--portal-section-border, #484848); border-radius: 8px;
    background: #272727; color: var(--portal-text, #eee); font-size: 14px; font-weight: 400; line-height: 21px; cursor: pointer;
}
.nk-body .cx-entertainer-quote-form .portal-quote-choice:hover { border-color: #777; }
.nk-body .cx-entertainer-quote-form .portal-quote-choice:has(input:checked) { border-color: #7fa885; background: #303c32; }
.nk-body .cx-entertainer-quote-form .portal-quote-choice:focus-within { outline: 2px solid #a6c8aa; outline-offset: 2px; }
.nk-body .cx-entertainer-quote-form .portal-quote-choice input {
    flex: 0 0 18px; width: 18px; height: 18px; margin: 0; accent-color: #8dbb95; color-scheme: dark;
}
.nk-body .cx-entertainer-quote-form .portal-quote-choice-help { margin: 12px 0 0; }
.nk-body .cx-entertainer-quote-form .portal-quote-requirement-list { display: grid; gap: 20px; }
.nk-body .cx-entertainer-quote-form .portal-quote-question { min-width: 0; margin: 0; padding: 0; border: 0; }
.nk-body .cx-entertainer-quote-form .portal-quote-question .portal-quote-choice { flex: 0 1 100px; }

/* Quote booking formats reuse the existing package, option and calendar controls. */
.nk-body .cx-entertainer-quote-form .portal-quote-required { display: inline-block; margin-left: 5px; color: #e5e5e5; font-size: 12px; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: nowrap; }
.nk-body .cx-entertainer-quote-form .portal-quote-required__star { color: #ff9c96; font-size: 16px; font-weight: 700; }
.nk-body .cx-entertainer-quote-form .portal-quote-optional { font-size: 13px; font-weight: 400; color: var(--portal-muted, #bbb); }
.nk-body .cx-entertainer-quote-form .portal-quote-format-options { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.nk-body .cx-entertainer-quote-form .portal-quote-format-options .portal-quote-choice { justify-content: center; }
.nk-body .cx-entertainer-quote-form .portal-quote-schedule { margin-top: 8px; }
.nk-body .cx-entertainer-quote-form .portal-quote-schedule-row { margin: 16px 0 0; padding: 16px; border: 1px solid var(--portal-section-border, #484848); border-radius: 8px; }
.nk-body .cx-entertainer-quote-form .portal-quote-schedule-row > legend { padding: 0 6px; }
.nk-body .cx-entertainer-quote-form .portal-quote-package-price { margin-top: 12px; }
.nk-body .cx-entertainer-quote-form .portal-quote-money-control { position: relative; width: 100%; max-width: 280px; }
.nk-body .cx-entertainer-quote-form .portal-quote-money-control__currency { position: absolute; z-index: 1; inset: 0 auto 0 16px; display: flex; align-items: center; color: #c0ddc5; font-size: 22px; font-weight: 600; pointer-events: none; }
.nk-body.nk-body .cx-entertainer-quote-form .portal-quote-money-control > input.form-control {
    height: 56px; padding: 10px 16px 10px 38px !important; background: #233c2b !important;
    border-color: #83ae8b !important; color: #f2fff4 !important; font-size: 22px !important; font-weight: 600; font-variant-numeric: tabular-nums;
}
.nk-body.nk-body .cx-entertainer-quote-form .portal-quote-money-control > input.form-control:focus { background: #294730 !important; border-color: #b5dabd !important; box-shadow: 0 0 0 3px #8dbb9533 !important; }
.nk-body.nk-body .cx-entertainer-quote-form .portal-quote-total { background: #233c2b; border: 1px solid #63866a !important; border-radius: 8px; padding: 12px !important; margin-top: 12px !important; }

/* Quote notes grow first, then scroll; the native corner can extend them further. */
.nk-body .cx-entertainer-quote-form .portal-quote-notes-control { position: relative; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form textarea[data-portal-resizable] {
    --portal-message-min-height: 122px; --portal-message-auto-max-height: 218px; --portal-message-max-height: 360px;
    resize: vertical !important; overflow-y: auto; padding-bottom: 14px !important;
}
.nk-body .cx-entertainer-quote-form .portal-quote-notes-control::after {
    content: ''; position: absolute; right: 5px; bottom: 5px; width: 16px; height: 16px; pointer-events: none;
    background: linear-gradient(135deg, transparent 42%, #b5cabb 42%, #b5cabb 49%, transparent 49%, transparent 65%, #b5cabb 65%, #b5cabb 72%, transparent 72%, transparent 87%, #b5cabb 87%, #b5cabb 94%, transparent 94%);
}
@media (min-width: 768px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form textarea[data-portal-resizable] { --portal-message-auto-max-height: 314px; --portal-message-max-height: 480px; }
}
.nk-body .cx-entertainer-quote-form .portal-quote-hours-summary { margin: 12px 0 0; }
.nk-body .cx-entertainer-quote-form .portal-quote-schedule-row :is(input, .cx-date-control) { min-width: 0; width: 100%; }
@media (max-width: 380px) {
    .nk-body .cx-entertainer-quote-form .portal-quote-format-options { grid-template-columns: minmax(0, 1fr); }
    .nk-body .cx-entertainer-quote-form .portal-quote-format-options .portal-quote-choice { justify-content: flex-start; }
}

/* Facts block (style guide section 10). One look for event facts on every page and
   pop-up: label and value pairs in a grid, 2 columns on phones, 3 from 768px.
   No boxes around each fact, no coloured dots, sentence-case labels. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 20px;
    min-width: 0; margin: 0 0 24px; padding: 0; background: none; border: 0; box-shadow: none;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts:last-child { margin-bottom: 0; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts > div {
    min-width: 0; width: auto; max-width: none; flex: none; margin: 0; padding: 0;
    background: none; border: 0; border-radius: 0; box-shadow: none;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts > div[hidden] { display: none; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts > .portal-facts__item--notes { grid-column: 1 / -1; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dt {
    display: block; margin: 0 0 4px; padding: 0; color: #9A9A9A !important;
    font: 600 12px/18px 'Satoshi Variable', 'Satoshi', sans-serif !important;
    letter-spacing: 0 !important; text-transform: none !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dt::before,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dt::after { content: none !important; display: none !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dd {
    margin: 0; padding: 0; color: var(--portal-text, #EDEDED) !important;
    font: 500 14px/20px 'Satoshi Variable', 'Satoshi', sans-serif !important;
    letter-spacing: 0 !important; text-transform: none !important; overflow-wrap: anywhere;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dd a { color: var(--portal-text, #EDEDED); text-decoration: underline; text-decoration-color: #656565; text-underline-offset: 3px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts dd a:hover { text-decoration-color: var(--portal-text, #EDEDED); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts__item--notes dd { white-space: pre-line; color: #C9C9C9 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts .portal-facts__line { display: block; }
@media (min-width: 768px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .portal-facts { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px 32px; }
    /* Standard-width pop-ups are too narrow for 3 readable columns. */
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer, [data-page="Booking Payment"]) .modal-dialog:not(.modal-lg):not(.modal-xl) .portal-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 24px; }
}

/* ==========================================================================
   Batch 9 (Felix, 2026-10-15): pop-ups follow style guide section 11.
   Footer: secondary actions on the left, the one primary action on the right
   (the last button in the footer). Phones stack them with the primary at the bottom.
   ========================================================================== */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer { display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center; gap: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > * { margin: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > :last-child { margin-left: auto; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > .me-auto { margin-right: 0 !important; }
/* The booker's revision and decline buttons sit in the footer row like any other secondary action. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer .cx-booker-quote-actions { display: contents; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer details[data-portal-response-panel][open] { order: 10; flex: 1 1 100%; }
/* "Request a revision" and "Decline quote" (booker quote pop-up and enquiry page), Felix 2026-10-15:
   opening one used to drop that button onto its own line with a loose box under it, so the buttons
   seemed to jump. Now the open one becomes a tidy panel under the buttons, titled with its own name
   and an X to close it; the other buttons stay where they were. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions:not(:is(.cx-quote-review-modal__footer, .cx-enquiry-quote__actions) > .cx-booker-quote-actions) { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[data-portal-response-panel][open] {
    order: 10; flex: 1 1 100%; min-width: 0; padding: 16px; border: 1px solid var(--portal-section-border, #595959); border-radius: 8px; background: var(--portal-section-surface, #303030);
}
/* The empty slot an open panel leaves in the button row, so the other buttons stay put (portal-response-state.js). */
[data-portal-response-slot] { display: inline-block; flex: 0 0 auto; height: 44px; visibility: hidden; }
/* In a pop-up the buttons sit at the bottom edge, so the panel opens above them instead of pushing them up. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__footer .cx-booker-quote-actions details[data-portal-response-panel][open] { order: -1; }
/* (repeated classes: the shared button rule in portal-controls.css carries six :not() parts, so it is very specific) */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions.cx-booker-quote-actions.cx-booker-quote-actions details[open][data-portal-response-panel] > summary.btn.btn.btn {
    display: flex !important; width: 100% !important; justify-content: space-between !important; min-height: 32px !important;
    margin: 0 0 12px !important; padding: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important;
    color: var(--portal-text, #EDEDED) !important; font-size: 16px !important; font-weight: 600 !important; text-align: left;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > summary.btn > .portal-action__icon { display: none !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > summary.btn::after {
    content: "\00D7"; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 32px; width: 32px; height: 32px; margin-left: auto;
    border: 1px solid #656565; border-radius: 8px; background: var(--portal-surface-raised, #2B2B2B); color: #E58C86; font-size: 20px; line-height: 1;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > summary.btn [data-portal-response-draft] { margin-left: 8px; font-size: 12px; font-weight: 600; color: #BF9E6B; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > form.card { margin: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > form.card > .card-inner { padding: 0 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] textarea { background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #474747 !important; border-radius: 8px !important; color: var(--portal-text, #EDEDED) !important; }
/* Enquiry page quote card: quote number and amount on top, then one row of buttons like a pop-up
   footer (Accept & pay on the right). Was a right-aligned pile of buttons in two rows. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__quote.cx-enquiry-quote { display: block !important; }
.cx-enquiry-quote__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__amount { color: var(--portal-total, #75BD7E) !important; font-size: 20px; font-weight: 700; white-space: nowrap; }
.cx-enquiry-quote__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--portal-border, #3C3C3C); }
.cx-enquiry-quote__actions:not(:has(> *)) { display: none; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions > .cx-booker-quote-actions { display: contents; }
.cx-enquiry-quote__actions > :is(.cx-enquiry-quote__pay, .cx-enquiry-quote__note) { margin-left: auto; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions .portal-action { min-height: 44px; }
@media (max-width: 575.98px) {
    .cx-enquiry-quote__actions { flex-direction: column; align-items: stretch; }
    .cx-enquiry-quote__actions > :is(a, button, form, p),
    .cx-enquiry-quote__actions > form > .btn,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions summary.btn { width: 100%; margin-left: 0; justify-content: center; }
}
/* Entertainer "Decline" panel on the enquiry page: a title like the booker's panels, and
   "Keep enquiry open" on the left with "Confirm decline" on the right. */
.cx-enquiry-detail__decline-title { display: none; margin: 0; color: var(--portal-text, #EDEDED); font-size: 16px; font-weight: 600; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline--inline .cx-enquiry-detail__decline-title { display: block; }
@media (min-width: 576px) {
    .cx-enquiry-detail__decline-actions { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; }
    .cx-enquiry-detail__decline-actions > p { flex: 1 1 100%; }
}
@media (min-width: 576px) {
    /* The panel's own button (Send revision request / Confirm decline) sits on the right. */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booker-quote-actions details[open] > form.card > .card-inner > .btn { display: flex; width: fit-content; margin-left: auto; }
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__note { font-size: 13px; color: var(--portal-muted, #B5B5B5) !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal__meta { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 4px; font-size: 13px; color: var(--portal-muted, #B5B5B5) !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal .cx-quote-modal__act strong { font-size: 16px !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-review-modal .text-soft.small { font-size: 12px !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail .modal-header .text-soft { display: block; margin-top: 4px; font-size: 13px; color: var(--portal-muted, #B5B5B5) !important; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer { flex-direction: column; align-items: stretch; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > * { width: 100%; margin-left: 0; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer :is(.btn, summary.btn) { width: 100%; justify-content: center; }
}

/* Every pop-up title: 20px / 600, primary text colour. Small print on the scale. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-title { color: var(--portal-text, #EDEDED) !important; font-size: 20px !important; font-weight: 600 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-entertainer-quote-form :is(.small, small) { font-size: 12px !important; }

/* Phones: extra secondary actions sit under a "More" button (added by the layout script). */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more__menu { display: flex; flex-direction: column; gap: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more__menu[hidden] { display: none; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more__menu > * { width: 100%; margin: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more__menu .cx-booker-quote-actions { display: flex; flex-direction: column; gap: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-footer-more__toggle[aria-expanded="true"] { background: #304034 !important; border-color: #9DBCA2 !important; }
/* U137 (Felix 2026-10-21): on a page's button row (phones), More opens a floating panel under the row, over
   the page, like the account menu, so the main button and the cards below never move. Pop-up footers keep
   their own More. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [data-portal-phone-more]:has(> .portal-footer-more) { position: relative; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [data-portal-phone-more] > .portal-footer-more { position: static; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [data-portal-phone-more] > .portal-footer-more > .portal-footer-more__menu { position: absolute; top: calc(100% + 8px); left: 0; right: 0; z-index: 20; padding: 8px; background: var(--portal-surface, #252525); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; box-shadow: 0 12px 32px rgba(0, 0, 0, .5); }
/* E1 (Felix 2026-10-21): pop-up footers on phones work the same way: More opens a floating list just above
   it, over the pop-up, so More, the main button and the pop-up behind never move. A reply box opened from the
   list (Request a revision, Decline quote, Request a change...) takes the list's place. A pop-up too short for
   the list gets it in place, as before (--inline, set by the layout script). */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer > .portal-footer-more { position: relative; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer > .portal-footer-more > .portal-footer-more__menu:not(.portal-footer-more__menu--inline) { position: absolute; bottom: calc(100% + 8px); left: 0; right: 0; z-index: 20; padding: 8px; background: var(--portal-surface, #252525); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; box-shadow: 0 12px 32px rgba(0, 0, 0, .5); }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer > .portal-footer-more > .portal-footer-more__menu:has(details[data-portal-response-panel][open]) > :not(:has(details[data-portal-response-panel][open])) { display: none !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer > .portal-footer-more > .portal-footer-more__menu:has(details[data-portal-response-panel][open]) details[data-portal-response-panel]:not([open]) { display: none !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer > .portal-footer-more > .portal-footer-more__menu:not(.portal-footer-more__menu--inline):has(details[data-portal-response-panel][open]) { padding: 0; border: 0; background: transparent; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer:has(> .portal-footer-more > .portal-footer-more__menu:not([hidden]):not(.portal-footer-more__menu--inline)) { max-height: none; overflow: visible; }
/* The note that says why the main button is switched off sits under it, not in More. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-footer:has(> .portal-footer-more) > .portal-record-overview__note { order: 1; }

/* Create or edit an event: same frame as every other pop-up. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog { border-radius: 8px !important; background: var(--portal-surface, #252525) !important; border: 1px solid var(--portal-border, #3C3C3C) !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__header { border-radius: 8px 8px 0 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__footer { display: flex; justify-content: space-between !important; gap: 8px; border-radius: 0 0 8px 8px; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__footer { flex-direction: column; align-items: stretch; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__footer .btn { width: 100%; justify-content: center; }
}

/* Step label (style guide section 19) and choice text on the scale. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog [data-event-create-step] > .text-soft.small:first-child { font-size: 12px !important; font-weight: 600 !important; color: #9A9A9A !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog .cx-event-create-choice > span { font-size: 13px !important; }

/* Confirm pop-ups (cxConfirm) match the portal pop-up: centred, palette colours,
   20px title, 44px buttons. Cancel on the left, the action on the right. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-overlay { align-items: center !important; justify-content: center !important; padding: 16px !important; background: rgba(0, 0, 0, 0.6) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-dialog {
    width: min(480px, 100%) !important; max-width: 100% !important; margin: 0 !important;
    background: var(--portal-surface, #252525) !important; border: 1px solid var(--portal-border, #3C3C3C) !important; border-radius: 8px !important; overflow: hidden;
    box-shadow: 0 20px 64px rgba(0, 0, 0, 0.45) !important; font-family: 'Satoshi Variable', 'Satoshi', sans-serif;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-header { background: var(--portal-surface-raised, #2B2B2B) !important; border-bottom: 1px solid var(--portal-border, #3C3C3C) !important; padding: 16px 20px 16px 24px !important; gap: 12px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-header-left { gap: 12px !important; min-width: 0; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-chip { width: 32px !important; height: 32px !important; flex: 0 0 32px; border-radius: 8px !important; background: #3C2F2E !important; border: 1px solid #9B635D !important; color: #C47F79 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-chip.cx-confirm-chip-success { background: #2D372F !important; border-color: #719B78 !important; color: #9DBCA2 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-title { font-size: 20px !important; font-weight: 600 !important; line-height: 1.3 !important; color: var(--portal-text, #EDEDED) !important; margin: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-close { width: 44px !important; height: 44px !important; flex: 0 0 44px; border: 1px solid #656565 !important; border-radius: 8px !important; background: var(--portal-surface-raised, #2B2B2B) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-close svg { width: 18px; height: 18px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-body { padding: 20px 24px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-body p { font-size: 14px !important; line-height: 1.5 !important; color: #C9C9C9 !important; margin: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-footer { display: flex !important; justify-content: flex-start !important; gap: 8px !important; background: var(--portal-surface-raised, #2B2B2B) !important; border-top: 1px solid var(--portal-border, #3C3C3C) !important; padding: 16px 24px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-btn {
    min-height: 44px !important; height: auto !important; padding: 10px 14px !important; border-radius: 8px !important;
    font-size: 13px !important; font-weight: 600 !important; line-height: 1.2 !important; filter: none !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-cancel { background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #656565 !important; color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-cancel:hover { background: #383838 !important; border-color: #8B8B8B !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok { margin-left: auto !important; background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #9B635D !important; color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok:hover { background: #3B2F2D !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok.cx-confirm-ok-success { background: var(--portal-accent, #5B8060) !important; border-color: var(--portal-accent, #5B8060) !important; color: #FFFFFF !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok.cx-confirm-ok-success:hover { background: var(--portal-accent-hover, #48684C) !important; border-color: var(--portal-accent-hover, #48684C) !important; }
/* U191 (Felix 2026-10-20): a required choice in the confirm box ("Why are you cancelling?"), with the shared
   input look (section 6). The main button keeps the shared disabled look until something is chosen. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-choice { display: grid; gap: 6px; margin: 16px 0 0; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-choice > span { font-size: 13px; font-weight: 600; color: var(--portal-text, #EDEDED); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-choice__select {
    width: 100%; min-height: 44px; padding: 10px 36px 10px 12px; appearance: none; -webkit-appearance: none;
    background: var(--portal-surface-raised, #2B2B2B) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M6 8l4 4 4-4' fill='none' stroke='%23B5B5B5' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 12px center / 16px no-repeat;
    border: 1px solid #474747; border-radius: 8px; font: 500 14px/1.4 'Satoshi Variable', 'Satoshi', sans-serif; color: var(--portal-text, #EDEDED); cursor: pointer;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-choice__select:focus-visible { outline: 2px solid #9DBCA2; outline-offset: 3px; border-color: var(--portal-accent, #5B8060); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok:disabled,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok:disabled:hover { background: var(--portal-surface-raised, #2B2B2B) !important; border-color: #474747 !important; color: #7E7E7E !important; cursor: not-allowed; }
@media (max-width: 767.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-choice__select { font-size: 16px; }
}
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-header { padding: 12px 12px 12px 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-body { padding: 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-footer { flex-direction: column !important; align-items: stretch !important; padding: 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-btn { width: 100% !important; margin-left: 0 !important; }
}

/* ==========================================================================
   Batch 10 (Felix, 2026-10-15): Settings follows the style guide.
   Settings pop-ups share the portal pop-up frame (section 11): title left at 20px,
   one X top right, Cancel on the left and the main action on the right.
   The page still carries inline styles, so these rules use !important on purpose.
   ========================================================================== */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-text-link { color: #9DBCA2 !important; text-decoration: underline; text-underline-offset: 2px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-text-link:hover { color: var(--portal-text, #EDEDED) !important; }

.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [role="dialog"][aria-modal="true"]:has(> .portal-settings-popup) { align-items: center !important; padding: 16px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup {
    position: relative !important; box-sizing: border-box !important; width: min(520px, 100%) !important; max-width: 520px !important;
    max-height: calc(100dvh - 32px) !important; overflow-x: hidden !important; overflow-y: auto !important; margin: 0 !important; padding: 0 !important;
    background: var(--portal-surface, #252525) !important; border: 1px solid var(--portal-border, #3C3C3C) !important; border-radius: 8px !important;
    box-shadow: 0 20px 64px rgba(0, 0, 0, 0.45) !important; color: #C9C9C9; font-family: 'Satoshi Variable', 'Satoshi', sans-serif !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup--narrow { width: min(440px, 100%) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__head {
    position: relative !important; display: flex !important; flex-wrap: wrap !important; align-items: center !important; justify-content: space-between !important;
    gap: 4px 12px !important; margin: 0 !important; padding: 16px 20px 16px 24px !important;
    background: var(--portal-surface-raised, #2B2B2B) !important; border: 0 !important; border-bottom: 1px solid var(--portal-border, #3C3C3C) !important; border-radius: 8px 8px 0 0 !important; text-align: left !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__head > :not(.portal-settings-popup__title):not(.portal-settings-popup__close):not(p) { order: -1; color: #BF9E6B !important; font-size: 20px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__title {
    order: 0; flex: 1 1 0 !important; min-width: 0; display: flex !important; align-items: center; gap: 8px; margin: 0 !important;
    font-family: 'Satoshi Variable', 'Satoshi', sans-serif !important; font-size: 20px !important; font-weight: 600 !important;
    line-height: 1.3 !important; letter-spacing: normal !important; color: var(--portal-text, #EDEDED) !important; text-align: left !important; text-transform: none !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__title .icon { color: #C47F79; font-size: 20px; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__head > p {
    order: 2; flex: 1 1 100% !important; margin: 0 !important; font-size: 13px !important; line-height: 1.5 !important; color: var(--portal-muted, #B5B5B5) !important; text-align: left !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__close {
    order: 1; position: static !important; flex: 0 0 44px !important; width: 44px !important; height: 44px !important; min-height: 44px !important;
    display: inline-flex !important; align-items: center !important; justify-content: center !important; padding: 0 !important; margin: 0 !important;
    background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #656565 !important; border-radius: 8px !important;
    color: #E58C86 !important; font-size: 20px !important; line-height: 1 !important; cursor: pointer !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__close:hover { background: #383838 !important; border-color: #8B8B8B !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__close .icon { font-size: 18px !important; color: #E58C86 !important; }
/* Everything between the header and the footer gets the pop-up's inner spacing. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup > :not(.portal-settings-popup__head):not(.portal-settings-popup__actions):not(template):not([hidden]) { margin: 20px 24px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup > * > .portal-settings-popup__actions { margin: 20px -24px -20px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__text { margin: 0 !important; font-size: 14px !important; line-height: 1.5 !important; color: #C9C9C9 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions {
    display: flex !important; flex-wrap: wrap !important; justify-content: space-between !important; align-items: center !important; gap: 8px !important;
    margin: 0 !important; padding: 16px 24px !important;
    background: var(--portal-surface-raised, #2B2B2B) !important; border: 0 !important; border-top: 1px solid var(--portal-border, #3C3C3C) !important; border-radius: 0 0 8px 8px !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > :last-child:not(:first-child) { margin-left: auto !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > :only-child { margin-left: auto !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > div { display: flex !important; gap: 8px !important; margin-left: auto !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions--note > div:first-child { margin-left: 0 !important; font-size: 12px !important; color: #9A9A9A !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions :is(button, a):not([hidden]) {
    min-height: 44px !important; height: auto !important; padding: 10px 14px !important; border-radius: 8px !important;
    display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: 8px !important;
    font-family: 'Satoshi Variable', 'Satoshi', sans-serif !important; font-size: 13px !important; font-weight: 600 !important; letter-spacing: normal !important; text-decoration: none !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions :is(button, a):not(.portal-action--primary):not(.portal-action--danger) { background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #656565 !important; color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions :is(button, a):not(.portal-action--primary):not(.portal-action--danger):hover { background: #383838 !important; border-color: #8B8B8B !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions .portal-action--primary { background: var(--portal-accent, #5B8060) !important; border: 1px solid var(--portal-accent, #5B8060) !important; color: #FFFFFF !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions .portal-action--primary:hover:not(:disabled) { background: var(--portal-accent-hover, #48684C) !important; border-color: var(--portal-accent-hover, #48684C) !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions .portal-action--primary:disabled { background: var(--portal-surface-raised, #2B2B2B) !important; border-color: #474747 !important; color: #7E7E7E !important; cursor: not-allowed !important; opacity: 1 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions :is(button, a) .icon { font-size: 18px !important; color: inherit !important; }
/* A danger action in a settings pop-up footer keeps the danger look (style guide section 5). */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions .portal-action--danger .icon { color: #C47F79 !important; }
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__head { padding: 12px 12px 12px 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup > :not(.portal-settings-popup__head):not(.portal-settings-popup__actions):not(template):not([hidden]) { margin: 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup > * > .portal-settings-popup__actions { margin: 16px -16px -16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions { flex-direction: column !important; align-items: stretch !important; padding: 16px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > *,
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions :is(button, a) { width: 100% !important; margin-left: 0 !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > div { flex-direction: column !important; }
}

/* Settings tabs: on phones every tab stays visible (they wrap instead of scrolling sideways). */
@media (max-width: 767.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs { flex-wrap: wrap !important; overflow: visible !important; -webkit-mask-image: none !important; mask-image: none !important; gap: 8px !important; height: auto !important; min-height: 0 !important; max-height: none !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs > li { flex: 1 1 auto !important; margin: 0 !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs > li > a { width: 100% !important; justify-content: center !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs-arrow { display: none !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar { height: auto !important; min-height: 0 !important; }
}
/* Settings panels sit flat inside the Settings card for bookers too (entertainers already did), so there is no box inside a box. */
.nk-body.portal-booker .cx-settings-card-shell > .cx-settings-column > [x-show],
.nk-body.portal-booker .cx-settings-card-shell > .cx-settings-column > .card {
    background: transparent !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; margin-bottom: 0 !important;
}
.nk-body.portal-booker .cx-settings-card-shell > .cx-settings-column > [x-show] > .card-inner,
.nk-body.portal-booker .cx-settings-card-shell > .cx-settings-column > .card > .card-inner { padding: 0 !important; }
/* Financial details (entertainer Settings): no coloured edge and no lone shield icon. With the panel
   heading hidden they were a status shown by colour alone (style guide sections 8 and 20); each tab
   (ABN, Banking, Superannuation) says its own status in words. Felix 2026-10-15. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-card-shell > .cx-settings-column > .cx-financial-details-card:is(.is-verified, .needs-verification) { border-left: 0 !important; padding-left: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-head > div:first-child > .icon:first-child { display: none !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-head:not(:has(> button:not([style*="display: none"]))) { display: none !important; }
/* The ABN search box and its Search button were 36px tall; inputs and buttons are 44px (sections 5 and 6). */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-card input.form-control { min-height: 44px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-card div:has(> div > input[x-model="abnSearchInput"]) > button { min-height: 44px !important; }
/* Add / Change / Cancel for ABN, banking and super were small green text links; they are the main
   action on each tab, so they are normal secondary buttons now (section 5). */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-head > button {
    min-height: 44px !important; padding: 10px 14px !important; gap: 8px !important; border-radius: 8px !important;
    background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #656565 !important; color: var(--portal-text, #EDEDED) !important;
    font-size: 13px !important; font-weight: 600 !important; letter-spacing: normal !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-head > button:hover { background: #383838 !important; border-color: #8B8B8B !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-financial-details-head > button .icon { font-size: 18px !important; color: inherit !important; }
/* Superannuation "not available yet" note: wait tone from the palette (was bright yellow and neon green). */
.nk-body.nk-body.portal-entertainer .cx-super-locked-state { background: #393329 !important; border-color: #5A4C35 !important; }
.nk-body.nk-body.portal-entertainer .cx-super-locked-state__icon { color: #BF9E6B !important; border-color: #5A4C35 !important; background: transparent !important; }
.nk-body.nk-body.portal-entertainer .cx-super-locked-state__title { color: var(--portal-text, #EDEDED) !important; font-size: 14px !important; font-weight: 600 !important; letter-spacing: normal !important; }
.nk-body.nk-body.portal-entertainer .cx-super-locked-state__copy { color: #C9C9C9 !important; font-size: 13px !important; letter-spacing: normal !important; }
.nk-body.nk-body.portal-entertainer .cx-super-locked-state__action { margin-top: 12px; }
/* The panel heading is hidden (the tab already names it), so the info icon that sat next to it would float alone. The same note is shown in words below. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-card-shell .cx-settings-panel-title + .icon.ni-info { display: none !important; }
/* Booker invoicing panel: amber edge until details are added, green edge once they are. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-card-shell > .cx-settings-column > .cx-settings-status-card:is(.is-verified, .needs-verification) { border-left: 3px solid #BF9E6B !important; padding-left: 16px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-card-shell > .cx-settings-column > .cx-settings-status-card.is-verified { border-left-color: #9DBCA2 !important; }
/* The invoicing pop-up scrolls its middle part, so that part runs edge to edge and carries the spacing itself. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup.portal-settings-popup > .cx-booker-invoicing-body.cx-booker-invoicing-body { margin: 0 !important; padding: 20px 24px !important; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup.portal-settings-popup > .cx-booker-invoicing-body.cx-booker-invoicing-body { padding: 16px !important; }
}
/* Skills sits inside the normal portal frame (top bar and side menu) like every other page: no blurred picture behind it. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal {
    display: block !important; width: auto !important; height: auto !important; min-height: 0 !important;
    padding: 0 !important; margin: 0 !important; overflow: visible !important; background: none !important;
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal :is(.cx-skills-main, .cx-skills-wrap, .cx-skills-content) { display: block; padding: 0; margin: 0; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal .cx-skills-body { width: 100%; max-width: none; margin: 0 !important; padding: 0 !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal .cx-skills-body > .card { display: block !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal .cx-skills-shell { width: auto !important; max-width: none !important; margin: 0 !important; padding: 24px !important; }
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal .cx-skills-shell { padding: 16px !important; }
}
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal .cx-skills-shell > .content.cx-skills { padding-top: 0 !important; margin-top: 0 !important; }
/* Filter buttons in the skill and category browsers: the chosen one looks like a chosen tab (green), not a white block. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-filter-tab { min-height: 36px; color: #C9C9C9; border-color: #474747; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-filter-tab:hover { background: #3A3A3A; border-color: #A9A9A9; color: var(--portal-text, #EDEDED); }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-filter-tab.cx-filter-tab--active,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-filter-tab.cx-filter-tab--active:hover { background: #304034 !important; border-color: #9DBCA2 !important; color: var(--portal-text, #EDEDED) !important; }
/* Below 992px the wizard's Back/Next bar is pinned to the bottom of the screen, so leave room for it. */
@media (max-width: 991.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-skills-wizard-page--portal { padding-bottom: calc(80px + env(safe-area-inset-bottom, 0px)) !important; }
}
/* Tablets: the five Settings tabs share the row evenly, icon above the word, so none are cut off. */
@media (min-width: 768px) and (max-width: 991.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs { flex-wrap: nowrap !important; overflow: visible !important; -webkit-mask-image: none !important; mask-image: none !important; gap: 8px !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs > li { flex: 1 1 0 !important; min-width: 0 !important; margin: 0 !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs > li > a { width: 100% !important; flex-direction: column !important; justify-content: center !important; gap: 4px !important; padding: 10px 8px !important; white-space: nowrap !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-tabbar .cx-settings-tabs-arrow { display: none !important; }
}

/* ==========================================================================
   Pop-up height (Felix 2026-10-15): every pop-up in both portals opens at the same
   eye height, about a sixth of the way down the screen. Before, some were centred,
   some sat at 5%, 10%, 15% or 25% from the top and one at 96px. A tall pop-up moves
   up as far as it needs and scrolls, so it never runs off the screen.
   One number controls it: --portal-popup-top.
   Layers set their own display (shown / hidden), so these rules never touch display.
   ========================================================================== */
/* Felix 2026-10-17: higher still, about a tenth of the way down (90px on a 900px laptop screen). */
.nk-body:is(.portal-booker, .portal-entertainer) { --portal-popup-top: clamp(24px, 10vh, 96px); --portal-popup-gap: 16px; }

/* Our own pop-up layers: a spacer above the pop-up shrinks when the pop-up is tall. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .portal-popup-layer,
    .cx-confirm-overlay,
    [role="dialog"][aria-modal="true"]:has(> .portal-settings-popup),
    [data-portal-messages-ui] .cx-message-safety,
    .cx-calendar__dialog,
    [data-event-create-modal],
    .portal-unsaved,
    .cx-template-preview-overlay
) {
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    padding: var(--portal-popup-gap) !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .portal-popup-layer,
    .cx-confirm-overlay,
    [role="dialog"][aria-modal="true"]:has(> .portal-settings-popup),
    [data-portal-messages-ui] .cx-message-safety,
    .cx-calendar__dialog,
    [data-event-create-modal],
    .portal-unsaved,
    .cx-template-preview-overlay
)::before {
    content: ""; display: block; flex: 0 1 calc(var(--portal-popup-top) - var(--portal-popup-gap)); min-height: 0; width: 1px;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
    .portal-popup-layer,
    .cx-confirm-overlay,
    [role="dialog"][aria-modal="true"]:has(> .portal-settings-popup),
    [data-portal-messages-ui] .cx-message-safety,
    .cx-calendar__dialog,
    [data-event-create-modal],
    .portal-unsaved,
    .cx-template-preview-overlay
) > :not(template):not(.cx-event-create-modal__backdrop) {
    flex-shrink: 0; align-self: center !important; margin-top: 0 !important; margin-bottom: 0 !important;
}
/* The "Discard changes?" box always keeps its own width (460px) on tablet and desktop.
   The shared rule above only places pop-ups; it must never stretch this one across the screen. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-unsaved > .portal-unsaved__dialog { width: 100% !important; max-width: 460px !important; }

/* Bootstrap pop-ups (booking, quote, enquiry, listing editor): same height, same rule.
   app-overrides.css pushes every .modal down by 10vh; the spacer below does that job now. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal { padding-top: 0 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog {
    display: flex !important; flex-direction: column !important; justify-content: flex-start !important; align-items: stretch !important;
    min-height: 0 !important; height: calc(100% - var(--portal-popup-gap) * 2) !important;
    margin-top: var(--portal-popup-gap) !important; margin-bottom: var(--portal-popup-gap) !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog::before {
    content: "" !important; display: block !important; flex: 0 1 calc(var(--portal-popup-top) - var(--portal-popup-gap)) !important;
    height: auto !important; min-height: 0 !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog > .modal-content { flex: 0 0 auto; }
/* Felix 2026-10-17: once a pop-up has opened, portal-consistency.js pins its top (the "anchored"
   class gives the content a top margin the size of this spacer). The spacer must then go, or the
   pop-up dropped down by the same amount again just after it opened. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.portal-modal-anchored::before { display: none !important; }
/* Felix 2026-10-17: a pop-up appears where it opens and stays there. Bootstrap slid every pop-up
   down 50px as it opened; now it only fades in. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal.fade .modal-dialog:not(.cx-abn-modal-dialog),
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal.show .modal-dialog:not(.cx-abn-modal-dialog) { transform: none !important; transition: none !important; }
/* The ABN pop-up keeps its sideways shift on desktops (app-overrides.css), without the drop. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-modal.fade .modal-dialog.cx-abn-modal-dialog { transform: translateX(var(--cx-abn-desktop-shift, 0px)); transition: none !important; }

/* Long list pop-ups (category and attribute browsers) start at eye height and
   fill down to the bottom gap, so the list scrolls inside and Save stays visible. */
@media (min-width: 576px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-popup-layer > .portal-popup-panel--fill {
        height: calc(100dvh - var(--portal-popup-top) - var(--portal-popup-gap)) !important;
        min-height: 0 !important; max-height: none !important; overflow: hidden;
    }
}
/* On phones the category, attribute and location pop-ups stay full screen. */
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-popup-layer.portal-popup-layer--phone-sheet.portal-popup-layer--phone-sheet.portal-popup-layer--phone-sheet {
        padding: 0 !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-popup-layer.portal-popup-layer--phone-sheet.portal-popup-layer--phone-sheet.portal-popup-layer--phone-sheet::before {
        display: none;
    }
    /* Every other pop-up on a phone is full width with the same 16px side gap. */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(
        .portal-popup-layer,
        .cx-confirm-overlay,
        [role="dialog"][aria-modal="true"]:has(> .portal-settings-popup),
        [data-portal-messages-ui] .cx-message-safety,
        .cx-calendar__dialog,
        [data-event-create-modal],
        .portal-unsaved,
        .cx-template-preview-overlay
    ):not(.portal-popup-layer--phone-sheet) > :not(template):not(.cx-event-create-modal__backdrop) {
        width: 100% !important; max-width: 100% !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal:not(:has(> .cx-modal-top)) {
        padding-left: 0 !important; padding-right: 0 !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog:not(.cx-modal-top) {
        margin-left: var(--portal-popup-gap) !important; margin-right: var(--portal-popup-gap) !important;
    }
    /* The listing editor's own pop-ups (cx-modal-top) are full screen on phones too. */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.cx-modal-top {
        display: block !important; height: auto !important; min-height: 100dvh !important; margin: 0 !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.cx-modal-top::before {
        display: none !important;
    }
}

/* Pop-ups that scroll inside (event form, banking form, scrollable Bootstrap
   pop-ups) keep their top at eye height and stop at the bottom gap. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is([data-event-create-modal], #cx-banking-overlay, #cx-invoicing-overlay, #cx-super-overlay)::before {
    flex-shrink: 0 !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [data-event-create-modal] > .cx-event-create-dialog,
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-banking-overlay > .cx-banking-dialog,
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-invoicing-overlay > .cx-booker-invoicing-dialog,
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-super-overlay > .cx-super-dialog {
    max-height: calc(100dvh - var(--portal-popup-top) - var(--portal-popup-gap)) !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.modal-dialog-scrollable::before {
    flex-shrink: 0 !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.modal-dialog-scrollable > .modal-content {
    flex: 0 1 auto !important; min-height: 0 !important; max-height: 100% !important;
}
/* The quote form (Create quote, Edit quote) keeps its first step in an extra box.
   That box must pass the pop-up height down to the form body, or the form can't
   scroll and Review quote is cut off below the screen (Felix 2026-10-16). */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-content > form > [data-quote-form-step="edit"]:not([hidden]) {
    display: flex !important; flex-direction: column !important; flex: 1 1 auto !important; min-height: 0 !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-content > form > [data-quote-form-step="edit"]:not([hidden]) > .modal-body {
    flex: 1 1 auto !important; min-height: 0 !important; overflow-y: auto !important; overscroll-behavior: contain;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-content > form > [data-quote-form-step="edit"]:not([hidden]) > .modal-footer {
    flex: 0 0 auto !important;
}

/* Calendar pop-up (Block dates, a booking, a busy day). Felix 2026-10-16.
   The title and X stay at the top, the buttons stay at the bottom and the middle
   scrolls. Before, on a phone it was forced to full screen and ran 16px off the
   bottom, a single booking showed as a mostly empty full screen, and on a short
   screen Block dates opened scrolled past its own title. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog::before { flex-shrink: 0 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog > .cx-calendar__dialog-card {
    display: flex !important; flex-direction: column !important; min-height: 0 !important;
    max-height: calc(100dvh - var(--portal-popup-top) - var(--portal-popup-gap)) !important;
    overflow: hidden !important; border-radius: 8px !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog-card > .cx-calendar__dialog-header {
    flex: 0 0 auto; position: static !important;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog-card > .cx-calendar__dialog-body {
    --cx-cal-pad-x: 16px; --cx-cal-pad-y: 16px;
    flex: 1 1 auto; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain;
    padding: var(--cx-cal-pad-y) var(--cx-cal-pad-x) !important;
}
@media (min-width: 768px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog-card > .cx-calendar__dialog-body { --cx-cal-pad-x: 24px; --cx-cal-pad-y: 20px; }
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog-body .cx-calendar__dialog-actions {
    position: sticky; bottom: calc(var(--cx-cal-pad-y) * -1); z-index: 2;
    margin: 24px calc(var(--cx-cal-pad-x) * -1) calc(var(--cx-cal-pad-y) * -1) !important;
    padding: 12px var(--cx-cal-pad-x) !important;
    background: var(--portal-surface-raised); border-top: 1px solid var(--portal-section-border);
}

/* Banking and Super on phones: an old rule forced them to the full screen height while
   they open at eye height, so they ran 75px off the bottom. They size to their content
   now and scroll inside when they are tall. */
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-banking-overlay > .cx-banking-dialog,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-super-overlay > .cx-super-dialog {
        min-height: 0 !important;
    }
}

/* Phones, and short screens such as a phone on its side: a tall pop-up moves up to the
   16px top gap so more of it shows (the event form showed only 131px on a phone on its
   side). A short pop-up still opens at eye height. */
@media (max-width: 575.98px), (max-height: 500px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is([data-event-create-modal], #cx-banking-overlay, #cx-invoicing-overlay, #cx-super-overlay, .cx-calendar__dialog)::before {
        flex-shrink: 1 !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) [data-event-create-modal] > .cx-event-create-dialog,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-banking-overlay > .cx-banking-dialog,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-invoicing-overlay > .cx-booker-invoicing-dialog,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) #cx-super-overlay > .cx-super-dialog,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-calendar__dialog > .cx-calendar__dialog-card {
        max-height: calc(100dvh - var(--portal-popup-gap) * 2) !important;
    }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-dialog.modal-dialog-scrollable::before {
        flex-shrink: 1000 !important;
    }
    .nk-body.nk-body.portal-entertainer .cx-team-drawer { max-height: calc(100dvh - var(--portal-popup-gap, 16px) * 2) !important; }
}

/* Phones: a pop-up title stops at two lines. A long act name made the quote and booking
   headers four lines tall, leaving 185px to read the quote. The full name is in the
   details below. */
@media (max-width: 575.98px) {
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-header .modal-title {
        display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden;
    }
}

/* Find your ABN on small phones sits under the top bar, so it is 65px shorter than the
   screen. Before, it ran 65px off the bottom. */
@media (max-width: 520px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal.cx-abn-modal .modal-dialog.cx-modal-top,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal.cx-abn-modal .modal-dialog.cx-modal-top > .modal-content {
        min-height: calc(100dvh - 65px) !important;
    }
}

/* Photo crop tool on touch screens: every button at least 44px. */
@media (pointer: coarse) {
    .nk-body:is(.portal-booker, .portal-entertainer) #image-edit .btn { min-width: 44px; min-height: 44px; }
}

/* A confirmation asked from inside a pop-up (for example Remove in Settings > Invoicing details)
   must sit on top of that pop-up, not behind it. */
.nk-body:is(.portal-booker, .portal-entertainer) > .cx-confirm-overlay { z-index: 100010 !important; }

/* ==========================================================================
   One place for buttons (Felix 2026-10-15, style guide sections 5 and 11).
   Every button sits together in one corner: bottom right of a pop-up or card,
   top right of a page. The green main button is always the last one, in the
   corner. Cancel and Go back sit right next to it, never across on the far left.
   One exception: cancelling or removing something already saved (a red button
   that comes first) sits alone on the far left so it is never hit by mistake.
   Phones: buttons stack full width with the main button at the bottom.
   ========================================================================== */
@media (min-width: 576px) {
    /* Bootstrap pop-ups (quote, booking, listing editor, quote form ...) */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer { justify-content: flex-end !important; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > :last-child { margin-left: 0 !important; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal .modal-footer > :is(.portal-action--danger, .btn-outline-danger, .portal-footer-start):first-child { margin-right: auto !important; }

    /* Settings pop-ups (invoice details, banking, password, mobile, delete account ...) */
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions { justify-content: flex-end !important; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > :last-child:not(:first-child),
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > :only-child,
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > div { margin-left: 0 !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions > :is(.portal-action--danger, .portal-footer-start):first-child,
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-settings-popup__actions--note > div:first-child { margin-right: auto !important; }

    /* "Are you sure?" boxes */
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-footer { justify-content: flex-end !important; }
    .nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-confirm-ok { margin-left: 0 !important; }

    /* Create or edit an event */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-event-create-dialog__footer { justify-content: flex-end !important; }
}

/* Enquiry page buttons (same rule): the green "Create quote / Update quote" is the last button,
   not the first; the booker's red "Cancel" comes first so it is never in the main button's spot. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__toolbar > .cx-enquiry-detail__quote-button { order: 10 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__toolbar > form:has(.cx-enquiry-detail__cancel-button) { order: -1; }
/* Quote card on the enquiry page: all buttons together on the right, Accept & pay last. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions { justify-content: flex-end; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions > :is(.cx-enquiry-quote__pay, .cx-enquiry-quote__note) { margin-left: 0; }
/* Entertainer "Decline" panel: Keep enquiry open and Confirm decline together on the right. */
@media (min-width: 576px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-detail__decline-actions { justify-content: flex-end !important; }
}
@media (max-width: 575.98px) {
    :is(.cx-quote-step-actions, .portal-form-actions) { flex-direction: column; align-items: stretch; }
    :is(.cx-quote-step-actions, .portal-form-actions) > * { width: 100%; justify-content: center; }
}
/* Listing editor: "Exit to listings" / "Back" sits right next to "Next", together on the right. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer, .portal-admin) .cx-listing-wizard__actions { justify-content: flex-end !important; gap: 8px !important; }

/* Page header row: icon tile beside the title and subtitle (style guide section 4) */
.portal-page-titlerow { display: flex; align-items: center; gap: 12px; min-width: 0; }
.portal-page-titlerow > .cx-page-title-stack { min-width: 0; }

/* Buttons at the end of a page form: together on the right, the main one last; stacked on phones
   with the main one at the bottom (style guide section 5). */
.portal-form-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 24px; }

/* Welcome pop-ups on the dashboard (first sign-in tour and "Create your first listing"): the normal
   pop-up look, buttons together bottom right with the green one last; no round pill buttons
   (style guide sections 3, 5 and 11). Felix 2026-10-15. */
.portal-welcome {
    width: calc(100% - 32px); max-width: 460px; margin-bottom: 32px; padding: 24px;
    background: var(--portal-surface, #252525); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; box-shadow: 0 24px 64px rgba(0, 0, 0, .6);
    color: #C9C9C9; text-align: left; font-family: 'Satoshi Variable', 'Satoshi', sans-serif;
}
.portal-welcome__logo { display: block; height: 40px; margin: 0 0 24px; }
.nk-body .portal-welcome .portal-welcome__title { margin: 0 0 8px; color: var(--portal-text, #EDEDED); font-size: 20px; font-weight: 600; line-height: 1.3; letter-spacing: normal; text-align: left; }
.nk-body .portal-welcome .portal-welcome__text { margin: 0 0 4px; color: var(--portal-muted, #B5B5B5); font-size: 14px; line-height: 1.5; letter-spacing: normal; }
.nk-body .portal-welcome .portal-welcome__text--last { margin-bottom: 0; }
.portal-welcome__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 24px; }
@media (max-width: 575.98px) {
    .portal-welcome { padding: 16px; }
    .portal-welcome__actions { flex-direction: column; align-items: stretch; }
    .portal-welcome__actions > * { width: 100%; justify-content: center; }
}

/* Team drawers (My team in Settings, and picking team members for a booking) are pop-ups now:
   same place, look and height as every other pop-up (style guide sections 11 and 21).
   Felix 2026-10-15. */
.nk-body.nk-body.portal-entertainer .cx-team-drawer-overlay {
    display: flex !important; flex-direction: column; align-items: center; justify-content: flex-start;
    padding: var(--portal-popup-gap, 16px); overflow-y: auto; overscroll-behavior: contain; background: rgba(0, 0, 0, .5);
}
.nk-body.nk-body.portal-entertainer .cx-team-drawer-overlay::before {
    content: ""; display: block; flex: 0 1 calc(var(--portal-popup-top, 16vh) - var(--portal-popup-gap, 16px)); min-height: 0; width: 1px;
}
.nk-body.nk-body.portal-entertainer .cx-team-drawer {
    flex-shrink: 0; align-self: center; width: min(560px, 100%); height: auto !important;
    max-height: calc(100dvh - var(--portal-popup-top, 16vh) - var(--portal-popup-gap, 16px)) !important; overflow-y: auto;
    background: var(--portal-surface, #252525); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; box-shadow: 0 20px 64px rgba(0, 0, 0, .45);
}
.nk-body.nk-body.portal-entertainer .cx-team-drawer__header { background: var(--portal-surface-raised, #2B2B2B); border-bottom: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px 8px 0 0; }
/* Pop-ups fade in; they no longer slide in from the right. */
.nk-body.nk-body.portal-entertainer .cx-drawer-enter-start .cx-team-drawer { transform: translateY(8px); }
.nk-body.nk-body.portal-entertainer .cx-drawer-enter-end .cx-team-drawer { transform: none; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.portal-entertainer .cx-team-drawer { max-height: calc(100dvh - 32px) !important; }
}
/* Inside the team pop-ups: style guide buttons (44px, 8px corners), the main button green and on
   the right of the footer, the count of selected members on the left. */
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-team-btn {
    min-height: 44px; padding: 10px 14px; border-radius: 8px; font-size: 13px; font-weight: 600;
    background: var(--portal-surface-raised, #2B2B2B); border: 1px solid #656565; color: var(--portal-text, #EDEDED);
}
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-team-btn:is(:hover, :focus-visible) { background: #383838; border-color: #8B8B8B; color: var(--portal-text, #EDEDED); }
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-team-btn.cx-team-btn--positive { background: var(--portal-accent, #5B8060); border-color: var(--portal-accent, #5B8060); color: #FFFFFF; }
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-team-btn.cx-team-btn--positive:is(:hover, :focus-visible) { background: var(--portal-accent-hover, #48684C); border-color: var(--portal-accent-hover, #48684C); color: #FFFFFF; }
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-lineup-drawer__footer {
    justify-content: flex-end; padding: 16px 24px; background: var(--portal-surface-raised, #2B2B2B); border-top: 1px solid var(--portal-border, #3C3C3C); border-radius: 0 0 8px 8px; backdrop-filter: none;
}
.nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-lineup-drawer__footer > .cx-lineup-selection-count { order: -1; margin-right: auto; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-lineup-drawer__footer { flex-direction: column; align-items: stretch; padding: 16px; }
    .nk-body.nk-body.portal-entertainer .cx-team-drawer .cx-lineup-drawer__footer > .cx-team-btn { width: 100%; }
}

/* Create / Update quote side card: event name first, reference underneath. */
.nk-body .cx-quote-create-page .cx-quote-create__event { margin: 0 0 4px; color: var(--portal-text, #EDEDED); font-size: 18px; font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
.nk-body .cx-quote-create-page .cx-quote-create__ref { display: block; color: #9A9A9A; font-size: 12px; font-weight: 600; line-height: 1.5; }
@media (min-width: 1200px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-create__facts { grid-template-columns: minmax(0, 1fr); gap: 16px; }
}
.nk-body .cx-quote-create-page .cx-quote-create__meta-copy { min-width: 0; flex: 1 1 auto; }
.nk-body .cx-quote-create-page .cx-quote-create__state { flex: 0 0 auto; max-width: none; overflow: visible; }

/* Round icons (the bell list, Messages contact options): the icon sits in the middle of its
   circle. app-overrides.css sets every .icon.ni to inline-block, which undid the theme's
   centring, so the envelope sat in the top-left corner of the circle (Felix 2026-10-16). */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .icon.ni.icon-circle {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    line-height: 1 !important;
}

/* Quote price block (Felix 2026-10-17): the price is the first thing in the quote pop-up, so the total
   and its lines are seen the moment it opens on every screen size. Laptops and tablets: total on the
   left, the lines on the right. Phones: total on top, lines under it. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price {
    display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px;
    margin: 0 0 20px; padding: 16px; background: var(--portal-surface-raised, #2B2B2B); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__total { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__label { color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; font-weight: 400; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price .cx-quote-price__amount { color: var(--portal-total, #75BD7E) !important; font-size: 28px; font-weight: 600; line-height: 36px; letter-spacing: -.02em; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines { display: grid; gap: 6px; margin: 0; padding-top: 12px; border-top: 1px solid var(--portal-border, #3C3C3C); }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines > div { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines dt { margin: 0; color: var(--portal-muted, #B5B5B5) !important; font-size: 14px; font-weight: 400; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines dd { margin: 0; flex-shrink: 0; color: var(--portal-text, #EDEDED) !important; font-size: 14px; font-weight: 600; line-height: 20px; text-align: right; font-variant-numeric: tabular-nums; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__withheld { margin-top: 4px; padding-top: 8px; border-top: 1px dashed var(--portal-border, #3C3C3C); }
@media (min-width: 768px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price { grid-template-columns: minmax(180px, 1fr) minmax(0, 1.4fr); gap: 24px; padding: 20px; align-items: center; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines { padding: 0 0 0 24px; border-top: 0; border-left: 1px solid var(--portal-border, #3C3C3C); }
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__receives { margin-top: 4px; padding-top: 8px; border-top: 1px solid var(--portal-border, #3C3C3C); }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__receives dd { color: var(--portal-total, #75BD7E) !important; }
/* Felix 2026-10-17: green means money coming to the person looking. Someone else's amount under the
   divider (what the booker pays, on the entertainer's quote) stays plain, and two lines taken off in a
   row share one dashed divider. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__receives.cx-quote-price__receives--plain dd { color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__withheld + .cx-quote-price__withheld { margin-top: 0; padding-top: 0; border-top: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines > div[hidden] { display: none; }

/* Create and edit quote (Felix 2026-10-17): a bar pinned to the bottom of the form keeps the price in
   view while you fill it in. It fades out when the full Quote total is on screen, so it is never shown twice. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total {
    position: sticky; bottom: -20px; z-index: 2;
    display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 4px 16px;
    margin: 24px -24px -20px; padding: 12px 24px;
    background: var(--portal-surface-raised, #2B2B2B); border-top: 1px solid var(--portal-border, #3C3C3C); box-shadow: 0 -8px 16px rgba(0, 0, 0, .25);
    transition: opacity .15s ease;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total.is-hidden { opacity: 0; pointer-events: none; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total__fee { color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total .cx-quote-live-total__fee strong { color: var(--portal-text, #EDEDED) !important; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total__total { margin-left: auto; color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; line-height: 24px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total .cx-quote-live-total__total strong { color: var(--portal-total, #75BD7E) !important; font-size: 20px; font-weight: 600; font-variant-numeric: tabular-nums; }
@media (prefers-reduced-motion: reduce) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total { transition: none; }
}
@media (max-width: 767.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-live-total { bottom: -16px; margin: 20px -16px -16px; padding: 10px 16px; }
}
/* The numbers sit in their own span (filled in by the form); older modal rules paint every span white. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-quote-price, .cx-quote-live-total) :is(strong, dd) span { color: inherit !important; font: inherit; }
/* One price block everywhere (Felix 2026-10-17): app.components.portal.price. A status sits under the
   amount; with no lines (a booking, a payment) the block is one column. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price .cx-quote-price__status { align-self: flex-start; margin-top: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price:is(.cx-quote-price--total-only, :has(> .cx-quote-price__lines:empty)) { grid-template-columns: minmax(0, 1fr); }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__lines:empty { display: none; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__heading dt { color: var(--portal-text, #EDEDED) !important; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-quote-price__heading:not(:first-child) { margin-top: 8px; }

/* Business list after an ABN look-up (Felix 2026-10-17): one ABN can have 200 trading names. The list
   grows with what is found (a few names stay short) up to about half the screen, then scrolls. Every
   name is its own choice tile, like the event picker, so rows are easy to tell apart and to tap. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice-list { display: grid; gap: 8px; max-height: min(480px, 55vh); overflow-y: auto; padding: 2px 4px 2px 2px; margin: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice,
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice-list--rows .cx-cat-row {
    display: flex; align-items: center; gap: 12px; width: 100%; min-height: 44px; margin: 0; padding: 10px 14px;
    background: var(--portal-section-surface, #303030); border: 1px solid #474747; border-radius: 8px; color: var(--portal-text, #EDEDED); text-align: left; cursor: pointer;
    font-size: 14px; line-height: 20px;
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-abn-choice, .cx-abn-choice-list--rows .cx-cat-row):hover { background: #383838; border-color: #A9A9A9; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.cx-abn-choice.is-selected, .cx-abn-choice-list--rows .cx-cat-row--selected) { background: #304034; border-color: #9DBCA2; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice:focus-visible { outline: 2px solid #C8E0CC; outline-offset: 2px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice__mark { flex: 0 0 18px; width: 18px; height: 18px; border: 1px solid #8B8B8B; border-radius: 50%; background: #1A1A1A; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice.is-selected .cx-abn-choice__mark { border: 5px solid #9DBCA2; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice__name { min-width: 0; overflow-wrap: anywhere; color: var(--portal-text, #EDEDED) !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-abn-choice-list__empty { margin: 0; padding: 16px; text-align: center; color: var(--portal-muted, #B5B5B5); font-size: 13px; }

/* ===== Settings: account cards (Felix 2026-10-17: "real professional, premium, official and trusted") =====
   Settings is a form page, so it is one comfortable column instead of the whole screen (U62), and the
   buttons sit next to what they change. Each money section (ABN, Bank account, Superannuation, Invoicing
   details) is the same shape: an icon tile, the title and why it matters, a status tag and the button on
   one line; the details as tiles (the one darker box, style guide section 24); a trust line underneath. */
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-ent-settings > .row > .col-12 > .cx-settings-card-shell { max-width: 960px !important; }
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-settings-column > .cx-account-card,
.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-account-cards > .cx-account-card {
    display: block; margin: 0; padding: 0; background: transparent !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important;
}
.nk-body .cx-account-card__head { display: flex; align-items: center; gap: 12px; padding: 0 0 16px; margin: 0 0 16px; border-bottom: 1px solid #2E2E2E; }
.nk-body .cx-account-card__icon {
    flex: 0 0 40px; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px;
    background: #242C25; border: 1px solid #354A39; border-radius: 8px; color: #9DBCA2; font-size: 20px;
}
.nk-body .cx-account-card__titles { flex: 1 1 auto; min-width: 0; }
.nk-body .nk-content .cx-account-card__titles h3 { margin: 0; color: var(--portal-text, #EDEDED); font-size: 16px; font-weight: 600; line-height: 24px; }
.nk-body .nk-content .cx-account-card__titles p { margin: 2px 0 0; color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; line-height: 20px; }
.nk-body .cx-account-card__tag { flex: 0 0 auto; }
.nk-body .cx-account-card__actions { flex: 0 0 auto; display: flex; gap: 8px; }
.nk-body .cx-account-card__actions[hidden] { display: none; }
.nk-body .cx-account-card__body { display: grid; gap: 12px; }
.nk-body .cx-account-card__facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 0; }
.nk-body .cx-account-card__facts > div { min-width: 0; padding: 10px 12px; background: #1C1C1C; border: 1px solid #2E2E2E; border-radius: 8px; }
.nk-body .cx-account-card__facts > .is-wide { grid-column: 1 / -1; }
.nk-body .cx-account-card__facts > [style*="display: none"] { display: none !important; }
.nk-body .nk-content .cx-account-card__facts dt { margin: 0 0 2px; color: var(--portal-muted, #B5B5B5); font-size: 12px; font-weight: 500; line-height: 18px; }
.nk-body .nk-content .cx-account-card__facts dd { margin: 0; color: var(--portal-text, #EDEDED); font-size: 14px; font-weight: 600; line-height: 20px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.nk-body .cx-account-card__empty {
    display: grid; justify-items: center; align-content: center; gap: 12px; min-height: 190px; padding: 24px 16px; text-align: center;
    background: #1C1C1C; border: 1px solid #2E2E2E; border-radius: 8px;
}
.nk-body .cx-account-card__empty > .icon { color: var(--portal-accent, #5B8060); font-size: 32px; }
.nk-body .nk-content .cx-account-card__empty p { margin: 0; max-width: 420px; color: #C9C9C9 !important; font-size: 14px; line-height: 21px; }
.nk-body .cx-account-card__foot { display: flex; align-items: flex-start; gap: 8px; margin: 16px 0 0; color: var(--portal-muted, #B5B5B5); font-size: 13px; line-height: 20px; }
.nk-body .cx-account-card__foot > .icon { flex: 0 0 auto; margin-top: 2px; color: #9DBCA2; font-size: 15px; }
/* ABN look-up inside the card */
.nk-body .nk-content .cx-account-card__label { display: block; margin: 0 0 8px; color: var(--portal-text, #EDEDED); font-size: 13px; font-weight: 600; }
.nk-body .cx-account-card__lookup { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.nk-body .cx-account-card__lookup-field { position: relative; flex: 0 1 240px; min-width: 0; }
.nk-body.nk-body .cx-account-card__lookup-field .form-control {
    width: 100%; min-height: 44px; padding: 0 40px 0 12px; background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid #474747 !important; border-radius: 8px;
    color: var(--portal-text, #EDEDED) !important; font-size: 14px; letter-spacing: .03em; font-variant-numeric: tabular-nums;
}
.nk-body.nk-body .cx-account-card__lookup-field .form-control:focus { border-color: var(--portal-accent, #5B8060) !important; box-shadow: 0 0 0 3px rgba(91, 128, 96, .25); }
.nk-body .cx-account-card__clear {
    position: absolute; top: 50%; right: 4px; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center;
    width: 36px; height: 36px; padding: 0; background: none; border: 0; border-radius: 6px; color: var(--portal-muted, #B5B5B5); cursor: pointer;
}
.nk-body .cx-account-card__clear:hover { color: var(--portal-text, #EDEDED); background: #383838; }
.nk-body .cx-account-card__form-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 12px; }
/* Super for companies and trusts: the same calm tile as an empty state (it was gold, a retired colour). */
.nk-body.nk-body.nk-body .cx-account-card .cx-super-locked-state { display: flex; align-items: flex-start; gap: 12px; padding: 16px; background: #1C1C1C !important; border: 1px solid #2E2E2E !important; border-radius: 8px; }
.nk-body.nk-body.nk-body .cx-account-card .cx-super-locked-state__icon { flex: 0 0 36px; width: 36px; height: 36px; color: var(--portal-muted, #B5B5B5) !important; background: var(--portal-surface-raised, #2B2B2B) !important; border: 1px solid var(--portal-border, #3C3C3C) !important; border-radius: 8px; font-size: 18px; }
.nk-body.nk-body.nk-body .cx-account-card .cx-super-locked-state__title { margin: 0 0 4px; color: var(--portal-text, #EDEDED) !important; font-size: 14px; font-weight: 600; letter-spacing: 0; line-height: 22px; }
.nk-body.nk-body.nk-body .cx-account-card .cx-super-locked-state__copy { color: #C9C9C9 !important; font-size: 14px; letter-spacing: 0; line-height: 21px; }
.nk-body .cx-account-card .cx-super-locked-state__action { margin-top: 12px; }
/* Booker invoicing details: one tile per saved set of details, Edit beside it */
.nk-body .cx-account-entries { display: grid; gap: 8px; }
.nk-body .cx-account-entry { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: #1C1C1C; border: 1px solid #2E2E2E; border-radius: 8px; }
.nk-body .cx-account-entry__icon {
    flex: 0 0 36px; display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px;
    background: var(--portal-surface-raised, #2B2B2B); border: 1px solid var(--portal-border, #3C3C3C); border-radius: 8px; color: var(--portal-muted, #B5B5B5); font-size: 18px;
}
.nk-body .cx-account-entry__text { flex: 1 1 auto; min-width: 0; display: grid; gap: 2px; }
.nk-body .nk-content .cx-account-entry__text strong { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; color: var(--portal-text, #EDEDED); font-size: 14px; font-weight: 600; line-height: 22px; }
.nk-body .cx-account-entry__name { min-width: 0; overflow-wrap: anywhere; }
.nk-body .nk-content .cx-account-entry__text > span { color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; line-height: 20px; overflow-wrap: anywhere; }
.nk-body .cx-account-entry > .portal-action { flex: 0 0 auto; }
/* Phones: the status tag and button go under the title, full width buttons, one fact per row. */
@media (max-width: 575.98px) {
    .nk-body .cx-account-card__head { flex-wrap: wrap; align-items: flex-start; }
    .nk-body .cx-account-card__titles { flex: 1 1 calc(100% - 52px); }
    .nk-body .cx-account-card__head > .cx-account-card__tag { margin-left: 52px; }
    .nk-body .cx-account-card__actions { flex: 1 1 100%; }
    .nk-body .cx-account-card__actions .portal-action { flex: 1 1 auto; justify-content: center; }
    .nk-body .cx-account-card__facts { grid-template-columns: minmax(0, 1fr); }
    .nk-body .cx-account-card__lookup-field { flex: 1 1 100%; }
    .nk-body .cx-account-card__lookup > .portal-action { flex: 1 1 100%; justify-content: center; }
    .nk-body .cx-account-entry { flex-wrap: wrap; }
    .nk-body .cx-account-entry__text { flex: 1 1 calc(100% - 48px); }
    .nk-body .cx-account-entry > .portal-action { flex: 1 1 100%; justify-content: center; }
}

/* The act line in the quote pop-up: performers and sets in plain words, readable size (Felix 2026-10-17, U19). */
.nk-body .nk-content .cx-quote-modal__act-meta,
.nk-body .modal .cx-quote-modal__act-meta { margin-top: 6px; color: #C9C9C9; font-size: 13px; line-height: 20px; }
.nk-body .cx-quote-modal__act-meta:empty { display: none; }


/* Felix 2026-10-17: "fonts must remain the same" for the big green money. One look everywhere:
   the "$" and the digits are one piece (older rules painted the digits white and a different weight),
   Satoshi 600 in the money green; 28px for the main total of a pop-up or page (.cx-quote-price),
   20px for a total inside a card or form. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(strong, dd, b, .cx-quote-price__amount) > span:is([data-quote-calc], [data-quote-review-price], [x-text^="money("]):not(#cx-money-one-piece) { color: inherit !important; font: inherit !important; letter-spacing: inherit !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) :is(.portal-quote-total > strong:last-child, .cx-enquiry-quote__amount, .cx-event-overview__quote strong, .cx-quote-live-total__total strong):not(#cx-money-card) { color: var(--portal-total, #75BD7E) !important; font-family: "Satoshi Variable", "Satoshi", sans-serif !important; font-size: 20px !important; font-weight: 600 !important; line-height: 28px !important; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__money { flex-shrink: 0; text-align: right; }

/* Felix 2026-10-17 (U75): quick jumps to the other parts of a job (Message, View event, View enquiry,
   View quote, View booking), from App\Support\App\JobJumps. In a pop-up they sit in a row under the
   title on tablet and desktop, apart from the footer's actions on this record; on phones they join
   the footer's More list instead. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-header:has(> .portal-job-jumps--header) { flex-wrap: wrap; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .modal-header:has(> .portal-job-jumps--header) > div:first-child { flex: 1 1 0; min-width: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-job-jumps--header { display: flex; flex: 0 0 100%; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-job-jumps--footer { display: none; }
@media (max-width: 575.98px) {
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-job-jumps--header { display: none; }
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .portal-job-jumps--footer { display: contents; }
}
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-enquiry-quote__actions:not(:has(*)) { display: none; }

/* ===== Adjustments on a paid booking (H19, Felix 2026-10-18) =====
   The adjustment or extra charge waiting for an answer sits first in the booking pop-up: amber when it
   is the viewer's turn (the booker), plain when they are waiting (the act). "Was" is struck through and
   the new value follows an arrow. The footer panels (Request a change, Report a problem, Add charge) use
   the same open-in-place panel as the quote pop-up's Request a revision. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card { margin: 0 0 16px; padding: 16px; border: 1px solid #2E2E2E; border-radius: 8px; background: #1C1C1C; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card.is-your-turn { background: #2A2620; border-color: #4A4234; }
.cx-adjust-card__head { display: flex; align-items: flex-start; gap: 12px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__icon { flex: 0 0 40px; width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--portal-section-surface, #303030); color: #C9C9C9; font-size: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card.is-your-turn .cx-adjust-card__icon { background: #393329; color: #E8C98F; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__icon .icon { display: inline-flex; font-size: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__title { margin: 0; color: var(--portal-text, #EDEDED); font-size: 16px; font-weight: 600; line-height: 24px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__meta { margin: 2px 0 0; color: var(--portal-muted, #B5B5B5) !important; font-size: 13px; line-height: 20px; }
.cx-adjust-changes { display: grid; gap: 8px; margin: 16px 0 0; }
.cx-adjust-changes > div { display: grid; grid-template-columns: 160px minmax(0, 1fr); gap: 12px; align-items: baseline; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes dt { margin: 0; color: #9A9A9A; font-size: 12px; font-weight: 600; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes dd { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: 0; color: var(--portal-text, #EDEDED); font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes .cx-adjust-changes__was { color: #9A9A9A !important; text-decoration: line-through; text-decoration-color: #7E7E7E; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes .cx-adjust-changes__now { color: var(--portal-text, #EDEDED) !important; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes dd > .icon { display: inline-flex; color: #9A9A9A; font-size: 14px; }
.cx-adjust-changes__total { padding-top: 8px; border-top: 1px solid var(--portal-border, #3C3C3C); }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-changes__total dd { color: var(--portal-total, #75BD7E); font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__note { margin: 12px 0 0; padding: 12px; border-radius: 8px; background: var(--portal-surface, #252525); color: #C9C9C9 !important; font-size: 14px; line-height: 20px; white-space: pre-wrap; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__money { margin: 12px 0 0; color: var(--portal-text, #EDEDED) !important; font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__money strong { color: var(--portal-total, #75BD7E) !important; font-weight: 600; }
.cx-adjust-card__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin-top: 16px; }
.cx-adjust-card__actions > form { margin: 0; }
/* The Adjustments list: one darker box, one line per adjustment. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history { margin: 0; padding: 0; list-style: none; border: 1px solid #2E2E2E; border-radius: 8px; background: #1C1C1C; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history > li { display: grid; grid-template-columns: 140px minmax(0, 1fr) auto auto; gap: 12px; align-items: center; min-height: 56px; padding: 8px 16px; border-top: 1px solid #2E2E2E; }
.cx-adjust-history > li:first-child { border-top: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history .cx-adjust-history__date { color: #9A9A9A !important; font-size: 13px; white-space: nowrap; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history .cx-adjust-history__summary { color: var(--portal-text, #EDEDED) !important; font-size: 14px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history .cx-adjust-history__difference { color: #C9C9C9 !important; font-size: 14px; white-space: nowrap; }
/* Footer panels in the booking pop-up behave like the quote pop-up's: the open one sits above the buttons. */
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail .modal-footer .cx-adjust-actions { display: contents; }
.nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail .modal-footer .cx-adjust-actions details[data-portal-response-panel][open] { order: -1; flex: 1 1 100%; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-panel__lead { margin: 0 0 16px; color: #C9C9C9 !important; font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-panel__note { margin: 8px 0 0; color: #9A9A9A !important; font-size: 13px; line-height: 20px; }
.cx-adjust-panel__row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; }
.cx-adjust-panel__actions { display: flex; justify-content: flex-end; margin-top: 16px; }
/* Preview only: a short note floats at the bottom when a button isn't connected yet. */
.cx-adjust-preview-note { position: fixed; left: 50%; bottom: 24px; z-index: 2100; max-width: calc(100% - 32px); padding: 12px 16px; transform: translateX(-50%); border: 1px solid #474747; border-radius: 8px; background: var(--portal-surface-raised, #2B2B2B); color: var(--portal-text, #EDEDED); font-size: 14px; line-height: 20px; box-shadow: 0 8px 24px rgba(0,0,0,.35); }
@media (max-width: 575.98px) {
    .cx-adjust-changes > div { grid-template-columns: minmax(0, 1fr); gap: 0; }
    .cx-adjust-card__actions > form, .cx-adjust-card__actions > form .btn { flex: 1 1 100%; width: 100%; }
    .nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-history > li { grid-template-columns: minmax(0, 1fr) auto; gap: 4px 12px; }
    .cx-adjust-history__date { grid-column: 1 / -1; }
    .cx-adjust-panel__row { grid-template-columns: minmax(0, 1fr); }
    .cx-adjust-panel__actions .btn { width: 100%; }
    /* Phone footers are a column, so an open panel takes its own height instead of the whole column. */
    .nk-body.nk-body.nk-body:is(.portal-booker, .portal-entertainer) .cx-booking-detail .modal-footer .cx-adjust-actions details[data-portal-response-panel][open] { flex: 0 0 auto; }
}
/* The act's adjustment form: the same quote form with a green "what this is" note on top (SG 18) and a
   live line saying how much more or less the booker pays than they did. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-note { display: flex; align-items: flex-start; gap: 12px; margin: 0 0 16px; padding: 16px; border: 1px solid #719B78; border-radius: 8px; background: #2D372F; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-note .cx-adjust-card__icon { background: #304034; color: #9DBCA2; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-note .cx-adjust-card__meta + .cx-adjust-card__meta { margin-top: 8px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-note strong { color: var(--portal-text, #EDEDED); font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-difference { margin: 8px 0 0; color: var(--portal-text, #EDEDED) !important; font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-difference strong { color: var(--portal-total, #75BD7E) !important; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-form-difference--review { margin: 12px 0 16px; padding: 12px 16px; border: 1px solid #719B78; border-radius: 8px; background: #2D372F; }
/* Round 59 (H19, Felix 2026-10-18). The act's adjustment form: Dates and times, as simple as the Create
   event form (one day or more than one day, the dates, one performance time for every day); the date change
   count line; and the same details on the review step. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-entertainer-quote-form .cx-adjust-days { margin: 0 0 16px; padding: 16px; border: 1px solid rgba(255, 255, 255, .12); border-top: 1px solid rgba(255, 255, 255, .12); border-radius: 8px; background: rgba(0, 0, 0, .2); }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days .cx-adjust-days__type { margin: 16px 0 0; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days__type .portal-quote-format-options { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cx-adjust-days__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; margin-top: 12px; }
.cx-adjust-day__field { min-width: 0; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days .form-label { margin-bottom: 4px; color: var(--portal-text, #EDEDED); font-size: 13px; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days .form-control { min-height: 44px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days__note { display: flex; align-items: flex-start; gap: 8px; margin: 12px 0 0; color: #C9C9C9 !important; font-size: 13px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days__note .icon { display: inline-flex; margin-top: 2px; color: #9A9A9A; font-size: 16px; }
/* The booker's card: the date change count line. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__count { display: flex; align-items: flex-start; gap: 8px; margin: 12px 0 0; color: var(--portal-text, #EDEDED) !important; font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-card__count .icon { display: inline-flex; margin-top: 2px; color: #E8C98F; font-size: 16px; }
/* Review step: the dates and time, with what they were if they changed. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days { display: grid; gap: 8px; margin: 8px 0 16px; padding: 12px 16px; list-style: none; border: 1px solid #2E2E2E; border-radius: 8px; background: #1C1C1C; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days > li { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 2px 12px; color: var(--portal-text, #EDEDED); font-size: 14px; line-height: 20px; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days__label { color: #9A9A9A; font-size: 12px; font-weight: 600; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days__tag { grid-column: 2; color: #9A9A9A; font-size: 13px; text-decoration: line-through; text-decoration-color: #7E7E7E; }
/* The booker's row: Review adjustment / Review charge uses the amber "your turn" button on phone cards too. */
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-bookings-actions .cx-bookings-action--review { border-color: rgba(191, 158, 107, .58); background: rgba(191, 158, 107, .12); color: #E3CCA0 !important; }
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-bookings-actions .cx-bookings-action--review:hover,
.nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-bookings-actions .cx-bookings-action--review:focus-visible { border-color: #BF9E6B; background: rgba(191, 158, 107, .22); color: #FFF4DC !important; }
@media (max-width: 575.98px) {
    /* Phones: one field per row, so dates and times are never cut off. */
    .cx-adjust-days__grid { grid-template-columns: minmax(0, 1fr); }
    .nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-days__type .portal-quote-format-options { grid-template-columns: minmax(0, 1fr); }
    .nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days > li { grid-template-columns: minmax(0, 1fr); }
    .nk-body.nk-body.nk-body:is(.portal-booker,.portal-entertainer) .cx-adjust-review-days__tag { grid-column: 1; }
}

/* U159 (Felix 2026-10-20): the Switch dashboard page (a link meant for the other dashboard). */
.cx-switch-dashboard p { margin: 0 0 16px; color: #C9C9C9; }
